Browse Source
new file: src/api/wms/areabasic/index.ts new file: src/api/wms/bom/index.ts new file: src/api/wms/currencyexchange/index.ts new file: src/api/wms/customer/index.ts new file: src/api/wms/customerdock/index.ts new file: src/api/wms/customeritem/index.ts new file: src/api/wms/dock/index.ts new file: src/api/wms/itempackaging/index.ts new file: src/api/wms/location/index.ts new file: src/api/wms/locationgroup/index.ts new file: src/api/wms/process/index.ts new file: src/api/wms/productionline/index.ts new file: src/api/wms/productionlineitem/index.ts new file: src/api/wms/project/index.ts new file: src/api/wms/purchaseprice/index.ts new file: src/api/wms/saleprice/index.ts new file: src/api/wms/stdcostprice/index.ts new file: src/api/wms/supplier/index.ts new file: src/api/wms/supplieritem/index.ts new file: src/api/wms/systemcalendar/index.ts new file: src/api/wms/warehouse/index.ts new file: src/api/wms/workshop/index.ts new file: src/api/wms/workstation/index.ts new file: src/views/wms/accountcalendar/AccountcalendarForm.vue new file: src/views/wms/accountcalendar/index.vue new file: src/views/wms/areabasic/AreaForm.vue new file: src/views/wms/areabasic/index.vue new file: src/views/wms/bom/BomForm.vue new file: src/views/wms/bom/index.vue new file: src/views/wms/currencyexchange/CurrencyexchangeForm.vue new file: src/views/wms/currencyexchange/index.vue new file: src/views/wms/customer/CustomerForm.vue new file: src/views/wms/customer/index.vue new file: src/views/wms/customerdock/CustomerdockForm.vue new file: src/views/wms/customerdock/index.vue new file: src/views/wms/customeritem/CustomeritemForm.vue new file: src/views/wms/customeritem/index.vue new file: src/views/wms/dock/DockForm.vue new file: src/views/wms/dock/index.vue modified: src/views/wms/itembasic/index.vue new file: src/views/wms/itempackaging/ItempackagingForm.vue new file: src/views/wms/itempackaging/index.vue new file: src/views/wms/location/LocationForm.vue new file: src/views/wms/location/index.vue new file: src/views/wms/locationgroup/LocationgroupForm.vue new file: src/views/wms/locationgroup/index.vue new file: src/views/wms/process/ProcessForm.vue new file: src/views/wms/process/index.vue new file: src/views/wms/productionline/ProductionlineForm.vue new file: src/views/wms/productionline/index.vue new file: src/views/wms/productionlineitem/ProductionlineitemForm.vue new file: src/views/wms/productionlineitem/index.vue new file: src/views/wms/project/ProjectForm.vue new file: src/views/wms/project/index.vue new file: src/views/wms/purchaseprice/PurchasepriceForm.vue new file: src/views/wms/purchaseprice/index.vue new file: src/views/wms/saleprice/SalepriceForm.vue new file: src/views/wms/saleprice/index.vue new file: src/views/wms/stdcostprice/StdcostpriceForm.vue new file: src/views/wms/stdcostprice/index.vue new file: src/views/wms/supplier/SupplierForm.vue new file: src/views/wms/supplier/index.vue new file: src/views/wms/supplieritem/SupplieritemForm.vue new file: src/views/wms/supplieritem/index.vue new file: src/views/wms/systemcalendar/SystemcalendarForm.vue new file: src/views/wms/systemcalendar/index.vue new file: src/views/wms/warehouse/WarehouseForm.vue new file: src/views/wms/warehouse/index.vue new file: src/views/wms/workshop/WorkshopForm.vue new file: src/views/wms/workshop/index.vue new file: src/views/wms/workstation/WorkstationForm.vue new file: src/views/wms/workstation/index.vuemaster
73 changed files with 14568 additions and 102 deletions
@ -0,0 +1,44 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface AccountcalendarVO { |
|||
year: string |
|||
month: string |
|||
descriiption: string |
|||
beginTime: Date |
|||
endTime: Date |
|||
converttotime: Date |
|||
available: number |
|||
activeTime: Date |
|||
expireTime: Date |
|||
remark: string |
|||
} |
|||
|
|||
// 查询账期日历列表
|
|||
export const getAccountcalendarPage = async (params) => { |
|||
return await request.get({ url: `/wms/accountcalendar/page`, params }) |
|||
} |
|||
|
|||
// 查询账期日历详情
|
|||
export const getAccountcalendar = async (id: number) => { |
|||
return await request.get({ url: `/wms/accountcalendar/get?id=` + id }) |
|||
} |
|||
|
|||
// 新增账期日历
|
|||
export const createAccountcalendar = async (data: AccountcalendarVO) => { |
|||
return await request.post({ url: `/wms/accountcalendar/create`, data }) |
|||
} |
|||
|
|||
// 修改账期日历
|
|||
export const updateAccountcalendar = async (data: AccountcalendarVO) => { |
|||
return await request.put({ url: `/wms/accountcalendar/update`, data }) |
|||
} |
|||
|
|||
// 删除账期日历
|
|||
export const deleteAccountcalendar = async (id: number) => { |
|||
return await request.delete({ url: `/wms/accountcalendar/delete?id=` + id }) |
|||
} |
|||
|
|||
// 导出账期日历 Excel
|
|||
export const exportAccountcalendar = async (params) => { |
|||
return await request.download({ url: `/wms/accountcalendar/export-excel`, params }) |
|||
} |
@ -0,0 +1,44 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface AreaVO { |
|||
code: string |
|||
name: string |
|||
description: string |
|||
warehouseCode: string |
|||
type: string |
|||
isFunctional: number |
|||
available: number |
|||
activeTime: Date |
|||
expireTime: Date |
|||
remark: string |
|||
} |
|||
|
|||
// 查询库区列表
|
|||
export const getAreaPage = async (params) => { |
|||
return await request.get({ url: `/wms/areabasic/page`, params }) |
|||
} |
|||
|
|||
// 查询库区详情
|
|||
export const getArea = async (id: number) => { |
|||
return await request.get({ url: `/wms/areabasic/get?id=` + id }) |
|||
} |
|||
|
|||
// 新增库区
|
|||
export const createArea = async (data: AreaVO) => { |
|||
return await request.post({ url: `/wms/areabasic/create`, data }) |
|||
} |
|||
|
|||
// 修改库区
|
|||
export const updateArea = async (data: AreaVO) => { |
|||
return await request.put({ url: `/wms/areabasic/update`, data }) |
|||
} |
|||
|
|||
// 删除库区
|
|||
export const deleteArea = async (id: number) => { |
|||
return await request.delete({ url: `/wms/areabasic/delete?id=` + id }) |
|||
} |
|||
|
|||
// 导出库区 Excel
|
|||
export const exportArea = async (params) => { |
|||
return await request.download({ url: `/wms/areabasic/export-excel`, params }) |
|||
} |
@ -0,0 +1,45 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface BomVO { |
|||
productItemCode: string |
|||
componentItemCode: string |
|||
componentUom: string |
|||
componentQty: number |
|||
processCode: string |
|||
version: string |
|||
layer: number |
|||
available: number |
|||
activeTime: Date |
|||
expireTime: Date |
|||
remark: string |
|||
} |
|||
|
|||
// 查询物料清单列表
|
|||
export const getBomPage = async (params) => { |
|||
return await request.get({ url: `/wms/bom/page`, params }) |
|||
} |
|||
|
|||
// 查询物料清单详情
|
|||
export const getBom = async (id: number) => { |
|||
return await request.get({ url: `/wms/bom/get?id=` + id }) |
|||
} |
|||
|
|||
// 新增物料清单
|
|||
export const createBom = async (data: BomVO) => { |
|||
return await request.post({ url: `/wms/bom/create`, data }) |
|||
} |
|||
|
|||
// 修改物料清单
|
|||
export const updateBom = async (data: BomVO) => { |
|||
return await request.put({ url: `/wms/bom/update`, data }) |
|||
} |
|||
|
|||
// 删除物料清单
|
|||
export const deleteBom = async (id: number) => { |
|||
return await request.delete({ url: `/wms/bom/delete?id=` + id }) |
|||
} |
|||
|
|||
// 导出物料清单 Excel
|
|||
export const exportBom = async (params) => { |
|||
return await request.download({ url: `/wms/bom/export-excel`, params }) |
|||
} |
@ -0,0 +1,41 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface CurrencyexchangeVO { |
|||
currency: string |
|||
basiccurrency: string |
|||
rate: number |
|||
available: number |
|||
activeTime: Date |
|||
expireTime: Date |
|||
remark: string |
|||
} |
|||
|
|||
// 查询货币转换列表
|
|||
export const getCurrencyexchangePage = async (params) => { |
|||
return await request.get({ url: `/wms/currencyexchange/page`, params }) |
|||
} |
|||
|
|||
// 查询货币转换详情
|
|||
export const getCurrencyexchange = async (id: number) => { |
|||
return await request.get({ url: `/wms/currencyexchange/get?id=` + id }) |
|||
} |
|||
|
|||
// 新增货币转换
|
|||
export const createCurrencyexchange = async (data: CurrencyexchangeVO) => { |
|||
return await request.post({ url: `/wms/currencyexchange/create`, data }) |
|||
} |
|||
|
|||
// 修改货币转换
|
|||
export const updateCurrencyexchange = async (data: CurrencyexchangeVO) => { |
|||
return await request.put({ url: `/wms/currencyexchange/update`, data }) |
|||
} |
|||
|
|||
// 删除货币转换
|
|||
export const deleteCurrencyexchange = async (id: number) => { |
|||
return await request.delete({ url: `/wms/currencyexchange/delete?id=` + id }) |
|||
} |
|||
|
|||
// 导出货币转换 Excel
|
|||
export const exportCurrencyexchange = async (params) => { |
|||
return await request.download({ url: `/wms/currencyexchange/export-excel`, params }) |
|||
} |
@ -0,0 +1,52 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface CustomerVO { |
|||
code: string |
|||
name: string |
|||
shortName: string |
|||
address: string |
|||
country: string |
|||
city: string |
|||
phone: string |
|||
fax: string |
|||
postId: string |
|||
contacts: string |
|||
bank: string |
|||
currency: string |
|||
taxRate: number |
|||
type: string |
|||
available: number |
|||
activeTime: Date |
|||
expireTime: Date |
|||
remark: string |
|||
} |
|||
|
|||
// 查询客户列表
|
|||
export const getCustomerPage = async (params) => { |
|||
return await request.get({ url: `/wms/customer/page`, params }) |
|||
} |
|||
|
|||
// 查询客户详情
|
|||
export const getCustomer = async (id: number) => { |
|||
return await request.get({ url: `/wms/customer/get?id=` + id }) |
|||
} |
|||
|
|||
// 新增客户
|
|||
export const createCustomer = async (data: CustomerVO) => { |
|||
return await request.post({ url: `/wms/customer/create`, data }) |
|||
} |
|||
|
|||
// 修改客户
|
|||
export const updateCustomer = async (data: CustomerVO) => { |
|||
return await request.put({ url: `/wms/customer/update`, data }) |
|||
} |
|||
|
|||
// 删除客户
|
|||
export const deleteCustomer = async (id: number) => { |
|||
return await request.delete({ url: `/wms/customer/delete?id=` + id }) |
|||
} |
|||
|
|||
// 导出客户 Excel
|
|||
export const exportCustomer = async (params) => { |
|||
return await request.download({ url: `/wms/customer/export-excel`, params }) |
|||
} |
@ -0,0 +1,48 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface CustomerdockVO { |
|||
code: string |
|||
name: string |
|||
description: string |
|||
city: string |
|||
address: string |
|||
contactPerson: string |
|||
contactPhone: string |
|||
customerCode: string |
|||
warehouseCode: string |
|||
defaultLocationCode: string |
|||
available: number |
|||
activeTime: Date |
|||
expireTime: Date |
|||
remark: string |
|||
} |
|||
|
|||
// 查询客户月台列表
|
|||
export const getCustomerdockPage = async (params) => { |
|||
return await request.get({ url: `/wms/customerdock/page`, params }) |
|||
} |
|||
|
|||
// 查询客户月台详情
|
|||
export const getCustomerdock = async (id: number) => { |
|||
return await request.get({ url: `/wms/customerdock/get?id=` + id }) |
|||
} |
|||
|
|||
// 新增客户月台
|
|||
export const createCustomerdock = async (data: CustomerdockVO) => { |
|||
return await request.post({ url: `/wms/customerdock/create`, data }) |
|||
} |
|||
|
|||
// 修改客户月台
|
|||
export const updateCustomerdock = async (data: CustomerdockVO) => { |
|||
return await request.put({ url: `/wms/customerdock/update`, data }) |
|||
} |
|||
|
|||
// 删除客户月台
|
|||
export const deleteCustomerdock = async (id: number) => { |
|||
return await request.delete({ url: `/wms/customerdock/delete?id=` + id }) |
|||
} |
|||
|
|||
// 导出客户月台 Excel
|
|||
export const exportCustomerdock = async (params) => { |
|||
return await request.download({ url: `/wms/customerdock/export-excel`, params }) |
|||
} |
@ -0,0 +1,48 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface CustomeritemVO { |
|||
customerCode: string |
|||
itemCode: string |
|||
customerItemCode: string |
|||
cusotmerUom: string |
|||
convertRate: number |
|||
packUnit: string |
|||
packQty: number |
|||
altPackUnit: string |
|||
altPackQty: number |
|||
packQtyOfContainer: number |
|||
available: number |
|||
activeTime: Date |
|||
expireTime: Date |
|||
remark: string |
|||
} |
|||
|
|||
// 查询客户物品列表
|
|||
export const getCustomeritemPage = async (params) => { |
|||
return await request.get({ url: `/wms/customeritem/page`, params }) |
|||
} |
|||
|
|||
// 查询客户物品详情
|
|||
export const getCustomeritem = async (id: number) => { |
|||
return await request.get({ url: `/wms/customeritem/get?id=` + id }) |
|||
} |
|||
|
|||
// 新增客户物品
|
|||
export const createCustomeritem = async (data: CustomeritemVO) => { |
|||
return await request.post({ url: `/wms/customeritem/create`, data }) |
|||
} |
|||
|
|||
// 修改客户物品
|
|||
export const updateCustomeritem = async (data: CustomeritemVO) => { |
|||
return await request.put({ url: `/wms/customeritem/update`, data }) |
|||
} |
|||
|
|||
// 删除客户物品
|
|||
export const deleteCustomeritem = async (id: number) => { |
|||
return await request.delete({ url: `/wms/customeritem/delete?id=` + id }) |
|||
} |
|||
|
|||
// 导出客户物品 Excel
|
|||
export const exportCustomeritem = async (params) => { |
|||
return await request.download({ url: `/wms/customeritem/export-excel`, params }) |
|||
} |
@ -0,0 +1,48 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface DockVO { |
|||
code: string |
|||
name: string |
|||
description: string |
|||
city: string |
|||
address: string |
|||
type: string |
|||
warehouseCode: string |
|||
defaultLocationCode: string |
|||
contactPerson: string |
|||
contactPhone: string |
|||
available: number |
|||
activeTime: Date |
|||
expireTime: Date |
|||
remark: string |
|||
} |
|||
|
|||
// 查询月台列表
|
|||
export const getDockPage = async (params) => { |
|||
return await request.get({ url: `/wms/dock/page`, params }) |
|||
} |
|||
|
|||
// 查询月台详情
|
|||
export const getDock = async (id: number) => { |
|||
return await request.get({ url: `/wms/dock/get?id=` + id }) |
|||
} |
|||
|
|||
// 新增月台
|
|||
export const createDock = async (data: DockVO) => { |
|||
return await request.post({ url: `/wms/dock/create`, data }) |
|||
} |
|||
|
|||
// 修改月台
|
|||
export const updateDock = async (data: DockVO) => { |
|||
return await request.put({ url: `/wms/dock/update`, data }) |
|||
} |
|||
|
|||
// 删除月台
|
|||
export const deleteDock = async (id: number) => { |
|||
return await request.delete({ url: `/wms/dock/delete?id=` + id }) |
|||
} |
|||
|
|||
// 导出月台 Excel
|
|||
export const exportDock = async (params) => { |
|||
return await request.download({ url: `/wms/dock/export-excel`, params }) |
|||
} |
@ -0,0 +1,50 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface ItempackagingVO { |
|||
itemCode: string |
|||
uom: string |
|||
stdPackUnit: string |
|||
stdPackQty: number |
|||
altPackUnit1: string |
|||
altPackQty1: number |
|||
altPackUnit2: string |
|||
altPackQty2: number |
|||
altPackUnit3: string |
|||
altPackQty3: number |
|||
altPackUnit4: string |
|||
altPackQty4: number |
|||
available: number |
|||
activeTime: Date |
|||
expireTime: Date |
|||
remark: string |
|||
} |
|||
|
|||
// 查询物品包装信息 列表
|
|||
export const getItempackagingPage = async (params) => { |
|||
return await request.get({ url: `/wms/itempackaging/page`, params }) |
|||
} |
|||
|
|||
// 查询物品包装信息 详情
|
|||
export const getItempackaging = async (id: number) => { |
|||
return await request.get({ url: `/wms/itempackaging/get?id=` + id }) |
|||
} |
|||
|
|||
// 新增物品包装信息
|
|||
export const createItempackaging = async (data: ItempackagingVO) => { |
|||
return await request.post({ url: `/wms/itempackaging/create`, data }) |
|||
} |
|||
|
|||
// 修改物品包装信息
|
|||
export const updateItempackaging = async (data: ItempackagingVO) => { |
|||
return await request.put({ url: `/wms/itempackaging/update`, data }) |
|||
} |
|||
|
|||
// 删除物品包装信息
|
|||
export const deleteItempackaging = async (id: number) => { |
|||
return await request.delete({ url: `/wms/itempackaging/delete?id=` + id }) |
|||
} |
|||
|
|||
// 导出物品包装信息 Excel
|
|||
export const exportItempackaging = async (params) => { |
|||
return await request.download({ url: `/wms/itempackaging/export-excel`, params }) |
|||
} |
@ -0,0 +1,55 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface LocationVO { |
|||
code: string |
|||
name: string |
|||
description: string |
|||
warehouseCode: string |
|||
areaCode: string |
|||
locationGroupCode: string |
|||
erpLocationCode: string |
|||
type: string |
|||
aisle: string |
|||
shelf: string |
|||
locationRow: number |
|||
locationColum: number |
|||
pickPriority: number |
|||
maxWeight: number |
|||
maxArea: number |
|||
maxVolume: number |
|||
userGroupCode: string |
|||
available: number |
|||
activeTime: Date |
|||
expireTime: Date |
|||
remark: string |
|||
} |
|||
|
|||
// 查询库位列表
|
|||
export const getLocationPage = async (params) => { |
|||
return await request.get({ url: `/wms/location/page`, params }) |
|||
} |
|||
|
|||
// 查询库位详情
|
|||
export const getLocation = async (id: number) => { |
|||
return await request.get({ url: `/wms/location/get?id=` + id }) |
|||
} |
|||
|
|||
// 新增库位
|
|||
export const createLocation = async (data: LocationVO) => { |
|||
return await request.post({ url: `/wms/location/create`, data }) |
|||
} |
|||
|
|||
// 修改库位
|
|||
export const updateLocation = async (data: LocationVO) => { |
|||
return await request.put({ url: `/wms/location/update`, data }) |
|||
} |
|||
|
|||
// 删除库位
|
|||
export const deleteLocation = async (id: number) => { |
|||
return await request.delete({ url: `/wms/location/delete?id=` + id }) |
|||
} |
|||
|
|||
// 导出库位 Excel
|
|||
export const exportLocation = async (params) => { |
|||
return await request.download({ url: `/wms/location/export-excel`, params }) |
|||
} |
@ -0,0 +1,43 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface LocationgroupVO { |
|||
code: string |
|||
name: string |
|||
description: string |
|||
warehouseCode: string |
|||
areaCode: string |
|||
available: number |
|||
activeTime: Date |
|||
expireTime: Date |
|||
remark: string |
|||
} |
|||
|
|||
// 查询库位组列表
|
|||
export const getLocationgroupPage = async (params) => { |
|||
return await request.get({ url: `/wms/locationgroup/page`, params }) |
|||
} |
|||
|
|||
// 查询库位组详情
|
|||
export const getLocationgroup = async (id: number) => { |
|||
return await request.get({ url: `/wms/locationgroup/get?id=` + id }) |
|||
} |
|||
|
|||
// 新增库位组
|
|||
export const createLocationgroup = async (data: LocationgroupVO) => { |
|||
return await request.post({ url: `/wms/locationgroup/create`, data }) |
|||
} |
|||
|
|||
// 修改库位组
|
|||
export const updateLocationgroup = async (data: LocationgroupVO) => { |
|||
return await request.put({ url: `/wms/locationgroup/update`, data }) |
|||
} |
|||
|
|||
// 删除库位组
|
|||
export const deleteLocationgroup = async (id: number) => { |
|||
return await request.delete({ url: `/wms/locationgroup/delete?id=` + id }) |
|||
} |
|||
|
|||
// 导出库位组 Excel
|
|||
export const exportLocationgroup = async (params) => { |
|||
return await request.download({ url: `/wms/locationgroup/export-excel`, params }) |
|||
} |
@ -0,0 +1,44 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface ProcessVO { |
|||
code: string |
|||
name: string |
|||
description: string |
|||
type: string |
|||
workshopCode: string |
|||
productionLineCode: string |
|||
available: number |
|||
activeTime: Date |
|||
expireTime: Date |
|||
remark: string |
|||
} |
|||
|
|||
// 查询工序列表
|
|||
export const getProcessPage = async (params) => { |
|||
return await request.get({ url: `/wms/process/page`, params }) |
|||
} |
|||
|
|||
// 查询工序详情
|
|||
export const getProcess = async (id: number) => { |
|||
return await request.get({ url: `/wms/process/get?id=` + id }) |
|||
} |
|||
|
|||
// 新增工序
|
|||
export const createProcess = async (data: ProcessVO) => { |
|||
return await request.post({ url: `/wms/process/create`, data }) |
|||
} |
|||
|
|||
// 修改工序
|
|||
export const updateProcess = async (data: ProcessVO) => { |
|||
return await request.put({ url: `/wms/process/update`, data }) |
|||
} |
|||
|
|||
// 删除工序
|
|||
export const deleteProcess = async (id: number) => { |
|||
return await request.delete({ url: `/wms/process/delete?id=` + id }) |
|||
} |
|||
|
|||
// 导出工序 Excel
|
|||
export const exportProcess = async (params) => { |
|||
return await request.download({ url: `/wms/process/export-excel`, params }) |
|||
} |
@ -0,0 +1,45 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface ProductionlineVO { |
|||
code: string |
|||
name: string |
|||
description: string |
|||
type: string |
|||
workshopCode: string |
|||
rawLocationCode: string |
|||
fgLocationCode: string |
|||
available: number |
|||
activeTime: Date |
|||
expireTime: Date |
|||
remark: string |
|||
} |
|||
|
|||
// 查询生产线列表
|
|||
export const getProductionlinePage = async (params) => { |
|||
return await request.get({ url: `/wms/productionline/page`, params }) |
|||
} |
|||
|
|||
// 查询生产线详情
|
|||
export const getProductionline = async (id: number) => { |
|||
return await request.get({ url: `/wms/productionline/get?id=` + id }) |
|||
} |
|||
|
|||
// 新增生产线
|
|||
export const createProductionline = async (data: ProductionlineVO) => { |
|||
return await request.post({ url: `/wms/productionline/create`, data }) |
|||
} |
|||
|
|||
// 修改生产线
|
|||
export const updateProductionline = async (data: ProductionlineVO) => { |
|||
return await request.put({ url: `/wms/productionline/update`, data }) |
|||
} |
|||
|
|||
// 删除生产线
|
|||
export const deleteProductionline = async (id: number) => { |
|||
return await request.delete({ url: `/wms/productionline/delete?id=` + id }) |
|||
} |
|||
|
|||
// 导出生产线 Excel
|
|||
export const exportProductionline = async (params) => { |
|||
return await request.download({ url: `/wms/productionline/export-excel`, params }) |
|||
} |
@ -0,0 +1,41 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface ProductionlineitemVO { |
|||
fgLocationCode: string |
|||
productionLineCode: string |
|||
itemCode: string |
|||
available: number |
|||
activeTime: Date |
|||
expireTime: Date |
|||
remark: string |
|||
} |
|||
|
|||
// 查询生产线物料关系列表
|
|||
export const getProductionlineitemPage = async (params) => { |
|||
return await request.get({ url: `/wms/productionlineitem/page`, params }) |
|||
} |
|||
|
|||
// 查询生产线物料关系详情
|
|||
export const getProductionlineitem = async (id: number) => { |
|||
return await request.get({ url: `/wms/productionlineitem/get?id=` + id }) |
|||
} |
|||
|
|||
// 新增生产线物料关系
|
|||
export const createProductionlineitem = async (data: ProductionlineitemVO) => { |
|||
return await request.post({ url: `/wms/productionlineitem/create`, data }) |
|||
} |
|||
|
|||
// 修改生产线物料关系
|
|||
export const updateProductionlineitem = async (data: ProductionlineitemVO) => { |
|||
return await request.put({ url: `/wms/productionlineitem/update`, data }) |
|||
} |
|||
|
|||
// 删除生产线物料关系
|
|||
export const deleteProductionlineitem = async (id: number) => { |
|||
return await request.delete({ url: `/wms/productionlineitem/delete?id=` + id }) |
|||
} |
|||
|
|||
// 导出生产线物料关系 Excel
|
|||
export const exportProductionlineitem = async (params) => { |
|||
return await request.download({ url: `/wms/productionlineitem/export-excel`, params }) |
|||
} |
@ -0,0 +1,42 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface ProjectVO { |
|||
code: string |
|||
name: string |
|||
description: string |
|||
customerCode: string |
|||
available: number |
|||
activeTime: Date |
|||
expireTime: Date |
|||
remark: string |
|||
} |
|||
|
|||
// 查询项目列表
|
|||
export const getProjectPage = async (params) => { |
|||
return await request.get({ url: `/wms/project/page`, params }) |
|||
} |
|||
|
|||
// 查询项目详情
|
|||
export const getProject = async (id: number) => { |
|||
return await request.get({ url: `/wms/project/get?id=` + id }) |
|||
} |
|||
|
|||
// 新增项目
|
|||
export const createProject = async (data: ProjectVO) => { |
|||
return await request.post({ url: `/wms/project/create`, data }) |
|||
} |
|||
|
|||
// 修改项目
|
|||
export const updateProject = async (data: ProjectVO) => { |
|||
return await request.put({ url: `/wms/project/update`, data }) |
|||
} |
|||
|
|||
// 删除项目
|
|||
export const deleteProject = async (id: number) => { |
|||
return await request.delete({ url: `/wms/project/delete?id=` + id }) |
|||
} |
|||
|
|||
// 导出项目 Excel
|
|||
export const exportProject = async (params) => { |
|||
return await request.download({ url: `/wms/project/export-excel`, params }) |
|||
} |
@ -0,0 +1,42 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface PurchasepriceVO { |
|||
supplierCode: string |
|||
itemCode: string |
|||
currency: string |
|||
price: number |
|||
available: number |
|||
activeTime: Date |
|||
expireTime: Date |
|||
remark: string |
|||
} |
|||
|
|||
// 查询采购价格单列表
|
|||
export const getPurchasepricePage = async (params) => { |
|||
return await request.get({ url: `/wms/purchaseprice/page`, params }) |
|||
} |
|||
|
|||
// 查询采购价格单详情
|
|||
export const getPurchaseprice = async (id: number) => { |
|||
return await request.get({ url: `/wms/purchaseprice/get?id=` + id }) |
|||
} |
|||
|
|||
// 新增采购价格单
|
|||
export const createPurchaseprice = async (data: PurchasepriceVO) => { |
|||
return await request.post({ url: `/wms/purchaseprice/create`, data }) |
|||
} |
|||
|
|||
// 修改采购价格单
|
|||
export const updatePurchaseprice = async (data: PurchasepriceVO) => { |
|||
return await request.put({ url: `/wms/purchaseprice/update`, data }) |
|||
} |
|||
|
|||
// 删除采购价格单
|
|||
export const deletePurchaseprice = async (id: number) => { |
|||
return await request.delete({ url: `/wms/purchaseprice/delete?id=` + id }) |
|||
} |
|||
|
|||
// 导出采购价格单 Excel
|
|||
export const exportPurchaseprice = async (params) => { |
|||
return await request.download({ url: `/wms/purchaseprice/export-excel`, params }) |
|||
} |
@ -0,0 +1,42 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface SalepriceVO { |
|||
customercode: string |
|||
itemcode: string |
|||
currency: string |
|||
price: number |
|||
available: number |
|||
activeTime: Date |
|||
expireTime: Date |
|||
remark: string |
|||
} |
|||
|
|||
// 查询销售价格单列表
|
|||
export const getSalepricePage = async (params) => { |
|||
return await request.get({ url: `/wms/saleprice/page`, params }) |
|||
} |
|||
|
|||
// 查询销售价格单详情
|
|||
export const getSaleprice = async (id: number) => { |
|||
return await request.get({ url: `/wms/saleprice/get?id=` + id }) |
|||
} |
|||
|
|||
// 新增销售价格单
|
|||
export const createSaleprice = async (data: SalepriceVO) => { |
|||
return await request.post({ url: `/wms/saleprice/create`, data }) |
|||
} |
|||
|
|||
// 修改销售价格单
|
|||
export const updateSaleprice = async (data: SalepriceVO) => { |
|||
return await request.put({ url: `/wms/saleprice/update`, data }) |
|||
} |
|||
|
|||
// 删除销售价格单
|
|||
export const deleteSaleprice = async (id: number) => { |
|||
return await request.delete({ url: `/wms/saleprice/delete?id=` + id }) |
|||
} |
|||
|
|||
// 导出销售价格单 Excel
|
|||
export const exportSaleprice = async (params) => { |
|||
return await request.download({ url: `/wms/saleprice/export-excel`, params }) |
|||
} |
@ -0,0 +1,42 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface StdcostpriceVO { |
|||
supplierCode: string |
|||
itemCode: string |
|||
currency: string |
|||
price: number |
|||
available: number |
|||
activeTime: Date |
|||
expireTime: Date |
|||
remark: string |
|||
} |
|||
|
|||
// 查询标准成本价格单列表
|
|||
export const getStdcostpricePage = async (params) => { |
|||
return await request.get({ url: `/wms/stdcostprice/page`, params }) |
|||
} |
|||
|
|||
// 查询标准成本价格单详情
|
|||
export const getStdcostprice = async (id: number) => { |
|||
return await request.get({ url: `/wms/stdcostprice/get?id=` + id }) |
|||
} |
|||
|
|||
// 新增标准成本价格单
|
|||
export const createStdcostprice = async (data: StdcostpriceVO) => { |
|||
return await request.post({ url: `/wms/stdcostprice/create`, data }) |
|||
} |
|||
|
|||
// 修改标准成本价格单
|
|||
export const updateStdcostprice = async (data: StdcostpriceVO) => { |
|||
return await request.put({ url: `/wms/stdcostprice/update`, data }) |
|||
} |
|||
|
|||
// 删除标准成本价格单
|
|||
export const deleteStdcostprice = async (id: number) => { |
|||
return await request.delete({ url: `/wms/stdcostprice/delete?id=` + id }) |
|||
} |
|||
|
|||
// 导出标准成本价格单 Excel
|
|||
export const exportStdcostprice = async (params) => { |
|||
return await request.download({ url: `/wms/stdcostprice/export-excel`, params }) |
|||
} |
@ -0,0 +1,52 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface SupplierVO { |
|||
code: string |
|||
name: string |
|||
shortName: string |
|||
address: string |
|||
country: string |
|||
city: string |
|||
phone: string |
|||
fax: string |
|||
postId: string |
|||
contacts: string |
|||
bank: string |
|||
currency: string |
|||
taxRate: number |
|||
type: string |
|||
available: number |
|||
activeTime: Date |
|||
expireTime: Date |
|||
remark: string |
|||
} |
|||
|
|||
// 查询供应商列表
|
|||
export const getSupplierPage = async (params) => { |
|||
return await request.get({ url: `/wms/supplier/page`, params }) |
|||
} |
|||
|
|||
// 查询供应商详情
|
|||
export const getSupplier = async (id: number) => { |
|||
return await request.get({ url: `/wms/supplier/get?id=` + id }) |
|||
} |
|||
|
|||
// 新增供应商
|
|||
export const createSupplier = async (data: SupplierVO) => { |
|||
return await request.post({ url: `/wms/supplier/create`, data }) |
|||
} |
|||
|
|||
// 修改供应商
|
|||
export const updateSupplier = async (data: SupplierVO) => { |
|||
return await request.put({ url: `/wms/supplier/update`, data }) |
|||
} |
|||
|
|||
// 删除供应商
|
|||
export const deleteSupplier = async (id: number) => { |
|||
return await request.delete({ url: `/wms/supplier/delete?id=` + id }) |
|||
} |
|||
|
|||
// 导出供应商 Excel
|
|||
export const exportSupplier = async (params) => { |
|||
return await request.download({ url: `/wms/supplier/export-excel`, params }) |
|||
} |
@ -0,0 +1,51 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface SupplieritemVO { |
|||
supplierCode: string |
|||
itemCode: string |
|||
supplierItemCode: string |
|||
supplierUom: string |
|||
convertRate: number |
|||
packUnit: string |
|||
packQty: number |
|||
altPackUnit: string |
|||
altPackQty: number |
|||
packQtyOfContainer: number |
|||
defaultWarehouseCode: string |
|||
defaultLocationCode: string |
|||
settlementType: string |
|||
available: number |
|||
activeTime: Date |
|||
expireTime: Date |
|||
remark: string |
|||
} |
|||
|
|||
// 查询供应商物品列表
|
|||
export const getSupplieritemPage = async (params) => { |
|||
return await request.get({ url: `/wms/supplieritem/page`, params }) |
|||
} |
|||
|
|||
// 查询供应商物品详情
|
|||
export const getSupplieritem = async (id: number) => { |
|||
return await request.get({ url: `/wms/supplieritem/get?id=` + id }) |
|||
} |
|||
|
|||
// 新增供应商物品
|
|||
export const createSupplieritem = async (data: SupplieritemVO) => { |
|||
return await request.post({ url: `/wms/supplieritem/create`, data }) |
|||
} |
|||
|
|||
// 修改供应商物品
|
|||
export const updateSupplieritem = async (data: SupplieritemVO) => { |
|||
return await request.put({ url: `/wms/supplieritem/update`, data }) |
|||
} |
|||
|
|||
// 删除供应商物品
|
|||
export const deleteSupplieritem = async (id: number) => { |
|||
return await request.delete({ url: `/wms/supplieritem/delete?id=` + id }) |
|||
} |
|||
|
|||
// 导出供应商物品 Excel
|
|||
export const exportSupplieritem = async (params) => { |
|||
return await request.download({ url: `/wms/supplieritem/export-excel`, params }) |
|||
} |
@ -0,0 +1,41 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface SystemcalendarVO { |
|||
module: string |
|||
startTime: Date |
|||
stopTime: Date |
|||
available: number |
|||
activeTime: Date |
|||
expireTime: Date |
|||
remark: string |
|||
} |
|||
|
|||
// 查询系统日历列表
|
|||
export const getSystemcalendarPage = async (params) => { |
|||
return await request.get({ url: `/wms/systemcalendar/page`, params }) |
|||
} |
|||
|
|||
// 查询系统日历详情
|
|||
export const getSystemcalendar = async (id: number) => { |
|||
return await request.get({ url: `/wms/systemcalendar/get?id=` + id }) |
|||
} |
|||
|
|||
// 新增系统日历
|
|||
export const createSystemcalendar = async (data: SystemcalendarVO) => { |
|||
return await request.post({ url: `/wms/systemcalendar/create`, data }) |
|||
} |
|||
|
|||
// 修改系统日历
|
|||
export const updateSystemcalendar = async (data: SystemcalendarVO) => { |
|||
return await request.put({ url: `/wms/systemcalendar/update`, data }) |
|||
} |
|||
|
|||
// 删除系统日历
|
|||
export const deleteSystemcalendar = async (id: number) => { |
|||
return await request.delete({ url: `/wms/systemcalendar/delete?id=` + id }) |
|||
} |
|||
|
|||
// 导出系统日历 Excel
|
|||
export const exportSystemcalendar = async (params) => { |
|||
return await request.download({ url: `/wms/systemcalendar/export-excel`, params }) |
|||
} |
@ -0,0 +1,42 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface WarehouseVO { |
|||
code: string |
|||
name: string |
|||
description: string |
|||
type: string |
|||
available: number |
|||
activeTime: Date |
|||
expireTime: Date |
|||
remark: string |
|||
} |
|||
|
|||
// 查询仓库列表
|
|||
export const getWarehousePage = async (params) => { |
|||
return await request.get({ url: `/wms/warehouse/page`, params }) |
|||
} |
|||
|
|||
// 查询仓库详情
|
|||
export const getWarehouse = async (id: number) => { |
|||
return await request.get({ url: `/wms/warehouse/get?id=` + id }) |
|||
} |
|||
|
|||
// 新增仓库
|
|||
export const createWarehouse = async (data: WarehouseVO) => { |
|||
return await request.post({ url: `/wms/warehouse/create`, data }) |
|||
} |
|||
|
|||
// 修改仓库
|
|||
export const updateWarehouse = async (data: WarehouseVO) => { |
|||
return await request.put({ url: `/wms/warehouse/update`, data }) |
|||
} |
|||
|
|||
// 删除仓库
|
|||
export const deleteWarehouse = async (id: number) => { |
|||
return await request.delete({ url: `/wms/warehouse/delete?id=` + id }) |
|||
} |
|||
|
|||
// 导出仓库 Excel
|
|||
export const exportWarehouse = async (params) => { |
|||
return await request.download({ url: `/wms/warehouse/export-excel`, params }) |
|||
} |
@ -0,0 +1,42 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface WorkshopVO { |
|||
code: string |
|||
name: string |
|||
description: string |
|||
type: string |
|||
available: number |
|||
activeTime: Date |
|||
expireTime: Date |
|||
remark: string |
|||
} |
|||
|
|||
// 查询车间列表
|
|||
export const getWorkshopPage = async (params) => { |
|||
return await request.get({ url: `/wms/workshop/page`, params }) |
|||
} |
|||
|
|||
// 查询车间详情
|
|||
export const getWorkshop = async (id: number) => { |
|||
return await request.get({ url: `/wms/workshop/get?id=` + id }) |
|||
} |
|||
|
|||
// 新增车间
|
|||
export const createWorkshop = async (data: WorkshopVO) => { |
|||
return await request.post({ url: `/wms/workshop/create`, data }) |
|||
} |
|||
|
|||
// 修改车间
|
|||
export const updateWorkshop = async (data: WorkshopVO) => { |
|||
return await request.put({ url: `/wms/workshop/update`, data }) |
|||
} |
|||
|
|||
// 删除车间
|
|||
export const deleteWorkshop = async (id: number) => { |
|||
return await request.delete({ url: `/wms/workshop/delete?id=` + id }) |
|||
} |
|||
|
|||
// 导出车间 Excel
|
|||
export const exportWorkshop = async (params) => { |
|||
return await request.download({ url: `/wms/workshop/export-excel`, params }) |
|||
} |
@ -0,0 +1,46 @@ |
|||
import request from '@/config/axios' |
|||
|
|||
export interface WorkstationVO { |
|||
code: string |
|||
name: string |
|||
description: string |
|||
type: string |
|||
workshopCode: string |
|||
productionLineCode: string |
|||
rawLocationCode: string |
|||
fgLocationCode: string |
|||
available: number |
|||
activeTime: Date |
|||
expireTime: Date |
|||
remark: string |
|||
} |
|||
|
|||
// 查询工位列表
|
|||
export const getWorkstationPage = async (params) => { |
|||
return await request.get({ url: `/wms/workstation/page`, params }) |
|||
} |
|||
|
|||
// 查询工位详情
|
|||
export const getWorkstation = async (id: number) => { |
|||
return await request.get({ url: `/wms/workstation/get?id=` + id }) |
|||
} |
|||
|
|||
// 新增工位
|
|||
export const createWorkstation = async (data: WorkstationVO) => { |
|||
return await request.post({ url: `/wms/workstation/create`, data }) |
|||
} |
|||
|
|||
// 修改工位
|
|||
export const updateWorkstation = async (data: WorkstationVO) => { |
|||
return await request.put({ url: `/wms/workstation/update`, data }) |
|||
} |
|||
|
|||
// 删除工位
|
|||
export const deleteWorkstation = async (id: number) => { |
|||
return await request.delete({ url: `/wms/workstation/delete?id=` + id }) |
|||
} |
|||
|
|||
// 导出工位 Excel
|
|||
export const exportWorkstation = async (params) => { |
|||
return await request.download({ url: `/wms/workstation/export-excel`, params }) |
|||
} |
@ -0,0 +1,200 @@ |
|||
<template> |
|||
<Dialog :title="dialogTitle" v-model="dialogVisible"> |
|||
<div class="p-20px m--10px" style="max-height: 600px;overflow-y: auto;"> |
|||
<el-form |
|||
ref="formRef" |
|||
:model="formData" |
|||
:rules="formRules" |
|||
label-width="100px" |
|||
v-loading="formLoading" |
|||
> |
|||
<el-row> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="年" prop="year"> |
|||
<el-input v-model="formData.year" placeholder="请输入年" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="月" prop="month"> |
|||
<el-input v-model="formData.month" placeholder="请输入月" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="描述" prop="descriiption"> |
|||
<el-input v-model="formData.descriiption" placeholder="请输入描述" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="开始时间" prop="beginTime"> |
|||
<el-date-picker |
|||
v-model="formData.beginTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择开始时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="结束时间" prop="endTime"> |
|||
<el-date-picker |
|||
v-model="formData.endTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择结束时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="转换生效时间" prop="converttotime"> |
|||
<el-date-picker |
|||
v-model="formData.converttotime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择转换生效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select v-model="formData.available" placeholder="请选择是否可用"> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="formData.activeTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择生效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="formData.expireTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择失效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input v-model="formData.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<template #footer> |
|||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> |
|||
<el-button @click="dialogVisible = false">取 消</el-button> |
|||
</template> |
|||
</Dialog> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' |
|||
import * as AccountcalendarApi from '@/api/wms/accountcalendar' |
|||
|
|||
const { t } = useI18n() // 国际化 |
|||
const message = useMessage() // 消息弹窗 |
|||
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示 |
|||
const dialogTitle = ref('') // 弹窗的标题 |
|||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改 |
|||
const formData = ref({ |
|||
year: undefined, |
|||
month: undefined, |
|||
descriiption: undefined, |
|||
beginTime: undefined, |
|||
endTime: undefined, |
|||
converttotime: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
}) |
|||
const formRules = reactive({ |
|||
year: [{ required: true, message: '年不能为空', trigger: 'blur' }], |
|||
month: [{ required: true, message: '月不能为空', trigger: 'blur' }], |
|||
beginTime: [{ required: true, message: '开始时间不能为空', trigger: 'blur' }], |
|||
endTime: [{ required: true, message: '结束时间不能为空', trigger: 'blur' }], |
|||
converttotime: [{ required: true, message: '转换生效时间不能为空', trigger: 'blur' }], |
|||
available: [{ required: true, message: '是否可用不能为空', trigger: 'change' }] |
|||
}) |
|||
const formRef = ref() // 表单 Ref |
|||
|
|||
/** 打开弹窗 */ |
|||
const open = async (type: string, id?: number) => { |
|||
dialogVisible.value = true |
|||
dialogTitle.value = t('action.' + type) |
|||
formType.value = type |
|||
resetForm() |
|||
// 修改时,设置数据 |
|||
if (id) { |
|||
formLoading.value = true |
|||
try { |
|||
formData.value = await AccountcalendarApi.getAccountcalendar(id) |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
} |
|||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
|||
|
|||
/** 提交表单 */ |
|||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
|||
const submitForm = async () => { |
|||
// 校验表单 |
|||
if (!formRef) return |
|||
const valid = await formRef.value.validate() |
|||
if (!valid) return |
|||
// 提交请求 |
|||
formLoading.value = true |
|||
try { |
|||
const data = formData.value as unknown as AccountcalendarApi.AccountcalendarVO |
|||
if (formType.value === 'create') { |
|||
await AccountcalendarApi.createAccountcalendar(data) |
|||
message.success(t('common.createSuccess')) |
|||
} else { |
|||
await AccountcalendarApi.updateAccountcalendar(data) |
|||
message.success(t('common.updateSuccess')) |
|||
} |
|||
dialogVisible.value = false |
|||
// 发送操作成功的事件 |
|||
emit('success') |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 重置表单 */ |
|||
const resetForm = () => { |
|||
formData.value = { |
|||
year: undefined, |
|||
month: undefined, |
|||
descriiption: undefined, |
|||
beginTime: undefined, |
|||
endTime: undefined, |
|||
converttotime: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
} |
|||
formRef.value?.resetFields() |
|||
} |
|||
</script> |
@ -0,0 +1,344 @@ |
|||
<template> |
|||
<ContentWrap> |
|||
<!-- 搜索工作栏 --> |
|||
<el-form |
|||
class="-mb-15px" |
|||
:model="queryParams" |
|||
ref="queryFormRef" |
|||
:inline="true" |
|||
label-width="68px" |
|||
> |
|||
<el-form-item label="年" prop="year"> |
|||
<el-input |
|||
v-model="queryParams.year" |
|||
placeholder="请输入年" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="月" prop="month"> |
|||
<el-input |
|||
v-model="queryParams.month" |
|||
placeholder="请输入月" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="描述" prop="descriiption"> |
|||
<el-input |
|||
v-model="queryParams.descriiption" |
|||
placeholder="请输入描述" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="开始时间" prop="beginTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.beginTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="结束时间" prop="endTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.endTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="转换生效时间" prop="converttotime"> |
|||
<el-date-picker |
|||
v-model="queryParams.converttotime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select |
|||
v-model="queryParams.available" |
|||
placeholder="请选择是否可用" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.activeTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.expireTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input |
|||
v-model="queryParams.remark" |
|||
placeholder="请输入备注" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建时间" prop="createTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.createTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建者ID" prop="creatorId"> |
|||
<el-input |
|||
v-model="queryParams.creatorId" |
|||
placeholder="请输入创建者ID" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="info" plain @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> |
|||
<el-button type="info" plain @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> |
|||
<el-button |
|||
type="primary" |
|||
@click="openForm('create')" |
|||
v-hasPermi="['wms:accountcalendar:create']" |
|||
> |
|||
<Icon icon="ep:plus" class="mr-5px" /> 新增 |
|||
</el-button> |
|||
<el-button |
|||
type="success" |
|||
@click="handleExport" |
|||
:loading="exportLoading" |
|||
v-hasPermi="['wms:accountcalendar:export']" |
|||
> |
|||
<Icon icon="ep:download" class="mr-5px" /> 导出 |
|||
</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</ContentWrap> |
|||
|
|||
<!-- 列表 --> |
|||
<ContentWrap> |
|||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> |
|||
<el-table-column label="年" align="center" prop="year" width="150px" /> |
|||
<el-table-column label="月" align="center" prop="month" width="150px" /> |
|||
<el-table-column label="描述" align="center" prop="descriiption" width="150px" /> |
|||
<el-table-column |
|||
label="开始时间" |
|||
align="center" |
|||
prop="beginTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column |
|||
label="结束时间" |
|||
align="center" |
|||
prop="endTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column |
|||
label="转换生效时间" |
|||
align="center" |
|||
prop="converttotime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="是否可用" align="center" prop="available" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.TRUE_FALSE" :value="scope.row.available" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
label="生效时间" |
|||
align="center" |
|||
prop="activeTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column |
|||
label="失效时间" |
|||
align="center" |
|||
prop="expireTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="备注" align="center" prop="remark" width="150px" /> |
|||
<el-table-column |
|||
label="创建时间" |
|||
align="center" |
|||
prop="createTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="创建者ID" align="center" prop="creatorId" width="150px" /> |
|||
<el-table-column label="操作" align="center" width="150px" fixed="right"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
link |
|||
type="primary" |
|||
@click="openForm('update', scope.row.id)" |
|||
v-hasPermi="['wms:accountcalendar:update']" |
|||
> |
|||
编辑 |
|||
</el-button> |
|||
<el-button |
|||
link |
|||
type="danger" |
|||
@click="handleDelete(scope.row.id)" |
|||
v-hasPermi="['wms:accountcalendar:delete']" |
|||
> |
|||
删除 |
|||
</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 分页 --> |
|||
<Pagination |
|||
:total="total" |
|||
v-model:page="queryParams.pageNo" |
|||
v-model:limit="queryParams.pageSize" |
|||
@pagination="getList" |
|||
/> |
|||
</ContentWrap> |
|||
|
|||
<!-- 表单弹窗:添加/修改 --> |
|||
<AccountcalendarForm ref="formRef" @success="getList" /> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' |
|||
import { dateFormatter } from '@/utils/formatTime' |
|||
import download from '@/utils/download' |
|||
import * as AccountcalendarApi from '@/api/wms/accountcalendar' |
|||
import AccountcalendarForm from './AccountcalendarForm.vue' |
|||
|
|||
defineOptions({ name: 'Accountcalendar' }) |
|||
|
|||
const message = useMessage() // 消息弹窗 |
|||
const { t } = useI18n() // 国际化 |
|||
|
|||
const loading = ref(true) // 列表的加载中 |
|||
const total = ref(0) // 列表的总页数 |
|||
const list = ref([]) // 列表的数据 |
|||
const queryParams = reactive({ |
|||
pageNo: 1, |
|||
pageSize: 10, |
|||
year: null, |
|||
month: null, |
|||
descriiption: null, |
|||
beginTime: [], |
|||
endTime: [], |
|||
converttotime: [], |
|||
available: null, |
|||
activeTime: [], |
|||
expireTime: [], |
|||
remark: null, |
|||
createTime: [], |
|||
creatorId: null |
|||
}) |
|||
const queryFormRef = ref() // 搜索的表单 |
|||
const exportLoading = ref(false) // 导出的加载中 |
|||
|
|||
/** 查询列表 */ |
|||
const getList = async () => { |
|||
loading.value = true |
|||
try { |
|||
const data = await AccountcalendarApi.getAccountcalendarPage(queryParams) |
|||
list.value = data.list |
|||
total.value = data.total |
|||
} finally { |
|||
loading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 搜索按钮操作 */ |
|||
const handleQuery = () => { |
|||
queryParams.pageNo = 1 |
|||
getList() |
|||
} |
|||
|
|||
/** 重置按钮操作 */ |
|||
const resetQuery = () => { |
|||
queryFormRef.value.resetFields() |
|||
handleQuery() |
|||
} |
|||
|
|||
/** 添加/修改操作 */ |
|||
const formRef = ref() |
|||
const openForm = (type: string, id?: number) => { |
|||
formRef.value.open(type, id) |
|||
} |
|||
|
|||
/** 删除按钮操作 */ |
|||
const handleDelete = async (id: number) => { |
|||
try { |
|||
// 删除的二次确认 |
|||
await message.delConfirm() |
|||
// 发起删除 |
|||
await AccountcalendarApi.deleteAccountcalendar(id) |
|||
message.success(t('common.delSuccess')) |
|||
// 刷新列表 |
|||
await getList() |
|||
} catch {} |
|||
} |
|||
|
|||
/** 导出按钮操作 */ |
|||
const handleExport = async () => { |
|||
try { |
|||
// 导出的二次确认 |
|||
await message.exportConfirm() |
|||
// 发起导出 |
|||
exportLoading.value = true |
|||
const data = await AccountcalendarApi.exportAccountcalendar(queryParams) |
|||
download.excel(data, '账期日历.xls') |
|||
} catch { |
|||
} finally { |
|||
exportLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 初始化 **/ |
|||
onMounted(() => { |
|||
getList() |
|||
}) |
|||
</script> |
@ -0,0 +1,197 @@ |
|||
<template> |
|||
<Dialog :title="dialogTitle" v-model="dialogVisible"> |
|||
<div class="p-20px m--10px" style="max-height: 600px;overflow-y: auto;"> |
|||
<el-form |
|||
ref="formRef" |
|||
:model="formData" |
|||
:rules="formRules" |
|||
label-width="100px" |
|||
v-loading="formLoading" |
|||
> |
|||
<el-row> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="代码" prop="code"> |
|||
<el-input v-model="formData.code" placeholder="请输入代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input v-model="formData.name" placeholder="请输入名称" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="描述"> |
|||
<Editor v-model="formData.description" height="150px" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="仓库代码" prop="warehouseCode"> |
|||
<el-input v-model="formData.warehouseCode" placeholder="请输入仓库代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="类型" prop="type"> |
|||
<el-select v-model="formData.type" placeholder="请选择类型"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.AREA_TYPE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="是否是功能区" prop="isFunctional"> |
|||
<el-select v-model="formData.isFunctional" placeholder="请选择是否是功能区"> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select v-model="formData.available" placeholder="请选择是否可用"> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="formData.activeTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择生效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="formData.expireTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择失效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input v-model="formData.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<template #footer> |
|||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> |
|||
<el-button @click="dialogVisible = false">取 消</el-button> |
|||
</template> |
|||
</Dialog> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import * as AreaApi from '@/api/wms/areabasic' |
|||
|
|||
const { t } = useI18n() // 国际化 |
|||
const message = useMessage() // 消息弹窗 |
|||
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示 |
|||
const dialogTitle = ref('') // 弹窗的标题 |
|||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改 |
|||
const formData = ref({ |
|||
code: undefined, |
|||
name: undefined, |
|||
description: undefined, |
|||
warehouseCode: undefined, |
|||
type: undefined, |
|||
isFunctional: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
}) |
|||
const formRules = reactive({ |
|||
code: [{ required: true, message: '代码不能为空', trigger: 'blur' }], |
|||
warehouseCode: [{ required: true, message: '仓库代码不能为空', trigger: 'blur' }], |
|||
isFunctional: [{ required: true, message: '是否是功能区不能为空', trigger: 'change' }], |
|||
available: [{ required: true, message: '是否可用不能为空', trigger: 'change' }] |
|||
}) |
|||
const formRef = ref() // 表单 Ref |
|||
|
|||
/** 打开弹窗 */ |
|||
const open = async (type: string, id?: number) => { |
|||
dialogVisible.value = true |
|||
dialogTitle.value = t('action.' + type) |
|||
formType.value = type |
|||
resetForm() |
|||
// 修改时,设置数据 |
|||
if (id) { |
|||
formLoading.value = true |
|||
try { |
|||
formData.value = await AreaApi.getArea(id) |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
} |
|||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
|||
|
|||
/** 提交表单 */ |
|||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
|||
const submitForm = async () => { |
|||
// 校验表单 |
|||
if (!formRef) return |
|||
const valid = await formRef.value.validate() |
|||
if (!valid) return |
|||
// 提交请求 |
|||
formLoading.value = true |
|||
try { |
|||
const data = formData.value as unknown as AreaApi.AreaVO |
|||
if (formType.value === 'create') { |
|||
await AreaApi.createArea(data) |
|||
message.success(t('common.createSuccess')) |
|||
} else { |
|||
await AreaApi.updateArea(data) |
|||
message.success(t('common.updateSuccess')) |
|||
} |
|||
dialogVisible.value = false |
|||
// 发送操作成功的事件 |
|||
emit('success') |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 重置表单 */ |
|||
const resetForm = () => { |
|||
formData.value = { |
|||
code: undefined, |
|||
name: undefined, |
|||
description: undefined, |
|||
warehouseCode: undefined, |
|||
type: undefined, |
|||
isFunctional: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
} |
|||
formRef.value?.resetFields() |
|||
} |
|||
</script> |
@ -0,0 +1,322 @@ |
|||
<template> |
|||
<ContentWrap> |
|||
<!-- 搜索工作栏 --> |
|||
<el-form |
|||
class="-mb-15px" |
|||
:model="queryParams" |
|||
ref="queryFormRef" |
|||
:inline="true" |
|||
label-width="68px" |
|||
> |
|||
<el-form-item label="代码" prop="code"> |
|||
<el-input |
|||
v-model="queryParams.code" |
|||
placeholder="请输入代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input |
|||
v-model="queryParams.name" |
|||
placeholder="请输入名称" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="仓库代码" prop="warehouseCode"> |
|||
<el-input |
|||
v-model="queryParams.warehouseCode" |
|||
placeholder="请输入仓库代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="类型" prop="type"> |
|||
<el-select v-model="queryParams.type" placeholder="请选择类型" clearable class="!w-240px"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.AREA_TYPE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="是否是功能区" prop="isFunctional"> |
|||
<el-select |
|||
v-model="queryParams.isFunctional" |
|||
placeholder="请选择是否是功能区" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select |
|||
v-model="queryParams.available" |
|||
placeholder="请选择是否可用" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.activeTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.expireTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input |
|||
v-model="queryParams.remark" |
|||
placeholder="请输入备注" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建时间" prop="createTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.createTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建者ID" prop="creator"> |
|||
<el-input |
|||
v-model="queryParams.creator" |
|||
placeholder="请输入创建者ID" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="info" plain @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> |
|||
<el-button type="info" plain @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> |
|||
<el-button type="primary" @click="openForm('create')" v-hasPermi="['wms:areabasic:create']"> |
|||
<Icon icon="ep:plus" class="mr-5px" /> 新增 |
|||
</el-button> |
|||
<el-button |
|||
type="success" |
|||
@click="handleExport" |
|||
:loading="exportLoading" |
|||
v-hasPermi="['wms:areabasic:export']" |
|||
> |
|||
<Icon icon="ep:download" class="mr-5px" /> 导出 |
|||
</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</ContentWrap> |
|||
|
|||
<!-- 列表 --> |
|||
<ContentWrap> |
|||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> |
|||
<el-table-column label="代码" align="center" prop="code" width="150px" /> |
|||
<el-table-column label="名称" align="center" prop="name" width="150px" /> |
|||
<el-table-column label="描述" align="center" prop="description" width="150px" /> |
|||
<el-table-column label="仓库代码" align="center" prop="warehouseCode" width="150px" /> |
|||
<el-table-column label="类型" align="center" prop="type" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.AREA_TYPE" :value="scope.row.type" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="是否是功能区" align="center" prop="isFunctional" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.TRUE_FALSE" :value="scope.row.isFunctional" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="是否可用" align="center" prop="available" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.TRUE_FALSE" :value="scope.row.available" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
label="生效时间" |
|||
align="center" |
|||
prop="activeTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column |
|||
label="失效时间" |
|||
align="center" |
|||
prop="expireTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="备注" align="center" prop="remark" width="150px" /> |
|||
<el-table-column |
|||
label="创建时间" |
|||
align="center" |
|||
prop="createTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="创建者ID" align="center" prop="creator" width="150px" /> |
|||
<el-table-column label="操作" align="center" width="150px" fixed="right"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
link |
|||
type="primary" |
|||
@click="openForm('update', scope.row.id)" |
|||
v-hasPermi="['wms:areabasic:update']" |
|||
> |
|||
编辑 |
|||
</el-button> |
|||
<el-button |
|||
link |
|||
type="danger" |
|||
@click="handleDelete(scope.row.id)" |
|||
v-hasPermi="['wms:areabasic:delete']" |
|||
> |
|||
删除 |
|||
</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 分页 --> |
|||
<Pagination |
|||
:total="total" |
|||
v-model:page="queryParams.pageNo" |
|||
v-model:limit="queryParams.pageSize" |
|||
@pagination="getList" |
|||
/> |
|||
</ContentWrap> |
|||
|
|||
<!-- 表单弹窗:添加/修改 --> |
|||
<AreaForm ref="formRef" @success="getList" /> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import { dateFormatter } from '@/utils/formatTime' |
|||
import download from '@/utils/download' |
|||
import * as AreaApi from '@/api/wms/areabasic' |
|||
import AreaForm from './AreaForm.vue' |
|||
|
|||
defineOptions({ name: 'Area' }) |
|||
|
|||
const message = useMessage() // 消息弹窗 |
|||
const { t } = useI18n() // 国际化 |
|||
|
|||
const loading = ref(true) // 列表的加载中 |
|||
const total = ref(0) // 列表的总页数 |
|||
const list = ref([]) // 列表的数据 |
|||
const queryParams = reactive({ |
|||
pageNo: 1, |
|||
pageSize: 10, |
|||
code: null, |
|||
name: null, |
|||
description: null, |
|||
warehouseCode: null, |
|||
type: null, |
|||
isFunctional: null, |
|||
available: null, |
|||
activeTime: [], |
|||
expireTime: [], |
|||
remark: null, |
|||
createTime: [], |
|||
creator: null |
|||
}) |
|||
const queryFormRef = ref() // 搜索的表单 |
|||
const exportLoading = ref(false) // 导出的加载中 |
|||
|
|||
/** 查询列表 */ |
|||
const getList = async () => { |
|||
loading.value = true |
|||
try { |
|||
const data = await AreaApi.getAreaPage(queryParams) |
|||
list.value = data.list |
|||
total.value = data.total |
|||
} finally { |
|||
loading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 搜索按钮操作 */ |
|||
const handleQuery = () => { |
|||
queryParams.pageNo = 1 |
|||
getList() |
|||
} |
|||
|
|||
/** 重置按钮操作 */ |
|||
const resetQuery = () => { |
|||
queryFormRef.value.resetFields() |
|||
handleQuery() |
|||
} |
|||
|
|||
/** 添加/修改操作 */ |
|||
const formRef = ref() |
|||
const openForm = (type: string, id?: number) => { |
|||
formRef.value.open(type, id) |
|||
} |
|||
|
|||
/** 删除按钮操作 */ |
|||
const handleDelete = async (id: number) => { |
|||
try { |
|||
// 删除的二次确认 |
|||
await message.delConfirm() |
|||
// 发起删除 |
|||
await AreaApi.deleteArea(id) |
|||
message.success(t('common.delSuccess')) |
|||
// 刷新列表 |
|||
await getList() |
|||
} catch {} |
|||
} |
|||
|
|||
/** 导出按钮操作 */ |
|||
const handleExport = async () => { |
|||
try { |
|||
// 导出的二次确认 |
|||
await message.exportConfirm() |
|||
// 发起导出 |
|||
exportLoading.value = true |
|||
const data = await AreaApi.exportArea(queryParams) |
|||
download.excel(data, '库区.xls') |
|||
} catch { |
|||
} finally { |
|||
exportLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 初始化 **/ |
|||
onMounted(() => { |
|||
getList() |
|||
}) |
|||
</script> |
@ -0,0 +1,202 @@ |
|||
<template> |
|||
<Dialog :title="dialogTitle" v-model="dialogVisible"> |
|||
<div class="p-20px m--10px" style="max-height: 600px;overflow-y: auto;"> |
|||
<el-form |
|||
ref="formRef" |
|||
:model="formData" |
|||
:rules="formRules" |
|||
label-width="100px" |
|||
v-loading="formLoading" |
|||
> |
|||
<el-row> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="父物料代码" prop="productItemCode"> |
|||
<el-input v-model="formData.productItemCode" placeholder="请输入父物料代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="子物料代码" prop="componentItemCode"> |
|||
<el-input v-model="formData.componentItemCode" placeholder="请输入子物料代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="子物料计量单位" prop="componentUom"> |
|||
<el-select v-model="formData.componentUom" placeholder="请选择子物料计量单位"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.UOM)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="子物料数量" prop="componentQty"> |
|||
<el-input v-model="formData.componentQty" placeholder="请输入子物料数量" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="工序代码" prop="processCode"> |
|||
<el-input v-model="formData.processCode" placeholder="请输入工序代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="版本" prop="version"> |
|||
<el-input v-model="formData.version" placeholder="请输入版本" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="层级" prop="layer"> |
|||
<el-input v-model="formData.layer" placeholder="请输入层级" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select v-model="formData.available" placeholder="请选择是否可用"> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="formData.activeTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择生效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="formData.expireTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择失效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input v-model="formData.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<template #footer> |
|||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> |
|||
<el-button @click="dialogVisible = false">取 消</el-button> |
|||
</template> |
|||
</Dialog> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import * as BomApi from '@/api/wms/bom' |
|||
|
|||
const { t } = useI18n() // 国际化 |
|||
const message = useMessage() // 消息弹窗 |
|||
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示 |
|||
const dialogTitle = ref('') // 弹窗的标题 |
|||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改 |
|||
const formData = ref({ |
|||
productItemCode: undefined, |
|||
componentItemCode: undefined, |
|||
componentUom: undefined, |
|||
componentQty: undefined, |
|||
processCode: undefined, |
|||
version: undefined, |
|||
layer: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
}) |
|||
const formRules = reactive({ |
|||
productItemCode: [{ required: true, message: '父物料代码不能为空', trigger: 'blur' }], |
|||
componentItemCode: [{ required: true, message: '子物料代码不能为空', trigger: 'blur' }], |
|||
componentUom: [{ required: true, message: '子物料计量单位不能为空', trigger: 'change' }], |
|||
componentQty: [{ required: true, message: '子物料数量不能为空', trigger: 'blur' }], |
|||
processCode: [{ required: true, message: '工序代码不能为空', trigger: 'blur' }], |
|||
available: [{ required: true, message: '是否可用不能为空', trigger: 'change' }] |
|||
}) |
|||
const formRef = ref() // 表单 Ref |
|||
|
|||
/** 打开弹窗 */ |
|||
const open = async (type: string, id?: number) => { |
|||
dialogVisible.value = true |
|||
dialogTitle.value = t('action.' + type) |
|||
formType.value = type |
|||
resetForm() |
|||
// 修改时,设置数据 |
|||
if (id) { |
|||
formLoading.value = true |
|||
try { |
|||
formData.value = await BomApi.getBom(id) |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
} |
|||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
|||
|
|||
/** 提交表单 */ |
|||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
|||
const submitForm = async () => { |
|||
// 校验表单 |
|||
if (!formRef) return |
|||
const valid = await formRef.value.validate() |
|||
if (!valid) return |
|||
// 提交请求 |
|||
formLoading.value = true |
|||
try { |
|||
const data = formData.value as unknown as BomApi.BomVO |
|||
if (formType.value === 'create') { |
|||
await BomApi.createBom(data) |
|||
message.success(t('common.createSuccess')) |
|||
} else { |
|||
await BomApi.updateBom(data) |
|||
message.success(t('common.updateSuccess')) |
|||
} |
|||
dialogVisible.value = false |
|||
// 发送操作成功的事件 |
|||
emit('success') |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 重置表单 */ |
|||
const resetForm = () => { |
|||
formData.value = { |
|||
productItemCode: undefined, |
|||
componentItemCode: undefined, |
|||
componentUom: undefined, |
|||
componentQty: undefined, |
|||
processCode: undefined, |
|||
version: undefined, |
|||
layer: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
} |
|||
formRef.value?.resetFields() |
|||
} |
|||
</script> |
@ -0,0 +1,337 @@ |
|||
<template> |
|||
<ContentWrap> |
|||
<!-- 搜索工作栏 --> |
|||
<el-form |
|||
class="-mb-15px" |
|||
:model="queryParams" |
|||
ref="queryFormRef" |
|||
:inline="true" |
|||
label-width="68px" |
|||
> |
|||
<el-form-item label="父物料代码" prop="productItemCode"> |
|||
<el-input |
|||
v-model="queryParams.productItemCode" |
|||
placeholder="请输入父物料代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="子物料代码" prop="componentItemCode"> |
|||
<el-input |
|||
v-model="queryParams.componentItemCode" |
|||
placeholder="请输入子物料代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="子物料计量单位" prop="componentUom"> |
|||
<el-select |
|||
v-model="queryParams.componentUom" |
|||
placeholder="请选择子物料计量单位" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.UOM)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="子物料数量" prop="componentQty"> |
|||
<el-input |
|||
v-model="queryParams.componentQty" |
|||
placeholder="请输入子物料数量" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="工序代码" prop="processCode"> |
|||
<el-input |
|||
v-model="queryParams.processCode" |
|||
placeholder="请输入工序代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="版本" prop="version"> |
|||
<el-input |
|||
v-model="queryParams.version" |
|||
placeholder="请输入版本" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="层级" prop="layer"> |
|||
<el-input |
|||
v-model="queryParams.layer" |
|||
placeholder="请输入层级" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select |
|||
v-model="queryParams.available" |
|||
placeholder="请选择是否可用" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.activeTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.expireTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input |
|||
v-model="queryParams.remark" |
|||
placeholder="请输入备注" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建时间" prop="createTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.createTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建者ID" prop="creator"> |
|||
<el-input |
|||
v-model="queryParams.creator" |
|||
placeholder="请输入创建者ID" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="info" plain @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> |
|||
<el-button type="info" plain @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> |
|||
<el-button type="primary" @click="openForm('create')" v-hasPermi="['wms:bom:create']"> |
|||
<Icon icon="ep:plus" class="mr-5px" /> 新增 |
|||
</el-button> |
|||
<el-button |
|||
type="success" |
|||
@click="handleExport" |
|||
:loading="exportLoading" |
|||
v-hasPermi="['wms:bom:export']" |
|||
> |
|||
<Icon icon="ep:download" class="mr-5px" /> 导出 |
|||
</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</ContentWrap> |
|||
|
|||
<!-- 列表 --> |
|||
<ContentWrap> |
|||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> |
|||
<el-table-column label="父物料代码" align="center" prop="productItemCode" width="150px" /> |
|||
<el-table-column label="子物料代码" align="center" prop="componentItemCode" width="150px" /> |
|||
<el-table-column label="子物料计量单位" align="center" prop="componentUom" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.UOM" :value="scope.row.componentUom" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="子物料数量" align="center" prop="componentQty" width="150px" /> |
|||
<el-table-column label="工序代码" align="center" prop="processCode" width="150px" /> |
|||
<el-table-column label="版本" align="center" prop="version" width="150px" /> |
|||
<el-table-column label="层级" align="center" prop="layer" width="150px" /> |
|||
<el-table-column label="是否可用" align="center" prop="available" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.TRUE_FALSE" :value="scope.row.available" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
label="生效时间" |
|||
align="center" |
|||
prop="activeTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column |
|||
label="失效时间" |
|||
align="center" |
|||
prop="expireTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="备注" align="center" prop="remark" width="150px" /> |
|||
<el-table-column |
|||
label="创建时间" |
|||
align="center" |
|||
prop="createTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="创建者ID" align="center" prop="creator" width="150px" /> |
|||
<el-table-column label="操作" align="center" width="150px" fixed="right"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
link |
|||
type="primary" |
|||
@click="openForm('update', scope.row.id)" |
|||
v-hasPermi="['wms:bom:update']" |
|||
> |
|||
编辑 |
|||
</el-button> |
|||
<el-button |
|||
link |
|||
type="danger" |
|||
@click="handleDelete(scope.row.id)" |
|||
v-hasPermi="['wms:bom:delete']" |
|||
> |
|||
删除 |
|||
</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 分页 --> |
|||
<Pagination |
|||
:total="total" |
|||
v-model:page="queryParams.pageNo" |
|||
v-model:limit="queryParams.pageSize" |
|||
@pagination="getList" |
|||
/> |
|||
</ContentWrap> |
|||
|
|||
<!-- 表单弹窗:添加/修改 --> |
|||
<BomForm ref="formRef" @success="getList" /> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import { dateFormatter } from '@/utils/formatTime' |
|||
import download from '@/utils/download' |
|||
import * as BomApi from '@/api/wms/bom' |
|||
import BomForm from './BomForm.vue' |
|||
|
|||
defineOptions({ name: 'Bom' }) |
|||
|
|||
const message = useMessage() // 消息弹窗 |
|||
const { t } = useI18n() // 国际化 |
|||
|
|||
const loading = ref(true) // 列表的加载中 |
|||
const total = ref(0) // 列表的总页数 |
|||
const list = ref([]) // 列表的数据 |
|||
const queryParams = reactive({ |
|||
pageNo: 1, |
|||
pageSize: 10, |
|||
productItemCode: null, |
|||
componentItemCode: null, |
|||
componentUom: null, |
|||
componentQty: null, |
|||
processCode: null, |
|||
version: null, |
|||
layer: null, |
|||
available: null, |
|||
activeTime: [], |
|||
expireTime: [], |
|||
remark: null, |
|||
createTime: [], |
|||
creator: null |
|||
}) |
|||
const queryFormRef = ref() // 搜索的表单 |
|||
const exportLoading = ref(false) // 导出的加载中 |
|||
|
|||
/** 查询列表 */ |
|||
const getList = async () => { |
|||
loading.value = true |
|||
try { |
|||
const data = await BomApi.getBomPage(queryParams) |
|||
list.value = data.list |
|||
total.value = data.total |
|||
} finally { |
|||
loading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 搜索按钮操作 */ |
|||
const handleQuery = () => { |
|||
queryParams.pageNo = 1 |
|||
getList() |
|||
} |
|||
|
|||
/** 重置按钮操作 */ |
|||
const resetQuery = () => { |
|||
queryFormRef.value.resetFields() |
|||
handleQuery() |
|||
} |
|||
|
|||
/** 添加/修改操作 */ |
|||
const formRef = ref() |
|||
const openForm = (type: string, id?: number) => { |
|||
formRef.value.open(type, id) |
|||
} |
|||
|
|||
/** 删除按钮操作 */ |
|||
const handleDelete = async (id: number) => { |
|||
try { |
|||
// 删除的二次确认 |
|||
await message.delConfirm() |
|||
// 发起删除 |
|||
await BomApi.deleteBom(id) |
|||
message.success(t('common.delSuccess')) |
|||
// 刷新列表 |
|||
await getList() |
|||
} catch {} |
|||
} |
|||
|
|||
/** 导出按钮操作 */ |
|||
const handleExport = async () => { |
|||
try { |
|||
// 导出的二次确认 |
|||
await message.exportConfirm() |
|||
// 发起导出 |
|||
exportLoading.value = true |
|||
const data = await BomApi.exportBom(queryParams) |
|||
download.excel(data, '物料清单.xls') |
|||
} catch { |
|||
} finally { |
|||
exportLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 初始化 **/ |
|||
onMounted(() => { |
|||
getList() |
|||
}) |
|||
</script> |
@ -0,0 +1,162 @@ |
|||
<template> |
|||
<Dialog :title="dialogTitle" v-model="dialogVisible"> |
|||
<div class="p-20px m--10px" style="max-height: 600px;overflow-y: auto;"> |
|||
<el-form |
|||
ref="formRef" |
|||
:model="formData" |
|||
:rules="formRules" |
|||
label-width="100px" |
|||
v-loading="formLoading" |
|||
> |
|||
<el-row> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="货币" prop="currency"> |
|||
<el-input v-model="formData.currency" placeholder="请输入货币" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="基础货币" prop="basiccurrency"> |
|||
<el-input v-model="formData.basiccurrency" placeholder="请输入基础货币" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="比率" prop="rate"> |
|||
<el-input v-model="formData.rate" placeholder="请输入比率" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select v-model="formData.available" placeholder="请选择是否可用"> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="formData.activeTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择生效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="formData.expireTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择失效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input v-model="formData.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<template #footer> |
|||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> |
|||
<el-button @click="dialogVisible = false">取 消</el-button> |
|||
</template> |
|||
</Dialog> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' |
|||
import * as CurrencyexchangeApi from '@/api/wms/currencyexchange' |
|||
|
|||
const { t } = useI18n() // 国际化 |
|||
const message = useMessage() // 消息弹窗 |
|||
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示 |
|||
const dialogTitle = ref('') // 弹窗的标题 |
|||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改 |
|||
const formData = ref({ |
|||
currency: undefined, |
|||
basiccurrency: undefined, |
|||
rate: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
}) |
|||
const formRules = reactive({ |
|||
currency: [{ required: true, message: '货币不能为空', trigger: 'blur' }], |
|||
basiccurrency: [{ required: true, message: '基础货币不能为空', trigger: 'blur' }], |
|||
rate: [{ required: true, message: '比率不能为空', trigger: 'blur' }], |
|||
available: [{ required: true, message: '是否可用不能为空', trigger: 'change' }] |
|||
}) |
|||
const formRef = ref() // 表单 Ref |
|||
|
|||
/** 打开弹窗 */ |
|||
const open = async (type: string, id?: number) => { |
|||
dialogVisible.value = true |
|||
dialogTitle.value = t('action.' + type) |
|||
formType.value = type |
|||
resetForm() |
|||
// 修改时,设置数据 |
|||
if (id) { |
|||
formLoading.value = true |
|||
try { |
|||
formData.value = await CurrencyexchangeApi.getCurrencyexchange(id) |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
} |
|||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
|||
|
|||
/** 提交表单 */ |
|||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
|||
const submitForm = async () => { |
|||
// 校验表单 |
|||
if (!formRef) return |
|||
const valid = await formRef.value.validate() |
|||
if (!valid) return |
|||
// 提交请求 |
|||
formLoading.value = true |
|||
try { |
|||
const data = formData.value as unknown as CurrencyexchangeApi.CurrencyexchangeVO |
|||
if (formType.value === 'create') { |
|||
await CurrencyexchangeApi.createCurrencyexchange(data) |
|||
message.success(t('common.createSuccess')) |
|||
} else { |
|||
await CurrencyexchangeApi.updateCurrencyexchange(data) |
|||
message.success(t('common.updateSuccess')) |
|||
} |
|||
dialogVisible.value = false |
|||
// 发送操作成功的事件 |
|||
emit('success') |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 重置表单 */ |
|||
const resetForm = () => { |
|||
formData.value = { |
|||
currency: undefined, |
|||
basiccurrency: undefined, |
|||
rate: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
} |
|||
formRef.value?.resetFields() |
|||
} |
|||
</script> |
@ -0,0 +1,287 @@ |
|||
<template> |
|||
<ContentWrap> |
|||
<!-- 搜索工作栏 --> |
|||
<el-form |
|||
class="-mb-15px" |
|||
:model="queryParams" |
|||
ref="queryFormRef" |
|||
:inline="true" |
|||
label-width="68px" |
|||
> |
|||
<el-form-item label="货币" prop="currency"> |
|||
<el-input |
|||
v-model="queryParams.currency" |
|||
placeholder="请输入货币" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="基础货币" prop="basiccurrency"> |
|||
<el-input |
|||
v-model="queryParams.basiccurrency" |
|||
placeholder="请输入基础货币" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="比率" prop="rate"> |
|||
<el-input |
|||
v-model="queryParams.rate" |
|||
placeholder="请输入比率" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select |
|||
v-model="queryParams.available" |
|||
placeholder="请选择是否可用" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.activeTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.expireTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input |
|||
v-model="queryParams.remark" |
|||
placeholder="请输入备注" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建时间" prop="createTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.createTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建者ID" prop="creator"> |
|||
<el-input |
|||
v-model="queryParams.creator" |
|||
placeholder="请输入创建者ID" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="info" plain @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> |
|||
<el-button type="info" plain @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> |
|||
<el-button |
|||
type="primary" |
|||
@click="openForm('create')" |
|||
v-hasPermi="['wms:currencyexchange:create']" |
|||
> |
|||
<Icon icon="ep:plus" class="mr-5px" /> 新增 |
|||
</el-button> |
|||
<el-button |
|||
type="success" |
|||
@click="handleExport" |
|||
:loading="exportLoading" |
|||
v-hasPermi="['wms:currencyexchange:export']" |
|||
> |
|||
<Icon icon="ep:download" class="mr-5px" /> 导出 |
|||
</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</ContentWrap> |
|||
|
|||
<!-- 列表 --> |
|||
<ContentWrap> |
|||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> |
|||
<el-table-column label="货币" align="center" prop="currency" width="150px" /> |
|||
<el-table-column label="基础货币" align="center" prop="basiccurrency" width="150px" /> |
|||
<el-table-column label="比率" align="center" prop="rate" width="150px" /> |
|||
<el-table-column label="是否可用" align="center" prop="available" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.TRUE_FALSE" :value="scope.row.available" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
label="生效时间" |
|||
align="center" |
|||
prop="activeTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column |
|||
label="失效时间" |
|||
align="center" |
|||
prop="expireTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="备注" align="center" prop="remark" width="150px" /> |
|||
<el-table-column |
|||
label="创建时间" |
|||
align="center" |
|||
prop="createTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="创建者ID" align="center" prop="creator" width="150px" /> |
|||
<el-table-column label="操作" align="center" width="150px" fixed="right"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
link |
|||
type="primary" |
|||
@click="openForm('update', scope.row.id)" |
|||
v-hasPermi="['wms:currencyexchange:update']" |
|||
> |
|||
编辑 |
|||
</el-button> |
|||
<el-button |
|||
link |
|||
type="danger" |
|||
@click="handleDelete(scope.row.id)" |
|||
v-hasPermi="['wms:currencyexchange:delete']" |
|||
> |
|||
删除 |
|||
</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 分页 --> |
|||
<Pagination |
|||
:total="total" |
|||
v-model:page="queryParams.pageNo" |
|||
v-model:limit="queryParams.pageSize" |
|||
@pagination="getList" |
|||
/> |
|||
</ContentWrap> |
|||
|
|||
<!-- 表单弹窗:添加/修改 --> |
|||
<CurrencyexchangeForm ref="formRef" @success="getList" /> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' |
|||
import { dateFormatter } from '@/utils/formatTime' |
|||
import download from '@/utils/download' |
|||
import * as CurrencyexchangeApi from '@/api/wms/currencyexchange' |
|||
import CurrencyexchangeForm from './CurrencyexchangeForm.vue' |
|||
|
|||
defineOptions({ name: 'Currencyexchange' }) |
|||
|
|||
const message = useMessage() // 消息弹窗 |
|||
const { t } = useI18n() // 国际化 |
|||
|
|||
const loading = ref(true) // 列表的加载中 |
|||
const total = ref(0) // 列表的总页数 |
|||
const list = ref([]) // 列表的数据 |
|||
const queryParams = reactive({ |
|||
pageNo: 1, |
|||
pageSize: 10, |
|||
currency: null, |
|||
basiccurrency: null, |
|||
rate: null, |
|||
available: null, |
|||
activeTime: [], |
|||
expireTime: [], |
|||
remark: null, |
|||
createTime: [], |
|||
creator: null |
|||
}) |
|||
const queryFormRef = ref() // 搜索的表单 |
|||
const exportLoading = ref(false) // 导出的加载中 |
|||
|
|||
/** 查询列表 */ |
|||
const getList = async () => { |
|||
loading.value = true |
|||
try { |
|||
const data = await CurrencyexchangeApi.getCurrencyexchangePage(queryParams) |
|||
list.value = data.list |
|||
total.value = data.total |
|||
} finally { |
|||
loading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 搜索按钮操作 */ |
|||
const handleQuery = () => { |
|||
queryParams.pageNo = 1 |
|||
getList() |
|||
} |
|||
|
|||
/** 重置按钮操作 */ |
|||
const resetQuery = () => { |
|||
queryFormRef.value.resetFields() |
|||
handleQuery() |
|||
} |
|||
|
|||
/** 添加/修改操作 */ |
|||
const formRef = ref() |
|||
const openForm = (type: string, id?: number) => { |
|||
formRef.value.open(type, id) |
|||
} |
|||
|
|||
/** 删除按钮操作 */ |
|||
const handleDelete = async (id: number) => { |
|||
try { |
|||
// 删除的二次确认 |
|||
await message.delConfirm() |
|||
// 发起删除 |
|||
await CurrencyexchangeApi.deleteCurrencyexchange(id) |
|||
message.success(t('common.delSuccess')) |
|||
// 刷新列表 |
|||
await getList() |
|||
} catch {} |
|||
} |
|||
|
|||
/** 导出按钮操作 */ |
|||
const handleExport = async () => { |
|||
try { |
|||
// 导出的二次确认 |
|||
await message.exportConfirm() |
|||
// 发起导出 |
|||
exportLoading.value = true |
|||
const data = await CurrencyexchangeApi.exportCurrencyexchange(queryParams) |
|||
download.excel(data, '货币转换.xls') |
|||
} catch { |
|||
} finally { |
|||
exportLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 初始化 **/ |
|||
onMounted(() => { |
|||
getList() |
|||
}) |
|||
</script> |
@ -0,0 +1,261 @@ |
|||
<template> |
|||
<Dialog :title="dialogTitle" v-model="dialogVisible"> |
|||
<div class="p-20px m--10px" style="max-height: 600px;overflow-y: auto;"> |
|||
<el-form |
|||
ref="formRef" |
|||
:model="formData" |
|||
:rules="formRules" |
|||
label-width="100px" |
|||
v-loading="formLoading" |
|||
> |
|||
<el-row> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="代码" prop="code"> |
|||
<el-input v-model="formData.code" placeholder="请输入代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input v-model="formData.name" placeholder="请输入名称" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="简称" prop="shortName"> |
|||
<el-input v-model="formData.shortName" placeholder="请输入简称" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="地址" prop="address"> |
|||
<el-input v-model="formData.address" placeholder="请输入地址" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="国家" prop="country"> |
|||
<el-input v-model="formData.country" placeholder="请输入国家" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="城市" prop="city"> |
|||
<el-input v-model="formData.city" placeholder="请输入城市" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="电话" prop="phone"> |
|||
<el-input v-model="formData.phone" placeholder="请输入电话" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="传真" prop="fax"> |
|||
<el-input v-model="formData.fax" placeholder="请输入传真" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="邮编" prop="postId"> |
|||
<el-input v-model="formData.postId" placeholder="请输入邮编" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="联系人" prop="contacts"> |
|||
<el-input v-model="formData.contacts" placeholder="请输入联系人" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="银行" prop="bank"> |
|||
<el-input v-model="formData.bank" placeholder="请输入银行" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="币种" prop="currency"> |
|||
<el-select v-model="formData.currency" placeholder="请选择币种"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.CURRENCY)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="税率" prop="taxRate"> |
|||
<el-input v-model="formData.taxRate" placeholder="请输入税率" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="类型" prop="type"> |
|||
<el-select v-model="formData.type" placeholder="请选择类型"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.CUSTOMER_TYPE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select v-model="formData.available" placeholder="请选择是否可用"> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="formData.activeTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择生效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="formData.expireTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择失效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input v-model="formData.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<template #footer> |
|||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> |
|||
<el-button @click="dialogVisible = false">取 消</el-button> |
|||
</template> |
|||
</Dialog> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import * as CustomerApi from '@/api/wms/customer' |
|||
|
|||
const { t } = useI18n() // 国际化 |
|||
const message = useMessage() // 消息弹窗 |
|||
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示 |
|||
const dialogTitle = ref('') // 弹窗的标题 |
|||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改 |
|||
const formData = ref({ |
|||
code: undefined, |
|||
name: undefined, |
|||
shortName: undefined, |
|||
address: undefined, |
|||
country: undefined, |
|||
city: undefined, |
|||
phone: undefined, |
|||
fax: undefined, |
|||
postId: undefined, |
|||
contacts: undefined, |
|||
bank: undefined, |
|||
currency: undefined, |
|||
taxRate: undefined, |
|||
type: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
}) |
|||
const formRules = reactive({ |
|||
code: [{ required: true, message: '代码不能为空', trigger: 'blur' }], |
|||
shortName: [{ required: true, message: '简称不能为空', trigger: 'blur' }], |
|||
available: [{ required: true, message: '是否可用不能为空', trigger: 'change' }] |
|||
}) |
|||
const formRef = ref() // 表单 Ref |
|||
|
|||
/** 打开弹窗 */ |
|||
const open = async (type: string, id?: number) => { |
|||
dialogVisible.value = true |
|||
dialogTitle.value = t('action.' + type) |
|||
formType.value = type |
|||
resetForm() |
|||
// 修改时,设置数据 |
|||
if (id) { |
|||
formLoading.value = true |
|||
try { |
|||
formData.value = await CustomerApi.getCustomer(id) |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
} |
|||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
|||
|
|||
/** 提交表单 */ |
|||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
|||
const submitForm = async () => { |
|||
// 校验表单 |
|||
if (!formRef) return |
|||
const valid = await formRef.value.validate() |
|||
if (!valid) return |
|||
// 提交请求 |
|||
formLoading.value = true |
|||
try { |
|||
const data = formData.value as unknown as CustomerApi.CustomerVO |
|||
if (formType.value === 'create') { |
|||
await CustomerApi.createCustomer(data) |
|||
message.success(t('common.createSuccess')) |
|||
} else { |
|||
await CustomerApi.updateCustomer(data) |
|||
message.success(t('common.updateSuccess')) |
|||
} |
|||
dialogVisible.value = false |
|||
// 发送操作成功的事件 |
|||
emit('success') |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 重置表单 */ |
|||
const resetForm = () => { |
|||
formData.value = { |
|||
code: undefined, |
|||
name: undefined, |
|||
shortName: undefined, |
|||
address: undefined, |
|||
country: undefined, |
|||
city: undefined, |
|||
phone: undefined, |
|||
fax: undefined, |
|||
postId: undefined, |
|||
contacts: undefined, |
|||
bank: undefined, |
|||
currency: undefined, |
|||
taxRate: undefined, |
|||
type: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
} |
|||
formRef.value?.resetFields() |
|||
} |
|||
</script> |
@ -0,0 +1,419 @@ |
|||
<template> |
|||
<ContentWrap> |
|||
<!-- 搜索工作栏 --> |
|||
<el-form |
|||
class="-mb-15px" |
|||
:model="queryParams" |
|||
ref="queryFormRef" |
|||
:inline="true" |
|||
label-width="68px" |
|||
> |
|||
<el-form-item label="代码" prop="code"> |
|||
<el-input |
|||
v-model="queryParams.code" |
|||
placeholder="请输入代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input |
|||
v-model="queryParams.name" |
|||
placeholder="请输入名称" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="简称" prop="shortName"> |
|||
<el-input |
|||
v-model="queryParams.shortName" |
|||
placeholder="请输入简称" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="地址" prop="address"> |
|||
<el-input |
|||
v-model="queryParams.address" |
|||
placeholder="请输入地址" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="国家" prop="country"> |
|||
<el-input |
|||
v-model="queryParams.country" |
|||
placeholder="请输入国家" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="城市" prop="city"> |
|||
<el-input |
|||
v-model="queryParams.city" |
|||
placeholder="请输入城市" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="电话" prop="phone"> |
|||
<el-input |
|||
v-model="queryParams.phone" |
|||
placeholder="请输入电话" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="传真" prop="fax"> |
|||
<el-input |
|||
v-model="queryParams.fax" |
|||
placeholder="请输入传真" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="邮编" prop="postId"> |
|||
<el-input |
|||
v-model="queryParams.postId" |
|||
placeholder="请输入邮编" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="联系人" prop="contacts"> |
|||
<el-input |
|||
v-model="queryParams.contacts" |
|||
placeholder="请输入联系人" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="银行" prop="bank"> |
|||
<el-input |
|||
v-model="queryParams.bank" |
|||
placeholder="请输入银行" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="币种" prop="currency"> |
|||
<el-select |
|||
v-model="queryParams.currency" |
|||
placeholder="请选择币种" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.CURRENCY)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="税率" prop="taxRate"> |
|||
<el-input |
|||
v-model="queryParams.taxRate" |
|||
placeholder="请输入税率" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="类型" prop="type"> |
|||
<el-select v-model="queryParams.type" placeholder="请选择类型" clearable class="!w-240px"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.CUSTOMER_TYPE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select |
|||
v-model="queryParams.available" |
|||
placeholder="请选择是否可用" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.activeTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.expireTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input |
|||
v-model="queryParams.remark" |
|||
placeholder="请输入备注" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建时间" prop="createTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.createTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建者ID" prop="creator"> |
|||
<el-input |
|||
v-model="queryParams.creator" |
|||
placeholder="请输入创建者ID" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="info" plain @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> |
|||
<el-button type="info" plain @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> |
|||
<el-button type="primary" @click="openForm('create')" v-hasPermi="['wms:customer:create']"> |
|||
<Icon icon="ep:plus" class="mr-5px" /> 新增 |
|||
</el-button> |
|||
<el-button |
|||
type="success" |
|||
@click="handleExport" |
|||
:loading="exportLoading" |
|||
v-hasPermi="['wms:customer:export']" |
|||
> |
|||
<Icon icon="ep:download" class="mr-5px" /> 导出 |
|||
</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</ContentWrap> |
|||
|
|||
<!-- 列表 --> |
|||
<ContentWrap> |
|||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> |
|||
<el-table-column label="代码" align="center" prop="code" width="150px" /> |
|||
<el-table-column label="名称" align="center" prop="name" width="150px" /> |
|||
<el-table-column label="简称" align="center" prop="shortName" width="150px" /> |
|||
<el-table-column label="地址" align="center" prop="address" width="150px" /> |
|||
<el-table-column label="国家" align="center" prop="country" width="150px" /> |
|||
<el-table-column label="城市" align="center" prop="city" width="150px" /> |
|||
<el-table-column label="电话" align="center" prop="phone" width="150px" /> |
|||
<el-table-column label="传真" align="center" prop="fax" width="150px" /> |
|||
<el-table-column label="邮编" align="center" prop="postId" width="150px" /> |
|||
<el-table-column label="联系人" align="center" prop="contacts" width="150px" /> |
|||
<el-table-column label="银行" align="center" prop="bank" width="150px" /> |
|||
<el-table-column label="币种" align="center" prop="currency" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.CURRENCY" :value="scope.row.currency" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="税率" align="center" prop="taxRate" width="150px" /> |
|||
<el-table-column label="类型" align="center" prop="type" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.CUSTOMER_TYPE" :value="scope.row.type" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="是否可用" align="center" prop="available" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.TRUE_FALSE" :value="scope.row.available" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
label="生效时间" |
|||
align="center" |
|||
prop="activeTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column |
|||
label="失效时间" |
|||
align="center" |
|||
prop="expireTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="备注" align="center" prop="remark" width="150px" /> |
|||
<el-table-column |
|||
label="创建时间" |
|||
align="center" |
|||
prop="createTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="创建者ID" align="center" prop="creator" width="150px" /> |
|||
<el-table-column label="操作" align="center" width="150px" fixed="right"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
link |
|||
type="primary" |
|||
@click="openForm('update', scope.row.id)" |
|||
v-hasPermi="['wms:customer:update']" |
|||
> |
|||
编辑 |
|||
</el-button> |
|||
<el-button |
|||
link |
|||
type="danger" |
|||
@click="handleDelete(scope.row.id)" |
|||
v-hasPermi="['wms:customer:delete']" |
|||
> |
|||
删除 |
|||
</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 分页 --> |
|||
<Pagination |
|||
:total="total" |
|||
v-model:page="queryParams.pageNo" |
|||
v-model:limit="queryParams.pageSize" |
|||
@pagination="getList" |
|||
/> |
|||
</ContentWrap> |
|||
|
|||
<!-- 表单弹窗:添加/修改 --> |
|||
<CustomerForm ref="formRef" @success="getList" /> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import { dateFormatter } from '@/utils/formatTime' |
|||
import download from '@/utils/download' |
|||
import * as CustomerApi from '@/api/wms/customer' |
|||
import CustomerForm from './CustomerForm.vue' |
|||
|
|||
defineOptions({ name: 'Customer' }) |
|||
|
|||
const message = useMessage() // 消息弹窗 |
|||
const { t } = useI18n() // 国际化 |
|||
|
|||
const loading = ref(true) // 列表的加载中 |
|||
const total = ref(0) // 列表的总页数 |
|||
const list = ref([]) // 列表的数据 |
|||
const queryParams = reactive({ |
|||
pageNo: 1, |
|||
pageSize: 10, |
|||
code: null, |
|||
name: null, |
|||
shortName: null, |
|||
address: null, |
|||
country: null, |
|||
city: null, |
|||
phone: null, |
|||
fax: null, |
|||
postId: null, |
|||
contacts: null, |
|||
bank: null, |
|||
currency: null, |
|||
taxRate: null, |
|||
type: null, |
|||
available: null, |
|||
activeTime: [], |
|||
expireTime: [], |
|||
remark: null, |
|||
createTime: [], |
|||
creator: null |
|||
}) |
|||
const queryFormRef = ref() // 搜索的表单 |
|||
const exportLoading = ref(false) // 导出的加载中 |
|||
|
|||
/** 查询列表 */ |
|||
const getList = async () => { |
|||
loading.value = true |
|||
try { |
|||
const data = await CustomerApi.getCustomerPage(queryParams) |
|||
list.value = data.list |
|||
total.value = data.total |
|||
} finally { |
|||
loading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 搜索按钮操作 */ |
|||
const handleQuery = () => { |
|||
queryParams.pageNo = 1 |
|||
getList() |
|||
} |
|||
|
|||
/** 重置按钮操作 */ |
|||
const resetQuery = () => { |
|||
queryFormRef.value.resetFields() |
|||
handleQuery() |
|||
} |
|||
|
|||
/** 添加/修改操作 */ |
|||
const formRef = ref() |
|||
const openForm = (type: string, id?: number) => { |
|||
formRef.value.open(type, id) |
|||
} |
|||
|
|||
/** 删除按钮操作 */ |
|||
const handleDelete = async (id: number) => { |
|||
try { |
|||
// 删除的二次确认 |
|||
await message.delConfirm() |
|||
// 发起删除 |
|||
await CustomerApi.deleteCustomer(id) |
|||
message.success(t('common.delSuccess')) |
|||
// 刷新列表 |
|||
await getList() |
|||
} catch {} |
|||
} |
|||
|
|||
/** 导出按钮操作 */ |
|||
const handleExport = async () => { |
|||
try { |
|||
// 导出的二次确认 |
|||
await message.exportConfirm() |
|||
// 发起导出 |
|||
exportLoading.value = true |
|||
const data = await CustomerApi.exportCustomer(queryParams) |
|||
download.excel(data, '客户.xls') |
|||
} catch { |
|||
} finally { |
|||
exportLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 初始化 **/ |
|||
onMounted(() => { |
|||
getList() |
|||
}) |
|||
</script> |
@ -0,0 +1,217 @@ |
|||
<template> |
|||
<Dialog :title="dialogTitle" v-model="dialogVisible"> |
|||
<div class="p-20px m--10px" style="max-height: 600px;overflow-y: auto;"> |
|||
<el-form |
|||
ref="formRef" |
|||
:model="formData" |
|||
:rules="formRules" |
|||
label-width="100px" |
|||
v-loading="formLoading" |
|||
> |
|||
<el-row> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="代码" prop="code"> |
|||
<el-input v-model="formData.code" placeholder="请输入代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input v-model="formData.name" placeholder="请输入名称" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="描述"> |
|||
<Editor v-model="formData.description" height="150px" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="城市" prop="city"> |
|||
<el-input v-model="formData.city" placeholder="请输入城市" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="地址" prop="address"> |
|||
<el-input v-model="formData.address" placeholder="请输入地址" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="联系人姓名" prop="contactPerson"> |
|||
<el-input v-model="formData.contactPerson" placeholder="请输入联系人姓名" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="联系人电话" prop="contactPhone"> |
|||
<el-input v-model="formData.contactPhone" placeholder="请输入联系人电话" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="客户代码" prop="customerCode"> |
|||
<el-input v-model="formData.customerCode" placeholder="请输入客户代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="仓库" prop="warehouseCode"> |
|||
<el-input v-model="formData.warehouseCode" placeholder="请输入仓库" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="默认库位" prop="defaultLocationCode"> |
|||
<el-input v-model="formData.defaultLocationCode" placeholder="请输入默认库位" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select v-model="formData.available" placeholder="请选择是否可用"> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="formData.activeTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择生效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="formData.expireTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择失效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input v-model="formData.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<template #footer> |
|||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> |
|||
<el-button @click="dialogVisible = false">取 消</el-button> |
|||
</template> |
|||
</Dialog> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' |
|||
import * as CustomerdockApi from '@/api/wms/customerdock' |
|||
|
|||
const { t } = useI18n() // 国际化 |
|||
const message = useMessage() // 消息弹窗 |
|||
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示 |
|||
const dialogTitle = ref('') // 弹窗的标题 |
|||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改 |
|||
const formData = ref({ |
|||
code: undefined, |
|||
name: undefined, |
|||
description: undefined, |
|||
city: undefined, |
|||
address: undefined, |
|||
contactPerson: undefined, |
|||
contactPhone: undefined, |
|||
customerCode: undefined, |
|||
warehouseCode: undefined, |
|||
defaultLocationCode: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
}) |
|||
const formRules = reactive({ |
|||
code: [{ required: true, message: '代码不能为空', trigger: 'blur' }], |
|||
customerCode: [{ required: true, message: '客户代码不能为空', trigger: 'blur' }], |
|||
defaultLocationCode: [{ required: true, message: '默认库位不能为空', trigger: 'blur' }], |
|||
available: [{ required: true, message: '是否可用不能为空', trigger: 'change' }] |
|||
}) |
|||
const formRef = ref() // 表单 Ref |
|||
|
|||
/** 打开弹窗 */ |
|||
const open = async (type: string, id?: number) => { |
|||
dialogVisible.value = true |
|||
dialogTitle.value = t('action.' + type) |
|||
formType.value = type |
|||
resetForm() |
|||
// 修改时,设置数据 |
|||
if (id) { |
|||
formLoading.value = true |
|||
try { |
|||
formData.value = await CustomerdockApi.getCustomerdock(id) |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
} |
|||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
|||
|
|||
/** 提交表单 */ |
|||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
|||
const submitForm = async () => { |
|||
// 校验表单 |
|||
if (!formRef) return |
|||
const valid = await formRef.value.validate() |
|||
if (!valid) return |
|||
// 提交请求 |
|||
formLoading.value = true |
|||
try { |
|||
const data = formData.value as unknown as CustomerdockApi.CustomerdockVO |
|||
if (formType.value === 'create') { |
|||
await CustomerdockApi.createCustomerdock(data) |
|||
message.success(t('common.createSuccess')) |
|||
} else { |
|||
await CustomerdockApi.updateCustomerdock(data) |
|||
message.success(t('common.updateSuccess')) |
|||
} |
|||
dialogVisible.value = false |
|||
// 发送操作成功的事件 |
|||
emit('success') |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 重置表单 */ |
|||
const resetForm = () => { |
|||
formData.value = { |
|||
code: undefined, |
|||
name: undefined, |
|||
description: undefined, |
|||
city: undefined, |
|||
address: undefined, |
|||
contactPerson: undefined, |
|||
contactPhone: undefined, |
|||
customerCode: undefined, |
|||
warehouseCode: undefined, |
|||
defaultLocationCode: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
} |
|||
formRef.value?.resetFields() |
|||
} |
|||
</script> |
@ -0,0 +1,355 @@ |
|||
<template> |
|||
<ContentWrap> |
|||
<!-- 搜索工作栏 --> |
|||
<el-form |
|||
class="-mb-15px" |
|||
:model="queryParams" |
|||
ref="queryFormRef" |
|||
:inline="true" |
|||
label-width="68px" |
|||
> |
|||
<el-form-item label="代码" prop="code"> |
|||
<el-input |
|||
v-model="queryParams.code" |
|||
placeholder="请输入代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input |
|||
v-model="queryParams.name" |
|||
placeholder="请输入名称" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="城市" prop="city"> |
|||
<el-input |
|||
v-model="queryParams.city" |
|||
placeholder="请输入城市" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="地址" prop="address"> |
|||
<el-input |
|||
v-model="queryParams.address" |
|||
placeholder="请输入地址" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="联系人姓名" prop="contactPerson"> |
|||
<el-input |
|||
v-model="queryParams.contactPerson" |
|||
placeholder="请输入联系人姓名" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="联系人电话" prop="contactPhone"> |
|||
<el-input |
|||
v-model="queryParams.contactPhone" |
|||
placeholder="请输入联系人电话" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="客户代码" prop="customerCode"> |
|||
<el-input |
|||
v-model="queryParams.customerCode" |
|||
placeholder="请输入客户代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="仓库" prop="warehouseCode"> |
|||
<el-input |
|||
v-model="queryParams.warehouseCode" |
|||
placeholder="请输入仓库" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="默认库位" prop="defaultLocationCode"> |
|||
<el-input |
|||
v-model="queryParams.defaultLocationCode" |
|||
placeholder="请输入默认库位" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select |
|||
v-model="queryParams.available" |
|||
placeholder="请选择是否可用" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.activeTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.expireTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input |
|||
v-model="queryParams.remark" |
|||
placeholder="请输入备注" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建时间" prop="createTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.createTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建者ID" prop="creator"> |
|||
<el-input |
|||
v-model="queryParams.creator" |
|||
placeholder="请输入创建者ID" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="info" plain @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> |
|||
<el-button type="info" plain @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> |
|||
<el-button |
|||
type="primary" |
|||
@click="openForm('create')" |
|||
v-hasPermi="['wms:customerdock:create']" |
|||
> |
|||
<Icon icon="ep:plus" class="mr-5px" /> 新增 |
|||
</el-button> |
|||
<el-button |
|||
type="success" |
|||
@click="handleExport" |
|||
:loading="exportLoading" |
|||
v-hasPermi="['wms:customerdock:export']" |
|||
> |
|||
<Icon icon="ep:download" class="mr-5px" /> 导出 |
|||
</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</ContentWrap> |
|||
|
|||
<!-- 列表 --> |
|||
<ContentWrap> |
|||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> |
|||
<el-table-column label="代码" align="center" prop="code" width="150px" /> |
|||
<el-table-column label="名称" align="center" prop="name" width="150px" /> |
|||
<el-table-column label="描述" align="center" prop="description" width="150px" /> |
|||
<el-table-column label="城市" align="center" prop="city" width="150px" /> |
|||
<el-table-column label="地址" align="center" prop="address" width="150px" /> |
|||
<el-table-column label="联系人姓名" align="center" prop="contactPerson" width="150px" /> |
|||
<el-table-column label="联系人电话" align="center" prop="contactPhone" width="150px" /> |
|||
<el-table-column label="客户代码" align="center" prop="customerCode" width="150px" /> |
|||
<el-table-column label="仓库" align="center" prop="warehouseCode" width="150px" /> |
|||
<el-table-column label="默认库位" align="center" prop="defaultLocationCode" width="150px" /> |
|||
<el-table-column label="是否可用" align="center" prop="available" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.TRUE_FALSE" :value="scope.row.available" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
label="生效时间" |
|||
align="center" |
|||
prop="activeTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column |
|||
label="失效时间" |
|||
align="center" |
|||
prop="expireTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="备注" align="center" prop="remark" width="150px" /> |
|||
<el-table-column |
|||
label="创建时间" |
|||
align="center" |
|||
prop="createTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="创建者ID" align="center" prop="creator" width="150px" /> |
|||
<el-table-column label="操作" align="center" width="150px" fixed="right"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
link |
|||
type="primary" |
|||
@click="openForm('update', scope.row.id)" |
|||
v-hasPermi="['wms:customerdock:update']" |
|||
> |
|||
编辑 |
|||
</el-button> |
|||
<el-button |
|||
link |
|||
type="danger" |
|||
@click="handleDelete(scope.row.id)" |
|||
v-hasPermi="['wms:customerdock:delete']" |
|||
> |
|||
删除 |
|||
</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 分页 --> |
|||
<Pagination |
|||
:total="total" |
|||
v-model:page="queryParams.pageNo" |
|||
v-model:limit="queryParams.pageSize" |
|||
@pagination="getList" |
|||
/> |
|||
</ContentWrap> |
|||
|
|||
<!-- 表单弹窗:添加/修改 --> |
|||
<CustomerdockForm ref="formRef" @success="getList" /> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' |
|||
import { dateFormatter } from '@/utils/formatTime' |
|||
import download from '@/utils/download' |
|||
import * as CustomerdockApi from '@/api/wms/customerdock' |
|||
import CustomerdockForm from './CustomerdockForm.vue' |
|||
|
|||
defineOptions({ name: 'Customerdock' }) |
|||
|
|||
const message = useMessage() // 消息弹窗 |
|||
const { t } = useI18n() // 国际化 |
|||
|
|||
const loading = ref(true) // 列表的加载中 |
|||
const total = ref(0) // 列表的总页数 |
|||
const list = ref([]) // 列表的数据 |
|||
const queryParams = reactive({ |
|||
pageNo: 1, |
|||
pageSize: 10, |
|||
code: null, |
|||
name: null, |
|||
description: null, |
|||
city: null, |
|||
address: null, |
|||
contactPerson: null, |
|||
contactPhone: null, |
|||
customerCode: null, |
|||
warehouseCode: null, |
|||
defaultLocationCode: null, |
|||
available: null, |
|||
activeTime: [], |
|||
expireTime: [], |
|||
remark: null, |
|||
createTime: [], |
|||
creator: null |
|||
}) |
|||
const queryFormRef = ref() // 搜索的表单 |
|||
const exportLoading = ref(false) // 导出的加载中 |
|||
|
|||
/** 查询列表 */ |
|||
const getList = async () => { |
|||
loading.value = true |
|||
try { |
|||
const data = await CustomerdockApi.getCustomerdockPage(queryParams) |
|||
list.value = data.list |
|||
total.value = data.total |
|||
} finally { |
|||
loading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 搜索按钮操作 */ |
|||
const handleQuery = () => { |
|||
queryParams.pageNo = 1 |
|||
getList() |
|||
} |
|||
|
|||
/** 重置按钮操作 */ |
|||
const resetQuery = () => { |
|||
queryFormRef.value.resetFields() |
|||
handleQuery() |
|||
} |
|||
|
|||
/** 添加/修改操作 */ |
|||
const formRef = ref() |
|||
const openForm = (type: string, id?: number) => { |
|||
formRef.value.open(type, id) |
|||
} |
|||
|
|||
/** 删除按钮操作 */ |
|||
const handleDelete = async (id: number) => { |
|||
try { |
|||
// 删除的二次确认 |
|||
await message.delConfirm() |
|||
// 发起删除 |
|||
await CustomerdockApi.deleteCustomerdock(id) |
|||
message.success(t('common.delSuccess')) |
|||
// 刷新列表 |
|||
await getList() |
|||
} catch {} |
|||
} |
|||
|
|||
/** 导出按钮操作 */ |
|||
const handleExport = async () => { |
|||
try { |
|||
// 导出的二次确认 |
|||
await message.exportConfirm() |
|||
// 发起导出 |
|||
exportLoading.value = true |
|||
const data = await CustomerdockApi.exportCustomerdock(queryParams) |
|||
download.excel(data, '客户月台.xls') |
|||
} catch { |
|||
} finally { |
|||
exportLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 初始化 **/ |
|||
onMounted(() => { |
|||
getList() |
|||
}) |
|||
</script> |
@ -0,0 +1,238 @@ |
|||
<template> |
|||
<Dialog :title="dialogTitle" v-model="dialogVisible"> |
|||
<div class="p-20px m--10px" style="max-height: 600px;overflow-y: auto;"> |
|||
<el-form |
|||
ref="formRef" |
|||
:model="formData" |
|||
:rules="formRules" |
|||
label-width="100px" |
|||
v-loading="formLoading" |
|||
> |
|||
<el-row> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="客户代码" prop="customerCode"> |
|||
<el-input v-model="formData.customerCode" placeholder="请输入客户代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="物料代码" prop="itemCode"> |
|||
<el-input v-model="formData.itemCode" placeholder="请输入物料代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="客户物料代码" prop="customerItemCode"> |
|||
<el-input v-model="formData.customerItemCode" placeholder="请输入客户物料代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="客户计量单位" prop="cusotmerUom"> |
|||
<el-select v-model="formData.cusotmerUom" placeholder="请选择客户计量单位"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.UOM)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="转换率" prop="convertRate"> |
|||
<el-input v-model="formData.convertRate" placeholder="请输入转换率" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="客户包装单位" prop="packUnit"> |
|||
<el-select v-model="formData.packUnit" placeholder="请选择客户包装单位"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.PACK_UNIT)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="客户包装量" prop="packQty"> |
|||
<el-input v-model="formData.packQty" placeholder="请输入客户包装量" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="客户替代包装单位" prop="altPackUnit"> |
|||
<el-select v-model="formData.altPackUnit" placeholder="请选择客户替代包装单位"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.PACK_UNIT)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="客户替代包装量" prop="altPackQty"> |
|||
<el-input v-model="formData.altPackQty" placeholder="请输入客户替代包装量" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="每器具包装数" prop="packQtyOfContainer"> |
|||
<el-input v-model="formData.packQtyOfContainer" placeholder="请输入每器具包装数" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select v-model="formData.available" placeholder="请选择是否可用"> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="formData.activeTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择生效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="formData.expireTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择失效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input v-model="formData.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<template #footer> |
|||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> |
|||
<el-button @click="dialogVisible = false">取 消</el-button> |
|||
</template> |
|||
</Dialog> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import * as CustomeritemApi from '@/api/wms/customeritem' |
|||
|
|||
const { t } = useI18n() // 国际化 |
|||
const message = useMessage() // 消息弹窗 |
|||
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示 |
|||
const dialogTitle = ref('') // 弹窗的标题 |
|||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改 |
|||
const formData = ref({ |
|||
customerCode: undefined, |
|||
itemCode: undefined, |
|||
customerItemCode: undefined, |
|||
cusotmerUom: undefined, |
|||
convertRate: undefined, |
|||
packUnit: undefined, |
|||
packQty: undefined, |
|||
altPackUnit: undefined, |
|||
altPackQty: undefined, |
|||
packQtyOfContainer: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
}) |
|||
const formRules = reactive({ |
|||
customerCode: [{ required: true, message: '客户代码不能为空', trigger: 'blur' }], |
|||
itemCode: [{ required: true, message: '物料代码不能为空', trigger: 'blur' }], |
|||
packUnit: [{ required: true, message: '客户包装单位不能为空', trigger: 'change' }], |
|||
packQty: [{ required: true, message: '客户包装量不能为空', trigger: 'blur' }], |
|||
packQtyOfContainer: [{ required: true, message: '每器具包装数不能为空', trigger: 'blur' }], |
|||
available: [{ required: true, message: '是否可用不能为空', trigger: 'change' }] |
|||
}) |
|||
const formRef = ref() // 表单 Ref |
|||
|
|||
/** 打开弹窗 */ |
|||
const open = async (type: string, id?: number) => { |
|||
dialogVisible.value = true |
|||
dialogTitle.value = t('action.' + type) |
|||
formType.value = type |
|||
resetForm() |
|||
// 修改时,设置数据 |
|||
if (id) { |
|||
formLoading.value = true |
|||
try { |
|||
formData.value = await CustomeritemApi.getCustomeritem(id) |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
} |
|||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
|||
|
|||
/** 提交表单 */ |
|||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
|||
const submitForm = async () => { |
|||
// 校验表单 |
|||
if (!formRef) return |
|||
const valid = await formRef.value.validate() |
|||
if (!valid) return |
|||
// 提交请求 |
|||
formLoading.value = true |
|||
try { |
|||
const data = formData.value as unknown as CustomeritemApi.CustomeritemVO |
|||
if (formType.value === 'create') { |
|||
await CustomeritemApi.createCustomeritem(data) |
|||
message.success(t('common.createSuccess')) |
|||
} else { |
|||
await CustomeritemApi.updateCustomeritem(data) |
|||
message.success(t('common.updateSuccess')) |
|||
} |
|||
dialogVisible.value = false |
|||
// 发送操作成功的事件 |
|||
emit('success') |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 重置表单 */ |
|||
const resetForm = () => { |
|||
formData.value = { |
|||
customerCode: undefined, |
|||
itemCode: undefined, |
|||
customerItemCode: undefined, |
|||
cusotmerUom: undefined, |
|||
convertRate: undefined, |
|||
packUnit: undefined, |
|||
packQty: undefined, |
|||
altPackUnit: undefined, |
|||
altPackQty: undefined, |
|||
packQtyOfContainer: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
} |
|||
formRef.value?.resetFields() |
|||
} |
|||
</script> |
@ -0,0 +1,394 @@ |
|||
<template> |
|||
<ContentWrap> |
|||
<!-- 搜索工作栏 --> |
|||
<el-form |
|||
class="-mb-15px" |
|||
:model="queryParams" |
|||
ref="queryFormRef" |
|||
:inline="true" |
|||
label-width="68px" |
|||
> |
|||
<el-form-item label="客户代码" prop="customerCode"> |
|||
<el-input |
|||
v-model="queryParams.customerCode" |
|||
placeholder="请输入客户代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="物料代码" prop="itemCode"> |
|||
<el-input |
|||
v-model="queryParams.itemCode" |
|||
placeholder="请输入物料代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="客户物料代码" prop="customerItemCode"> |
|||
<el-input |
|||
v-model="queryParams.customerItemCode" |
|||
placeholder="请输入客户物料代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="客户计量单位" prop="cusotmerUom"> |
|||
<el-select |
|||
v-model="queryParams.cusotmerUom" |
|||
placeholder="请选择客户计量单位" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.UOM)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="转换率" prop="convertRate"> |
|||
<el-input |
|||
v-model="queryParams.convertRate" |
|||
placeholder="请输入转换率" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="客户包装单位" prop="packUnit"> |
|||
<el-select |
|||
v-model="queryParams.packUnit" |
|||
placeholder="请选择客户包装单位" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.PACK_UNIT)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="客户包装量" prop="packQty"> |
|||
<el-input |
|||
v-model="queryParams.packQty" |
|||
placeholder="请输入客户包装量" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="客户替代包装单位" prop="altPackUnit"> |
|||
<el-select |
|||
v-model="queryParams.altPackUnit" |
|||
placeholder="请选择客户替代包装单位" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.PACK_UNIT)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="客户替代包装量" prop="altPackQty"> |
|||
<el-input |
|||
v-model="queryParams.altPackQty" |
|||
placeholder="请输入客户替代包装量" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="每器具包装数" prop="packQtyOfContainer"> |
|||
<el-input |
|||
v-model="queryParams.packQtyOfContainer" |
|||
placeholder="请输入每器具包装数" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select |
|||
v-model="queryParams.available" |
|||
placeholder="请选择是否可用" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.activeTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.expireTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input |
|||
v-model="queryParams.remark" |
|||
placeholder="请输入备注" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建时间" prop="createTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.createTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建者ID" prop="creator"> |
|||
<el-input |
|||
v-model="queryParams.creator" |
|||
placeholder="请输入创建者ID" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="info" plain @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> |
|||
<el-button type="info" plain @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> |
|||
<el-button |
|||
type="primary" |
|||
@click="openForm('create')" |
|||
v-hasPermi="['wms:customeritem:create']" |
|||
> |
|||
<Icon icon="ep:plus" class="mr-5px" /> 新增 |
|||
</el-button> |
|||
<el-button |
|||
type="success" |
|||
@click="handleExport" |
|||
:loading="exportLoading" |
|||
v-hasPermi="['wms:customeritem:export']" |
|||
> |
|||
<Icon icon="ep:download" class="mr-5px" /> 导出 |
|||
</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</ContentWrap> |
|||
|
|||
<!-- 列表 --> |
|||
<ContentWrap> |
|||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> |
|||
<el-table-column label="客户代码" align="center" prop="customerCode" width="150px" /> |
|||
<el-table-column label="物料代码" align="center" prop="itemCode" width="150px" /> |
|||
<el-table-column label="客户物料代码" align="center" prop="customerItemCode" width="150px" /> |
|||
<el-table-column label="客户计量单位" align="center" prop="cusotmerUom" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.UOM" :value="scope.row.cusotmerUom" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="转换率" align="center" prop="convertRate" width="150px" /> |
|||
<el-table-column label="客户包装单位" align="center" prop="packUnit" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.PACK_UNIT" :value="scope.row.packUnit" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="客户包装量" align="center" prop="packQty" width="150px" /> |
|||
<el-table-column label="客户替代包装单位" align="center" prop="altPackUnit" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.PACK_UNIT" :value="scope.row.altPackUnit" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="客户替代包装量" align="center" prop="altPackQty" width="150px" /> |
|||
<el-table-column label="每器具包装数" align="center" prop="packQtyOfContainer" width="150px" /> |
|||
<el-table-column label="是否可用" align="center" prop="available" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.TRUE_FALSE" :value="scope.row.available" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
label="生效时间" |
|||
align="center" |
|||
prop="activeTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column |
|||
label="失效时间" |
|||
align="center" |
|||
prop="expireTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="备注" align="center" prop="remark" width="150px" /> |
|||
<el-table-column |
|||
label="创建时间" |
|||
align="center" |
|||
prop="createTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="创建者ID" align="center" prop="creator" width="150px" /> |
|||
<el-table-column label="操作" align="center" width="150px" fixed="right"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
link |
|||
type="primary" |
|||
@click="openForm('update', scope.row.id)" |
|||
v-hasPermi="['wms:customeritem:update']" |
|||
> |
|||
编辑 |
|||
</el-button> |
|||
<el-button |
|||
link |
|||
type="danger" |
|||
@click="handleDelete(scope.row.id)" |
|||
v-hasPermi="['wms:customeritem:delete']" |
|||
> |
|||
删除 |
|||
</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 分页 --> |
|||
<Pagination |
|||
:total="total" |
|||
v-model:page="queryParams.pageNo" |
|||
v-model:limit="queryParams.pageSize" |
|||
@pagination="getList" |
|||
/> |
|||
</ContentWrap> |
|||
|
|||
<!-- 表单弹窗:添加/修改 --> |
|||
<CustomeritemForm ref="formRef" @success="getList" /> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import { dateFormatter } from '@/utils/formatTime' |
|||
import download from '@/utils/download' |
|||
import * as CustomeritemApi from '@/api/wms/customeritem' |
|||
import CustomeritemForm from './CustomeritemForm.vue' |
|||
|
|||
defineOptions({ name: 'Customeritem' }) |
|||
|
|||
const message = useMessage() // 消息弹窗 |
|||
const { t } = useI18n() // 国际化 |
|||
|
|||
const loading = ref(true) // 列表的加载中 |
|||
const total = ref(0) // 列表的总页数 |
|||
const list = ref([]) // 列表的数据 |
|||
const queryParams = reactive({ |
|||
pageNo: 1, |
|||
pageSize: 10, |
|||
customerCode: null, |
|||
itemCode: null, |
|||
customerItemCode: null, |
|||
cusotmerUom: null, |
|||
convertRate: null, |
|||
packUnit: null, |
|||
packQty: null, |
|||
altPackUnit: null, |
|||
altPackQty: null, |
|||
packQtyOfContainer: null, |
|||
available: null, |
|||
activeTime: [], |
|||
expireTime: [], |
|||
remark: null, |
|||
createTime: [], |
|||
creator: null |
|||
}) |
|||
const queryFormRef = ref() // 搜索的表单 |
|||
const exportLoading = ref(false) // 导出的加载中 |
|||
|
|||
/** 查询列表 */ |
|||
const getList = async () => { |
|||
loading.value = true |
|||
try { |
|||
const data = await CustomeritemApi.getCustomeritemPage(queryParams) |
|||
list.value = data.list |
|||
total.value = data.total |
|||
} finally { |
|||
loading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 搜索按钮操作 */ |
|||
const handleQuery = () => { |
|||
queryParams.pageNo = 1 |
|||
getList() |
|||
} |
|||
|
|||
/** 重置按钮操作 */ |
|||
const resetQuery = () => { |
|||
queryFormRef.value.resetFields() |
|||
handleQuery() |
|||
} |
|||
|
|||
/** 添加/修改操作 */ |
|||
const formRef = ref() |
|||
const openForm = (type: string, id?: number) => { |
|||
formRef.value.open(type, id) |
|||
} |
|||
|
|||
/** 删除按钮操作 */ |
|||
const handleDelete = async (id: number) => { |
|||
try { |
|||
// 删除的二次确认 |
|||
await message.delConfirm() |
|||
// 发起删除 |
|||
await CustomeritemApi.deleteCustomeritem(id) |
|||
message.success(t('common.delSuccess')) |
|||
// 刷新列表 |
|||
await getList() |
|||
} catch {} |
|||
} |
|||
|
|||
/** 导出按钮操作 */ |
|||
const handleExport = async () => { |
|||
try { |
|||
// 导出的二次确认 |
|||
await message.exportConfirm() |
|||
// 发起导出 |
|||
exportLoading.value = true |
|||
const data = await CustomeritemApi.exportCustomeritem(queryParams) |
|||
download.excel(data, '客户物品.xls') |
|||
} catch { |
|||
} finally { |
|||
exportLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 初始化 **/ |
|||
onMounted(() => { |
|||
getList() |
|||
}) |
|||
</script> |
@ -0,0 +1,224 @@ |
|||
<template> |
|||
<Dialog :title="dialogTitle" v-model="dialogVisible"> |
|||
<div class="p-20px m--10px" style="max-height: 600px;overflow-y: auto;"> |
|||
<el-form |
|||
ref="formRef" |
|||
:model="formData" |
|||
:rules="formRules" |
|||
label-width="100px" |
|||
v-loading="formLoading" |
|||
> |
|||
<el-row> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="代码" prop="code"> |
|||
<el-input v-model="formData.code" placeholder="请输入代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input v-model="formData.name" placeholder="请输入名称" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="描述"> |
|||
<Editor v-model="formData.description" height="150px" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="城市" prop="city"> |
|||
<el-input v-model="formData.city" placeholder="请输入城市" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="地址" prop="address"> |
|||
<el-input v-model="formData.address" placeholder="请输入地址" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="类型" prop="type"> |
|||
<el-select v-model="formData.type" placeholder="请选择类型"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.DOCK_TYPE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="仓库代码" prop="warehouseCode"> |
|||
<el-input v-model="formData.warehouseCode" placeholder="请输入仓库代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="默认库位代码" prop="defaultLocationCode"> |
|||
<el-input v-model="formData.defaultLocationCode" placeholder="请输入默认库位代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="联系人姓名" prop="contactPerson"> |
|||
<el-input v-model="formData.contactPerson" placeholder="请输入联系人姓名" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="联系人电话" prop="contactPhone"> |
|||
<el-input v-model="formData.contactPhone" placeholder="请输入联系人电话" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select v-model="formData.available" placeholder="请选择是否可用"> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="formData.activeTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择生效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="formData.expireTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择失效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input v-model="formData.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<template #footer> |
|||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> |
|||
<el-button @click="dialogVisible = false">取 消</el-button> |
|||
</template> |
|||
</Dialog> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import * as DockApi from '@/api/wms/dock' |
|||
|
|||
const { t } = useI18n() // 国际化 |
|||
const message = useMessage() // 消息弹窗 |
|||
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示 |
|||
const dialogTitle = ref('') // 弹窗的标题 |
|||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改 |
|||
const formData = ref({ |
|||
code: undefined, |
|||
name: undefined, |
|||
description: undefined, |
|||
city: undefined, |
|||
address: undefined, |
|||
type: undefined, |
|||
warehouseCode: undefined, |
|||
defaultLocationCode: undefined, |
|||
contactPerson: undefined, |
|||
contactPhone: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
}) |
|||
const formRules = reactive({ |
|||
code: [{ required: true, message: '代码不能为空', trigger: 'blur' }], |
|||
type: [{ required: true, message: '类型不能为空', trigger: 'change' }], |
|||
warehouseCode: [{ required: true, message: '仓库代码不能为空', trigger: 'blur' }], |
|||
defaultLocationCode: [{ required: true, message: '默认库位代码不能为空', trigger: 'blur' }], |
|||
available: [{ required: true, message: '是否可用不能为空', trigger: 'change' }] |
|||
}) |
|||
const formRef = ref() // 表单 Ref |
|||
|
|||
/** 打开弹窗 */ |
|||
const open = async (type: string, id?: number) => { |
|||
dialogVisible.value = true |
|||
dialogTitle.value = t('action.' + type) |
|||
formType.value = type |
|||
resetForm() |
|||
// 修改时,设置数据 |
|||
if (id) { |
|||
formLoading.value = true |
|||
try { |
|||
formData.value = await DockApi.getDock(id) |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
} |
|||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
|||
|
|||
/** 提交表单 */ |
|||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
|||
const submitForm = async () => { |
|||
// 校验表单 |
|||
if (!formRef) return |
|||
const valid = await formRef.value.validate() |
|||
if (!valid) return |
|||
// 提交请求 |
|||
formLoading.value = true |
|||
try { |
|||
const data = formData.value as unknown as DockApi.DockVO |
|||
if (formType.value === 'create') { |
|||
await DockApi.createDock(data) |
|||
message.success(t('common.createSuccess')) |
|||
} else { |
|||
await DockApi.updateDock(data) |
|||
message.success(t('common.updateSuccess')) |
|||
} |
|||
dialogVisible.value = false |
|||
// 发送操作成功的事件 |
|||
emit('success') |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 重置表单 */ |
|||
const resetForm = () => { |
|||
formData.value = { |
|||
code: undefined, |
|||
name: undefined, |
|||
description: undefined, |
|||
city: undefined, |
|||
address: undefined, |
|||
type: undefined, |
|||
warehouseCode: undefined, |
|||
defaultLocationCode: undefined, |
|||
contactPerson: undefined, |
|||
contactPhone: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
} |
|||
formRef.value?.resetFields() |
|||
} |
|||
</script> |
@ -0,0 +1,356 @@ |
|||
<template> |
|||
<ContentWrap> |
|||
<!-- 搜索工作栏 --> |
|||
<el-form |
|||
class="-mb-15px" |
|||
:model="queryParams" |
|||
ref="queryFormRef" |
|||
:inline="true" |
|||
label-width="68px" |
|||
> |
|||
<el-form-item label="代码" prop="code"> |
|||
<el-input |
|||
v-model="queryParams.code" |
|||
placeholder="请输入代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input |
|||
v-model="queryParams.name" |
|||
placeholder="请输入名称" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="城市" prop="city"> |
|||
<el-input |
|||
v-model="queryParams.city" |
|||
placeholder="请输入城市" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="地址" prop="address"> |
|||
<el-input |
|||
v-model="queryParams.address" |
|||
placeholder="请输入地址" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="类型" prop="type"> |
|||
<el-select v-model="queryParams.type" placeholder="请选择类型" clearable class="!w-240px"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.DOCK_TYPE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="仓库代码" prop="warehouseCode"> |
|||
<el-input |
|||
v-model="queryParams.warehouseCode" |
|||
placeholder="请输入仓库代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="默认库位代码" prop="defaultLocationCode"> |
|||
<el-input |
|||
v-model="queryParams.defaultLocationCode" |
|||
placeholder="请输入默认库位代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="联系人姓名" prop="contactPerson"> |
|||
<el-input |
|||
v-model="queryParams.contactPerson" |
|||
placeholder="请输入联系人姓名" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="联系人电话" prop="contactPhone"> |
|||
<el-input |
|||
v-model="queryParams.contactPhone" |
|||
placeholder="请输入联系人电话" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select |
|||
v-model="queryParams.available" |
|||
placeholder="请选择是否可用" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.activeTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.expireTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input |
|||
v-model="queryParams.remark" |
|||
placeholder="请输入备注" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建时间" prop="createTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.createTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建者ID" prop="creator"> |
|||
<el-input |
|||
v-model="queryParams.creator" |
|||
placeholder="请输入创建者ID" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="info" plain @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> |
|||
<el-button type="info" plain @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> |
|||
<el-button type="primary" @click="openForm('create')" v-hasPermi="['wms:dock:create']"> |
|||
<Icon icon="ep:plus" class="mr-5px" /> 新增 |
|||
</el-button> |
|||
<el-button |
|||
type="success" |
|||
@click="handleExport" |
|||
:loading="exportLoading" |
|||
v-hasPermi="['wms:dock:export']" |
|||
> |
|||
<Icon icon="ep:download" class="mr-5px" /> 导出 |
|||
</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</ContentWrap> |
|||
|
|||
<!-- 列表 --> |
|||
<ContentWrap> |
|||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> |
|||
<el-table-column label="代码" align="center" prop="code" width="150px" /> |
|||
<el-table-column label="名称" align="center" prop="name" width="150px" /> |
|||
<el-table-column label="描述" align="center" prop="description" width="150px" /> |
|||
<el-table-column label="城市" align="center" prop="city" width="150px" /> |
|||
<el-table-column label="地址" align="center" prop="address" width="150px" /> |
|||
<el-table-column label="类型" align="center" prop="type" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.DOCK_TYPE" :value="scope.row.type" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="仓库代码" align="center" prop="warehouseCode" width="150px" /> |
|||
<el-table-column label="默认库位代码" align="center" prop="defaultLocationCode" width="150px" /> |
|||
<el-table-column label="联系人姓名" align="center" prop="contactPerson" width="150px" /> |
|||
<el-table-column label="联系人电话" align="center" prop="contactPhone" width="150px" /> |
|||
<el-table-column label="是否可用" align="center" prop="available" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.TRUE_FALSE" :value="scope.row.available" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
label="生效时间" |
|||
align="center" |
|||
prop="activeTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column |
|||
label="失效时间" |
|||
align="center" |
|||
prop="expireTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="备注" align="center" prop="remark" width="150px" /> |
|||
<el-table-column |
|||
label="创建时间" |
|||
align="center" |
|||
prop="createTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="创建者ID" align="center" prop="creator" width="150px" /> |
|||
<el-table-column label="操作" align="center" width="150px" fixed="right"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
link |
|||
type="primary" |
|||
@click="openForm('update', scope.row.id)" |
|||
v-hasPermi="['wms:dock:update']" |
|||
> |
|||
编辑 |
|||
</el-button> |
|||
<el-button |
|||
link |
|||
type="danger" |
|||
@click="handleDelete(scope.row.id)" |
|||
v-hasPermi="['wms:dock:delete']" |
|||
> |
|||
删除 |
|||
</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 分页 --> |
|||
<Pagination |
|||
:total="total" |
|||
v-model:page="queryParams.pageNo" |
|||
v-model:limit="queryParams.pageSize" |
|||
@pagination="getList" |
|||
/> |
|||
</ContentWrap> |
|||
|
|||
<!-- 表单弹窗:添加/修改 --> |
|||
<DockForm ref="formRef" @success="getList" /> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import { dateFormatter } from '@/utils/formatTime' |
|||
import download from '@/utils/download' |
|||
import * as DockApi from '@/api/wms/dock' |
|||
import DockForm from './DockForm.vue' |
|||
|
|||
defineOptions({ name: 'Dock' }) |
|||
|
|||
const message = useMessage() // 消息弹窗 |
|||
const { t } = useI18n() // 国际化 |
|||
|
|||
const loading = ref(true) // 列表的加载中 |
|||
const total = ref(0) // 列表的总页数 |
|||
const list = ref([]) // 列表的数据 |
|||
const queryParams = reactive({ |
|||
pageNo: 1, |
|||
pageSize: 10, |
|||
code: null, |
|||
name: null, |
|||
description: null, |
|||
city: null, |
|||
address: null, |
|||
type: null, |
|||
warehouseCode: null, |
|||
defaultLocationCode: null, |
|||
contactPerson: null, |
|||
contactPhone: null, |
|||
available: null, |
|||
activeTime: [], |
|||
expireTime: [], |
|||
remark: null, |
|||
createTime: [], |
|||
creator: null |
|||
}) |
|||
const queryFormRef = ref() // 搜索的表单 |
|||
const exportLoading = ref(false) // 导出的加载中 |
|||
|
|||
/** 查询列表 */ |
|||
const getList = async () => { |
|||
loading.value = true |
|||
try { |
|||
const data = await DockApi.getDockPage(queryParams) |
|||
list.value = data.list |
|||
total.value = data.total |
|||
} finally { |
|||
loading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 搜索按钮操作 */ |
|||
const handleQuery = () => { |
|||
queryParams.pageNo = 1 |
|||
getList() |
|||
} |
|||
|
|||
/** 重置按钮操作 */ |
|||
const resetQuery = () => { |
|||
queryFormRef.value.resetFields() |
|||
handleQuery() |
|||
} |
|||
|
|||
/** 添加/修改操作 */ |
|||
const formRef = ref() |
|||
const openForm = (type: string, id?: number) => { |
|||
formRef.value.open(type, id) |
|||
} |
|||
|
|||
/** 删除按钮操作 */ |
|||
const handleDelete = async (id: number) => { |
|||
try { |
|||
// 删除的二次确认 |
|||
await message.delConfirm() |
|||
// 发起删除 |
|||
await DockApi.deleteDock(id) |
|||
message.success(t('common.delSuccess')) |
|||
// 刷新列表 |
|||
await getList() |
|||
} catch {} |
|||
} |
|||
|
|||
/** 导出按钮操作 */ |
|||
const handleExport = async () => { |
|||
try { |
|||
// 导出的二次确认 |
|||
await message.exportConfirm() |
|||
// 发起导出 |
|||
exportLoading.value = true |
|||
const data = await DockApi.exportDock(queryParams) |
|||
download.excel(data, '月台.xls') |
|||
} catch { |
|||
} finally { |
|||
exportLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 初始化 **/ |
|||
onMounted(() => { |
|||
getList() |
|||
}) |
|||
</script> |
@ -0,0 +1,271 @@ |
|||
<template> |
|||
<Dialog :title="dialogTitle" v-model="dialogVisible"> |
|||
<div class="p-20px m--10px" style="max-height: 600px;overflow-y: auto;"> |
|||
<el-form |
|||
ref="formRef" |
|||
:model="formData" |
|||
:rules="formRules" |
|||
label-width="100px" |
|||
v-loading="formLoading" |
|||
> |
|||
<el-row> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="物品代码" prop="itemCode"> |
|||
<el-input v-model="formData.itemCode" placeholder="请输入物品代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="计量单位" prop="uom"> |
|||
<el-select v-model="formData.uom" placeholder="请选择计量单位"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.UOM)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="包装单位" prop="stdPackUnit"> |
|||
<el-select v-model="formData.stdPackUnit" placeholder="请选择包装单位"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.PACK_UNIT)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="包装数量" prop="stdPackQty"> |
|||
<el-input v-model="formData.stdPackQty" placeholder="请输入包装数量" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="替代包装单位" prop="altPackUnit1"> |
|||
<el-select v-model="formData.altPackUnit1" placeholder="请选择替代包装单位"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.PACK_UNIT)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="替代包装量" prop="altPackQty1"> |
|||
<el-input v-model="formData.altPackQty1" placeholder="请输入替代包装量" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="替代包装单位" prop="altPackUnit2"> |
|||
<el-select v-model="formData.altPackUnit2" placeholder="请选择替代包装单位"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.PACK_UNIT)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="替代包装量" prop="altPackQty2"> |
|||
<el-input v-model="formData.altPackQty2" placeholder="请输入替代包装量" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="替代包装单位" prop="altPackUnit3"> |
|||
<el-select v-model="formData.altPackUnit3" placeholder="请选择替代包装单位"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.PACK_UNIT)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="替代包装量" prop="altPackQty3"> |
|||
<el-input v-model="formData.altPackQty3" placeholder="请输入替代包装量" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="替代包装单位" prop="altPackUnit4"> |
|||
<el-select v-model="formData.altPackUnit4" placeholder="请选择替代包装单位"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.PACK_UNIT)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="替代包装量" prop="altPackQty4"> |
|||
<el-input v-model="formData.altPackQty4" placeholder="请输入替代包装量" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select v-model="formData.available" placeholder="请选择是否可用"> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="formData.activeTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择生效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="formData.expireTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择失效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input v-model="formData.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<template #footer> |
|||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> |
|||
<el-button @click="dialogVisible = false">取 消</el-button> |
|||
</template> |
|||
</Dialog> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import * as ItempackagingApi from '@/api/wms/itempackaging' |
|||
|
|||
const { t } = useI18n() // 国际化 |
|||
const message = useMessage() // 消息弹窗 |
|||
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示 |
|||
const dialogTitle = ref('') // 弹窗的标题 |
|||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改 |
|||
const formData = ref({ |
|||
itemCode: undefined, |
|||
uom: undefined, |
|||
stdPackUnit: undefined, |
|||
stdPackQty: undefined, |
|||
altPackUnit1: undefined, |
|||
altPackQty1: undefined, |
|||
altPackUnit2: undefined, |
|||
altPackQty2: undefined, |
|||
altPackUnit3: undefined, |
|||
altPackQty3: undefined, |
|||
altPackUnit4: undefined, |
|||
altPackQty4: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
}) |
|||
const formRules = reactive({ |
|||
itemCode: [{ required: true, message: '物品代码不能为空', trigger: 'blur' }], |
|||
uom: [{ required: true, message: '计量单位不能为空', trigger: 'change' }], |
|||
stdPackUnit: [{ required: true, message: '包装单位不能为空', trigger: 'change' }], |
|||
stdPackQty: [{ required: true, message: '包装数量不能为空', trigger: 'blur' }], |
|||
available: [{ required: true, message: '是否可用不能为空', trigger: 'change' }] |
|||
}) |
|||
const formRef = ref() // 表单 Ref |
|||
|
|||
/** 打开弹窗 */ |
|||
const open = async (type: string, id?: number) => { |
|||
dialogVisible.value = true |
|||
dialogTitle.value = t('action.' + type) |
|||
formType.value = type |
|||
resetForm() |
|||
// 修改时,设置数据 |
|||
if (id) { |
|||
formLoading.value = true |
|||
try { |
|||
formData.value = await ItempackagingApi.getItempackaging(id) |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
} |
|||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
|||
|
|||
/** 提交表单 */ |
|||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
|||
const submitForm = async () => { |
|||
// 校验表单 |
|||
if (!formRef) return |
|||
const valid = await formRef.value.validate() |
|||
if (!valid) return |
|||
// 提交请求 |
|||
formLoading.value = true |
|||
try { |
|||
const data = formData.value as unknown as ItempackagingApi.ItempackagingVO |
|||
if (formType.value === 'create') { |
|||
await ItempackagingApi.createItempackaging(data) |
|||
message.success(t('common.createSuccess')) |
|||
} else { |
|||
await ItempackagingApi.updateItempackaging(data) |
|||
message.success(t('common.updateSuccess')) |
|||
} |
|||
dialogVisible.value = false |
|||
// 发送操作成功的事件 |
|||
emit('success') |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 重置表单 */ |
|||
const resetForm = () => { |
|||
formData.value = { |
|||
itemCode: undefined, |
|||
uom: undefined, |
|||
stdPackUnit: undefined, |
|||
stdPackQty: undefined, |
|||
altPackUnit1: undefined, |
|||
altPackQty1: undefined, |
|||
altPackUnit2: undefined, |
|||
altPackQty2: undefined, |
|||
altPackUnit3: undefined, |
|||
altPackQty3: undefined, |
|||
altPackUnit4: undefined, |
|||
altPackQty4: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
} |
|||
formRef.value?.resetFields() |
|||
} |
|||
</script> |
@ -0,0 +1,441 @@ |
|||
<template> |
|||
<ContentWrap> |
|||
<!-- 搜索工作栏 --> |
|||
<el-form |
|||
class="-mb-15px" |
|||
:model="queryParams" |
|||
ref="queryFormRef" |
|||
:inline="true" |
|||
label-width="68px" |
|||
> |
|||
<el-form-item label="物品代码" prop="itemCode"> |
|||
<el-input |
|||
v-model="queryParams.itemCode" |
|||
placeholder="请输入物品代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="计量单位" prop="uom"> |
|||
<el-select v-model="queryParams.uom" placeholder="请选择计量单位" clearable class="!w-240px"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.UOM)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="包装单位" prop="stdPackUnit"> |
|||
<el-select |
|||
v-model="queryParams.stdPackUnit" |
|||
placeholder="请选择包装单位" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.PACK_UNIT)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="包装数量" prop="stdPackQty"> |
|||
<el-input |
|||
v-model="queryParams.stdPackQty" |
|||
placeholder="请输入包装数量" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="替代包装单位" prop="altPackUnit1"> |
|||
<el-select |
|||
v-model="queryParams.altPackUnit1" |
|||
placeholder="请选择替代包装单位" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.PACK_UNIT)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="替代包装量" prop="altPackQty1"> |
|||
<el-input |
|||
v-model="queryParams.altPackQty1" |
|||
placeholder="请输入替代包装量" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="替代包装单位" prop="altPackUnit2"> |
|||
<el-select |
|||
v-model="queryParams.altPackUnit2" |
|||
placeholder="请选择替代包装单位" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.PACK_UNIT)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="替代包装量" prop="altPackQty2"> |
|||
<el-input |
|||
v-model="queryParams.altPackQty2" |
|||
placeholder="请输入替代包装量" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="替代包装单位" prop="altPackUnit3"> |
|||
<el-select |
|||
v-model="queryParams.altPackUnit3" |
|||
placeholder="请选择替代包装单位" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.PACK_UNIT)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="替代包装量" prop="altPackQty3"> |
|||
<el-input |
|||
v-model="queryParams.altPackQty3" |
|||
placeholder="请输入替代包装量" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="替代包装单位" prop="altPackUnit4"> |
|||
<el-select |
|||
v-model="queryParams.altPackUnit4" |
|||
placeholder="请选择替代包装单位" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.PACK_UNIT)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="替代包装量" prop="altPackQty4"> |
|||
<el-input |
|||
v-model="queryParams.altPackQty4" |
|||
placeholder="请输入替代包装量" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select |
|||
v-model="queryParams.available" |
|||
placeholder="请选择是否可用" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.activeTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.expireTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input |
|||
v-model="queryParams.remark" |
|||
placeholder="请输入备注" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建时间" prop="createTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.createTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建者ID" prop="creator"> |
|||
<el-input |
|||
v-model="queryParams.creator" |
|||
placeholder="请输入创建者ID" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="info" plain @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> |
|||
<el-button type="info" plain @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> |
|||
<el-button |
|||
type="primary" |
|||
@click="openForm('create')" |
|||
v-hasPermi="['wms:itempackaging:create']" |
|||
> |
|||
<Icon icon="ep:plus" class="mr-5px" /> 新增 |
|||
</el-button> |
|||
<el-button |
|||
type="success" |
|||
@click="handleExport" |
|||
:loading="exportLoading" |
|||
v-hasPermi="['wms:itempackaging:export']" |
|||
> |
|||
<Icon icon="ep:download" class="mr-5px" /> 导出 |
|||
</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</ContentWrap> |
|||
|
|||
<!-- 列表 --> |
|||
<ContentWrap> |
|||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> |
|||
<el-table-column label="物品代码" align="center" prop="itemCode" width="150px" /> |
|||
<el-table-column label="计量单位" align="center" prop="uom" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.UOM" :value="scope.row.uom" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="包装单位" align="center" prop="stdPackUnit" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.PACK_UNIT" :value="scope.row.stdPackUnit" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="包装数量" align="center" prop="stdPackQty" width="150px" /> |
|||
<el-table-column label="替代包装单位" align="center" prop="altPackUnit1" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.PACK_UNIT" :value="scope.row.altPackUnit1" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="替代包装量" align="center" prop="altPackQty1" width="150px" /> |
|||
<el-table-column label="替代包装单位" align="center" prop="altPackUnit2" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.PACK_UNIT" :value="scope.row.altPackUnit2" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="替代包装量" align="center" prop="altPackQty2" width="150px" /> |
|||
<el-table-column label="替代包装单位" align="center" prop="altPackUnit3" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.PACK_UNIT" :value="scope.row.altPackUnit3" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="替代包装量" align="center" prop="altPackQty3" width="150px" /> |
|||
<el-table-column label="替代包装单位" align="center" prop="altPackUnit4" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.PACK_UNIT" :value="scope.row.altPackUnit4" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="替代包装量" align="center" prop="altPackQty4" width="150px" /> |
|||
<el-table-column label="是否可用" align="center" prop="available" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.TRUE_FALSE" :value="scope.row.available" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
label="生效时间" |
|||
align="center" |
|||
prop="activeTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column |
|||
label="失效时间" |
|||
align="center" |
|||
prop="expireTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="备注" align="center" prop="remark" width="150px" /> |
|||
<el-table-column |
|||
label="创建时间" |
|||
align="center" |
|||
prop="createTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="创建者ID" align="center" prop="creator" width="150px" /> |
|||
<el-table-column label="操作" align="center" width="150px" fixed="right"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
link |
|||
type="primary" |
|||
@click="openForm('update', scope.row.id)" |
|||
v-hasPermi="['wms:itempackaging:update']" |
|||
> |
|||
编辑 |
|||
</el-button> |
|||
<el-button |
|||
link |
|||
type="danger" |
|||
@click="handleDelete(scope.row.id)" |
|||
v-hasPermi="['wms:itempackaging:delete']" |
|||
> |
|||
删除 |
|||
</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 分页 --> |
|||
<Pagination |
|||
:total="total" |
|||
v-model:page="queryParams.pageNo" |
|||
v-model:limit="queryParams.pageSize" |
|||
@pagination="getList" |
|||
/> |
|||
</ContentWrap> |
|||
|
|||
<!-- 表单弹窗:添加/修改 --> |
|||
<ItempackagingForm ref="formRef" @success="getList" /> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import { dateFormatter } from '@/utils/formatTime' |
|||
import download from '@/utils/download' |
|||
import * as ItempackagingApi from '@/api/wms/itempackaging' |
|||
import ItempackagingForm from './ItempackagingForm.vue' |
|||
|
|||
defineOptions({ name: 'Itempackaging' }) |
|||
|
|||
const message = useMessage() // 消息弹窗 |
|||
const { t } = useI18n() // 国际化 |
|||
|
|||
const loading = ref(true) // 列表的加载中 |
|||
const total = ref(0) // 列表的总页数 |
|||
const list = ref([]) // 列表的数据 |
|||
const queryParams = reactive({ |
|||
pageNo: 1, |
|||
pageSize: 10, |
|||
itemCode: null, |
|||
uom: null, |
|||
stdPackUnit: null, |
|||
stdPackQty: null, |
|||
altPackUnit1: null, |
|||
altPackQty1: null, |
|||
altPackUnit2: null, |
|||
altPackQty2: null, |
|||
altPackUnit3: null, |
|||
altPackQty3: null, |
|||
altPackUnit4: null, |
|||
altPackQty4: null, |
|||
available: null, |
|||
activeTime: [], |
|||
expireTime: [], |
|||
remark: null, |
|||
createTime: [], |
|||
creator: null |
|||
}) |
|||
const queryFormRef = ref() // 搜索的表单 |
|||
const exportLoading = ref(false) // 导出的加载中 |
|||
|
|||
/** 查询列表 */ |
|||
const getList = async () => { |
|||
loading.value = true |
|||
try { |
|||
const data = await ItempackagingApi.getItempackagingPage(queryParams) |
|||
list.value = data.list |
|||
total.value = data.total |
|||
} finally { |
|||
loading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 搜索按钮操作 */ |
|||
const handleQuery = () => { |
|||
queryParams.pageNo = 1 |
|||
getList() |
|||
} |
|||
|
|||
/** 重置按钮操作 */ |
|||
const resetQuery = () => { |
|||
queryFormRef.value.resetFields() |
|||
handleQuery() |
|||
} |
|||
|
|||
/** 添加/修改操作 */ |
|||
const formRef = ref() |
|||
const openForm = (type: string, id?: number) => { |
|||
formRef.value.open(type, id) |
|||
} |
|||
|
|||
/** 删除按钮操作 */ |
|||
const handleDelete = async (id: number) => { |
|||
try { |
|||
// 删除的二次确认 |
|||
await message.delConfirm() |
|||
// 发起删除 |
|||
await ItempackagingApi.deleteItempackaging(id) |
|||
message.success(t('common.delSuccess')) |
|||
// 刷新列表 |
|||
await getList() |
|||
} catch {} |
|||
} |
|||
|
|||
/** 导出按钮操作 */ |
|||
const handleExport = async () => { |
|||
try { |
|||
// 导出的二次确认 |
|||
await message.exportConfirm() |
|||
// 发起导出 |
|||
exportLoading.value = true |
|||
const data = await ItempackagingApi.exportItempackaging(queryParams) |
|||
download.excel(data, '物品包装信息 .xls') |
|||
} catch { |
|||
} finally { |
|||
exportLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 初始化 **/ |
|||
onMounted(() => { |
|||
getList() |
|||
}) |
|||
</script> |
@ -0,0 +1,290 @@ |
|||
<template> |
|||
<Dialog :title="dialogTitle" v-model="dialogVisible"> |
|||
<div class="p-20px m--10px" style="max-height: 600px;overflow-y: auto;"> |
|||
<el-form |
|||
ref="formRef" |
|||
:model="formData" |
|||
:rules="formRules" |
|||
label-width="100px" |
|||
v-loading="formLoading" |
|||
> |
|||
<el-row> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="代码" prop="code"> |
|||
<el-input v-model="formData.code" placeholder="请输入代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input v-model="formData.name" placeholder="请输入名称" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="描述"> |
|||
<Editor v-model="formData.description" height="150px" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="仓库代码" prop="warehouseCode"> |
|||
<el-input v-model="formData.warehouseCode" placeholder="请输入仓库代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="区域代码" prop="areaCode"> |
|||
<el-input v-model="formData.areaCode" placeholder="请输入区域代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="库位组代码" prop="locationGroupCode"> |
|||
<el-input v-model="formData.locationGroupCode" placeholder="请输入库位组代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="ERP库位代码" prop="erpLocationCode"> |
|||
<el-select v-model="formData.erpLocationCode" placeholder="请选择ERP库位代码"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.ERP_LOCATION)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="类型" prop="type"> |
|||
<el-select v-model="formData.type" placeholder="请选择类型"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.LOCATION_TYPE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="巷道" prop="aisle"> |
|||
<el-input v-model="formData.aisle" placeholder="请输入巷道" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="货架" prop="shelf"> |
|||
<el-input v-model="formData.shelf" placeholder="请输入货架" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="行" prop="locationRow"> |
|||
<el-input v-model="formData.locationRow" placeholder="请输入行" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="列" prop="locationColum"> |
|||
<el-input v-model="formData.locationColum" placeholder="请输入列" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="拣料优先级" prop="pickPriority"> |
|||
<el-input v-model="formData.pickPriority" placeholder="请输入拣料优先级" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="最大承重" prop="maxWeight"> |
|||
<el-input v-model="formData.maxWeight" placeholder="请输入最大承重" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="最大面积" prop="maxArea"> |
|||
<el-input v-model="formData.maxArea" placeholder="请输入最大面积" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="最大体积" prop="maxVolume"> |
|||
<el-input v-model="formData.maxVolume" placeholder="请输入最大体积" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="用户组代码" prop="userGroupCode"> |
|||
<el-input v-model="formData.userGroupCode" placeholder="请输入用户组代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select v-model="formData.available" placeholder="请选择是否可用"> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="formData.activeTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择生效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="formData.expireTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择失效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input v-model="formData.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<template #footer> |
|||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> |
|||
<el-button @click="dialogVisible = false">取 消</el-button> |
|||
</template> |
|||
</Dialog> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import * as LocationApi from '@/api/wms/location' |
|||
|
|||
const { t } = useI18n() // 国际化 |
|||
const message = useMessage() // 消息弹窗 |
|||
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示 |
|||
const dialogTitle = ref('') // 弹窗的标题 |
|||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改 |
|||
const formData = ref({ |
|||
code: undefined, |
|||
name: undefined, |
|||
description: undefined, |
|||
warehouseCode: undefined, |
|||
areaCode: undefined, |
|||
locationGroupCode: undefined, |
|||
erpLocationCode: undefined, |
|||
type: undefined, |
|||
aisle: undefined, |
|||
shelf: undefined, |
|||
locationRow: undefined, |
|||
locationColum: undefined, |
|||
pickPriority: undefined, |
|||
maxWeight: undefined, |
|||
maxArea: undefined, |
|||
maxVolume: undefined, |
|||
userGroupCode: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
}) |
|||
const formRules = reactive({ |
|||
code: [{ required: true, message: '代码不能为空', trigger: 'blur' }], |
|||
warehouseCode: [{ required: true, message: '仓库代码不能为空', trigger: 'blur' }], |
|||
areaCode: [{ required: true, message: '区域代码不能为空', trigger: 'blur' }], |
|||
locationGroupCode: [{ required: true, message: '库位组代码不能为空', trigger: 'blur' }], |
|||
erpLocationCode: [{ required: true, message: 'ERP库位代码不能为空', trigger: 'change' }], |
|||
type: [{ required: true, message: '类型不能为空', trigger: 'change' }], |
|||
pickPriority: [{ required: true, message: '拣料优先级不能为空', trigger: 'blur' }], |
|||
userGroupCode: [{ required: true, message: '用户组代码不能为空', trigger: 'blur' }], |
|||
available: [{ required: true, message: '是否可用不能为空', trigger: 'change' }] |
|||
}) |
|||
const formRef = ref() // 表单 Ref |
|||
|
|||
/** 打开弹窗 */ |
|||
const open = async (type: string, id?: number) => { |
|||
dialogVisible.value = true |
|||
dialogTitle.value = t('action.' + type) |
|||
formType.value = type |
|||
resetForm() |
|||
// 修改时,设置数据 |
|||
if (id) { |
|||
formLoading.value = true |
|||
try { |
|||
formData.value = await LocationApi.getLocation(id) |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
} |
|||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
|||
|
|||
/** 提交表单 */ |
|||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
|||
const submitForm = async () => { |
|||
// 校验表单 |
|||
if (!formRef) return |
|||
const valid = await formRef.value.validate() |
|||
if (!valid) return |
|||
// 提交请求 |
|||
formLoading.value = true |
|||
try { |
|||
const data = formData.value as unknown as LocationApi.LocationVO |
|||
if (formType.value === 'create') { |
|||
await LocationApi.createLocation(data) |
|||
message.success(t('common.createSuccess')) |
|||
} else { |
|||
await LocationApi.updateLocation(data) |
|||
message.success(t('common.updateSuccess')) |
|||
} |
|||
dialogVisible.value = false |
|||
// 发送操作成功的事件 |
|||
emit('success') |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 重置表单 */ |
|||
const resetForm = () => { |
|||
formData.value = { |
|||
code: undefined, |
|||
name: undefined, |
|||
description: undefined, |
|||
warehouseCode: undefined, |
|||
areaCode: undefined, |
|||
locationGroupCode: undefined, |
|||
erpLocationCode: undefined, |
|||
type: undefined, |
|||
aisle: undefined, |
|||
shelf: undefined, |
|||
locationRow: undefined, |
|||
locationColum: undefined, |
|||
pickPriority: undefined, |
|||
maxWeight: undefined, |
|||
maxArea: undefined, |
|||
maxVolume: undefined, |
|||
userGroupCode: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
} |
|||
formRef.value?.resetFields() |
|||
} |
|||
</script> |
@ -0,0 +1,443 @@ |
|||
<template> |
|||
<ContentWrap> |
|||
<!-- 搜索工作栏 --> |
|||
<el-form |
|||
class="-mb-15px" |
|||
:model="queryParams" |
|||
ref="queryFormRef" |
|||
:inline="true" |
|||
label-width="68px" |
|||
> |
|||
<el-form-item label="代码" prop="code"> |
|||
<el-input |
|||
v-model="queryParams.code" |
|||
placeholder="请输入代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input |
|||
v-model="queryParams.name" |
|||
placeholder="请输入名称" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="仓库代码" prop="warehouseCode"> |
|||
<el-input |
|||
v-model="queryParams.warehouseCode" |
|||
placeholder="请输入仓库代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="区域代码" prop="areaCode"> |
|||
<el-input |
|||
v-model="queryParams.areaCode" |
|||
placeholder="请输入区域代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="库位组代码" prop="locationGroupCode"> |
|||
<el-input |
|||
v-model="queryParams.locationGroupCode" |
|||
placeholder="请输入库位组代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="ERP库位代码" prop="erpLocationCode"> |
|||
<el-select |
|||
v-model="queryParams.erpLocationCode" |
|||
placeholder="请选择ERP库位代码" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.ERP_LOCATION)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="类型" prop="type"> |
|||
<el-select v-model="queryParams.type" placeholder="请选择类型" clearable class="!w-240px"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.LOCATION_TYPE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="巷道" prop="aisle"> |
|||
<el-input |
|||
v-model="queryParams.aisle" |
|||
placeholder="请输入巷道" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="货架" prop="shelf"> |
|||
<el-input |
|||
v-model="queryParams.shelf" |
|||
placeholder="请输入货架" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="行" prop="locationRow"> |
|||
<el-input |
|||
v-model="queryParams.locationRow" |
|||
placeholder="请输入行" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="列" prop="locationColum"> |
|||
<el-input |
|||
v-model="queryParams.locationColum" |
|||
placeholder="请输入列" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="拣料优先级" prop="pickPriority"> |
|||
<el-input |
|||
v-model="queryParams.pickPriority" |
|||
placeholder="请输入拣料优先级" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="最大承重" prop="maxWeight"> |
|||
<el-input |
|||
v-model="queryParams.maxWeight" |
|||
placeholder="请输入最大承重" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="最大面积" prop="maxArea"> |
|||
<el-input |
|||
v-model="queryParams.maxArea" |
|||
placeholder="请输入最大面积" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="最大体积" prop="maxVolume"> |
|||
<el-input |
|||
v-model="queryParams.maxVolume" |
|||
placeholder="请输入最大体积" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="用户组代码" prop="userGroupCode"> |
|||
<el-input |
|||
v-model="queryParams.userGroupCode" |
|||
placeholder="请输入用户组代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select |
|||
v-model="queryParams.available" |
|||
placeholder="请选择是否可用" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.activeTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.expireTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input |
|||
v-model="queryParams.remark" |
|||
placeholder="请输入备注" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建时间" prop="createTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.createTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建者ID" prop="creator"> |
|||
<el-input |
|||
v-model="queryParams.creator" |
|||
placeholder="请输入创建者ID" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="info" plain @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> |
|||
<el-button type="info" plain @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> |
|||
<el-button type="primary" @click="openForm('create')" v-hasPermi="['wms:location:create']"> |
|||
<Icon icon="ep:plus" class="mr-5px" /> 新增 |
|||
</el-button> |
|||
<el-button |
|||
type="success" |
|||
@click="handleExport" |
|||
:loading="exportLoading" |
|||
v-hasPermi="['wms:location:export']" |
|||
> |
|||
<Icon icon="ep:download" class="mr-5px" /> 导出 |
|||
</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</ContentWrap> |
|||
|
|||
<!-- 列表 --> |
|||
<ContentWrap> |
|||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> |
|||
<el-table-column label="代码" align="center" prop="code" width="150px" /> |
|||
<el-table-column label="名称" align="center" prop="name" width="150px" /> |
|||
<el-table-column label="描述" align="center" prop="description" width="150px" /> |
|||
<el-table-column label="仓库代码" align="center" prop="warehouseCode" width="150px" /> |
|||
<el-table-column label="区域代码" align="center" prop="areaCode" width="150px" /> |
|||
<el-table-column label="库位组代码" align="center" prop="locationGroupCode" width="150px" /> |
|||
<el-table-column label="ERP库位代码" align="center" prop="erpLocationCode" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.ERP_LOCATION" :value="scope.row.erpLocationCode" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="类型" align="center" prop="type" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.LOCATION_TYPE" :value="scope.row.type" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="巷道" align="center" prop="aisle" width="150px" /> |
|||
<el-table-column label="货架" align="center" prop="shelf" width="150px" /> |
|||
<el-table-column label="行" align="center" prop="locationRow" width="150px" /> |
|||
<el-table-column label="列" align="center" prop="locationColum" width="150px" /> |
|||
<el-table-column label="拣料优先级" align="center" prop="pickPriority" width="150px" /> |
|||
<el-table-column label="最大承重" align="center" prop="maxWeight" width="150px" /> |
|||
<el-table-column label="最大面积" align="center" prop="maxArea" width="150px" /> |
|||
<el-table-column label="最大体积" align="center" prop="maxVolume" width="150px" /> |
|||
<el-table-column label="用户组代码" align="center" prop="userGroupCode" width="150px" /> |
|||
<el-table-column label="是否可用" align="center" prop="available" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.TRUE_FALSE" :value="scope.row.available" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
label="生效时间" |
|||
align="center" |
|||
prop="activeTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column |
|||
label="失效时间" |
|||
align="center" |
|||
prop="expireTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="备注" align="center" prop="remark" width="150px" /> |
|||
<el-table-column |
|||
label="创建时间" |
|||
align="center" |
|||
prop="createTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="创建者ID" align="center" prop="creator" width="150px" /> |
|||
<el-table-column label="操作" align="center" width="150px" fixed="right"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
link |
|||
type="primary" |
|||
@click="openForm('update', scope.row.id)" |
|||
v-hasPermi="['wms:location:update']" |
|||
> |
|||
编辑 |
|||
</el-button> |
|||
<el-button |
|||
link |
|||
type="danger" |
|||
@click="handleDelete(scope.row.id)" |
|||
v-hasPermi="['wms:location:delete']" |
|||
> |
|||
删除 |
|||
</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 分页 --> |
|||
<Pagination |
|||
:total="total" |
|||
v-model:page="queryParams.pageNo" |
|||
v-model:limit="queryParams.pageSize" |
|||
@pagination="getList" |
|||
/> |
|||
</ContentWrap> |
|||
|
|||
<!-- 表单弹窗:添加/修改 --> |
|||
<LocationForm ref="formRef" @success="getList" /> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import { dateFormatter } from '@/utils/formatTime' |
|||
import download from '@/utils/download' |
|||
import * as LocationApi from '@/api/wms/location' |
|||
import LocationForm from './LocationForm.vue' |
|||
|
|||
defineOptions({ name: 'Location' }) |
|||
|
|||
const message = useMessage() // 消息弹窗 |
|||
const { t } = useI18n() // 国际化 |
|||
|
|||
const loading = ref(true) // 列表的加载中 |
|||
const total = ref(0) // 列表的总页数 |
|||
const list = ref([]) // 列表的数据 |
|||
const queryParams = reactive({ |
|||
pageNo: 1, |
|||
pageSize: 10, |
|||
code: null, |
|||
name: null, |
|||
description: null, |
|||
warehouseCode: null, |
|||
areaCode: null, |
|||
locationGroupCode: null, |
|||
erpLocationCode: null, |
|||
type: null, |
|||
aisle: null, |
|||
shelf: null, |
|||
locationRow: null, |
|||
locationColum: null, |
|||
pickPriority: null, |
|||
maxWeight: null, |
|||
maxArea: null, |
|||
maxVolume: null, |
|||
userGroupCode: null, |
|||
available: null, |
|||
activeTime: [], |
|||
expireTime: [], |
|||
remark: null, |
|||
createTime: [], |
|||
creator: null |
|||
}) |
|||
const queryFormRef = ref() // 搜索的表单 |
|||
const exportLoading = ref(false) // 导出的加载中 |
|||
|
|||
/** 查询列表 */ |
|||
const getList = async () => { |
|||
loading.value = true |
|||
try { |
|||
const data = await LocationApi.getLocationPage(queryParams) |
|||
list.value = data.list |
|||
total.value = data.total |
|||
} finally { |
|||
loading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 搜索按钮操作 */ |
|||
const handleQuery = () => { |
|||
queryParams.pageNo = 1 |
|||
getList() |
|||
} |
|||
|
|||
/** 重置按钮操作 */ |
|||
const resetQuery = () => { |
|||
queryFormRef.value.resetFields() |
|||
handleQuery() |
|||
} |
|||
|
|||
/** 添加/修改操作 */ |
|||
const formRef = ref() |
|||
const openForm = (type: string, id?: number) => { |
|||
formRef.value.open(type, id) |
|||
} |
|||
|
|||
/** 删除按钮操作 */ |
|||
const handleDelete = async (id: number) => { |
|||
try { |
|||
// 删除的二次确认 |
|||
await message.delConfirm() |
|||
// 发起删除 |
|||
await LocationApi.deleteLocation(id) |
|||
message.success(t('common.delSuccess')) |
|||
// 刷新列表 |
|||
await getList() |
|||
} catch {} |
|||
} |
|||
|
|||
/** 导出按钮操作 */ |
|||
const handleExport = async () => { |
|||
try { |
|||
// 导出的二次确认 |
|||
await message.exportConfirm() |
|||
// 发起导出 |
|||
exportLoading.value = true |
|||
const data = await LocationApi.exportLocation(queryParams) |
|||
download.excel(data, '库位.xls') |
|||
} catch { |
|||
} finally { |
|||
exportLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 初始化 **/ |
|||
onMounted(() => { |
|||
getList() |
|||
}) |
|||
</script> |
@ -0,0 +1,177 @@ |
|||
<template> |
|||
<Dialog :title="dialogTitle" v-model="dialogVisible"> |
|||
<div class="p-20px m--10px" style="max-height: 600px;overflow-y: auto;"> |
|||
<el-form |
|||
ref="formRef" |
|||
:model="formData" |
|||
:rules="formRules" |
|||
label-width="100px" |
|||
v-loading="formLoading" |
|||
> |
|||
<el-row> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="代码" prop="code"> |
|||
<el-input v-model="formData.code" placeholder="请输入代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input v-model="formData.name" placeholder="请输入名称" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="描述"> |
|||
<Editor v-model="formData.description" height="150px" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="仓库代码" prop="warehouseCode"> |
|||
<el-input v-model="formData.warehouseCode" placeholder="请输入仓库代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="区域代码" prop="areaCode"> |
|||
<el-input v-model="formData.areaCode" placeholder="请输入区域代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select v-model="formData.available" placeholder="请选择是否可用"> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="formData.activeTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择生效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="formData.expireTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择失效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input v-model="formData.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<template #footer> |
|||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> |
|||
<el-button @click="dialogVisible = false">取 消</el-button> |
|||
</template> |
|||
</Dialog> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' |
|||
import * as LocationgroupApi from '@/api/wms/locationgroup' |
|||
|
|||
const { t } = useI18n() // 国际化 |
|||
const message = useMessage() // 消息弹窗 |
|||
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示 |
|||
const dialogTitle = ref('') // 弹窗的标题 |
|||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改 |
|||
const formData = ref({ |
|||
code: undefined, |
|||
name: undefined, |
|||
description: undefined, |
|||
warehouseCode: undefined, |
|||
areaCode: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
}) |
|||
const formRules = reactive({ |
|||
code: [{ required: true, message: '代码不能为空', trigger: 'blur' }], |
|||
warehouseCode: [{ required: true, message: '仓库代码不能为空', trigger: 'blur' }], |
|||
areaCode: [{ required: true, message: '区域代码不能为空', trigger: 'blur' }], |
|||
available: [{ required: true, message: '是否可用不能为空', trigger: 'change' }] |
|||
}) |
|||
const formRef = ref() // 表单 Ref |
|||
|
|||
/** 打开弹窗 */ |
|||
const open = async (type: string, id?: number) => { |
|||
dialogVisible.value = true |
|||
dialogTitle.value = t('action.' + type) |
|||
formType.value = type |
|||
resetForm() |
|||
// 修改时,设置数据 |
|||
if (id) { |
|||
formLoading.value = true |
|||
try { |
|||
formData.value = await LocationgroupApi.getLocationgroup(id) |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
} |
|||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
|||
|
|||
/** 提交表单 */ |
|||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
|||
const submitForm = async () => { |
|||
// 校验表单 |
|||
if (!formRef) return |
|||
const valid = await formRef.value.validate() |
|||
if (!valid) return |
|||
// 提交请求 |
|||
formLoading.value = true |
|||
try { |
|||
const data = formData.value as unknown as LocationgroupApi.LocationgroupVO |
|||
if (formType.value === 'create') { |
|||
await LocationgroupApi.createLocationgroup(data) |
|||
message.success(t('common.createSuccess')) |
|||
} else { |
|||
await LocationgroupApi.updateLocationgroup(data) |
|||
message.success(t('common.updateSuccess')) |
|||
} |
|||
dialogVisible.value = false |
|||
// 发送操作成功的事件 |
|||
emit('success') |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 重置表单 */ |
|||
const resetForm = () => { |
|||
formData.value = { |
|||
code: undefined, |
|||
name: undefined, |
|||
description: undefined, |
|||
warehouseCode: undefined, |
|||
areaCode: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
} |
|||
formRef.value?.resetFields() |
|||
} |
|||
</script> |
@ -0,0 +1,300 @@ |
|||
<template> |
|||
<ContentWrap> |
|||
<!-- 搜索工作栏 --> |
|||
<el-form |
|||
class="-mb-15px" |
|||
:model="queryParams" |
|||
ref="queryFormRef" |
|||
:inline="true" |
|||
label-width="68px" |
|||
> |
|||
<el-form-item label="代码" prop="code"> |
|||
<el-input |
|||
v-model="queryParams.code" |
|||
placeholder="请输入代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input |
|||
v-model="queryParams.name" |
|||
placeholder="请输入名称" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="仓库代码" prop="warehouseCode"> |
|||
<el-input |
|||
v-model="queryParams.warehouseCode" |
|||
placeholder="请输入仓库代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="区域代码" prop="areaCode"> |
|||
<el-input |
|||
v-model="queryParams.areaCode" |
|||
placeholder="请输入区域代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select |
|||
v-model="queryParams.available" |
|||
placeholder="请选择是否可用" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.activeTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.expireTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input |
|||
v-model="queryParams.remark" |
|||
placeholder="请输入备注" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建时间" prop="createTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.createTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建者ID" prop="creator"> |
|||
<el-input |
|||
v-model="queryParams.creator" |
|||
placeholder="请输入创建者ID" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="info" plain @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> |
|||
<el-button type="info" plain @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> |
|||
<el-button |
|||
type="primary" |
|||
@click="openForm('create')" |
|||
v-hasPermi="['wms:locationgroup:create']" |
|||
> |
|||
<Icon icon="ep:plus" class="mr-5px" /> 新增 |
|||
</el-button> |
|||
<el-button |
|||
type="success" |
|||
@click="handleExport" |
|||
:loading="exportLoading" |
|||
v-hasPermi="['wms:locationgroup:export']" |
|||
> |
|||
<Icon icon="ep:download" class="mr-5px" /> 导出 |
|||
</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</ContentWrap> |
|||
|
|||
<!-- 列表 --> |
|||
<ContentWrap> |
|||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> |
|||
<el-table-column label="代码" align="center" prop="code" width="150px" /> |
|||
<el-table-column label="名称" align="center" prop="name" width="150px" /> |
|||
<el-table-column label="描述" align="center" prop="description" width="150px" /> |
|||
<el-table-column label="仓库代码" align="center" prop="warehouseCode" width="150px" /> |
|||
<el-table-column label="区域代码" align="center" prop="areaCode" width="150px" /> |
|||
<el-table-column label="是否可用" align="center" prop="available" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.TRUE_FALSE" :value="scope.row.available" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
label="生效时间" |
|||
align="center" |
|||
prop="activeTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column |
|||
label="失效时间" |
|||
align="center" |
|||
prop="expireTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="备注" align="center" prop="remark" width="150px" /> |
|||
<el-table-column |
|||
label="创建时间" |
|||
align="center" |
|||
prop="createTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="创建者ID" align="center" prop="creator" width="150px" /> |
|||
<el-table-column label="操作" align="center" width="150px" fixed="right"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
link |
|||
type="primary" |
|||
@click="openForm('update', scope.row.id)" |
|||
v-hasPermi="['wms:locationgroup:update']" |
|||
> |
|||
编辑 |
|||
</el-button> |
|||
<el-button |
|||
link |
|||
type="danger" |
|||
@click="handleDelete(scope.row.id)" |
|||
v-hasPermi="['wms:locationgroup:delete']" |
|||
> |
|||
删除 |
|||
</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 分页 --> |
|||
<Pagination |
|||
:total="total" |
|||
v-model:page="queryParams.pageNo" |
|||
v-model:limit="queryParams.pageSize" |
|||
@pagination="getList" |
|||
/> |
|||
</ContentWrap> |
|||
|
|||
<!-- 表单弹窗:添加/修改 --> |
|||
<LocationgroupForm ref="formRef" @success="getList" /> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' |
|||
import { dateFormatter } from '@/utils/formatTime' |
|||
import download from '@/utils/download' |
|||
import * as LocationgroupApi from '@/api/wms/locationgroup' |
|||
import LocationgroupForm from './LocationgroupForm.vue' |
|||
|
|||
defineOptions({ name: 'Locationgroup' }) |
|||
|
|||
const message = useMessage() // 消息弹窗 |
|||
const { t } = useI18n() // 国际化 |
|||
|
|||
const loading = ref(true) // 列表的加载中 |
|||
const total = ref(0) // 列表的总页数 |
|||
const list = ref([]) // 列表的数据 |
|||
const queryParams = reactive({ |
|||
pageNo: 1, |
|||
pageSize: 10, |
|||
code: null, |
|||
name: null, |
|||
description: null, |
|||
warehouseCode: null, |
|||
areaCode: null, |
|||
available: null, |
|||
activeTime: [], |
|||
expireTime: [], |
|||
remark: null, |
|||
createTime: [], |
|||
creator: null |
|||
}) |
|||
const queryFormRef = ref() // 搜索的表单 |
|||
const exportLoading = ref(false) // 导出的加载中 |
|||
|
|||
/** 查询列表 */ |
|||
const getList = async () => { |
|||
loading.value = true |
|||
try { |
|||
const data = await LocationgroupApi.getLocationgroupPage(queryParams) |
|||
list.value = data.list |
|||
total.value = data.total |
|||
} finally { |
|||
loading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 搜索按钮操作 */ |
|||
const handleQuery = () => { |
|||
queryParams.pageNo = 1 |
|||
getList() |
|||
} |
|||
|
|||
/** 重置按钮操作 */ |
|||
const resetQuery = () => { |
|||
queryFormRef.value.resetFields() |
|||
handleQuery() |
|||
} |
|||
|
|||
/** 添加/修改操作 */ |
|||
const formRef = ref() |
|||
const openForm = (type: string, id?: number) => { |
|||
formRef.value.open(type, id) |
|||
} |
|||
|
|||
/** 删除按钮操作 */ |
|||
const handleDelete = async (id: number) => { |
|||
try { |
|||
// 删除的二次确认 |
|||
await message.delConfirm() |
|||
// 发起删除 |
|||
await LocationgroupApi.deleteLocationgroup(id) |
|||
message.success(t('common.delSuccess')) |
|||
// 刷新列表 |
|||
await getList() |
|||
} catch {} |
|||
} |
|||
|
|||
/** 导出按钮操作 */ |
|||
const handleExport = async () => { |
|||
try { |
|||
// 导出的二次确认 |
|||
await message.exportConfirm() |
|||
// 发起导出 |
|||
exportLoading.value = true |
|||
const data = await LocationgroupApi.exportLocationgroup(queryParams) |
|||
download.excel(data, '库位组.xls') |
|||
} catch { |
|||
} finally { |
|||
exportLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 初始化 **/ |
|||
onMounted(() => { |
|||
getList() |
|||
}) |
|||
</script> |
@ -0,0 +1,191 @@ |
|||
<template> |
|||
<Dialog :title="dialogTitle" v-model="dialogVisible"> |
|||
<div class="p-20px m--10px" style="max-height: 600px;overflow-y: auto;"> |
|||
<el-form |
|||
ref="formRef" |
|||
:model="formData" |
|||
:rules="formRules" |
|||
label-width="100px" |
|||
v-loading="formLoading" |
|||
> |
|||
<el-row> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="代码" prop="code"> |
|||
<el-input v-model="formData.code" placeholder="请输入代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input v-model="formData.name" placeholder="请输入名称" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="描述"> |
|||
<Editor v-model="formData.description" height="150px" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="类型" prop="type"> |
|||
<el-select v-model="formData.type" placeholder="请选择类型"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.PROCESS_TYPE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="车间代码" prop="workshopCode"> |
|||
<el-input v-model="formData.workshopCode" placeholder="请输入车间代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="生产线代码" prop="productionLineCode"> |
|||
<el-input v-model="formData.productionLineCode" placeholder="请输入生产线代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select v-model="formData.available" placeholder="请选择是否可用"> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="formData.activeTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择生效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="formData.expireTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择失效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input v-model="formData.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<template #footer> |
|||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> |
|||
<el-button @click="dialogVisible = false">取 消</el-button> |
|||
</template> |
|||
</Dialog> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import * as ProcessApi from '@/api/wms/process' |
|||
|
|||
const { t } = useI18n() // 国际化 |
|||
const message = useMessage() // 消息弹窗 |
|||
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示 |
|||
const dialogTitle = ref('') // 弹窗的标题 |
|||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改 |
|||
const formData = ref({ |
|||
code: undefined, |
|||
name: undefined, |
|||
description: undefined, |
|||
type: undefined, |
|||
workshopCode: undefined, |
|||
productionLineCode: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
}) |
|||
const formRules = reactive({ |
|||
code: [{ required: true, message: '代码不能为空', trigger: 'blur' }], |
|||
workshopCode: [{ required: true, message: '车间代码不能为空', trigger: 'blur' }], |
|||
productionLineCode: [{ required: true, message: '生产线代码不能为空', trigger: 'blur' }], |
|||
available: [{ required: true, message: '是否可用不能为空', trigger: 'change' }] |
|||
}) |
|||
const formRef = ref() // 表单 Ref |
|||
|
|||
/** 打开弹窗 */ |
|||
const open = async (type: string, id?: number) => { |
|||
dialogVisible.value = true |
|||
dialogTitle.value = t('action.' + type) |
|||
formType.value = type |
|||
resetForm() |
|||
// 修改时,设置数据 |
|||
if (id) { |
|||
formLoading.value = true |
|||
try { |
|||
formData.value = await ProcessApi.getProcess(id) |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
} |
|||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
|||
|
|||
/** 提交表单 */ |
|||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
|||
const submitForm = async () => { |
|||
// 校验表单 |
|||
if (!formRef) return |
|||
const valid = await formRef.value.validate() |
|||
if (!valid) return |
|||
// 提交请求 |
|||
formLoading.value = true |
|||
try { |
|||
const data = formData.value as unknown as ProcessApi.ProcessVO |
|||
if (formType.value === 'create') { |
|||
await ProcessApi.createProcess(data) |
|||
message.success(t('common.createSuccess')) |
|||
} else { |
|||
await ProcessApi.updateProcess(data) |
|||
message.success(t('common.updateSuccess')) |
|||
} |
|||
dialogVisible.value = false |
|||
// 发送操作成功的事件 |
|||
emit('success') |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 重置表单 */ |
|||
const resetForm = () => { |
|||
formData.value = { |
|||
code: undefined, |
|||
name: undefined, |
|||
description: undefined, |
|||
type: undefined, |
|||
workshopCode: undefined, |
|||
productionLineCode: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
} |
|||
formRef.value?.resetFields() |
|||
} |
|||
</script> |
@ -0,0 +1,312 @@ |
|||
<template> |
|||
<ContentWrap> |
|||
<!-- 搜索工作栏 --> |
|||
<el-form |
|||
class="-mb-15px" |
|||
:model="queryParams" |
|||
ref="queryFormRef" |
|||
:inline="true" |
|||
label-width="68px" |
|||
> |
|||
<el-form-item label="代码" prop="code"> |
|||
<el-input |
|||
v-model="queryParams.code" |
|||
placeholder="请输入代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input |
|||
v-model="queryParams.name" |
|||
placeholder="请输入名称" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="类型" prop="type"> |
|||
<el-select v-model="queryParams.type" placeholder="请选择类型" clearable class="!w-240px"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.PROCESS_TYPE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="车间代码" prop="workshopCode"> |
|||
<el-input |
|||
v-model="queryParams.workshopCode" |
|||
placeholder="请输入车间代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="生产线代码" prop="productionLineCode"> |
|||
<el-input |
|||
v-model="queryParams.productionLineCode" |
|||
placeholder="请输入生产线代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select |
|||
v-model="queryParams.available" |
|||
placeholder="请选择是否可用" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.activeTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.expireTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input |
|||
v-model="queryParams.remark" |
|||
placeholder="请输入备注" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建时间" prop="createTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.createTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建者ID" prop="creator"> |
|||
<el-input |
|||
v-model="queryParams.creator" |
|||
placeholder="请输入创建者ID" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="info" plain @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> |
|||
<el-button type="info" plain @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> |
|||
<el-button type="primary" @click="openForm('create')" v-hasPermi="['wms:process:create']"> |
|||
<Icon icon="ep:plus" class="mr-5px" /> 新增 |
|||
</el-button> |
|||
<el-button |
|||
type="success" |
|||
@click="handleExport" |
|||
:loading="exportLoading" |
|||
v-hasPermi="['wms:process:export']" |
|||
> |
|||
<Icon icon="ep:download" class="mr-5px" /> 导出 |
|||
</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</ContentWrap> |
|||
|
|||
<!-- 列表 --> |
|||
<ContentWrap> |
|||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> |
|||
<el-table-column label="代码" align="center" prop="code" width="150px" /> |
|||
<el-table-column label="名称" align="center" prop="name" width="150px" /> |
|||
<el-table-column label="描述" align="center" prop="description" width="150px" /> |
|||
<el-table-column label="类型" align="center" prop="type" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.PROCESS_TYPE" :value="scope.row.type" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="车间代码" align="center" prop="workshopCode" width="150px" /> |
|||
<el-table-column label="生产线代码" align="center" prop="productionLineCode" width="150px" /> |
|||
<el-table-column label="是否可用" align="center" prop="available" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.TRUE_FALSE" :value="scope.row.available" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
label="生效时间" |
|||
align="center" |
|||
prop="activeTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column |
|||
label="失效时间" |
|||
align="center" |
|||
prop="expireTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="备注" align="center" prop="remark" width="150px" /> |
|||
<el-table-column |
|||
label="创建时间" |
|||
align="center" |
|||
prop="createTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="创建者ID" align="center" prop="creator" width="150px" /> |
|||
<el-table-column label="操作" align="center" width="150px" fixed="right"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
link |
|||
type="primary" |
|||
@click="openForm('update', scope.row.id)" |
|||
v-hasPermi="['wms:process:update']" |
|||
> |
|||
编辑 |
|||
</el-button> |
|||
<el-button |
|||
link |
|||
type="danger" |
|||
@click="handleDelete(scope.row.id)" |
|||
v-hasPermi="['wms:process:delete']" |
|||
> |
|||
删除 |
|||
</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 分页 --> |
|||
<Pagination |
|||
:total="total" |
|||
v-model:page="queryParams.pageNo" |
|||
v-model:limit="queryParams.pageSize" |
|||
@pagination="getList" |
|||
/> |
|||
</ContentWrap> |
|||
|
|||
<!-- 表单弹窗:添加/修改 --> |
|||
<ProcessForm ref="formRef" @success="getList" /> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import { dateFormatter } from '@/utils/formatTime' |
|||
import download from '@/utils/download' |
|||
import * as ProcessApi from '@/api/wms/process' |
|||
import ProcessForm from './ProcessForm.vue' |
|||
|
|||
defineOptions({ name: 'Process' }) |
|||
|
|||
const message = useMessage() // 消息弹窗 |
|||
const { t } = useI18n() // 国际化 |
|||
|
|||
const loading = ref(true) // 列表的加载中 |
|||
const total = ref(0) // 列表的总页数 |
|||
const list = ref([]) // 列表的数据 |
|||
const queryParams = reactive({ |
|||
pageNo: 1, |
|||
pageSize: 10, |
|||
code: null, |
|||
name: null, |
|||
description: null, |
|||
type: null, |
|||
workshopCode: null, |
|||
productionLineCode: null, |
|||
available: null, |
|||
activeTime: [], |
|||
expireTime: [], |
|||
remark: null, |
|||
createTime: [], |
|||
creator: null |
|||
}) |
|||
const queryFormRef = ref() // 搜索的表单 |
|||
const exportLoading = ref(false) // 导出的加载中 |
|||
|
|||
/** 查询列表 */ |
|||
const getList = async () => { |
|||
loading.value = true |
|||
try { |
|||
const data = await ProcessApi.getProcessPage(queryParams) |
|||
list.value = data.list |
|||
total.value = data.total |
|||
} finally { |
|||
loading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 搜索按钮操作 */ |
|||
const handleQuery = () => { |
|||
queryParams.pageNo = 1 |
|||
getList() |
|||
} |
|||
|
|||
/** 重置按钮操作 */ |
|||
const resetQuery = () => { |
|||
queryFormRef.value.resetFields() |
|||
handleQuery() |
|||
} |
|||
|
|||
/** 添加/修改操作 */ |
|||
const formRef = ref() |
|||
const openForm = (type: string, id?: number) => { |
|||
formRef.value.open(type, id) |
|||
} |
|||
|
|||
/** 删除按钮操作 */ |
|||
const handleDelete = async (id: number) => { |
|||
try { |
|||
// 删除的二次确认 |
|||
await message.delConfirm() |
|||
// 发起删除 |
|||
await ProcessApi.deleteProcess(id) |
|||
message.success(t('common.delSuccess')) |
|||
// 刷新列表 |
|||
await getList() |
|||
} catch {} |
|||
} |
|||
|
|||
/** 导出按钮操作 */ |
|||
const handleExport = async () => { |
|||
try { |
|||
// 导出的二次确认 |
|||
await message.exportConfirm() |
|||
// 发起导出 |
|||
exportLoading.value = true |
|||
const data = await ProcessApi.exportProcess(queryParams) |
|||
download.excel(data, '工序.xls') |
|||
} catch { |
|||
} finally { |
|||
exportLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 初始化 **/ |
|||
onMounted(() => { |
|||
getList() |
|||
}) |
|||
</script> |
@ -0,0 +1,199 @@ |
|||
<template> |
|||
<Dialog :title="dialogTitle" v-model="dialogVisible"> |
|||
<div class="p-20px m--10px" style="max-height: 600px;overflow-y: auto;"> |
|||
<el-form |
|||
ref="formRef" |
|||
:model="formData" |
|||
:rules="formRules" |
|||
label-width="100px" |
|||
v-loading="formLoading" |
|||
> |
|||
<el-row> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="代码" prop="code"> |
|||
<el-input v-model="formData.code" placeholder="请输入代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input v-model="formData.name" placeholder="请输入名称" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="描述"> |
|||
<Editor v-model="formData.description" height="150px" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="类型" prop="type"> |
|||
<el-select v-model="formData.type" placeholder="请选择类型"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.PRODUCTION_LINE_TYPE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="车间代码" prop="workshopCode"> |
|||
<el-input v-model="formData.workshopCode" placeholder="请输入车间代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="原料库位" prop="rawLocationCode"> |
|||
<el-input v-model="formData.rawLocationCode" placeholder="请输入原料库位" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="成品库位" prop="fgLocationCode"> |
|||
<el-input v-model="formData.fgLocationCode" placeholder="请输入成品库位" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select v-model="formData.available" placeholder="请选择是否可用"> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="formData.activeTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择生效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="formData.expireTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择失效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input v-model="formData.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<template #footer> |
|||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> |
|||
<el-button @click="dialogVisible = false">取 消</el-button> |
|||
</template> |
|||
</Dialog> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import * as ProductionlineApi from '@/api/wms/productionline' |
|||
|
|||
const { t } = useI18n() // 国际化 |
|||
const message = useMessage() // 消息弹窗 |
|||
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示 |
|||
const dialogTitle = ref('') // 弹窗的标题 |
|||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改 |
|||
const formData = ref({ |
|||
code: undefined, |
|||
name: undefined, |
|||
description: undefined, |
|||
type: undefined, |
|||
workshopCode: undefined, |
|||
rawLocationCode: undefined, |
|||
fgLocationCode: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
}) |
|||
const formRules = reactive({ |
|||
code: [{ required: true, message: '代码不能为空', trigger: 'blur' }], |
|||
type: [{ required: true, message: '类型不能为空', trigger: 'change' }], |
|||
workshopCode: [{ required: true, message: '车间代码不能为空', trigger: 'blur' }], |
|||
available: [{ required: true, message: '是否可用不能为空', trigger: 'change' }] |
|||
}) |
|||
const formRef = ref() // 表单 Ref |
|||
|
|||
/** 打开弹窗 */ |
|||
const open = async (type: string, id?: number) => { |
|||
dialogVisible.value = true |
|||
dialogTitle.value = t('action.' + type) |
|||
formType.value = type |
|||
resetForm() |
|||
// 修改时,设置数据 |
|||
if (id) { |
|||
formLoading.value = true |
|||
try { |
|||
formData.value = await ProductionlineApi.getProductionline(id) |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
} |
|||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
|||
|
|||
/** 提交表单 */ |
|||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
|||
const submitForm = async () => { |
|||
// 校验表单 |
|||
if (!formRef) return |
|||
const valid = await formRef.value.validate() |
|||
if (!valid) return |
|||
// 提交请求 |
|||
formLoading.value = true |
|||
try { |
|||
const data = formData.value as unknown as ProductionlineApi.ProductionlineVO |
|||
if (formType.value === 'create') { |
|||
await ProductionlineApi.createProductionline(data) |
|||
message.success(t('common.createSuccess')) |
|||
} else { |
|||
await ProductionlineApi.updateProductionline(data) |
|||
message.success(t('common.updateSuccess')) |
|||
} |
|||
dialogVisible.value = false |
|||
// 发送操作成功的事件 |
|||
emit('success') |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 重置表单 */ |
|||
const resetForm = () => { |
|||
formData.value = { |
|||
code: undefined, |
|||
name: undefined, |
|||
description: undefined, |
|||
type: undefined, |
|||
workshopCode: undefined, |
|||
rawLocationCode: undefined, |
|||
fgLocationCode: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
} |
|||
formRef.value?.resetFields() |
|||
} |
|||
</script> |
@ -0,0 +1,327 @@ |
|||
<template> |
|||
<ContentWrap> |
|||
<!-- 搜索工作栏 --> |
|||
<el-form |
|||
class="-mb-15px" |
|||
:model="queryParams" |
|||
ref="queryFormRef" |
|||
:inline="true" |
|||
label-width="68px" |
|||
> |
|||
<el-form-item label="代码" prop="code"> |
|||
<el-input |
|||
v-model="queryParams.code" |
|||
placeholder="请输入代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input |
|||
v-model="queryParams.name" |
|||
placeholder="请输入名称" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="类型" prop="type"> |
|||
<el-select v-model="queryParams.type" placeholder="请选择类型" clearable class="!w-240px"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.PRODUCTION_LINE_TYPE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="车间代码" prop="workshopCode"> |
|||
<el-input |
|||
v-model="queryParams.workshopCode" |
|||
placeholder="请输入车间代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="原料库位" prop="rawLocationCode"> |
|||
<el-input |
|||
v-model="queryParams.rawLocationCode" |
|||
placeholder="请输入原料库位" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="成品库位" prop="fgLocationCode"> |
|||
<el-input |
|||
v-model="queryParams.fgLocationCode" |
|||
placeholder="请输入成品库位" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select |
|||
v-model="queryParams.available" |
|||
placeholder="请选择是否可用" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.activeTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.expireTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input |
|||
v-model="queryParams.remark" |
|||
placeholder="请输入备注" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建时间" prop="createTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.createTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建者ID" prop="creator"> |
|||
<el-input |
|||
v-model="queryParams.creator" |
|||
placeholder="请输入创建者ID" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="info" plain @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> |
|||
<el-button type="info" plain @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> |
|||
<el-button |
|||
type="primary" |
|||
@click="openForm('create')" |
|||
v-hasPermi="['wms:productionline:create']" |
|||
> |
|||
<Icon icon="ep:plus" class="mr-5px" /> 新增 |
|||
</el-button> |
|||
<el-button |
|||
type="success" |
|||
@click="handleExport" |
|||
:loading="exportLoading" |
|||
v-hasPermi="['wms:productionline:export']" |
|||
> |
|||
<Icon icon="ep:download" class="mr-5px" /> 导出 |
|||
</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</ContentWrap> |
|||
|
|||
<!-- 列表 --> |
|||
<ContentWrap> |
|||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> |
|||
<el-table-column label="代码" align="center" prop="code" width="150px" /> |
|||
<el-table-column label="名称" align="center" prop="name" width="150px" /> |
|||
<el-table-column label="描述" align="center" prop="description" width="150px" /> |
|||
<el-table-column label="类型" align="center" prop="type" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.PRODUCTION_LINE_TYPE" :value="scope.row.type" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="车间代码" align="center" prop="workshopCode" width="150px" /> |
|||
<el-table-column label="原料库位" align="center" prop="rawLocationCode" width="150px" /> |
|||
<el-table-column label="成品库位" align="center" prop="fgLocationCode" width="150px" /> |
|||
<el-table-column label="是否可用" align="center" prop="available" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.TRUE_FALSE" :value="scope.row.available" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
label="生效时间" |
|||
align="center" |
|||
prop="activeTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column |
|||
label="失效时间" |
|||
align="center" |
|||
prop="expireTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="备注" align="center" prop="remark" width="150px" /> |
|||
<el-table-column |
|||
label="创建时间" |
|||
align="center" |
|||
prop="createTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="创建者ID" align="center" prop="creator" width="150px" /> |
|||
<el-table-column label="操作" align="center" width="150px" fixed="right"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
link |
|||
type="primary" |
|||
@click="openForm('update', scope.row.id)" |
|||
v-hasPermi="['wms:productionline:update']" |
|||
> |
|||
编辑 |
|||
</el-button> |
|||
<el-button |
|||
link |
|||
type="danger" |
|||
@click="handleDelete(scope.row.id)" |
|||
v-hasPermi="['wms:productionline:delete']" |
|||
> |
|||
删除 |
|||
</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 分页 --> |
|||
<Pagination |
|||
:total="total" |
|||
v-model:page="queryParams.pageNo" |
|||
v-model:limit="queryParams.pageSize" |
|||
@pagination="getList" |
|||
/> |
|||
</ContentWrap> |
|||
|
|||
<!-- 表单弹窗:添加/修改 --> |
|||
<ProductionlineForm ref="formRef" @success="getList" /> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import { dateFormatter } from '@/utils/formatTime' |
|||
import download from '@/utils/download' |
|||
import * as ProductionlineApi from '@/api/wms/productionline' |
|||
import ProductionlineForm from './ProductionlineForm.vue' |
|||
|
|||
defineOptions({ name: 'Productionline' }) |
|||
|
|||
const message = useMessage() // 消息弹窗 |
|||
const { t } = useI18n() // 国际化 |
|||
|
|||
const loading = ref(true) // 列表的加载中 |
|||
const total = ref(0) // 列表的总页数 |
|||
const list = ref([]) // 列表的数据 |
|||
const queryParams = reactive({ |
|||
pageNo: 1, |
|||
pageSize: 10, |
|||
code: null, |
|||
name: null, |
|||
description: null, |
|||
type: null, |
|||
workshopCode: null, |
|||
rawLocationCode: null, |
|||
fgLocationCode: null, |
|||
available: null, |
|||
activeTime: [], |
|||
expireTime: [], |
|||
remark: null, |
|||
createTime: [], |
|||
creator: null |
|||
}) |
|||
const queryFormRef = ref() // 搜索的表单 |
|||
const exportLoading = ref(false) // 导出的加载中 |
|||
|
|||
/** 查询列表 */ |
|||
const getList = async () => { |
|||
loading.value = true |
|||
try { |
|||
const data = await ProductionlineApi.getProductionlinePage(queryParams) |
|||
list.value = data.list |
|||
total.value = data.total |
|||
} finally { |
|||
loading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 搜索按钮操作 */ |
|||
const handleQuery = () => { |
|||
queryParams.pageNo = 1 |
|||
getList() |
|||
} |
|||
|
|||
/** 重置按钮操作 */ |
|||
const resetQuery = () => { |
|||
queryFormRef.value.resetFields() |
|||
handleQuery() |
|||
} |
|||
|
|||
/** 添加/修改操作 */ |
|||
const formRef = ref() |
|||
const openForm = (type: string, id?: number) => { |
|||
formRef.value.open(type, id) |
|||
} |
|||
|
|||
/** 删除按钮操作 */ |
|||
const handleDelete = async (id: number) => { |
|||
try { |
|||
// 删除的二次确认 |
|||
await message.delConfirm() |
|||
// 发起删除 |
|||
await ProductionlineApi.deleteProductionline(id) |
|||
message.success(t('common.delSuccess')) |
|||
// 刷新列表 |
|||
await getList() |
|||
} catch {} |
|||
} |
|||
|
|||
/** 导出按钮操作 */ |
|||
const handleExport = async () => { |
|||
try { |
|||
// 导出的二次确认 |
|||
await message.exportConfirm() |
|||
// 发起导出 |
|||
exportLoading.value = true |
|||
const data = await ProductionlineApi.exportProductionline(queryParams) |
|||
download.excel(data, '生产线.xls') |
|||
} catch { |
|||
} finally { |
|||
exportLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 初始化 **/ |
|||
onMounted(() => { |
|||
getList() |
|||
}) |
|||
</script> |
@ -0,0 +1,162 @@ |
|||
<template> |
|||
<Dialog :title="dialogTitle" v-model="dialogVisible"> |
|||
<div class="p-20px m--10px" style="max-height: 600px;overflow-y: auto;"> |
|||
<el-form |
|||
ref="formRef" |
|||
:model="formData" |
|||
:rules="formRules" |
|||
label-width="100px" |
|||
v-loading="formLoading" |
|||
> |
|||
<el-row> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="完工收货库位" prop="fgLocationCode"> |
|||
<el-input v-model="formData.fgLocationCode" placeholder="请输入完工收货库位" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="产线代码" prop="productionLineCode"> |
|||
<el-input v-model="formData.productionLineCode" placeholder="请输入产线代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="物品代码" prop="itemCode"> |
|||
<el-input v-model="formData.itemCode" placeholder="请输入物品代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select v-model="formData.available" placeholder="请选择是否可用"> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="formData.activeTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择生效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="formData.expireTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择失效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input v-model="formData.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<template #footer> |
|||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> |
|||
<el-button @click="dialogVisible = false">取 消</el-button> |
|||
</template> |
|||
</Dialog> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' |
|||
import * as ProductionlineitemApi from '@/api/wms/productionlineitem' |
|||
|
|||
const { t } = useI18n() // 国际化 |
|||
const message = useMessage() // 消息弹窗 |
|||
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示 |
|||
const dialogTitle = ref('') // 弹窗的标题 |
|||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改 |
|||
const formData = ref({ |
|||
fgLocationCode: undefined, |
|||
productionLineCode: undefined, |
|||
itemCode: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
}) |
|||
const formRules = reactive({ |
|||
fgLocationCode: [{ required: true, message: '完工收货库位不能为空', trigger: 'blur' }], |
|||
productionLineCode: [{ required: true, message: '产线代码不能为空', trigger: 'blur' }], |
|||
itemCode: [{ required: true, message: '物品代码不能为空', trigger: 'blur' }], |
|||
available: [{ required: true, message: '是否可用不能为空', trigger: 'change' }] |
|||
}) |
|||
const formRef = ref() // 表单 Ref |
|||
|
|||
/** 打开弹窗 */ |
|||
const open = async (type: string, id?: number) => { |
|||
dialogVisible.value = true |
|||
dialogTitle.value = t('action.' + type) |
|||
formType.value = type |
|||
resetForm() |
|||
// 修改时,设置数据 |
|||
if (id) { |
|||
formLoading.value = true |
|||
try { |
|||
formData.value = await ProductionlineitemApi.getProductionlineitem(id) |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
} |
|||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
|||
|
|||
/** 提交表单 */ |
|||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
|||
const submitForm = async () => { |
|||
// 校验表单 |
|||
if (!formRef) return |
|||
const valid = await formRef.value.validate() |
|||
if (!valid) return |
|||
// 提交请求 |
|||
formLoading.value = true |
|||
try { |
|||
const data = formData.value as unknown as ProductionlineitemApi.ProductionlineitemVO |
|||
if (formType.value === 'create') { |
|||
await ProductionlineitemApi.createProductionlineitem(data) |
|||
message.success(t('common.createSuccess')) |
|||
} else { |
|||
await ProductionlineitemApi.updateProductionlineitem(data) |
|||
message.success(t('common.updateSuccess')) |
|||
} |
|||
dialogVisible.value = false |
|||
// 发送操作成功的事件 |
|||
emit('success') |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 重置表单 */ |
|||
const resetForm = () => { |
|||
formData.value = { |
|||
fgLocationCode: undefined, |
|||
productionLineCode: undefined, |
|||
itemCode: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
} |
|||
formRef.value?.resetFields() |
|||
} |
|||
</script> |
@ -0,0 +1,287 @@ |
|||
<template> |
|||
<ContentWrap> |
|||
<!-- 搜索工作栏 --> |
|||
<el-form |
|||
class="-mb-15px" |
|||
:model="queryParams" |
|||
ref="queryFormRef" |
|||
:inline="true" |
|||
label-width="68px" |
|||
> |
|||
<el-form-item label="完工收货库位" prop="fgLocationCode"> |
|||
<el-input |
|||
v-model="queryParams.fgLocationCode" |
|||
placeholder="请输入完工收货库位" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="产线代码" prop="productionLineCode"> |
|||
<el-input |
|||
v-model="queryParams.productionLineCode" |
|||
placeholder="请输入产线代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="物品代码" prop="itemCode"> |
|||
<el-input |
|||
v-model="queryParams.itemCode" |
|||
placeholder="请输入物品代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select |
|||
v-model="queryParams.available" |
|||
placeholder="请选择是否可用" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.activeTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.expireTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input |
|||
v-model="queryParams.remark" |
|||
placeholder="请输入备注" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建时间" prop="createTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.createTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建者ID" prop="creator"> |
|||
<el-input |
|||
v-model="queryParams.creator" |
|||
placeholder="请输入创建者ID" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="info" plain @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> |
|||
<el-button type="info" plain @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> |
|||
<el-button |
|||
type="primary" |
|||
@click="openForm('create')" |
|||
v-hasPermi="['wms:productionlineitem:create']" |
|||
> |
|||
<Icon icon="ep:plus" class="mr-5px" /> 新增 |
|||
</el-button> |
|||
<el-button |
|||
type="success" |
|||
@click="handleExport" |
|||
:loading="exportLoading" |
|||
v-hasPermi="['wms:productionlineitem:export']" |
|||
> |
|||
<Icon icon="ep:download" class="mr-5px" /> 导出 |
|||
</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</ContentWrap> |
|||
|
|||
<!-- 列表 --> |
|||
<ContentWrap> |
|||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> |
|||
<el-table-column label="完工收货库位" align="center" prop="fgLocationCode" width="150px" /> |
|||
<el-table-column label="产线代码" align="center" prop="productionLineCode" width="150px" /> |
|||
<el-table-column label="物品代码" align="center" prop="itemCode" width="150px" /> |
|||
<el-table-column label="是否可用" align="center" prop="available" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.TRUE_FALSE" :value="scope.row.available" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
label="生效时间" |
|||
align="center" |
|||
prop="activeTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column |
|||
label="失效时间" |
|||
align="center" |
|||
prop="expireTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="备注" align="center" prop="remark" width="150px" /> |
|||
<el-table-column |
|||
label="创建时间" |
|||
align="center" |
|||
prop="createTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="创建者ID" align="center" prop="creator" width="150px" /> |
|||
<el-table-column label="操作" align="center" width="150px" fixed="right"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
link |
|||
type="primary" |
|||
@click="openForm('update', scope.row.id)" |
|||
v-hasPermi="['wms:productionlineitem:update']" |
|||
> |
|||
编辑 |
|||
</el-button> |
|||
<el-button |
|||
link |
|||
type="danger" |
|||
@click="handleDelete(scope.row.id)" |
|||
v-hasPermi="['wms:productionlineitem:delete']" |
|||
> |
|||
删除 |
|||
</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 分页 --> |
|||
<Pagination |
|||
:total="total" |
|||
v-model:page="queryParams.pageNo" |
|||
v-model:limit="queryParams.pageSize" |
|||
@pagination="getList" |
|||
/> |
|||
</ContentWrap> |
|||
|
|||
<!-- 表单弹窗:添加/修改 --> |
|||
<ProductionlineitemForm ref="formRef" @success="getList" /> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' |
|||
import { dateFormatter } from '@/utils/formatTime' |
|||
import download from '@/utils/download' |
|||
import * as ProductionlineitemApi from '@/api/wms/productionlineitem' |
|||
import ProductionlineitemForm from './ProductionlineitemForm.vue' |
|||
|
|||
defineOptions({ name: 'Productionlineitem' }) |
|||
|
|||
const message = useMessage() // 消息弹窗 |
|||
const { t } = useI18n() // 国际化 |
|||
|
|||
const loading = ref(true) // 列表的加载中 |
|||
const total = ref(0) // 列表的总页数 |
|||
const list = ref([]) // 列表的数据 |
|||
const queryParams = reactive({ |
|||
pageNo: 1, |
|||
pageSize: 10, |
|||
fgLocationCode: null, |
|||
productionLineCode: null, |
|||
itemCode: null, |
|||
available: null, |
|||
activeTime: [], |
|||
expireTime: [], |
|||
remark: null, |
|||
createTime: [], |
|||
creator: null |
|||
}) |
|||
const queryFormRef = ref() // 搜索的表单 |
|||
const exportLoading = ref(false) // 导出的加载中 |
|||
|
|||
/** 查询列表 */ |
|||
const getList = async () => { |
|||
loading.value = true |
|||
try { |
|||
const data = await ProductionlineitemApi.getProductionlineitemPage(queryParams) |
|||
list.value = data.list |
|||
total.value = data.total |
|||
} finally { |
|||
loading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 搜索按钮操作 */ |
|||
const handleQuery = () => { |
|||
queryParams.pageNo = 1 |
|||
getList() |
|||
} |
|||
|
|||
/** 重置按钮操作 */ |
|||
const resetQuery = () => { |
|||
queryFormRef.value.resetFields() |
|||
handleQuery() |
|||
} |
|||
|
|||
/** 添加/修改操作 */ |
|||
const formRef = ref() |
|||
const openForm = (type: string, id?: number) => { |
|||
formRef.value.open(type, id) |
|||
} |
|||
|
|||
/** 删除按钮操作 */ |
|||
const handleDelete = async (id: number) => { |
|||
try { |
|||
// 删除的二次确认 |
|||
await message.delConfirm() |
|||
// 发起删除 |
|||
await ProductionlineitemApi.deleteProductionlineitem(id) |
|||
message.success(t('common.delSuccess')) |
|||
// 刷新列表 |
|||
await getList() |
|||
} catch {} |
|||
} |
|||
|
|||
/** 导出按钮操作 */ |
|||
const handleExport = async () => { |
|||
try { |
|||
// 导出的二次确认 |
|||
await message.exportConfirm() |
|||
// 发起导出 |
|||
exportLoading.value = true |
|||
const data = await ProductionlineitemApi.exportProductionlineitem(queryParams) |
|||
download.excel(data, '生产线物料关系.xls') |
|||
} catch { |
|||
} finally { |
|||
exportLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 初始化 **/ |
|||
onMounted(() => { |
|||
getList() |
|||
}) |
|||
</script> |
@ -0,0 +1,167 @@ |
|||
<template> |
|||
<Dialog :title="dialogTitle" v-model="dialogVisible"> |
|||
<div class="p-20px m--10px" style="max-height: 600px;overflow-y: auto;"> |
|||
<el-form |
|||
ref="formRef" |
|||
:model="formData" |
|||
:rules="formRules" |
|||
label-width="100px" |
|||
v-loading="formLoading" |
|||
> |
|||
<el-row> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="代码" prop="code"> |
|||
<el-input v-model="formData.code" placeholder="请输入代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input v-model="formData.name" placeholder="请输入名称" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="描述"> |
|||
<Editor v-model="formData.description" height="150px" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="客户代码" prop="customerCode"> |
|||
<el-input v-model="formData.customerCode" placeholder="请输入客户代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select v-model="formData.available" placeholder="请选择是否可用"> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="formData.activeTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择生效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="formData.expireTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择失效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input v-model="formData.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<template #footer> |
|||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> |
|||
<el-button @click="dialogVisible = false">取 消</el-button> |
|||
</template> |
|||
</Dialog> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' |
|||
import * as ProjectApi from '@/api/wms/project' |
|||
|
|||
const { t } = useI18n() // 国际化 |
|||
const message = useMessage() // 消息弹窗 |
|||
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示 |
|||
const dialogTitle = ref('') // 弹窗的标题 |
|||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改 |
|||
const formData = ref({ |
|||
code: undefined, |
|||
name: undefined, |
|||
description: undefined, |
|||
customerCode: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
}) |
|||
const formRules = reactive({ |
|||
code: [{ required: true, message: '代码不能为空', trigger: 'blur' }], |
|||
available: [{ required: true, message: '是否可用不能为空', trigger: 'change' }] |
|||
}) |
|||
const formRef = ref() // 表单 Ref |
|||
|
|||
/** 打开弹窗 */ |
|||
const open = async (type: string, id?: number) => { |
|||
dialogVisible.value = true |
|||
dialogTitle.value = t('action.' + type) |
|||
formType.value = type |
|||
resetForm() |
|||
// 修改时,设置数据 |
|||
if (id) { |
|||
formLoading.value = true |
|||
try { |
|||
formData.value = await ProjectApi.getProject(id) |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
} |
|||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
|||
|
|||
/** 提交表单 */ |
|||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
|||
const submitForm = async () => { |
|||
// 校验表单 |
|||
if (!formRef) return |
|||
const valid = await formRef.value.validate() |
|||
if (!valid) return |
|||
// 提交请求 |
|||
formLoading.value = true |
|||
try { |
|||
const data = formData.value as unknown as ProjectApi.ProjectVO |
|||
if (formType.value === 'create') { |
|||
await ProjectApi.createProject(data) |
|||
message.success(t('common.createSuccess')) |
|||
} else { |
|||
await ProjectApi.updateProject(data) |
|||
message.success(t('common.updateSuccess')) |
|||
} |
|||
dialogVisible.value = false |
|||
// 发送操作成功的事件 |
|||
emit('success') |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 重置表单 */ |
|||
const resetForm = () => { |
|||
formData.value = { |
|||
code: undefined, |
|||
name: undefined, |
|||
description: undefined, |
|||
customerCode: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
} |
|||
formRef.value?.resetFields() |
|||
} |
|||
</script> |
@ -0,0 +1,285 @@ |
|||
<template> |
|||
<ContentWrap> |
|||
<!-- 搜索工作栏 --> |
|||
<el-form |
|||
class="-mb-15px" |
|||
:model="queryParams" |
|||
ref="queryFormRef" |
|||
:inline="true" |
|||
label-width="68px" |
|||
> |
|||
<el-form-item label="代码" prop="code"> |
|||
<el-input |
|||
v-model="queryParams.code" |
|||
placeholder="请输入代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input |
|||
v-model="queryParams.name" |
|||
placeholder="请输入名称" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="客户代码" prop="customerCode"> |
|||
<el-input |
|||
v-model="queryParams.customerCode" |
|||
placeholder="请输入客户代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select |
|||
v-model="queryParams.available" |
|||
placeholder="请选择是否可用" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.activeTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.expireTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input |
|||
v-model="queryParams.remark" |
|||
placeholder="请输入备注" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建时间" prop="createTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.createTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建者ID" prop="creator"> |
|||
<el-input |
|||
v-model="queryParams.creator" |
|||
placeholder="请输入创建者ID" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="info" plain @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> |
|||
<el-button type="info" plain @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> |
|||
<el-button type="primary" @click="openForm('create')" v-hasPermi="['wms:project:create']"> |
|||
<Icon icon="ep:plus" class="mr-5px" /> 新增 |
|||
</el-button> |
|||
<el-button |
|||
type="success" |
|||
@click="handleExport" |
|||
:loading="exportLoading" |
|||
v-hasPermi="['wms:project:export']" |
|||
> |
|||
<Icon icon="ep:download" class="mr-5px" /> 导出 |
|||
</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</ContentWrap> |
|||
|
|||
<!-- 列表 --> |
|||
<ContentWrap> |
|||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> |
|||
<el-table-column label="代码" align="center" prop="code" width="150px" /> |
|||
<el-table-column label="名称" align="center" prop="name" width="150px" /> |
|||
<el-table-column label="描述" align="center" prop="description" width="150px" /> |
|||
<el-table-column label="客户代码" align="center" prop="customerCode" width="150px" /> |
|||
<el-table-column label="是否可用" align="center" prop="available" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.TRUE_FALSE" :value="scope.row.available" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
label="生效时间" |
|||
align="center" |
|||
prop="activeTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column |
|||
label="失效时间" |
|||
align="center" |
|||
prop="expireTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="备注" align="center" prop="remark" width="150px" /> |
|||
<el-table-column |
|||
label="创建时间" |
|||
align="center" |
|||
prop="createTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="创建者ID" align="center" prop="creator" width="150px" /> |
|||
<el-table-column label="操作" align="center" width="150px" fixed="right"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
link |
|||
type="primary" |
|||
@click="openForm('update', scope.row.id)" |
|||
v-hasPermi="['wms:project:update']" |
|||
> |
|||
编辑 |
|||
</el-button> |
|||
<el-button |
|||
link |
|||
type="danger" |
|||
@click="handleDelete(scope.row.id)" |
|||
v-hasPermi="['wms:project:delete']" |
|||
> |
|||
删除 |
|||
</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 分页 --> |
|||
<Pagination |
|||
:total="total" |
|||
v-model:page="queryParams.pageNo" |
|||
v-model:limit="queryParams.pageSize" |
|||
@pagination="getList" |
|||
/> |
|||
</ContentWrap> |
|||
|
|||
<!-- 表单弹窗:添加/修改 --> |
|||
<ProjectForm ref="formRef" @success="getList" /> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' |
|||
import { dateFormatter } from '@/utils/formatTime' |
|||
import download from '@/utils/download' |
|||
import * as ProjectApi from '@/api/wms/project' |
|||
import ProjectForm from './ProjectForm.vue' |
|||
|
|||
defineOptions({ name: 'Project' }) |
|||
|
|||
const message = useMessage() // 消息弹窗 |
|||
const { t } = useI18n() // 国际化 |
|||
|
|||
const loading = ref(true) // 列表的加载中 |
|||
const total = ref(0) // 列表的总页数 |
|||
const list = ref([]) // 列表的数据 |
|||
const queryParams = reactive({ |
|||
pageNo: 1, |
|||
pageSize: 10, |
|||
code: null, |
|||
name: null, |
|||
description: null, |
|||
customerCode: null, |
|||
available: null, |
|||
activeTime: [], |
|||
expireTime: [], |
|||
remark: null, |
|||
createTime: [], |
|||
creator: null |
|||
}) |
|||
const queryFormRef = ref() // 搜索的表单 |
|||
const exportLoading = ref(false) // 导出的加载中 |
|||
|
|||
/** 查询列表 */ |
|||
const getList = async () => { |
|||
loading.value = true |
|||
try { |
|||
const data = await ProjectApi.getProjectPage(queryParams) |
|||
list.value = data.list |
|||
total.value = data.total |
|||
} finally { |
|||
loading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 搜索按钮操作 */ |
|||
const handleQuery = () => { |
|||
queryParams.pageNo = 1 |
|||
getList() |
|||
} |
|||
|
|||
/** 重置按钮操作 */ |
|||
const resetQuery = () => { |
|||
queryFormRef.value.resetFields() |
|||
handleQuery() |
|||
} |
|||
|
|||
/** 添加/修改操作 */ |
|||
const formRef = ref() |
|||
const openForm = (type: string, id?: number) => { |
|||
formRef.value.open(type, id) |
|||
} |
|||
|
|||
/** 删除按钮操作 */ |
|||
const handleDelete = async (id: number) => { |
|||
try { |
|||
// 删除的二次确认 |
|||
await message.delConfirm() |
|||
// 发起删除 |
|||
await ProjectApi.deleteProject(id) |
|||
message.success(t('common.delSuccess')) |
|||
// 刷新列表 |
|||
await getList() |
|||
} catch {} |
|||
} |
|||
|
|||
/** 导出按钮操作 */ |
|||
const handleExport = async () => { |
|||
try { |
|||
// 导出的二次确认 |
|||
await message.exportConfirm() |
|||
// 发起导出 |
|||
exportLoading.value = true |
|||
const data = await ProjectApi.exportProject(queryParams) |
|||
download.excel(data, '项目.xls') |
|||
} catch { |
|||
} finally { |
|||
exportLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 初始化 **/ |
|||
onMounted(() => { |
|||
getList() |
|||
}) |
|||
</script> |
@ -0,0 +1,177 @@ |
|||
<template> |
|||
<Dialog :title="dialogTitle" v-model="dialogVisible"> |
|||
<div class="p-20px m--10px" style="max-height: 600px;overflow-y: auto;"> |
|||
<el-form |
|||
ref="formRef" |
|||
:model="formData" |
|||
:rules="formRules" |
|||
label-width="100px" |
|||
v-loading="formLoading" |
|||
> |
|||
<el-row> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="供应商代码" prop="supplierCode"> |
|||
<el-input v-model="formData.supplierCode" placeholder="请输入供应商代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="物料代码" prop="itemCode"> |
|||
<el-input v-model="formData.itemCode" placeholder="请输入物料代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="货币" prop="currency"> |
|||
<el-select v-model="formData.currency" placeholder="请选择货币"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.CURRENCY)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="价格" prop="price"> |
|||
<el-input v-model="formData.price" placeholder="请输入价格" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select v-model="formData.available" placeholder="请选择是否可用"> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="formData.activeTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择生效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="formData.expireTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择失效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input v-model="formData.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<template #footer> |
|||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> |
|||
<el-button @click="dialogVisible = false">取 消</el-button> |
|||
</template> |
|||
</Dialog> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import * as PurchasepriceApi from '@/api/wms/purchaseprice' |
|||
|
|||
const { t } = useI18n() // 国际化 |
|||
const message = useMessage() // 消息弹窗 |
|||
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示 |
|||
const dialogTitle = ref('') // 弹窗的标题 |
|||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改 |
|||
const formData = ref({ |
|||
supplierCode: undefined, |
|||
itemCode: undefined, |
|||
currency: undefined, |
|||
price: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
}) |
|||
const formRules = reactive({ |
|||
supplierCode: [{ required: true, message: '供应商代码不能为空', trigger: 'blur' }], |
|||
itemCode: [{ required: true, message: '物料代码不能为空', trigger: 'blur' }], |
|||
currency: [{ required: true, message: '货币不能为空', trigger: 'change' }], |
|||
price: [{ required: true, message: '价格不能为空', trigger: 'blur' }], |
|||
available: [{ required: true, message: '是否可用不能为空', trigger: 'change' }] |
|||
}) |
|||
const formRef = ref() // 表单 Ref |
|||
|
|||
/** 打开弹窗 */ |
|||
const open = async (type: string, id?: number) => { |
|||
dialogVisible.value = true |
|||
dialogTitle.value = t('action.' + type) |
|||
formType.value = type |
|||
resetForm() |
|||
// 修改时,设置数据 |
|||
if (id) { |
|||
formLoading.value = true |
|||
try { |
|||
formData.value = await PurchasepriceApi.getPurchaseprice(id) |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
} |
|||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
|||
|
|||
/** 提交表单 */ |
|||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
|||
const submitForm = async () => { |
|||
// 校验表单 |
|||
if (!formRef) return |
|||
const valid = await formRef.value.validate() |
|||
if (!valid) return |
|||
// 提交请求 |
|||
formLoading.value = true |
|||
try { |
|||
const data = formData.value as unknown as PurchasepriceApi.PurchasepriceVO |
|||
if (formType.value === 'create') { |
|||
await PurchasepriceApi.createPurchaseprice(data) |
|||
message.success(t('common.createSuccess')) |
|||
} else { |
|||
await PurchasepriceApi.updatePurchaseprice(data) |
|||
message.success(t('common.updateSuccess')) |
|||
} |
|||
dialogVisible.value = false |
|||
// 发送操作成功的事件 |
|||
emit('success') |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 重置表单 */ |
|||
const resetForm = () => { |
|||
formData.value = { |
|||
supplierCode: undefined, |
|||
itemCode: undefined, |
|||
currency: undefined, |
|||
price: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
} |
|||
formRef.value?.resetFields() |
|||
} |
|||
</script> |
@ -0,0 +1,308 @@ |
|||
<template> |
|||
<ContentWrap> |
|||
<!-- 搜索工作栏 --> |
|||
<el-form |
|||
class="-mb-15px" |
|||
:model="queryParams" |
|||
ref="queryFormRef" |
|||
:inline="true" |
|||
label-width="68px" |
|||
> |
|||
<el-form-item label="供应商代码" prop="supplierCode"> |
|||
<el-input |
|||
v-model="queryParams.supplierCode" |
|||
placeholder="请输入供应商代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="物料代码" prop="itemCode"> |
|||
<el-input |
|||
v-model="queryParams.itemCode" |
|||
placeholder="请输入物料代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="货币" prop="currency"> |
|||
<el-select |
|||
v-model="queryParams.currency" |
|||
placeholder="请选择货币" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.CURRENCY)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="价格" prop="price"> |
|||
<el-input |
|||
v-model="queryParams.price" |
|||
placeholder="请输入价格" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select |
|||
v-model="queryParams.available" |
|||
placeholder="请选择是否可用" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.activeTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.expireTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input |
|||
v-model="queryParams.remark" |
|||
placeholder="请输入备注" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建时间" prop="createTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.createTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建者ID" prop="creator"> |
|||
<el-input |
|||
v-model="queryParams.creator" |
|||
placeholder="请输入创建者ID" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="info" plain @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> |
|||
<el-button type="info" plain @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> |
|||
<el-button |
|||
type="primary" |
|||
@click="openForm('create')" |
|||
v-hasPermi="['wms:purchaseprice:create']" |
|||
> |
|||
<Icon icon="ep:plus" class="mr-5px" /> 新增 |
|||
</el-button> |
|||
<el-button |
|||
type="success" |
|||
@click="handleExport" |
|||
:loading="exportLoading" |
|||
v-hasPermi="['wms:purchaseprice:export']" |
|||
> |
|||
<Icon icon="ep:download" class="mr-5px" /> 导出 |
|||
</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</ContentWrap> |
|||
|
|||
<!-- 列表 --> |
|||
<ContentWrap> |
|||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> |
|||
<el-table-column label="供应商代码" align="center" prop="supplierCode" width="150px" /> |
|||
<el-table-column label="物料代码" align="center" prop="itemCode" width="150px" /> |
|||
<el-table-column label="货币" align="center" prop="currency" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.CURRENCY" :value="scope.row.currency" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="价格" align="center" prop="price" width="150px" /> |
|||
<el-table-column label="是否可用" align="center" prop="available" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.TRUE_FALSE" :value="scope.row.available" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
label="生效时间" |
|||
align="center" |
|||
prop="activeTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column |
|||
label="失效时间" |
|||
align="center" |
|||
prop="expireTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="备注" align="center" prop="remark" width="150px" /> |
|||
<el-table-column |
|||
label="创建时间" |
|||
align="center" |
|||
prop="createTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="创建者ID" align="center" prop="creator" width="150px" /> |
|||
<el-table-column label="操作" align="center" width="150px" fixed="right"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
link |
|||
type="primary" |
|||
@click="openForm('update', scope.row.id)" |
|||
v-hasPermi="['wms:purchaseprice:update']" |
|||
> |
|||
编辑 |
|||
</el-button> |
|||
<el-button |
|||
link |
|||
type="danger" |
|||
@click="handleDelete(scope.row.id)" |
|||
v-hasPermi="['wms:purchaseprice:delete']" |
|||
> |
|||
删除 |
|||
</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 分页 --> |
|||
<Pagination |
|||
:total="total" |
|||
v-model:page="queryParams.pageNo" |
|||
v-model:limit="queryParams.pageSize" |
|||
@pagination="getList" |
|||
/> |
|||
</ContentWrap> |
|||
|
|||
<!-- 表单弹窗:添加/修改 --> |
|||
<PurchasepriceForm ref="formRef" @success="getList" /> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import { dateFormatter } from '@/utils/formatTime' |
|||
import download from '@/utils/download' |
|||
import * as PurchasepriceApi from '@/api/wms/purchaseprice' |
|||
import PurchasepriceForm from './PurchasepriceForm.vue' |
|||
|
|||
defineOptions({ name: 'Purchaseprice' }) |
|||
|
|||
const message = useMessage() // 消息弹窗 |
|||
const { t } = useI18n() // 国际化 |
|||
|
|||
const loading = ref(true) // 列表的加载中 |
|||
const total = ref(0) // 列表的总页数 |
|||
const list = ref([]) // 列表的数据 |
|||
const queryParams = reactive({ |
|||
pageNo: 1, |
|||
pageSize: 10, |
|||
supplierCode: null, |
|||
itemCode: null, |
|||
currency: null, |
|||
price: null, |
|||
available: null, |
|||
activeTime: [], |
|||
expireTime: [], |
|||
remark: null, |
|||
createTime: [], |
|||
creator: null |
|||
}) |
|||
const queryFormRef = ref() // 搜索的表单 |
|||
const exportLoading = ref(false) // 导出的加载中 |
|||
|
|||
/** 查询列表 */ |
|||
const getList = async () => { |
|||
loading.value = true |
|||
try { |
|||
const data = await PurchasepriceApi.getPurchasepricePage(queryParams) |
|||
list.value = data.list |
|||
total.value = data.total |
|||
} finally { |
|||
loading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 搜索按钮操作 */ |
|||
const handleQuery = () => { |
|||
queryParams.pageNo = 1 |
|||
getList() |
|||
} |
|||
|
|||
/** 重置按钮操作 */ |
|||
const resetQuery = () => { |
|||
queryFormRef.value.resetFields() |
|||
handleQuery() |
|||
} |
|||
|
|||
/** 添加/修改操作 */ |
|||
const formRef = ref() |
|||
const openForm = (type: string, id?: number) => { |
|||
formRef.value.open(type, id) |
|||
} |
|||
|
|||
/** 删除按钮操作 */ |
|||
const handleDelete = async (id: number) => { |
|||
try { |
|||
// 删除的二次确认 |
|||
await message.delConfirm() |
|||
// 发起删除 |
|||
await PurchasepriceApi.deletePurchaseprice(id) |
|||
message.success(t('common.delSuccess')) |
|||
// 刷新列表 |
|||
await getList() |
|||
} catch {} |
|||
} |
|||
|
|||
/** 导出按钮操作 */ |
|||
const handleExport = async () => { |
|||
try { |
|||
// 导出的二次确认 |
|||
await message.exportConfirm() |
|||
// 发起导出 |
|||
exportLoading.value = true |
|||
const data = await PurchasepriceApi.exportPurchaseprice(queryParams) |
|||
download.excel(data, '采购价格单.xls') |
|||
} catch { |
|||
} finally { |
|||
exportLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 初始化 **/ |
|||
onMounted(() => { |
|||
getList() |
|||
}) |
|||
</script> |
@ -0,0 +1,177 @@ |
|||
<template> |
|||
<Dialog :title="dialogTitle" v-model="dialogVisible"> |
|||
<div class="p-20px m--10px" style="max-height: 600px;overflow-y: auto;"> |
|||
<el-form |
|||
ref="formRef" |
|||
:model="formData" |
|||
:rules="formRules" |
|||
label-width="100px" |
|||
v-loading="formLoading" |
|||
> |
|||
<el-row> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="客户代码" prop="customercode"> |
|||
<el-input v-model="formData.customercode" placeholder="请输入客户代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="物料代码" prop="itemcode"> |
|||
<el-input v-model="formData.itemcode" placeholder="请输入物料代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="货币" prop="currency"> |
|||
<el-select v-model="formData.currency" placeholder="请选择货币"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.CURRENCY)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="价格" prop="price"> |
|||
<el-input v-model="formData.price" placeholder="请输入价格" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select v-model="formData.available" placeholder="请选择是否可用"> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="formData.activeTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择生效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="formData.expireTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择失效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input v-model="formData.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<template #footer> |
|||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> |
|||
<el-button @click="dialogVisible = false">取 消</el-button> |
|||
</template> |
|||
</Dialog> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import * as SalepriceApi from '@/api/wms/saleprice' |
|||
|
|||
const { t } = useI18n() // 国际化 |
|||
const message = useMessage() // 消息弹窗 |
|||
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示 |
|||
const dialogTitle = ref('') // 弹窗的标题 |
|||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改 |
|||
const formData = ref({ |
|||
customercode: undefined, |
|||
itemcode: undefined, |
|||
currency: undefined, |
|||
price: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
}) |
|||
const formRules = reactive({ |
|||
customercode: [{ required: true, message: '客户代码不能为空', trigger: 'blur' }], |
|||
itemcode: [{ required: true, message: '物料代码不能为空', trigger: 'blur' }], |
|||
currency: [{ required: true, message: '货币不能为空', trigger: 'change' }], |
|||
price: [{ required: true, message: '价格不能为空', trigger: 'blur' }], |
|||
available: [{ required: true, message: '是否可用不能为空', trigger: 'change' }] |
|||
}) |
|||
const formRef = ref() // 表单 Ref |
|||
|
|||
/** 打开弹窗 */ |
|||
const open = async (type: string, id?: number) => { |
|||
dialogVisible.value = true |
|||
dialogTitle.value = t('action.' + type) |
|||
formType.value = type |
|||
resetForm() |
|||
// 修改时,设置数据 |
|||
if (id) { |
|||
formLoading.value = true |
|||
try { |
|||
formData.value = await SalepriceApi.getSaleprice(id) |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
} |
|||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
|||
|
|||
/** 提交表单 */ |
|||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
|||
const submitForm = async () => { |
|||
// 校验表单 |
|||
if (!formRef) return |
|||
const valid = await formRef.value.validate() |
|||
if (!valid) return |
|||
// 提交请求 |
|||
formLoading.value = true |
|||
try { |
|||
const data = formData.value as unknown as SalepriceApi.SalepriceVO |
|||
if (formType.value === 'create') { |
|||
await SalepriceApi.createSaleprice(data) |
|||
message.success(t('common.createSuccess')) |
|||
} else { |
|||
await SalepriceApi.updateSaleprice(data) |
|||
message.success(t('common.updateSuccess')) |
|||
} |
|||
dialogVisible.value = false |
|||
// 发送操作成功的事件 |
|||
emit('success') |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 重置表单 */ |
|||
const resetForm = () => { |
|||
formData.value = { |
|||
customercode: undefined, |
|||
itemcode: undefined, |
|||
currency: undefined, |
|||
price: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
} |
|||
formRef.value?.resetFields() |
|||
} |
|||
</script> |
@ -0,0 +1,308 @@ |
|||
<template> |
|||
<ContentWrap> |
|||
<!-- 搜索工作栏 --> |
|||
<el-form |
|||
class="-mb-15px" |
|||
:model="queryParams" |
|||
ref="queryFormRef" |
|||
:inline="true" |
|||
label-width="68px" |
|||
> |
|||
<el-form-item label="客户代码" prop="customercode"> |
|||
<el-input |
|||
v-model="queryParams.customercode" |
|||
placeholder="请输入客户代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="物料代码" prop="itemcode"> |
|||
<el-input |
|||
v-model="queryParams.itemcode" |
|||
placeholder="请输入物料代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="货币" prop="currency"> |
|||
<el-select |
|||
v-model="queryParams.currency" |
|||
placeholder="请选择货币" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.CURRENCY)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="价格" prop="price"> |
|||
<el-input |
|||
v-model="queryParams.price" |
|||
placeholder="请输入价格" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select |
|||
v-model="queryParams.available" |
|||
placeholder="请选择是否可用" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.activeTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.expireTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input |
|||
v-model="queryParams.remark" |
|||
placeholder="请输入备注" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建时间" prop="createTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.createTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建者ID" prop="creator"> |
|||
<el-input |
|||
v-model="queryParams.creator" |
|||
placeholder="请输入创建者ID" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="info" plain @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> |
|||
<el-button type="info" plain @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> |
|||
<el-button |
|||
type="primary" |
|||
@click="openForm('create')" |
|||
v-hasPermi="['wms:saleprice:create']" |
|||
> |
|||
<Icon icon="ep:plus" class="mr-5px" /> 新增 |
|||
</el-button> |
|||
<el-button |
|||
type="success" |
|||
@click="handleExport" |
|||
:loading="exportLoading" |
|||
v-hasPermi="['wms:saleprice:export']" |
|||
> |
|||
<Icon icon="ep:download" class="mr-5px" /> 导出 |
|||
</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</ContentWrap> |
|||
|
|||
<!-- 列表 --> |
|||
<ContentWrap> |
|||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> |
|||
<el-table-column label="客户代码" align="center" prop="customercode" width="150px" /> |
|||
<el-table-column label="物料代码" align="center" prop="itemcode" width="150px" /> |
|||
<el-table-column label="货币" align="center" prop="currency" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.CURRENCY" :value="scope.row.currency" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="价格" align="center" prop="price" width="150px" /> |
|||
<el-table-column label="是否可用" align="center" prop="available" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.TRUE_FALSE" :value="scope.row.available" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
label="生效时间" |
|||
align="center" |
|||
prop="activeTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column |
|||
label="失效时间" |
|||
align="center" |
|||
prop="expireTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="备注" align="center" prop="remark" width="150px" /> |
|||
<el-table-column |
|||
label="创建时间" |
|||
align="center" |
|||
prop="createTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="创建者ID" align="center" prop="creator" width="150px" /> |
|||
<el-table-column label="操作" align="center" width="150px" fixed="right"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
link |
|||
type="primary" |
|||
@click="openForm('update', scope.row.id)" |
|||
v-hasPermi="['wms:saleprice:update']" |
|||
> |
|||
编辑 |
|||
</el-button> |
|||
<el-button |
|||
link |
|||
type="danger" |
|||
@click="handleDelete(scope.row.id)" |
|||
v-hasPermi="['wms:saleprice:delete']" |
|||
> |
|||
删除 |
|||
</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 分页 --> |
|||
<Pagination |
|||
:total="total" |
|||
v-model:page="queryParams.pageNo" |
|||
v-model:limit="queryParams.pageSize" |
|||
@pagination="getList" |
|||
/> |
|||
</ContentWrap> |
|||
|
|||
<!-- 表单弹窗:添加/修改 --> |
|||
<SalepriceForm ref="formRef" @success="getList" /> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import { dateFormatter } from '@/utils/formatTime' |
|||
import download from '@/utils/download' |
|||
import * as SalepriceApi from '@/api/wms/saleprice' |
|||
import SalepriceForm from './SalepriceForm.vue' |
|||
|
|||
defineOptions({ name: 'Saleprice' }) |
|||
|
|||
const message = useMessage() // 消息弹窗 |
|||
const { t } = useI18n() // 国际化 |
|||
|
|||
const loading = ref(true) // 列表的加载中 |
|||
const total = ref(0) // 列表的总页数 |
|||
const list = ref([]) // 列表的数据 |
|||
const queryParams = reactive({ |
|||
pageNo: 1, |
|||
pageSize: 10, |
|||
customercode: null, |
|||
itemcode: null, |
|||
currency: null, |
|||
price: null, |
|||
available: null, |
|||
activeTime: [], |
|||
expireTime: [], |
|||
remark: null, |
|||
createTime: [], |
|||
creator: null |
|||
}) |
|||
const queryFormRef = ref() // 搜索的表单 |
|||
const exportLoading = ref(false) // 导出的加载中 |
|||
|
|||
/** 查询列表 */ |
|||
const getList = async () => { |
|||
loading.value = true |
|||
try { |
|||
const data = await SalepriceApi.getSalepricePage(queryParams) |
|||
list.value = data.list |
|||
total.value = data.total |
|||
} finally { |
|||
loading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 搜索按钮操作 */ |
|||
const handleQuery = () => { |
|||
queryParams.pageNo = 1 |
|||
getList() |
|||
} |
|||
|
|||
/** 重置按钮操作 */ |
|||
const resetQuery = () => { |
|||
queryFormRef.value.resetFields() |
|||
handleQuery() |
|||
} |
|||
|
|||
/** 添加/修改操作 */ |
|||
const formRef = ref() |
|||
const openForm = (type: string, id?: number) => { |
|||
formRef.value.open(type, id) |
|||
} |
|||
|
|||
/** 删除按钮操作 */ |
|||
const handleDelete = async (id: number) => { |
|||
try { |
|||
// 删除的二次确认 |
|||
await message.delConfirm() |
|||
// 发起删除 |
|||
await SalepriceApi.deleteSaleprice(id) |
|||
message.success(t('common.delSuccess')) |
|||
// 刷新列表 |
|||
await getList() |
|||
} catch {} |
|||
} |
|||
|
|||
/** 导出按钮操作 */ |
|||
const handleExport = async () => { |
|||
try { |
|||
// 导出的二次确认 |
|||
await message.exportConfirm() |
|||
// 发起导出 |
|||
exportLoading.value = true |
|||
const data = await SalepriceApi.exportSaleprice(queryParams) |
|||
download.excel(data, '销售价格单.xls') |
|||
} catch { |
|||
} finally { |
|||
exportLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 初始化 **/ |
|||
onMounted(() => { |
|||
getList() |
|||
}) |
|||
</script> |
@ -0,0 +1,177 @@ |
|||
<template> |
|||
<Dialog :title="dialogTitle" v-model="dialogVisible"> |
|||
<div class="p-20px m--10px" style="max-height: 600px;overflow-y: auto;"> |
|||
<el-form |
|||
ref="formRef" |
|||
:model="formData" |
|||
:rules="formRules" |
|||
label-width="100px" |
|||
v-loading="formLoading" |
|||
> |
|||
<el-row> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="供应商代码" prop="supplierCode"> |
|||
<el-input v-model="formData.supplierCode" placeholder="请输入供应商代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="物料代码" prop="itemCode"> |
|||
<el-input v-model="formData.itemCode" placeholder="请输入物料代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="货币" prop="currency"> |
|||
<el-select v-model="formData.currency" placeholder="请选择货币"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.CURRENCY)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="价格" prop="price"> |
|||
<el-input v-model="formData.price" placeholder="请输入价格" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select v-model="formData.available" placeholder="请选择是否可用"> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="formData.activeTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择生效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="formData.expireTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择失效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input v-model="formData.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<template #footer> |
|||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> |
|||
<el-button @click="dialogVisible = false">取 消</el-button> |
|||
</template> |
|||
</Dialog> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import * as StdcostpriceApi from '@/api/wms/stdcostprice' |
|||
|
|||
const { t } = useI18n() // 国际化 |
|||
const message = useMessage() // 消息弹窗 |
|||
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示 |
|||
const dialogTitle = ref('') // 弹窗的标题 |
|||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改 |
|||
const formData = ref({ |
|||
supplierCode: undefined, |
|||
itemCode: undefined, |
|||
currency: undefined, |
|||
price: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
}) |
|||
const formRules = reactive({ |
|||
supplierCode: [{ required: true, message: '供应商代码不能为空', trigger: 'blur' }], |
|||
itemCode: [{ required: true, message: '物料代码不能为空', trigger: 'blur' }], |
|||
currency: [{ required: true, message: '货币不能为空', trigger: 'change' }], |
|||
price: [{ required: true, message: '价格不能为空', trigger: 'blur' }], |
|||
available: [{ required: true, message: '是否可用不能为空', trigger: 'change' }] |
|||
}) |
|||
const formRef = ref() // 表单 Ref |
|||
|
|||
/** 打开弹窗 */ |
|||
const open = async (type: string, id?: number) => { |
|||
dialogVisible.value = true |
|||
dialogTitle.value = t('action.' + type) |
|||
formType.value = type |
|||
resetForm() |
|||
// 修改时,设置数据 |
|||
if (id) { |
|||
formLoading.value = true |
|||
try { |
|||
formData.value = await StdcostpriceApi.getStdcostprice(id) |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
} |
|||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
|||
|
|||
/** 提交表单 */ |
|||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
|||
const submitForm = async () => { |
|||
// 校验表单 |
|||
if (!formRef) return |
|||
const valid = await formRef.value.validate() |
|||
if (!valid) return |
|||
// 提交请求 |
|||
formLoading.value = true |
|||
try { |
|||
const data = formData.value as unknown as StdcostpriceApi.StdcostpriceVO |
|||
if (formType.value === 'create') { |
|||
await StdcostpriceApi.createStdcostprice(data) |
|||
message.success(t('common.createSuccess')) |
|||
} else { |
|||
await StdcostpriceApi.updateStdcostprice(data) |
|||
message.success(t('common.updateSuccess')) |
|||
} |
|||
dialogVisible.value = false |
|||
// 发送操作成功的事件 |
|||
emit('success') |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 重置表单 */ |
|||
const resetForm = () => { |
|||
formData.value = { |
|||
supplierCode: undefined, |
|||
itemCode: undefined, |
|||
currency: undefined, |
|||
price: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
} |
|||
formRef.value?.resetFields() |
|||
} |
|||
</script> |
@ -0,0 +1,308 @@ |
|||
<template> |
|||
<ContentWrap> |
|||
<!-- 搜索工作栏 --> |
|||
<el-form |
|||
class="-mb-15px" |
|||
:model="queryParams" |
|||
ref="queryFormRef" |
|||
:inline="true" |
|||
label-width="68px" |
|||
> |
|||
<el-form-item label="供应商代码" prop="supplierCode"> |
|||
<el-input |
|||
v-model="queryParams.supplierCode" |
|||
placeholder="请输入供应商代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="物料代码" prop="itemCode"> |
|||
<el-input |
|||
v-model="queryParams.itemCode" |
|||
placeholder="请输入物料代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="货币" prop="currency"> |
|||
<el-select |
|||
v-model="queryParams.currency" |
|||
placeholder="请选择货币" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.CURRENCY)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="价格" prop="price"> |
|||
<el-input |
|||
v-model="queryParams.price" |
|||
placeholder="请输入价格" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select |
|||
v-model="queryParams.available" |
|||
placeholder="请选择是否可用" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.activeTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.expireTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input |
|||
v-model="queryParams.remark" |
|||
placeholder="请输入备注" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建时间" prop="createTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.createTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建者ID" prop="creator"> |
|||
<el-input |
|||
v-model="queryParams.creator" |
|||
placeholder="请输入创建者ID" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="info" plain @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> |
|||
<el-button type="info" plain @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> |
|||
<el-button |
|||
type="primary" |
|||
@click="openForm('create')" |
|||
v-hasPermi="['wms:stdcostprice:create']" |
|||
> |
|||
<Icon icon="ep:plus" class="mr-5px" /> 新增 |
|||
</el-button> |
|||
<el-button |
|||
type="success" |
|||
@click="handleExport" |
|||
:loading="exportLoading" |
|||
v-hasPermi="['wms:stdcostprice:export']" |
|||
> |
|||
<Icon icon="ep:download" class="mr-5px" /> 导出 |
|||
</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</ContentWrap> |
|||
|
|||
<!-- 列表 --> |
|||
<ContentWrap> |
|||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> |
|||
<el-table-column label="供应商代码" align="center" prop="supplierCode" width="150px" /> |
|||
<el-table-column label="物料代码" align="center" prop="itemCode" width="150px" /> |
|||
<el-table-column label="货币" align="center" prop="currency" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.CURRENCY" :value="scope.row.currency" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="价格" align="center" prop="price" width="150px" /> |
|||
<el-table-column label="是否可用" align="center" prop="available" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.TRUE_FALSE" :value="scope.row.available" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
label="生效时间" |
|||
align="center" |
|||
prop="activeTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column |
|||
label="失效时间" |
|||
align="center" |
|||
prop="expireTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="备注" align="center" prop="remark" width="150px" /> |
|||
<el-table-column |
|||
label="创建时间" |
|||
align="center" |
|||
prop="createTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="创建者ID" align="center" prop="creator" width="150px" /> |
|||
<el-table-column label="操作" align="center" width="150px" fixed="right"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
link |
|||
type="primary" |
|||
@click="openForm('update', scope.row.id)" |
|||
v-hasPermi="['wms:stdcostprice:update']" |
|||
> |
|||
编辑 |
|||
</el-button> |
|||
<el-button |
|||
link |
|||
type="danger" |
|||
@click="handleDelete(scope.row.id)" |
|||
v-hasPermi="['wms:stdcostprice:delete']" |
|||
> |
|||
删除 |
|||
</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 分页 --> |
|||
<Pagination |
|||
:total="total" |
|||
v-model:page="queryParams.pageNo" |
|||
v-model:limit="queryParams.pageSize" |
|||
@pagination="getList" |
|||
/> |
|||
</ContentWrap> |
|||
|
|||
<!-- 表单弹窗:添加/修改 --> |
|||
<StdcostpriceForm ref="formRef" @success="getList" /> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import { dateFormatter } from '@/utils/formatTime' |
|||
import download from '@/utils/download' |
|||
import * as StdcostpriceApi from '@/api/wms/stdcostprice' |
|||
import StdcostpriceForm from './StdcostpriceForm.vue' |
|||
|
|||
defineOptions({ name: 'Stdcostprice' }) |
|||
|
|||
const message = useMessage() // 消息弹窗 |
|||
const { t } = useI18n() // 国际化 |
|||
|
|||
const loading = ref(true) // 列表的加载中 |
|||
const total = ref(0) // 列表的总页数 |
|||
const list = ref([]) // 列表的数据 |
|||
const queryParams = reactive({ |
|||
pageNo: 1, |
|||
pageSize: 10, |
|||
supplierCode: null, |
|||
itemCode: null, |
|||
currency: null, |
|||
price: null, |
|||
available: null, |
|||
activeTime: [], |
|||
expireTime: [], |
|||
remark: null, |
|||
createTime: [], |
|||
creator: null |
|||
}) |
|||
const queryFormRef = ref() // 搜索的表单 |
|||
const exportLoading = ref(false) // 导出的加载中 |
|||
|
|||
/** 查询列表 */ |
|||
const getList = async () => { |
|||
loading.value = true |
|||
try { |
|||
const data = await StdcostpriceApi.getStdcostpricePage(queryParams) |
|||
list.value = data.list |
|||
total.value = data.total |
|||
} finally { |
|||
loading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 搜索按钮操作 */ |
|||
const handleQuery = () => { |
|||
queryParams.pageNo = 1 |
|||
getList() |
|||
} |
|||
|
|||
/** 重置按钮操作 */ |
|||
const resetQuery = () => { |
|||
queryFormRef.value.resetFields() |
|||
handleQuery() |
|||
} |
|||
|
|||
/** 添加/修改操作 */ |
|||
const formRef = ref() |
|||
const openForm = (type: string, id?: number) => { |
|||
formRef.value.open(type, id) |
|||
} |
|||
|
|||
/** 删除按钮操作 */ |
|||
const handleDelete = async (id: number) => { |
|||
try { |
|||
// 删除的二次确认 |
|||
await message.delConfirm() |
|||
// 发起删除 |
|||
await StdcostpriceApi.deleteStdcostprice(id) |
|||
message.success(t('common.delSuccess')) |
|||
// 刷新列表 |
|||
await getList() |
|||
} catch {} |
|||
} |
|||
|
|||
/** 导出按钮操作 */ |
|||
const handleExport = async () => { |
|||
try { |
|||
// 导出的二次确认 |
|||
await message.exportConfirm() |
|||
// 发起导出 |
|||
exportLoading.value = true |
|||
const data = await StdcostpriceApi.exportStdcostprice(queryParams) |
|||
download.excel(data, '标准成本价格单.xls') |
|||
} catch { |
|||
} finally { |
|||
exportLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 初始化 **/ |
|||
onMounted(() => { |
|||
getList() |
|||
}) |
|||
</script> |
@ -0,0 +1,261 @@ |
|||
<template> |
|||
<Dialog :title="dialogTitle" v-model="dialogVisible"> |
|||
<div class="p-20px m--10px" style="max-height: 600px;overflow-y: auto;"> |
|||
<el-form |
|||
ref="formRef" |
|||
:model="formData" |
|||
:rules="formRules" |
|||
label-width="100px" |
|||
v-loading="formLoading" |
|||
> |
|||
<el-row> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="代码" prop="code"> |
|||
<el-input v-model="formData.code" placeholder="请输入代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input v-model="formData.name" placeholder="请输入名称" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="简称" prop="shortName"> |
|||
<el-input v-model="formData.shortName" placeholder="请输入简称" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="地址" prop="address"> |
|||
<el-input v-model="formData.address" placeholder="请输入地址" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="国家" prop="country"> |
|||
<el-input v-model="formData.country" placeholder="请输入国家" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="城市" prop="city"> |
|||
<el-input v-model="formData.city" placeholder="请输入城市" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="电话" prop="phone"> |
|||
<el-input v-model="formData.phone" placeholder="请输入电话" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="传真" prop="fax"> |
|||
<el-input v-model="formData.fax" placeholder="请输入传真" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="邮编" prop="postId"> |
|||
<el-input v-model="formData.postId" placeholder="请输入邮编" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="联系人" prop="contacts"> |
|||
<el-input v-model="formData.contacts" placeholder="请输入联系人" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="银行" prop="bank"> |
|||
<el-input v-model="formData.bank" placeholder="请输入银行" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="币种" prop="currency"> |
|||
<el-select v-model="formData.currency" placeholder="请选择币种"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.CURRENCY)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="税率" prop="taxRate"> |
|||
<el-input v-model="formData.taxRate" placeholder="请输入税率" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="类型" prop="type"> |
|||
<el-select v-model="formData.type" placeholder="请选择类型"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.SUPPLIER_TYPE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select v-model="formData.available" placeholder="请选择是否可用"> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="formData.activeTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择生效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="formData.expireTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择失效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input v-model="formData.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<template #footer> |
|||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> |
|||
<el-button @click="dialogVisible = false">取 消</el-button> |
|||
</template> |
|||
</Dialog> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import * as SupplierApi from '@/api/wms/supplier' |
|||
|
|||
const { t } = useI18n() // 国际化 |
|||
const message = useMessage() // 消息弹窗 |
|||
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示 |
|||
const dialogTitle = ref('') // 弹窗的标题 |
|||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改 |
|||
const formData = ref({ |
|||
code: undefined, |
|||
name: undefined, |
|||
shortName: undefined, |
|||
address: undefined, |
|||
country: undefined, |
|||
city: undefined, |
|||
phone: undefined, |
|||
fax: undefined, |
|||
postId: undefined, |
|||
contacts: undefined, |
|||
bank: undefined, |
|||
currency: undefined, |
|||
taxRate: undefined, |
|||
type: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
}) |
|||
const formRules = reactive({ |
|||
code: [{ required: true, message: '代码不能为空', trigger: 'blur' }], |
|||
shortName: [{ required: true, message: '简称不能为空', trigger: 'blur' }], |
|||
available: [{ required: true, message: '是否可用不能为空', trigger: 'change' }] |
|||
}) |
|||
const formRef = ref() // 表单 Ref |
|||
|
|||
/** 打开弹窗 */ |
|||
const open = async (type: string, id?: number) => { |
|||
dialogVisible.value = true |
|||
dialogTitle.value = t('action.' + type) |
|||
formType.value = type |
|||
resetForm() |
|||
// 修改时,设置数据 |
|||
if (id) { |
|||
formLoading.value = true |
|||
try { |
|||
formData.value = await SupplierApi.getSupplier(id) |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
} |
|||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
|||
|
|||
/** 提交表单 */ |
|||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
|||
const submitForm = async () => { |
|||
// 校验表单 |
|||
if (!formRef) return |
|||
const valid = await formRef.value.validate() |
|||
if (!valid) return |
|||
// 提交请求 |
|||
formLoading.value = true |
|||
try { |
|||
const data = formData.value as unknown as SupplierApi.SupplierVO |
|||
if (formType.value === 'create') { |
|||
await SupplierApi.createSupplier(data) |
|||
message.success(t('common.createSuccess')) |
|||
} else { |
|||
await SupplierApi.updateSupplier(data) |
|||
message.success(t('common.updateSuccess')) |
|||
} |
|||
dialogVisible.value = false |
|||
// 发送操作成功的事件 |
|||
emit('success') |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 重置表单 */ |
|||
const resetForm = () => { |
|||
formData.value = { |
|||
code: undefined, |
|||
name: undefined, |
|||
shortName: undefined, |
|||
address: undefined, |
|||
country: undefined, |
|||
city: undefined, |
|||
phone: undefined, |
|||
fax: undefined, |
|||
postId: undefined, |
|||
contacts: undefined, |
|||
bank: undefined, |
|||
currency: undefined, |
|||
taxRate: undefined, |
|||
type: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
} |
|||
formRef.value?.resetFields() |
|||
} |
|||
</script> |
@ -0,0 +1,419 @@ |
|||
<template> |
|||
<ContentWrap> |
|||
<!-- 搜索工作栏 --> |
|||
<el-form |
|||
class="-mb-15px" |
|||
:model="queryParams" |
|||
ref="queryFormRef" |
|||
:inline="true" |
|||
label-width="68px" |
|||
> |
|||
<el-form-item label="代码" prop="code"> |
|||
<el-input |
|||
v-model="queryParams.code" |
|||
placeholder="请输入代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input |
|||
v-model="queryParams.name" |
|||
placeholder="请输入名称" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="简称" prop="shortName"> |
|||
<el-input |
|||
v-model="queryParams.shortName" |
|||
placeholder="请输入简称" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="地址" prop="address"> |
|||
<el-input |
|||
v-model="queryParams.address" |
|||
placeholder="请输入地址" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="国家" prop="country"> |
|||
<el-input |
|||
v-model="queryParams.country" |
|||
placeholder="请输入国家" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="城市" prop="city"> |
|||
<el-input |
|||
v-model="queryParams.city" |
|||
placeholder="请输入城市" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="电话" prop="phone"> |
|||
<el-input |
|||
v-model="queryParams.phone" |
|||
placeholder="请输入电话" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="传真" prop="fax"> |
|||
<el-input |
|||
v-model="queryParams.fax" |
|||
placeholder="请输入传真" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="邮编" prop="postId"> |
|||
<el-input |
|||
v-model="queryParams.postId" |
|||
placeholder="请输入邮编" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="联系人" prop="contacts"> |
|||
<el-input |
|||
v-model="queryParams.contacts" |
|||
placeholder="请输入联系人" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="银行" prop="bank"> |
|||
<el-input |
|||
v-model="queryParams.bank" |
|||
placeholder="请输入银行" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="币种" prop="currency"> |
|||
<el-select |
|||
v-model="queryParams.currency" |
|||
placeholder="请选择币种" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.CURRENCY)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="税率" prop="taxRate"> |
|||
<el-input |
|||
v-model="queryParams.taxRate" |
|||
placeholder="请输入税率" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="类型" prop="type"> |
|||
<el-select v-model="queryParams.type" placeholder="请选择类型" clearable class="!w-240px"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.SUPPLIER_TYPE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select |
|||
v-model="queryParams.available" |
|||
placeholder="请选择是否可用" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.activeTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.expireTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input |
|||
v-model="queryParams.remark" |
|||
placeholder="请输入备注" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建时间" prop="createTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.createTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建者ID" prop="creator"> |
|||
<el-input |
|||
v-model="queryParams.creator" |
|||
placeholder="请输入创建者ID" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="info" plain @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> |
|||
<el-button type="info" plain @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> |
|||
<el-button type="primary" @click="openForm('create')" v-hasPermi="['wms:supplier:create']"> |
|||
<Icon icon="ep:plus" class="mr-5px" /> 新增 |
|||
</el-button> |
|||
<el-button |
|||
type="success" |
|||
@click="handleExport" |
|||
:loading="exportLoading" |
|||
v-hasPermi="['wms:supplier:export']" |
|||
> |
|||
<Icon icon="ep:download" class="mr-5px" /> 导出 |
|||
</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</ContentWrap> |
|||
|
|||
<!-- 列表 --> |
|||
<ContentWrap> |
|||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> |
|||
<el-table-column label="代码" align="center" prop="code" width="150px" /> |
|||
<el-table-column label="名称" align="center" prop="name" width="150px" /> |
|||
<el-table-column label="简称" align="center" prop="shortName" width="150px" /> |
|||
<el-table-column label="地址" align="center" prop="address" width="150px" /> |
|||
<el-table-column label="国家" align="center" prop="country" width="150px" /> |
|||
<el-table-column label="城市" align="center" prop="city" width="150px" /> |
|||
<el-table-column label="电话" align="center" prop="phone" width="150px" /> |
|||
<el-table-column label="传真" align="center" prop="fax" width="150px" /> |
|||
<el-table-column label="邮编" align="center" prop="postId" width="150px" /> |
|||
<el-table-column label="联系人" align="center" prop="contacts" width="150px" /> |
|||
<el-table-column label="银行" align="center" prop="bank" width="150px" /> |
|||
<el-table-column label="币种" align="center" prop="currency" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.CURRENCY" :value="scope.row.currency" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="税率" align="center" prop="taxRate" width="150px" /> |
|||
<el-table-column label="类型" align="center" prop="type" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.SUPPLIER_TYPE" :value="scope.row.type" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="是否可用" align="center" prop="available" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.TRUE_FALSE" :value="scope.row.available" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
label="生效时间" |
|||
align="center" |
|||
prop="activeTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column |
|||
label="失效时间" |
|||
align="center" |
|||
prop="expireTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="备注" align="center" prop="remark" width="150px" /> |
|||
<el-table-column |
|||
label="创建时间" |
|||
align="center" |
|||
prop="createTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="创建者ID" align="center" prop="creator" width="150px" /> |
|||
<el-table-column label="操作" align="center" width="150px" fixed="right"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
link |
|||
type="primary" |
|||
@click="openForm('update', scope.row.id)" |
|||
v-hasPermi="['wms:supplier:update']" |
|||
> |
|||
编辑 |
|||
</el-button> |
|||
<el-button |
|||
link |
|||
type="danger" |
|||
@click="handleDelete(scope.row.id)" |
|||
v-hasPermi="['wms:supplier:delete']" |
|||
> |
|||
删除 |
|||
</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 分页 --> |
|||
<Pagination |
|||
:total="total" |
|||
v-model:page="queryParams.pageNo" |
|||
v-model:limit="queryParams.pageSize" |
|||
@pagination="getList" |
|||
/> |
|||
</ContentWrap> |
|||
|
|||
<!-- 表单弹窗:添加/修改 --> |
|||
<SupplierForm ref="formRef" @success="getList" /> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import { dateFormatter } from '@/utils/formatTime' |
|||
import download from '@/utils/download' |
|||
import * as SupplierApi from '@/api/wms/supplier' |
|||
import SupplierForm from './SupplierForm.vue' |
|||
|
|||
defineOptions({ name: 'Supplier' }) |
|||
|
|||
const message = useMessage() // 消息弹窗 |
|||
const { t } = useI18n() // 国际化 |
|||
|
|||
const loading = ref(true) // 列表的加载中 |
|||
const total = ref(0) // 列表的总页数 |
|||
const list = ref([]) // 列表的数据 |
|||
const queryParams = reactive({ |
|||
pageNo: 1, |
|||
pageSize: 10, |
|||
code: null, |
|||
name: null, |
|||
shortName: null, |
|||
address: null, |
|||
country: null, |
|||
city: null, |
|||
phone: null, |
|||
fax: null, |
|||
postId: null, |
|||
contacts: null, |
|||
bank: null, |
|||
currency: null, |
|||
taxRate: null, |
|||
type: null, |
|||
available: null, |
|||
activeTime: [], |
|||
expireTime: [], |
|||
remark: null, |
|||
createTime: [], |
|||
creator: null |
|||
}) |
|||
const queryFormRef = ref() // 搜索的表单 |
|||
const exportLoading = ref(false) // 导出的加载中 |
|||
|
|||
/** 查询列表 */ |
|||
const getList = async () => { |
|||
loading.value = true |
|||
try { |
|||
const data = await SupplierApi.getSupplierPage(queryParams) |
|||
list.value = data.list |
|||
total.value = data.total |
|||
} finally { |
|||
loading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 搜索按钮操作 */ |
|||
const handleQuery = () => { |
|||
queryParams.pageNo = 1 |
|||
getList() |
|||
} |
|||
|
|||
/** 重置按钮操作 */ |
|||
const resetQuery = () => { |
|||
queryFormRef.value.resetFields() |
|||
handleQuery() |
|||
} |
|||
|
|||
/** 添加/修改操作 */ |
|||
const formRef = ref() |
|||
const openForm = (type: string, id?: number) => { |
|||
formRef.value.open(type, id) |
|||
} |
|||
|
|||
/** 删除按钮操作 */ |
|||
const handleDelete = async (id: number) => { |
|||
try { |
|||
// 删除的二次确认 |
|||
await message.delConfirm() |
|||
// 发起删除 |
|||
await SupplierApi.deleteSupplier(id) |
|||
message.success(t('common.delSuccess')) |
|||
// 刷新列表 |
|||
await getList() |
|||
} catch {} |
|||
} |
|||
|
|||
/** 导出按钮操作 */ |
|||
const handleExport = async () => { |
|||
try { |
|||
// 导出的二次确认 |
|||
await message.exportConfirm() |
|||
// 发起导出 |
|||
exportLoading.value = true |
|||
const data = await SupplierApi.exportSupplier(queryParams) |
|||
download.excel(data, '供应商.xls') |
|||
} catch { |
|||
} finally { |
|||
exportLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 初始化 **/ |
|||
onMounted(() => { |
|||
getList() |
|||
}) |
|||
</script> |
@ -0,0 +1,268 @@ |
|||
<template> |
|||
<Dialog :title="dialogTitle" v-model="dialogVisible"> |
|||
<div class="p-20px m--10px" style="max-height: 600px;overflow-y: auto;"> |
|||
<el-form |
|||
ref="formRef" |
|||
:model="formData" |
|||
:rules="formRules" |
|||
label-width="100px" |
|||
v-loading="formLoading" |
|||
> |
|||
<el-row> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="供应商代码" prop="supplierCode"> |
|||
<el-input v-model="formData.supplierCode" placeholder="请输入供应商代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="物料代码" prop="itemCode"> |
|||
<el-input v-model="formData.itemCode" placeholder="请输入物料代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="供应商物料代码" prop="supplierItemCode"> |
|||
<el-input v-model="formData.supplierItemCode" placeholder="请输入供应商物料代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="供应商计量单位" prop="supplierUom"> |
|||
<el-select v-model="formData.supplierUom" placeholder="请选择供应商计量单位"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.UOM)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="转换率" prop="convertRate"> |
|||
<el-input v-model="formData.convertRate" placeholder="请输入转换率" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="供应商包装单位" prop="packUnit"> |
|||
<el-select v-model="formData.packUnit" placeholder="请选择供应商包装单位"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.PACK_UNIT)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="供应商包装量" prop="packQty"> |
|||
<el-input v-model="formData.packQty" placeholder="请输入供应商包装量" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="供应商替代包装单位" prop="altPackUnit"> |
|||
<el-select v-model="formData.altPackUnit" placeholder="请选择供应商替代包装单位"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.PACK_UNIT)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="供应商替代包装量" prop="altPackQty"> |
|||
<el-input v-model="formData.altPackQty" placeholder="请输入供应商替代包装量" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="每器具包装数" prop="packQtyOfContainer"> |
|||
<el-input v-model="formData.packQtyOfContainer" placeholder="请输入每器具包装数" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="默认收货仓库" prop="defaultWarehouseCode"> |
|||
<el-input v-model="formData.defaultWarehouseCode" placeholder="请输入默认收货仓库" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="默认收货库位" prop="defaultLocationCode"> |
|||
<el-input v-model="formData.defaultLocationCode" placeholder="请输入默认收货库位" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="结算方式" prop="settlementType"> |
|||
<el-select v-model="formData.settlementType" placeholder="请选择结算方式"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.SETTLEMENT_TYPE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select v-model="formData.available" placeholder="请选择是否可用"> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="formData.activeTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择生效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="formData.expireTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择失效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input v-model="formData.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<template #footer> |
|||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> |
|||
<el-button @click="dialogVisible = false">取 消</el-button> |
|||
</template> |
|||
</Dialog> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import * as SupplieritemApi from '@/api/wms/supplieritem' |
|||
|
|||
const { t } = useI18n() // 国际化 |
|||
const message = useMessage() // 消息弹窗 |
|||
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示 |
|||
const dialogTitle = ref('') // 弹窗的标题 |
|||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改 |
|||
const formData = ref({ |
|||
supplierCode: undefined, |
|||
itemCode: undefined, |
|||
supplierItemCode: undefined, |
|||
supplierUom: undefined, |
|||
convertRate: undefined, |
|||
packUnit: undefined, |
|||
packQty: undefined, |
|||
altPackUnit: undefined, |
|||
altPackQty: undefined, |
|||
packQtyOfContainer: undefined, |
|||
defaultWarehouseCode: undefined, |
|||
defaultLocationCode: undefined, |
|||
settlementType: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
}) |
|||
const formRules = reactive({ |
|||
supplierCode: [{ required: true, message: '供应商代码不能为空', trigger: 'blur' }], |
|||
itemCode: [{ required: true, message: '物料代码不能为空', trigger: 'blur' }], |
|||
packUnit: [{ required: true, message: '供应商包装单位不能为空', trigger: 'change' }], |
|||
packQty: [{ required: true, message: '供应商包装量不能为空', trigger: 'blur' }], |
|||
packQtyOfContainer: [{ required: true, message: '每器具包装数不能为空', trigger: 'blur' }], |
|||
available: [{ required: true, message: '是否可用不能为空', trigger: 'change' }] |
|||
}) |
|||
const formRef = ref() // 表单 Ref |
|||
|
|||
/** 打开弹窗 */ |
|||
const open = async (type: string, id?: number) => { |
|||
dialogVisible.value = true |
|||
dialogTitle.value = t('action.' + type) |
|||
formType.value = type |
|||
resetForm() |
|||
// 修改时,设置数据 |
|||
if (id) { |
|||
formLoading.value = true |
|||
try { |
|||
formData.value = await SupplieritemApi.getSupplieritem(id) |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
} |
|||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
|||
|
|||
/** 提交表单 */ |
|||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
|||
const submitForm = async () => { |
|||
// 校验表单 |
|||
if (!formRef) return |
|||
const valid = await formRef.value.validate() |
|||
if (!valid) return |
|||
// 提交请求 |
|||
formLoading.value = true |
|||
try { |
|||
const data = formData.value as unknown as SupplieritemApi.SupplieritemVO |
|||
if (formType.value === 'create') { |
|||
await SupplieritemApi.createSupplieritem(data) |
|||
message.success(t('common.createSuccess')) |
|||
} else { |
|||
await SupplieritemApi.updateSupplieritem(data) |
|||
message.success(t('common.updateSuccess')) |
|||
} |
|||
dialogVisible.value = false |
|||
// 发送操作成功的事件 |
|||
emit('success') |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 重置表单 */ |
|||
const resetForm = () => { |
|||
formData.value = { |
|||
supplierCode: undefined, |
|||
itemCode: undefined, |
|||
supplierItemCode: undefined, |
|||
supplierUom: undefined, |
|||
convertRate: undefined, |
|||
packUnit: undefined, |
|||
packQty: undefined, |
|||
altPackUnit: undefined, |
|||
altPackQty: undefined, |
|||
packQtyOfContainer: undefined, |
|||
defaultWarehouseCode: undefined, |
|||
defaultLocationCode: undefined, |
|||
settlementType: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
} |
|||
formRef.value?.resetFields() |
|||
} |
|||
</script> |
@ -0,0 +1,437 @@ |
|||
<template> |
|||
<ContentWrap> |
|||
<!-- 搜索工作栏 --> |
|||
<el-form |
|||
class="-mb-15px" |
|||
:model="queryParams" |
|||
ref="queryFormRef" |
|||
:inline="true" |
|||
label-width="68px" |
|||
> |
|||
<el-form-item label="供应商代码" prop="supplierCode"> |
|||
<el-input |
|||
v-model="queryParams.supplierCode" |
|||
placeholder="请输入供应商代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="物料代码" prop="itemCode"> |
|||
<el-input |
|||
v-model="queryParams.itemCode" |
|||
placeholder="请输入物料代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="供应商物料代码" prop="supplierItemCode"> |
|||
<el-input |
|||
v-model="queryParams.supplierItemCode" |
|||
placeholder="请输入供应商物料代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="供应商计量单位" prop="supplierUom"> |
|||
<el-select |
|||
v-model="queryParams.supplierUom" |
|||
placeholder="请选择供应商计量单位" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.UOM)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="转换率" prop="convertRate"> |
|||
<el-input |
|||
v-model="queryParams.convertRate" |
|||
placeholder="请输入转换率" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="供应商包装单位" prop="packUnit"> |
|||
<el-select |
|||
v-model="queryParams.packUnit" |
|||
placeholder="请选择供应商包装单位" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.PACK_UNIT)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="供应商包装量" prop="packQty"> |
|||
<el-input |
|||
v-model="queryParams.packQty" |
|||
placeholder="请输入供应商包装量" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="供应商替代包装单位" prop="altPackUnit"> |
|||
<el-select |
|||
v-model="queryParams.altPackUnit" |
|||
placeholder="请选择供应商替代包装单位" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.PACK_UNIT)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="供应商替代包装量" prop="altPackQty"> |
|||
<el-input |
|||
v-model="queryParams.altPackQty" |
|||
placeholder="请输入供应商替代包装量" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="每器具包装数" prop="packQtyOfContainer"> |
|||
<el-input |
|||
v-model="queryParams.packQtyOfContainer" |
|||
placeholder="请输入每器具包装数" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="默认收货仓库" prop="defaultWarehouseCode"> |
|||
<el-input |
|||
v-model="queryParams.defaultWarehouseCode" |
|||
placeholder="请输入默认收货仓库" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="默认收货库位" prop="defaultLocationCode"> |
|||
<el-input |
|||
v-model="queryParams.defaultLocationCode" |
|||
placeholder="请输入默认收货库位" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="结算方式" prop="settlementType"> |
|||
<el-select |
|||
v-model="queryParams.settlementType" |
|||
placeholder="请选择结算方式" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.SETTLEMENT_TYPE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select |
|||
v-model="queryParams.available" |
|||
placeholder="请选择是否可用" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.activeTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.expireTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input |
|||
v-model="queryParams.remark" |
|||
placeholder="请输入备注" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建时间" prop="createTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.createTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建者ID" prop="creator"> |
|||
<el-input |
|||
v-model="queryParams.creator" |
|||
placeholder="请输入创建者ID" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="info" plain @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> |
|||
<el-button type="info" plain @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> |
|||
<el-button |
|||
type="primary" |
|||
@click="openForm('create')" |
|||
v-hasPermi="['wms:supplieritem:create']" |
|||
> |
|||
<Icon icon="ep:plus" class="mr-5px" /> 新增 |
|||
</el-button> |
|||
<el-button |
|||
type="success" |
|||
@click="handleExport" |
|||
:loading="exportLoading" |
|||
v-hasPermi="['wms:supplieritem:export']" |
|||
> |
|||
<Icon icon="ep:download" class="mr-5px" /> 导出 |
|||
</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</ContentWrap> |
|||
|
|||
<!-- 列表 --> |
|||
<ContentWrap> |
|||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> |
|||
<el-table-column label="供应商代码" align="center" prop="supplierCode" width="150px" /> |
|||
<el-table-column label="物料代码" align="center" prop="itemCode" width="150px" /> |
|||
<el-table-column label="供应商物料代码" align="center" prop="supplierItemCode" width="150px" /> |
|||
<el-table-column label="供应商计量单位" align="center" prop="supplierUom" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.UOM" :value="scope.row.supplierUom" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="转换率" align="center" prop="convertRate" width="150px" /> |
|||
<el-table-column label="供应商包装单位" align="center" prop="packUnit" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.PACK_UNIT" :value="scope.row.packUnit" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="供应商包装量" align="center" prop="packQty" width="150px" /> |
|||
<el-table-column label="供应商替代包装单位" align="center" prop="altPackUnit" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.PACK_UNIT" :value="scope.row.altPackUnit" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="供应商替代包装量" align="center" prop="altPackQty" width="150px" /> |
|||
<el-table-column label="每器具包装数" align="center" prop="packQtyOfContainer" width="150px" /> |
|||
<el-table-column label="默认收货仓库" align="center" prop="defaultWarehouseCode" width="150px" /> |
|||
<el-table-column label="默认收货库位" align="center" prop="defaultLocationCode" width="150px" /> |
|||
<el-table-column label="结算方式" align="center" prop="settlementType" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.SETTLEMENT_TYPE" :value="scope.row.settlementType" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="是否可用" align="center" prop="available" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.TRUE_FALSE" :value="scope.row.available" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
label="生效时间" |
|||
align="center" |
|||
prop="activeTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column |
|||
label="失效时间" |
|||
align="center" |
|||
prop="expireTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="备注" align="center" prop="remark" width="150px" /> |
|||
<el-table-column |
|||
label="创建时间" |
|||
align="center" |
|||
prop="createTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="创建者ID" align="center" prop="creator" width="150px" /> |
|||
<el-table-column label="操作" align="center" width="150px" fixed="right"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
link |
|||
type="primary" |
|||
@click="openForm('update', scope.row.id)" |
|||
v-hasPermi="['wms:supplieritem:update']" |
|||
> |
|||
编辑 |
|||
</el-button> |
|||
<el-button |
|||
link |
|||
type="danger" |
|||
@click="handleDelete(scope.row.id)" |
|||
v-hasPermi="['wms:supplieritem:delete']" |
|||
> |
|||
删除 |
|||
</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 分页 --> |
|||
<Pagination |
|||
:total="total" |
|||
v-model:page="queryParams.pageNo" |
|||
v-model:limit="queryParams.pageSize" |
|||
@pagination="getList" |
|||
/> |
|||
</ContentWrap> |
|||
|
|||
<!-- 表单弹窗:添加/修改 --> |
|||
<SupplieritemForm ref="formRef" @success="getList" /> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import { dateFormatter } from '@/utils/formatTime' |
|||
import download from '@/utils/download' |
|||
import * as SupplieritemApi from '@/api/wms/supplieritem' |
|||
import SupplieritemForm from './SupplieritemForm.vue' |
|||
|
|||
defineOptions({ name: 'Supplieritem' }) |
|||
|
|||
const message = useMessage() // 消息弹窗 |
|||
const { t } = useI18n() // 国际化 |
|||
|
|||
const loading = ref(true) // 列表的加载中 |
|||
const total = ref(0) // 列表的总页数 |
|||
const list = ref([]) // 列表的数据 |
|||
const queryParams = reactive({ |
|||
pageNo: 1, |
|||
pageSize: 10, |
|||
supplierCode: null, |
|||
itemCode: null, |
|||
supplierItemCode: null, |
|||
supplierUom: null, |
|||
convertRate: null, |
|||
packUnit: null, |
|||
packQty: null, |
|||
altPackUnit: null, |
|||
altPackQty: null, |
|||
packQtyOfContainer: null, |
|||
defaultWarehouseCode: null, |
|||
defaultLocationCode: null, |
|||
settlementType: null, |
|||
available: null, |
|||
activeTime: [], |
|||
expireTime: [], |
|||
remark: null, |
|||
createTime: [], |
|||
creator: null |
|||
}) |
|||
const queryFormRef = ref() // 搜索的表单 |
|||
const exportLoading = ref(false) // 导出的加载中 |
|||
|
|||
/** 查询列表 */ |
|||
const getList = async () => { |
|||
loading.value = true |
|||
try { |
|||
const data = await SupplieritemApi.getSupplieritemPage(queryParams) |
|||
list.value = data.list |
|||
total.value = data.total |
|||
} finally { |
|||
loading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 搜索按钮操作 */ |
|||
const handleQuery = () => { |
|||
queryParams.pageNo = 1 |
|||
getList() |
|||
} |
|||
|
|||
/** 重置按钮操作 */ |
|||
const resetQuery = () => { |
|||
queryFormRef.value.resetFields() |
|||
handleQuery() |
|||
} |
|||
|
|||
/** 添加/修改操作 */ |
|||
const formRef = ref() |
|||
const openForm = (type: string, id?: number) => { |
|||
formRef.value.open(type, id) |
|||
} |
|||
|
|||
/** 删除按钮操作 */ |
|||
const handleDelete = async (id: number) => { |
|||
try { |
|||
// 删除的二次确认 |
|||
await message.delConfirm() |
|||
// 发起删除 |
|||
await SupplieritemApi.deleteSupplieritem(id) |
|||
message.success(t('common.delSuccess')) |
|||
// 刷新列表 |
|||
await getList() |
|||
} catch {} |
|||
} |
|||
|
|||
/** 导出按钮操作 */ |
|||
const handleExport = async () => { |
|||
try { |
|||
// 导出的二次确认 |
|||
await message.exportConfirm() |
|||
// 发起导出 |
|||
exportLoading.value = true |
|||
const data = await SupplieritemApi.exportSupplieritem(queryParams) |
|||
download.excel(data, '供应商物品.xls') |
|||
} catch { |
|||
} finally { |
|||
exportLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 初始化 **/ |
|||
onMounted(() => { |
|||
getList() |
|||
}) |
|||
</script> |
@ -0,0 +1,168 @@ |
|||
<template> |
|||
<Dialog :title="dialogTitle" v-model="dialogVisible"> |
|||
<div class="p-20px m--10px" style="max-height: 600px;overflow-y: auto;"> |
|||
<el-form |
|||
ref="formRef" |
|||
:model="formData" |
|||
:rules="formRules" |
|||
label-width="100px" |
|||
v-loading="formLoading" |
|||
> |
|||
<el-row> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="模块" prop="module"> |
|||
<el-input v-model="formData.module" placeholder="请输入模块" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="开始时间" prop="startTime"> |
|||
<el-date-picker |
|||
v-model="formData.startTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择开始时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="结束时间" prop="stopTime"> |
|||
<el-date-picker |
|||
v-model="formData.stopTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择结束时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select v-model="formData.available" placeholder="请选择是否可用"> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="formData.activeTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择生效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="formData.expireTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择失效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input v-model="formData.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<template #footer> |
|||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> |
|||
<el-button @click="dialogVisible = false">取 消</el-button> |
|||
</template> |
|||
</Dialog> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' |
|||
import * as SystemcalendarApi from '@/api/wms/systemcalendar' |
|||
|
|||
const { t } = useI18n() // 国际化 |
|||
const message = useMessage() // 消息弹窗 |
|||
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示 |
|||
const dialogTitle = ref('') // 弹窗的标题 |
|||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改 |
|||
const formData = ref({ |
|||
module: undefined, |
|||
startTime: undefined, |
|||
stopTime: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
}) |
|||
const formRules = reactive({ |
|||
module: [{ required: true, message: '模块不能为空', trigger: 'blur' }], |
|||
available: [{ required: true, message: '是否可用不能为空', trigger: 'change' }] |
|||
}) |
|||
const formRef = ref() // 表单 Ref |
|||
|
|||
/** 打开弹窗 */ |
|||
const open = async (type: string, id?: number) => { |
|||
dialogVisible.value = true |
|||
dialogTitle.value = t('action.' + type) |
|||
formType.value = type |
|||
resetForm() |
|||
// 修改时,设置数据 |
|||
if (id) { |
|||
formLoading.value = true |
|||
try { |
|||
formData.value = await SystemcalendarApi.getSystemcalendar(id) |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
} |
|||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
|||
|
|||
/** 提交表单 */ |
|||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
|||
const submitForm = async () => { |
|||
// 校验表单 |
|||
if (!formRef) return |
|||
const valid = await formRef.value.validate() |
|||
if (!valid) return |
|||
// 提交请求 |
|||
formLoading.value = true |
|||
try { |
|||
const data = formData.value as unknown as SystemcalendarApi.SystemcalendarVO |
|||
if (formType.value === 'create') { |
|||
await SystemcalendarApi.createSystemcalendar(data) |
|||
message.success(t('common.createSuccess')) |
|||
} else { |
|||
await SystemcalendarApi.updateSystemcalendar(data) |
|||
message.success(t('common.updateSuccess')) |
|||
} |
|||
dialogVisible.value = false |
|||
// 发送操作成功的事件 |
|||
emit('success') |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 重置表单 */ |
|||
const resetForm = () => { |
|||
formData.value = { |
|||
module: undefined, |
|||
startTime: undefined, |
|||
stopTime: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
} |
|||
formRef.value?.resetFields() |
|||
} |
|||
</script> |
@ -0,0 +1,303 @@ |
|||
<template> |
|||
<ContentWrap> |
|||
<!-- 搜索工作栏 --> |
|||
<el-form |
|||
class="-mb-15px" |
|||
:model="queryParams" |
|||
ref="queryFormRef" |
|||
:inline="true" |
|||
label-width="68px" |
|||
> |
|||
<el-form-item label="模块" prop="module"> |
|||
<el-input |
|||
v-model="queryParams.module" |
|||
placeholder="请输入模块" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="开始时间" prop="startTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.startTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="结束时间" prop="stopTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.stopTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select |
|||
v-model="queryParams.available" |
|||
placeholder="请选择是否可用" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.activeTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.expireTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input |
|||
v-model="queryParams.remark" |
|||
placeholder="请输入备注" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建时间" prop="createTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.createTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建者ID" prop="creator"> |
|||
<el-input |
|||
v-model="queryParams.creator" |
|||
placeholder="请输入创建者ID" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="info" plain @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> |
|||
<el-button type="info" plain @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> |
|||
<el-button |
|||
type="primary" |
|||
@click="openForm('create')" |
|||
v-hasPermi="['wms:systemcalendar:create']" |
|||
> |
|||
<Icon icon="ep:plus" class="mr-5px" /> 新增 |
|||
</el-button> |
|||
<el-button |
|||
type="success" |
|||
@click="handleExport" |
|||
:loading="exportLoading" |
|||
v-hasPermi="['wms:systemcalendar:export']" |
|||
> |
|||
<Icon icon="ep:download" class="mr-5px" /> 导出 |
|||
</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</ContentWrap> |
|||
|
|||
<!-- 列表 --> |
|||
<ContentWrap> |
|||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> |
|||
<el-table-column label="模块" align="center" prop="module" width="150px" /> |
|||
<el-table-column |
|||
label="开始时间" |
|||
align="center" |
|||
prop="startTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column |
|||
label="结束时间" |
|||
align="center" |
|||
prop="stopTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="是否可用" align="center" prop="available" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.TRUE_FALSE" :value="scope.row.available" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
label="生效时间" |
|||
align="center" |
|||
prop="activeTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column |
|||
label="失效时间" |
|||
align="center" |
|||
prop="expireTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="备注" align="center" prop="remark" width="150px" /> |
|||
<el-table-column |
|||
label="创建时间" |
|||
align="center" |
|||
prop="createTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="创建者ID" align="center" prop="creator" width="150px" /> |
|||
<el-table-column label="操作" align="center" width="150px" fixed="right"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
link |
|||
type="primary" |
|||
@click="openForm('update', scope.row.id)" |
|||
v-hasPermi="['wms:systemcalendar:update']" |
|||
> |
|||
编辑 |
|||
</el-button> |
|||
<el-button |
|||
link |
|||
type="danger" |
|||
@click="handleDelete(scope.row.id)" |
|||
v-hasPermi="['wms:systemcalendar:delete']" |
|||
> |
|||
删除 |
|||
</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 分页 --> |
|||
<Pagination |
|||
:total="total" |
|||
v-model:page="queryParams.pageNo" |
|||
v-model:limit="queryParams.pageSize" |
|||
@pagination="getList" |
|||
/> |
|||
</ContentWrap> |
|||
|
|||
<!-- 表单弹窗:添加/修改 --> |
|||
<SystemcalendarForm ref="formRef" @success="getList" /> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' |
|||
import { dateFormatter } from '@/utils/formatTime' |
|||
import download from '@/utils/download' |
|||
import * as SystemcalendarApi from '@/api/wms/systemcalendar' |
|||
import SystemcalendarForm from './SystemcalendarForm.vue' |
|||
|
|||
defineOptions({ name: 'Systemcalendar' }) |
|||
|
|||
const message = useMessage() // 消息弹窗 |
|||
const { t } = useI18n() // 国际化 |
|||
|
|||
const loading = ref(true) // 列表的加载中 |
|||
const total = ref(0) // 列表的总页数 |
|||
const list = ref([]) // 列表的数据 |
|||
const queryParams = reactive({ |
|||
pageNo: 1, |
|||
pageSize: 10, |
|||
module: null, |
|||
startTime: [], |
|||
stopTime: [], |
|||
available: null, |
|||
activeTime: [], |
|||
expireTime: [], |
|||
remark: null, |
|||
createTime: [], |
|||
creator: null |
|||
}) |
|||
const queryFormRef = ref() // 搜索的表单 |
|||
const exportLoading = ref(false) // 导出的加载中 |
|||
|
|||
/** 查询列表 */ |
|||
const getList = async () => { |
|||
loading.value = true |
|||
try { |
|||
const data = await SystemcalendarApi.getSystemcalendarPage(queryParams) |
|||
list.value = data.list |
|||
total.value = data.total |
|||
} finally { |
|||
loading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 搜索按钮操作 */ |
|||
const handleQuery = () => { |
|||
queryParams.pageNo = 1 |
|||
getList() |
|||
} |
|||
|
|||
/** 重置按钮操作 */ |
|||
const resetQuery = () => { |
|||
queryFormRef.value.resetFields() |
|||
handleQuery() |
|||
} |
|||
|
|||
/** 添加/修改操作 */ |
|||
const formRef = ref() |
|||
const openForm = (type: string, id?: number) => { |
|||
formRef.value.open(type, id) |
|||
} |
|||
|
|||
/** 删除按钮操作 */ |
|||
const handleDelete = async (id: number) => { |
|||
try { |
|||
// 删除的二次确认 |
|||
await message.delConfirm() |
|||
// 发起删除 |
|||
await SystemcalendarApi.deleteSystemcalendar(id) |
|||
message.success(t('common.delSuccess')) |
|||
// 刷新列表 |
|||
await getList() |
|||
} catch {} |
|||
} |
|||
|
|||
/** 导出按钮操作 */ |
|||
const handleExport = async () => { |
|||
try { |
|||
// 导出的二次确认 |
|||
await message.exportConfirm() |
|||
// 发起导出 |
|||
exportLoading.value = true |
|||
const data = await SystemcalendarApi.exportSystemcalendar(queryParams) |
|||
download.excel(data, '系统日历.xls') |
|||
} catch { |
|||
} finally { |
|||
exportLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 初始化 **/ |
|||
onMounted(() => { |
|||
getList() |
|||
}) |
|||
</script> |
@ -0,0 +1,173 @@ |
|||
<template> |
|||
<Dialog :title="dialogTitle" v-model="dialogVisible"> |
|||
<div class="p-20px m--10px" style="max-height: 600px;overflow-y: auto;"> |
|||
<el-form |
|||
ref="formRef" |
|||
:model="formData" |
|||
:rules="formRules" |
|||
label-width="100px" |
|||
v-loading="formLoading" |
|||
> |
|||
<el-row> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="代码" prop="code"> |
|||
<el-input v-model="formData.code" placeholder="请输入代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input v-model="formData.name" placeholder="请输入名称" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="描述"> |
|||
<Editor v-model="formData.description" height="150px" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="类型" prop="type"> |
|||
<el-select v-model="formData.type" placeholder="请选择类型"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.WAREHOUSE_TYPE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select v-model="formData.available" placeholder="请选择是否可用"> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="formData.activeTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择生效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="formData.expireTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择失效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input v-model="formData.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<template #footer> |
|||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> |
|||
<el-button @click="dialogVisible = false">取 消</el-button> |
|||
</template> |
|||
</Dialog> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import * as WarehouseApi from '@/api/wms/warehouse' |
|||
|
|||
const { t } = useI18n() // 国际化 |
|||
const message = useMessage() // 消息弹窗 |
|||
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示 |
|||
const dialogTitle = ref('') // 弹窗的标题 |
|||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改 |
|||
const formData = ref({ |
|||
code: undefined, |
|||
name: undefined, |
|||
description: undefined, |
|||
type: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
}) |
|||
const formRules = reactive({ |
|||
code: [{ required: true, message: '代码不能为空', trigger: 'blur' }], |
|||
available: [{ required: true, message: '是否可用不能为空', trigger: 'change' }] |
|||
}) |
|||
const formRef = ref() // 表单 Ref |
|||
|
|||
/** 打开弹窗 */ |
|||
const open = async (type: string, id?: number) => { |
|||
dialogVisible.value = true |
|||
dialogTitle.value = t('action.' + type) |
|||
formType.value = type |
|||
resetForm() |
|||
// 修改时,设置数据 |
|||
if (id) { |
|||
formLoading.value = true |
|||
try { |
|||
formData.value = await WarehouseApi.getWarehouse(id) |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
} |
|||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
|||
|
|||
/** 提交表单 */ |
|||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
|||
const submitForm = async () => { |
|||
// 校验表单 |
|||
if (!formRef) return |
|||
const valid = await formRef.value.validate() |
|||
if (!valid) return |
|||
// 提交请求 |
|||
formLoading.value = true |
|||
try { |
|||
const data = formData.value as unknown as WarehouseApi.WarehouseVO |
|||
if (formType.value === 'create') { |
|||
await WarehouseApi.createWarehouse(data) |
|||
message.success(t('common.createSuccess')) |
|||
} else { |
|||
await WarehouseApi.updateWarehouse(data) |
|||
message.success(t('common.updateSuccess')) |
|||
} |
|||
dialogVisible.value = false |
|||
// 发送操作成功的事件 |
|||
emit('success') |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 重置表单 */ |
|||
const resetForm = () => { |
|||
formData.value = { |
|||
code: undefined, |
|||
name: undefined, |
|||
description: undefined, |
|||
type: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
} |
|||
formRef.value?.resetFields() |
|||
} |
|||
</script> |
@ -0,0 +1,294 @@ |
|||
<template> |
|||
<ContentWrap> |
|||
<!-- 搜索工作栏 --> |
|||
<el-form |
|||
class="-mb-15px" |
|||
:model="queryParams" |
|||
ref="queryFormRef" |
|||
:inline="true" |
|||
label-width="68px" |
|||
> |
|||
<el-form-item label="代码" prop="code"> |
|||
<el-input |
|||
v-model="queryParams.code" |
|||
placeholder="请输入代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input |
|||
v-model="queryParams.name" |
|||
placeholder="请输入名称" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="类型" prop="type"> |
|||
<el-select v-model="queryParams.type" placeholder="请选择类型" clearable class="!w-240px"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.WAREHOUSE_TYPE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select |
|||
v-model="queryParams.available" |
|||
placeholder="请选择是否可用" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.activeTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.expireTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input |
|||
v-model="queryParams.remark" |
|||
placeholder="请输入备注" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建时间" prop="createTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.createTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建者ID" prop="creator"> |
|||
<el-input |
|||
v-model="queryParams.creator" |
|||
placeholder="请输入创建者ID" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="info" plain @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> |
|||
<el-button type="info" plain @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> |
|||
<el-button |
|||
type="primary" |
|||
@click="openForm('create')" |
|||
v-hasPermi="['wms:warehouse:create']" |
|||
> |
|||
<Icon icon="ep:plus" class="mr-5px" /> 新增 |
|||
</el-button> |
|||
<el-button |
|||
type="success" |
|||
@click="handleExport" |
|||
:loading="exportLoading" |
|||
v-hasPermi="['wms:warehouse:export']" |
|||
> |
|||
<Icon icon="ep:download" class="mr-5px" /> 导出 |
|||
</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</ContentWrap> |
|||
|
|||
<!-- 列表 --> |
|||
<ContentWrap> |
|||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> |
|||
<el-table-column label="代码" align="center" prop="code" width="150px" /> |
|||
<el-table-column label="名称" align="center" prop="name" width="150px" /> |
|||
<el-table-column label="描述" align="center" prop="description" width="150px" /> |
|||
<el-table-column label="类型" align="center" prop="type" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.WAREHOUSE_TYPE" :value="scope.row.type" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="是否可用" align="center" prop="available" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.TRUE_FALSE" :value="scope.row.available" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
label="生效时间" |
|||
align="center" |
|||
prop="activeTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column |
|||
label="失效时间" |
|||
align="center" |
|||
prop="expireTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="备注" align="center" prop="remark" width="150px" /> |
|||
<el-table-column |
|||
label="创建时间" |
|||
align="center" |
|||
prop="createTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="创建者ID" align="center" prop="creator" width="150px" /> |
|||
<el-table-column label="操作" align="center" width="150px" fixed="right"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
link |
|||
type="primary" |
|||
@click="openForm('update', scope.row.id)" |
|||
v-hasPermi="['wms:warehouse:update']" |
|||
> |
|||
编辑 |
|||
</el-button> |
|||
<el-button |
|||
link |
|||
type="danger" |
|||
@click="handleDelete(scope.row.id)" |
|||
v-hasPermi="['wms:warehouse:delete']" |
|||
> |
|||
删除 |
|||
</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 分页 --> |
|||
<Pagination |
|||
:total="total" |
|||
v-model:page="queryParams.pageNo" |
|||
v-model:limit="queryParams.pageSize" |
|||
@pagination="getList" |
|||
/> |
|||
</ContentWrap> |
|||
|
|||
<!-- 表单弹窗:添加/修改 --> |
|||
<WarehouseForm ref="formRef" @success="getList" /> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import { dateFormatter } from '@/utils/formatTime' |
|||
import download from '@/utils/download' |
|||
import * as WarehouseApi from '@/api/wms/warehouse' |
|||
import WarehouseForm from './WarehouseForm.vue' |
|||
|
|||
defineOptions({ name: 'Warehouse' }) |
|||
|
|||
const message = useMessage() // 消息弹窗 |
|||
const { t } = useI18n() // 国际化 |
|||
|
|||
const loading = ref(true) // 列表的加载中 |
|||
const total = ref(0) // 列表的总页数 |
|||
const list = ref([]) // 列表的数据 |
|||
const queryParams = reactive({ |
|||
pageNo: 1, |
|||
pageSize: 10, |
|||
code: null, |
|||
name: null, |
|||
description: null, |
|||
type: null, |
|||
available: null, |
|||
activeTime: [], |
|||
expireTime: [], |
|||
remark: null, |
|||
createTime: [], |
|||
creator: null |
|||
}) |
|||
const queryFormRef = ref() // 搜索的表单 |
|||
const exportLoading = ref(false) // 导出的加载中 |
|||
|
|||
/** 查询列表 */ |
|||
const getList = async () => { |
|||
loading.value = true |
|||
try { |
|||
const data = await WarehouseApi.getWarehousePage(queryParams) |
|||
list.value = data.list |
|||
total.value = data.total |
|||
} finally { |
|||
loading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 搜索按钮操作 */ |
|||
const handleQuery = () => { |
|||
queryParams.pageNo = 1 |
|||
getList() |
|||
} |
|||
|
|||
/** 重置按钮操作 */ |
|||
const resetQuery = () => { |
|||
queryFormRef.value.resetFields() |
|||
handleQuery() |
|||
} |
|||
|
|||
/** 添加/修改操作 */ |
|||
const formRef = ref() |
|||
const openForm = (type: string, id?: number) => { |
|||
formRef.value.open(type, id) |
|||
} |
|||
|
|||
/** 删除按钮操作 */ |
|||
const handleDelete = async (id: number) => { |
|||
try { |
|||
// 删除的二次确认 |
|||
await message.delConfirm() |
|||
// 发起删除 |
|||
await WarehouseApi.deleteWarehouse(id) |
|||
message.success(t('common.delSuccess')) |
|||
// 刷新列表 |
|||
await getList() |
|||
} catch {} |
|||
} |
|||
|
|||
/** 导出按钮操作 */ |
|||
const handleExport = async () => { |
|||
try { |
|||
// 导出的二次确认 |
|||
await message.exportConfirm() |
|||
// 发起导出 |
|||
exportLoading.value = true |
|||
const data = await WarehouseApi.exportWarehouse(queryParams) |
|||
download.excel(data, '仓库.xls') |
|||
} catch { |
|||
} finally { |
|||
exportLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 初始化 **/ |
|||
onMounted(() => { |
|||
getList() |
|||
}) |
|||
</script> |
@ -0,0 +1,173 @@ |
|||
<template> |
|||
<Dialog :title="dialogTitle" v-model="dialogVisible"> |
|||
<div class="p-20px m--10px" style="max-height: 600px;overflow-y: auto;"> |
|||
<el-form |
|||
ref="formRef" |
|||
:model="formData" |
|||
:rules="formRules" |
|||
label-width="100px" |
|||
v-loading="formLoading" |
|||
> |
|||
<el-row> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="代码" prop="code"> |
|||
<el-input v-model="formData.code" placeholder="请输入代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input v-model="formData.name" placeholder="请输入名称" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="描述"> |
|||
<Editor v-model="formData.description" height="150px" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="类型" prop="type"> |
|||
<el-select v-model="formData.type" placeholder="请选择类型"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.WORKSHOP_TYPE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select v-model="formData.available" placeholder="请选择是否可用"> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="formData.activeTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择生效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="formData.expireTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择失效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input v-model="formData.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<template #footer> |
|||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> |
|||
<el-button @click="dialogVisible = false">取 消</el-button> |
|||
</template> |
|||
</Dialog> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import * as WorkshopApi from '@/api/wms/workshop' |
|||
|
|||
const { t } = useI18n() // 国际化 |
|||
const message = useMessage() // 消息弹窗 |
|||
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示 |
|||
const dialogTitle = ref('') // 弹窗的标题 |
|||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改 |
|||
const formData = ref({ |
|||
code: undefined, |
|||
name: undefined, |
|||
description: undefined, |
|||
type: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
}) |
|||
const formRules = reactive({ |
|||
code: [{ required: true, message: '代码不能为空', trigger: 'blur' }], |
|||
available: [{ required: true, message: '是否可用不能为空', trigger: 'change' }] |
|||
}) |
|||
const formRef = ref() // 表单 Ref |
|||
|
|||
/** 打开弹窗 */ |
|||
const open = async (type: string, id?: number) => { |
|||
dialogVisible.value = true |
|||
dialogTitle.value = t('action.' + type) |
|||
formType.value = type |
|||
resetForm() |
|||
// 修改时,设置数据 |
|||
if (id) { |
|||
formLoading.value = true |
|||
try { |
|||
formData.value = await WorkshopApi.getWorkshop(id) |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
} |
|||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
|||
|
|||
/** 提交表单 */ |
|||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
|||
const submitForm = async () => { |
|||
// 校验表单 |
|||
if (!formRef) return |
|||
const valid = await formRef.value.validate() |
|||
if (!valid) return |
|||
// 提交请求 |
|||
formLoading.value = true |
|||
try { |
|||
const data = formData.value as unknown as WorkshopApi.WorkshopVO |
|||
if (formType.value === 'create') { |
|||
await WorkshopApi.createWorkshop(data) |
|||
message.success(t('common.createSuccess')) |
|||
} else { |
|||
await WorkshopApi.updateWorkshop(data) |
|||
message.success(t('common.updateSuccess')) |
|||
} |
|||
dialogVisible.value = false |
|||
// 发送操作成功的事件 |
|||
emit('success') |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 重置表单 */ |
|||
const resetForm = () => { |
|||
formData.value = { |
|||
code: undefined, |
|||
name: undefined, |
|||
description: undefined, |
|||
type: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
} |
|||
formRef.value?.resetFields() |
|||
} |
|||
</script> |
@ -0,0 +1,290 @@ |
|||
<template> |
|||
<ContentWrap> |
|||
<!-- 搜索工作栏 --> |
|||
<el-form |
|||
class="-mb-15px" |
|||
:model="queryParams" |
|||
ref="queryFormRef" |
|||
:inline="true" |
|||
label-width="68px" |
|||
> |
|||
<el-form-item label="代码" prop="code"> |
|||
<el-input |
|||
v-model="queryParams.code" |
|||
placeholder="请输入代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input |
|||
v-model="queryParams.name" |
|||
placeholder="请输入名称" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="类型" prop="type"> |
|||
<el-select v-model="queryParams.type" placeholder="请选择类型" clearable class="!w-240px"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.WORKSHOP_TYPE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select |
|||
v-model="queryParams.available" |
|||
placeholder="请选择是否可用" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.activeTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.expireTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input |
|||
v-model="queryParams.remark" |
|||
placeholder="请输入备注" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建时间" prop="createTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.createTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建者ID" prop="creator"> |
|||
<el-input |
|||
v-model="queryParams.creator" |
|||
placeholder="请输入创建者ID" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="info" plain @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> |
|||
<el-button type="info" plain @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> |
|||
<el-button type="primary" @click="openForm('create')" v-hasPermi="['wms:workshop:create']"> |
|||
<Icon icon="ep:plus" class="mr-5px" /> 新增 |
|||
</el-button> |
|||
<el-button |
|||
type="success" |
|||
@click="handleExport" |
|||
:loading="exportLoading" |
|||
v-hasPermi="['wms:workshop:export']" |
|||
> |
|||
<Icon icon="ep:download" class="mr-5px" /> 导出 |
|||
</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</ContentWrap> |
|||
|
|||
<!-- 列表 --> |
|||
<ContentWrap> |
|||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> |
|||
<el-table-column label="代码" align="center" prop="code" width="150px" /> |
|||
<el-table-column label="名称" align="center" prop="name" width="150px" /> |
|||
<el-table-column label="描述" align="center" prop="description" width="150px" /> |
|||
<el-table-column label="类型" align="center" prop="type" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.WORKSHOP_TYPE" :value="scope.row.type" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="是否可用" align="center" prop="available" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.TRUE_FALSE" :value="scope.row.available" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
label="生效时间" |
|||
align="center" |
|||
prop="activeTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column |
|||
label="失效时间" |
|||
align="center" |
|||
prop="expireTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="备注" align="center" prop="remark" width="150px" /> |
|||
<el-table-column |
|||
label="创建时间" |
|||
align="center" |
|||
prop="createTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="创建者ID" align="center" prop="creator" width="150px" /> |
|||
<el-table-column label="操作" align="center" width="150px" fixed="right"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
link |
|||
type="primary" |
|||
@click="openForm('update', scope.row.id)" |
|||
v-hasPermi="['wms:workshop:update']" |
|||
> |
|||
编辑 |
|||
</el-button> |
|||
<el-button |
|||
link |
|||
type="danger" |
|||
@click="handleDelete(scope.row.id)" |
|||
v-hasPermi="['wms:workshop:delete']" |
|||
> |
|||
删除 |
|||
</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 分页 --> |
|||
<Pagination |
|||
:total="total" |
|||
v-model:page="queryParams.pageNo" |
|||
v-model:limit="queryParams.pageSize" |
|||
@pagination="getList" |
|||
/> |
|||
</ContentWrap> |
|||
|
|||
<!-- 表单弹窗:添加/修改 --> |
|||
<WorkshopForm ref="formRef" @success="getList" /> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import { dateFormatter } from '@/utils/formatTime' |
|||
import download from '@/utils/download' |
|||
import * as WorkshopApi from '@/api/wms/workshop' |
|||
import WorkshopForm from './WorkshopForm.vue' |
|||
|
|||
defineOptions({ name: 'Workshop' }) |
|||
|
|||
const message = useMessage() // 消息弹窗 |
|||
const { t } = useI18n() // 国际化 |
|||
|
|||
const loading = ref(true) // 列表的加载中 |
|||
const total = ref(0) // 列表的总页数 |
|||
const list = ref([]) // 列表的数据 |
|||
const queryParams = reactive({ |
|||
pageNo: 1, |
|||
pageSize: 10, |
|||
code: null, |
|||
name: null, |
|||
description: null, |
|||
type: null, |
|||
available: null, |
|||
activeTime: [], |
|||
expireTime: [], |
|||
remark: null, |
|||
createTime: [], |
|||
creator: null |
|||
}) |
|||
const queryFormRef = ref() // 搜索的表单 |
|||
const exportLoading = ref(false) // 导出的加载中 |
|||
|
|||
/** 查询列表 */ |
|||
const getList = async () => { |
|||
loading.value = true |
|||
try { |
|||
const data = await WorkshopApi.getWorkshopPage(queryParams) |
|||
list.value = data.list |
|||
total.value = data.total |
|||
} finally { |
|||
loading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 搜索按钮操作 */ |
|||
const handleQuery = () => { |
|||
queryParams.pageNo = 1 |
|||
getList() |
|||
} |
|||
|
|||
/** 重置按钮操作 */ |
|||
const resetQuery = () => { |
|||
queryFormRef.value.resetFields() |
|||
handleQuery() |
|||
} |
|||
|
|||
/** 添加/修改操作 */ |
|||
const formRef = ref() |
|||
const openForm = (type: string, id?: number) => { |
|||
formRef.value.open(type, id) |
|||
} |
|||
|
|||
/** 删除按钮操作 */ |
|||
const handleDelete = async (id: number) => { |
|||
try { |
|||
// 删除的二次确认 |
|||
await message.delConfirm() |
|||
// 发起删除 |
|||
await WorkshopApi.deleteWorkshop(id) |
|||
message.success(t('common.delSuccess')) |
|||
// 刷新列表 |
|||
await getList() |
|||
} catch {} |
|||
} |
|||
|
|||
/** 导出按钮操作 */ |
|||
const handleExport = async () => { |
|||
try { |
|||
// 导出的二次确认 |
|||
await message.exportConfirm() |
|||
// 发起导出 |
|||
exportLoading.value = true |
|||
const data = await WorkshopApi.exportWorkshop(queryParams) |
|||
download.excel(data, '车间.xls') |
|||
} catch { |
|||
} finally { |
|||
exportLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 初始化 **/ |
|||
onMounted(() => { |
|||
getList() |
|||
}) |
|||
</script> |
@ -0,0 +1,207 @@ |
|||
<template> |
|||
<Dialog :title="dialogTitle" v-model="dialogVisible"> |
|||
<div class="p-20px m--10px" style="max-height: 600px;overflow-y: auto;"> |
|||
<el-form |
|||
ref="formRef" |
|||
:model="formData" |
|||
:rules="formRules" |
|||
label-width="100px" |
|||
v-loading="formLoading" |
|||
> |
|||
<el-row> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="代码" prop="code"> |
|||
<el-input v-model="formData.code" placeholder="请输入代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input v-model="formData.name" placeholder="请输入名称" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="描述"> |
|||
<Editor v-model="formData.description" height="150px" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="类型" prop="type"> |
|||
<el-select v-model="formData.type" placeholder="请选择类型"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.WORK_STATION_TYPE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="车间代码" prop="workshopCode"> |
|||
<el-input v-model="formData.workshopCode" placeholder="请输入车间代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="生产线代码" prop="productionLineCode"> |
|||
<el-input v-model="formData.productionLineCode" placeholder="请输入生产线代码" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="原料库位" prop="rawLocationCode"> |
|||
<el-input v-model="formData.rawLocationCode" placeholder="请输入原料库位" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="成品库位" prop="fgLocationCode"> |
|||
<el-input v-model="formData.fgLocationCode" placeholder="请输入成品库位" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select v-model="formData.available" placeholder="请选择是否可用"> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="formData.activeTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择生效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="formData.expireTime" |
|||
type="date" |
|||
value-format="x" |
|||
placeholder="选择失效时间" |
|||
/> |
|||
</el-form-item> |
|||
</el-col> |
|||
<el-col :span="12"> |
|||
|
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input v-model="formData.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-col> |
|||
</el-row> |
|||
</el-form> |
|||
</div> |
|||
<template #footer> |
|||
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> |
|||
<el-button @click="dialogVisible = false">取 消</el-button> |
|||
</template> |
|||
</Dialog> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import * as WorkstationApi from '@/api/wms/workstation' |
|||
|
|||
const { t } = useI18n() // 国际化 |
|||
const message = useMessage() // 消息弹窗 |
|||
|
|||
const dialogVisible = ref(false) // 弹窗的是否展示 |
|||
const dialogTitle = ref('') // 弹窗的标题 |
|||
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改 |
|||
const formData = ref({ |
|||
code: undefined, |
|||
name: undefined, |
|||
description: undefined, |
|||
type: undefined, |
|||
workshopCode: undefined, |
|||
productionLineCode: undefined, |
|||
rawLocationCode: undefined, |
|||
fgLocationCode: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
}) |
|||
const formRules = reactive({ |
|||
code: [{ required: true, message: '代码不能为空', trigger: 'blur' }], |
|||
workshopCode: [{ required: true, message: '车间代码不能为空', trigger: 'blur' }], |
|||
productionLineCode: [{ required: true, message: '生产线代码不能为空', trigger: 'blur' }], |
|||
available: [{ required: true, message: '是否可用不能为空', trigger: 'change' }] |
|||
}) |
|||
const formRef = ref() // 表单 Ref |
|||
|
|||
/** 打开弹窗 */ |
|||
const open = async (type: string, id?: number) => { |
|||
dialogVisible.value = true |
|||
dialogTitle.value = t('action.' + type) |
|||
formType.value = type |
|||
resetForm() |
|||
// 修改时,设置数据 |
|||
if (id) { |
|||
formLoading.value = true |
|||
try { |
|||
formData.value = await WorkstationApi.getWorkstation(id) |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
} |
|||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
|||
|
|||
/** 提交表单 */ |
|||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
|||
const submitForm = async () => { |
|||
// 校验表单 |
|||
if (!formRef) return |
|||
const valid = await formRef.value.validate() |
|||
if (!valid) return |
|||
// 提交请求 |
|||
formLoading.value = true |
|||
try { |
|||
const data = formData.value as unknown as WorkstationApi.WorkstationVO |
|||
if (formType.value === 'create') { |
|||
await WorkstationApi.createWorkstation(data) |
|||
message.success(t('common.createSuccess')) |
|||
} else { |
|||
await WorkstationApi.updateWorkstation(data) |
|||
message.success(t('common.updateSuccess')) |
|||
} |
|||
dialogVisible.value = false |
|||
// 发送操作成功的事件 |
|||
emit('success') |
|||
} finally { |
|||
formLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 重置表单 */ |
|||
const resetForm = () => { |
|||
formData.value = { |
|||
code: undefined, |
|||
name: undefined, |
|||
description: undefined, |
|||
type: undefined, |
|||
workshopCode: undefined, |
|||
productionLineCode: undefined, |
|||
rawLocationCode: undefined, |
|||
fgLocationCode: undefined, |
|||
available: undefined, |
|||
activeTime: undefined, |
|||
expireTime: undefined, |
|||
remark: undefined |
|||
} |
|||
formRef.value?.resetFields() |
|||
} |
|||
</script> |
@ -0,0 +1,338 @@ |
|||
<template> |
|||
<ContentWrap> |
|||
<!-- 搜索工作栏 --> |
|||
<el-form |
|||
class="-mb-15px" |
|||
:model="queryParams" |
|||
ref="queryFormRef" |
|||
:inline="true" |
|||
label-width="68px" |
|||
> |
|||
<el-form-item label="代码" prop="code"> |
|||
<el-input |
|||
v-model="queryParams.code" |
|||
placeholder="请输入代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="名称" prop="name"> |
|||
<el-input |
|||
v-model="queryParams.name" |
|||
placeholder="请输入名称" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="类型" prop="type"> |
|||
<el-select v-model="queryParams.type" placeholder="请选择类型" clearable class="!w-240px"> |
|||
<el-option |
|||
v-for="dict in getStrDictOptions(DICT_TYPE.WORK_STATION_TYPE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="车间代码" prop="workshopCode"> |
|||
<el-input |
|||
v-model="queryParams.workshopCode" |
|||
placeholder="请输入车间代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="生产线代码" prop="productionLineCode"> |
|||
<el-input |
|||
v-model="queryParams.productionLineCode" |
|||
placeholder="请输入生产线代码" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="原料库位" prop="rawLocationCode"> |
|||
<el-input |
|||
v-model="queryParams.rawLocationCode" |
|||
placeholder="请输入原料库位" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="成品库位" prop="fgLocationCode"> |
|||
<el-input |
|||
v-model="queryParams.fgLocationCode" |
|||
placeholder="请输入成品库位" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="是否可用" prop="available"> |
|||
<el-select |
|||
v-model="queryParams.available" |
|||
placeholder="请选择是否可用" |
|||
clearable |
|||
class="!w-240px" |
|||
> |
|||
<el-option |
|||
v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" |
|||
:key="dict.value" |
|||
:label="dict.label" |
|||
:value="dict.value" |
|||
/> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="生效时间" prop="activeTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.activeTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="失效时间" prop="expireTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.expireTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input |
|||
v-model="queryParams.remark" |
|||
placeholder="请输入备注" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建时间" prop="createTime"> |
|||
<el-date-picker |
|||
v-model="queryParams.createTime" |
|||
value-format="YYYY-MM-DD HH:mm:ss" |
|||
type="daterange" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="创建者ID" prop="creator"> |
|||
<el-input |
|||
v-model="queryParams.creator" |
|||
placeholder="请输入创建者ID" |
|||
clearable |
|||
@keyup.enter="handleQuery" |
|||
class="!w-240px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="info" plain @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> |
|||
<el-button type="info" plain @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> |
|||
<el-button |
|||
type="primary" |
|||
@click="openForm('create')" |
|||
v-hasPermi="['wms:workstation:create']" |
|||
> |
|||
<Icon icon="ep:plus" class="mr-5px" /> 新增 |
|||
</el-button> |
|||
<el-button |
|||
type="success" |
|||
@click="handleExport" |
|||
:loading="exportLoading" |
|||
v-hasPermi="['wms:workstation:export']" |
|||
> |
|||
<Icon icon="ep:download" class="mr-5px" /> 导出 |
|||
</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</ContentWrap> |
|||
|
|||
<!-- 列表 --> |
|||
<ContentWrap> |
|||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> |
|||
<el-table-column label="代码" align="center" prop="code" width="150px" /> |
|||
<el-table-column label="名称" align="center" prop="name" width="150px" /> |
|||
<el-table-column label="描述" align="center" prop="description" width="150px" /> |
|||
<el-table-column label="类型" align="center" prop="type" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.WORK_STATION_TYPE" :value="scope.row.type" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="车间代码" align="center" prop="workshopCode" width="150px" /> |
|||
<el-table-column label="生产线代码" align="center" prop="productionLineCode" width="150px" /> |
|||
<el-table-column label="原料库位" align="center" prop="rawLocationCode" width="150px" /> |
|||
<el-table-column label="成品库位" align="center" prop="fgLocationCode" width="150px" /> |
|||
<el-table-column label="是否可用" align="center" prop="available" width="150px"> |
|||
<template #default="scope"> |
|||
<dict-tag :type="DICT_TYPE.TRUE_FALSE" :value="scope.row.available" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column |
|||
label="生效时间" |
|||
align="center" |
|||
prop="activeTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column |
|||
label="失效时间" |
|||
align="center" |
|||
prop="expireTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="备注" align="center" prop="remark" width="150px" /> |
|||
<el-table-column |
|||
label="创建时间" |
|||
align="center" |
|||
prop="createTime" |
|||
:formatter="dateFormatter" |
|||
width="150px" |
|||
/> |
|||
<el-table-column label="创建者ID" align="center" prop="creator" width="150px" /> |
|||
<el-table-column label="操作" align="center" width="150px" fixed="right"> |
|||
<template #default="scope"> |
|||
<el-button |
|||
link |
|||
type="primary" |
|||
@click="openForm('update', scope.row.id)" |
|||
v-hasPermi="['wms:workstation:update']" |
|||
> |
|||
编辑 |
|||
</el-button> |
|||
<el-button |
|||
link |
|||
type="danger" |
|||
@click="handleDelete(scope.row.id)" |
|||
v-hasPermi="['wms:workstation:delete']" |
|||
> |
|||
删除 |
|||
</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 分页 --> |
|||
<Pagination |
|||
:total="total" |
|||
v-model:page="queryParams.pageNo" |
|||
v-model:limit="queryParams.pageSize" |
|||
@pagination="getList" |
|||
/> |
|||
</ContentWrap> |
|||
|
|||
<!-- 表单弹窗:添加/修改 --> |
|||
<WorkstationForm ref="formRef" @success="getList" /> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict' |
|||
import { dateFormatter } from '@/utils/formatTime' |
|||
import download from '@/utils/download' |
|||
import * as WorkstationApi from '@/api/wms/workstation' |
|||
import WorkstationForm from './WorkstationForm.vue' |
|||
|
|||
defineOptions({ name: 'Workstation' }) |
|||
|
|||
const message = useMessage() // 消息弹窗 |
|||
const { t } = useI18n() // 国际化 |
|||
|
|||
const loading = ref(true) // 列表的加载中 |
|||
const total = ref(0) // 列表的总页数 |
|||
const list = ref([]) // 列表的数据 |
|||
const queryParams = reactive({ |
|||
pageNo: 1, |
|||
pageSize: 10, |
|||
code: null, |
|||
name: null, |
|||
description: null, |
|||
type: null, |
|||
workshopCode: null, |
|||
productionLineCode: null, |
|||
rawLocationCode: null, |
|||
fgLocationCode: null, |
|||
available: null, |
|||
activeTime: [], |
|||
expireTime: [], |
|||
remark: null, |
|||
createTime: [], |
|||
creator: null |
|||
}) |
|||
const queryFormRef = ref() // 搜索的表单 |
|||
const exportLoading = ref(false) // 导出的加载中 |
|||
|
|||
/** 查询列表 */ |
|||
const getList = async () => { |
|||
loading.value = true |
|||
try { |
|||
const data = await WorkstationApi.getWorkstationPage(queryParams) |
|||
list.value = data.list |
|||
total.value = data.total |
|||
} finally { |
|||
loading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 搜索按钮操作 */ |
|||
const handleQuery = () => { |
|||
queryParams.pageNo = 1 |
|||
getList() |
|||
} |
|||
|
|||
/** 重置按钮操作 */ |
|||
const resetQuery = () => { |
|||
queryFormRef.value.resetFields() |
|||
handleQuery() |
|||
} |
|||
|
|||
/** 添加/修改操作 */ |
|||
const formRef = ref() |
|||
const openForm = (type: string, id?: number) => { |
|||
formRef.value.open(type, id) |
|||
} |
|||
|
|||
/** 删除按钮操作 */ |
|||
const handleDelete = async (id: number) => { |
|||
try { |
|||
// 删除的二次确认 |
|||
await message.delConfirm() |
|||
// 发起删除 |
|||
await WorkstationApi.deleteWorkstation(id) |
|||
message.success(t('common.delSuccess')) |
|||
// 刷新列表 |
|||
await getList() |
|||
} catch {} |
|||
} |
|||
|
|||
/** 导出按钮操作 */ |
|||
const handleExport = async () => { |
|||
try { |
|||
// 导出的二次确认 |
|||
await message.exportConfirm() |
|||
// 发起导出 |
|||
exportLoading.value = true |
|||
const data = await WorkstationApi.exportWorkstation(queryParams) |
|||
download.excel(data, '工位.xls') |
|||
} catch { |
|||
} finally { |
|||
exportLoading.value = false |
|||
} |
|||
} |
|||
|
|||
/** 初始化 **/ |
|||
onMounted(() => { |
|||
getList() |
|||
}) |
|||
</script> |
Loading…
Reference in new issue