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
chenfang
12 months ago
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