Browse Source

new file: src/api/wms/accountcalendar/index.ts

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.vue
master
chenfang 12 months ago
parent
commit
5569a3e6d0
  1. 44
      src/api/wms/accountcalendar/index.ts
  2. 44
      src/api/wms/areabasic/index.ts
  3. 45
      src/api/wms/bom/index.ts
  4. 41
      src/api/wms/currencyexchange/index.ts
  5. 52
      src/api/wms/customer/index.ts
  6. 48
      src/api/wms/customerdock/index.ts
  7. 48
      src/api/wms/customeritem/index.ts
  8. 48
      src/api/wms/dock/index.ts
  9. 50
      src/api/wms/itempackaging/index.ts
  10. 55
      src/api/wms/location/index.ts
  11. 43
      src/api/wms/locationgroup/index.ts
  12. 44
      src/api/wms/process/index.ts
  13. 45
      src/api/wms/productionline/index.ts
  14. 41
      src/api/wms/productionlineitem/index.ts
  15. 42
      src/api/wms/project/index.ts
  16. 42
      src/api/wms/purchaseprice/index.ts
  17. 42
      src/api/wms/saleprice/index.ts
  18. 42
      src/api/wms/stdcostprice/index.ts
  19. 52
      src/api/wms/supplier/index.ts
  20. 51
      src/api/wms/supplieritem/index.ts
  21. 41
      src/api/wms/systemcalendar/index.ts
  22. 42
      src/api/wms/warehouse/index.ts
  23. 42
      src/api/wms/workshop/index.ts
  24. 46
      src/api/wms/workstation/index.ts
  25. 200
      src/views/wms/accountcalendar/AccountcalendarForm.vue
  26. 344
      src/views/wms/accountcalendar/index.vue
  27. 197
      src/views/wms/areabasic/AreaForm.vue
  28. 322
      src/views/wms/areabasic/index.vue
  29. 202
      src/views/wms/bom/BomForm.vue
  30. 337
      src/views/wms/bom/index.vue
  31. 162
      src/views/wms/currencyexchange/CurrencyexchangeForm.vue
  32. 287
      src/views/wms/currencyexchange/index.vue
  33. 261
      src/views/wms/customer/CustomerForm.vue
  34. 419
      src/views/wms/customer/index.vue
  35. 217
      src/views/wms/customerdock/CustomerdockForm.vue
  36. 355
      src/views/wms/customerdock/index.vue
  37. 238
      src/views/wms/customeritem/CustomeritemForm.vue
  38. 394
      src/views/wms/customeritem/index.vue
  39. 224
      src/views/wms/dock/DockForm.vue
  40. 356
      src/views/wms/dock/index.vue
  41. 427
      src/views/wms/itembasic/index.vue
  42. 271
      src/views/wms/itempackaging/ItempackagingForm.vue
  43. 441
      src/views/wms/itempackaging/index.vue
  44. 290
      src/views/wms/location/LocationForm.vue
  45. 443
      src/views/wms/location/index.vue
  46. 177
      src/views/wms/locationgroup/LocationgroupForm.vue
  47. 300
      src/views/wms/locationgroup/index.vue
  48. 191
      src/views/wms/process/ProcessForm.vue
  49. 312
      src/views/wms/process/index.vue
  50. 199
      src/views/wms/productionline/ProductionlineForm.vue
  51. 327
      src/views/wms/productionline/index.vue
  52. 162
      src/views/wms/productionlineitem/ProductionlineitemForm.vue
  53. 287
      src/views/wms/productionlineitem/index.vue
  54. 167
      src/views/wms/project/ProjectForm.vue
  55. 285
      src/views/wms/project/index.vue
  56. 177
      src/views/wms/purchaseprice/PurchasepriceForm.vue
  57. 308
      src/views/wms/purchaseprice/index.vue
  58. 177
      src/views/wms/saleprice/SalepriceForm.vue
  59. 308
      src/views/wms/saleprice/index.vue
  60. 177
      src/views/wms/stdcostprice/StdcostpriceForm.vue
  61. 308
      src/views/wms/stdcostprice/index.vue
  62. 261
      src/views/wms/supplier/SupplierForm.vue
  63. 419
      src/views/wms/supplier/index.vue
  64. 268
      src/views/wms/supplieritem/SupplieritemForm.vue
  65. 437
      src/views/wms/supplieritem/index.vue
  66. 168
      src/views/wms/systemcalendar/SystemcalendarForm.vue
  67. 303
      src/views/wms/systemcalendar/index.vue
  68. 173
      src/views/wms/warehouse/WarehouseForm.vue
  69. 294
      src/views/wms/warehouse/index.vue
  70. 173
      src/views/wms/workshop/WorkshopForm.vue
  71. 290
      src/views/wms/workshop/index.vue
  72. 207
      src/views/wms/workstation/WorkstationForm.vue
  73. 338
      src/views/wms/workstation/index.vue

44
src/api/wms/accountcalendar/index.ts

@ -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 })
}

44
src/api/wms/areabasic/index.ts

@ -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 })
}

45
src/api/wms/bom/index.ts

@ -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 })
}

41
src/api/wms/currencyexchange/index.ts

@ -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 })
}

52
src/api/wms/customer/index.ts

@ -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 })
}

48
src/api/wms/customerdock/index.ts

@ -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 })
}

48
src/api/wms/customeritem/index.ts

@ -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 })
}

48
src/api/wms/dock/index.ts

@ -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 })
}

50
src/api/wms/itempackaging/index.ts

@ -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 })
}

55
src/api/wms/location/index.ts

@ -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 })
}

43
src/api/wms/locationgroup/index.ts

@ -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 })
}

44
src/api/wms/process/index.ts

@ -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 })
}

45
src/api/wms/productionline/index.ts

@ -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 })
}

41
src/api/wms/productionlineitem/index.ts

@ -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 })
}

42
src/api/wms/project/index.ts

@ -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 })
}

42
src/api/wms/purchaseprice/index.ts

@ -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 })
}

42
src/api/wms/saleprice/index.ts

@ -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 })
}

42
src/api/wms/stdcostprice/index.ts

@ -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 })
}

52
src/api/wms/supplier/index.ts

@ -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 })
}

51
src/api/wms/supplieritem/index.ts

@ -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 })
}

41
src/api/wms/systemcalendar/index.ts

@ -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 })
}

42
src/api/wms/warehouse/index.ts

@ -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 })
}

42
src/api/wms/workshop/index.ts

@ -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 })
}

46
src/api/wms/workstation/index.ts

@ -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 })
}

200
src/views/wms/accountcalendar/AccountcalendarForm.vue

@ -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) // 12
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>

344
src/views/wms/accountcalendar/index.vue

@ -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>

197
src/views/wms/areabasic/AreaForm.vue

@ -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) // 12
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>

322
src/views/wms/areabasic/index.vue

@ -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>

202
src/views/wms/bom/BomForm.vue

@ -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) // 12
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>

337
src/views/wms/bom/index.vue

@ -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>

162
src/views/wms/currencyexchange/CurrencyexchangeForm.vue

@ -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) // 12
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>

287
src/views/wms/currencyexchange/index.vue

@ -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>

261
src/views/wms/customer/CustomerForm.vue

@ -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) // 12
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>

419
src/views/wms/customer/index.vue

@ -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>

217
src/views/wms/customerdock/CustomerdockForm.vue

@ -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) // 12
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>

355
src/views/wms/customerdock/index.vue

@ -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>

238
src/views/wms/customeritem/CustomeritemForm.vue

@ -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) // 12
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>

394
src/views/wms/customeritem/index.vue

@ -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>

224
src/views/wms/dock/DockForm.vue

@ -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) // 12
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>

356
src/views/wms/dock/index.vue

@ -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>

427
src/views/wms/itembasic/index.vue

@ -1,163 +1,365 @@
<template> <template>
<!-- 物品基本信息管理 -->
<ContentWrap> <ContentWrap>
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="96px"> <el-form
class="-mb-15px"
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
>
<el-form-item label="代码" prop="code"> <el-form-item label="代码" prop="code">
<el-input v-model="queryParams.code" placeholder="请输入代码" clearable @keyup.enter="handleQuery" class="!w-240px" /> <el-input
v-model="queryParams.code"
placeholder="请输入代码"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item> </el-form-item>
<el-form-item label="名称" prop="name"> <el-form-item label="名称" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入名称" clearable @keyup.enter="handleQuery" class="!w-240px" /> <el-input
v-model="queryParams.name"
placeholder="请输入名称"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item> </el-form-item>
<el-form-item label="描述1" prop="desc1"> <el-form-item label="描述1" prop="desc1">
<el-input v-model="queryParams.desc1" placeholder="请输入描述1" clearable @keyup.enter="handleQuery" <el-input
class="!w-240px" /> v-model="queryParams.desc1"
placeholder="请输入描述1"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item> </el-form-item>
<el-form-item label="描述2" prop="desc2"> <el-form-item label="描述2" prop="desc2">
<el-input v-model="queryParams.desc2" placeholder="请输入描述2" clearable @keyup.enter="handleQuery" <el-input
class="!w-240px" /> v-model="queryParams.desc2"
placeholder="请输入描述2"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable class="!w-240px"> <el-select v-model="queryParams.status" placeholder="请选择状态" clearable class="!w-240px">
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.ITEM_STATUS)" :key="dict.value" :label="dict.label" <el-option
:value="dict.value" /> v-for="dict in getStrDictOptions(DICT_TYPE.ITEM_STATUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="计量单位" prop="uom"> <el-form-item label="计量单位" prop="uom">
<el-select v-model="queryParams.uom" placeholder="请选择计量单位" clearable class="!w-240px"> <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" <el-option
:value="dict.value" /> v-for="dict in getStrDictOptions(DICT_TYPE.UOM)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="替代计量单位" prop="altUom"> <el-form-item label="替代计量单位" prop="altUom">
<el-select v-model="queryParams.altUom" placeholder="请选择替代计量单位" clearable class="!w-240px"> <el-select
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.UOM)" :key="dict.value" :label="dict.label" v-model="queryParams.altUom"
:value="dict.value" /> 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-select>
</el-form-item> </el-form-item>
<el-form-item label="是否标包" prop="isStdPack"> <el-form-item label="是否标包" prop="isStdPack">
<el-select v-model="queryParams.isStdPack" placeholder="请选择是否标包" clearable class="!w-240px"> <el-select
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" :key="dict.value" :label="dict.label" v-model="queryParams.isStdPack"
:value="dict.value" /> 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-select>
</el-form-item> </el-form-item>
<el-form-item label="可采购" prop="enableBuy"> <el-form-item label="可采购" prop="enableBuy">
<el-select v-model="queryParams.enableBuy" placeholder="请选择可采购" clearable class="!w-240px"> <el-select
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" :key="dict.value" :label="dict.label" v-model="queryParams.enableBuy"
:value="dict.value" /> 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-select>
</el-form-item> </el-form-item>
<el-form-item label="可制造" prop="enableMake"> <el-form-item label="可制造" prop="enableMake">
<el-select v-model="queryParams.enableMake" placeholder="请选择可制造" clearable class="!w-240px"> <el-select
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" :key="dict.value" :label="dict.label" v-model="queryParams.enableMake"
:value="dict.value" /> 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-select>
</el-form-item> </el-form-item>
<el-form-item label="可委外加工" prop="enableOutsourcing"> <el-form-item label="可委外加工" prop="enableOutsourcing">
<el-select v-model="queryParams.enableOutsourcing" placeholder="请选择可委外加工" clearable class="!w-240px"> <el-select
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" :key="dict.value" :label="dict.label" v-model="queryParams.enableOutsourcing"
:value="dict.value" /> 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-select>
</el-form-item> </el-form-item>
<el-form-item label="回收件" prop="isRecycled"> <el-form-item label="回收件" prop="isRecycled">
<el-select v-model="queryParams.isRecycled" placeholder="请选择回收件" clearable class="!w-240px"> <el-select
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" :key="dict.value" :label="dict.label" v-model="queryParams.isRecycled"
:value="dict.value" /> 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-select>
</el-form-item> </el-form-item>
<el-form-item label="虚零件" prop="isPhantom"> <el-form-item label="虚零件" prop="isPhantom">
<el-select v-model="queryParams.isPhantom" placeholder="请选择虚零件" clearable class="!w-240px"> <el-select
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.TRUE_FALSE)" :key="dict.value" :label="dict.label" v-model="queryParams.isPhantom"
:value="dict.value" /> 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-select>
</el-form-item> </el-form-item>
<el-form-item label="ABC类" prop="abcClass"> <el-form-item label="ABC类" prop="abcClass">
<el-select v-model="queryParams.abcClass" placeholder="请选择ABC类" clearable class="!w-240px"> <el-select
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.ABC_CLASS)" :key="dict.value" :label="dict.label" v-model="queryParams.abcClass"
:value="dict.value" /> placeholder="请选择ABC类"
clearable
class="!w-240px"
>
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.ABC_CLASS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="类型" prop="type"> <el-form-item label="类型" prop="type">
<el-select v-model="queryParams.type" placeholder="请选择类型" clearable class="!w-240px"> <el-select v-model="queryParams.type" placeholder="请选择类型" clearable class="!w-240px">
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.ITEM_TYPE)" :key="dict.value" :label="dict.label" <el-option
:value="dict.value" /> v-for="dict in getStrDictOptions(DICT_TYPE.ITEM_TYPE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="种类" prop="category"> <el-form-item label="种类" prop="category">
<el-select v-model="queryParams.category" placeholder="请选择种类" clearable class="!w-240px"> <el-select
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.ITEM_CATEGORY)" :key="dict.value" :label="dict.label" v-model="queryParams.category"
:value="dict.value" /> placeholder="请选择种类"
clearable
class="!w-240px"
>
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.ITEM_CATEGORY)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="分组" prop="itemGroup"> <el-form-item label="分组" prop="itemGroup">
<el-select v-model="queryParams.itemGroup" placeholder="请选择分组" clearable class="!w-240px"> <el-select
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.ITEM_GROUP)" :key="dict.value" :label="dict.label" v-model="queryParams.itemGroup"
:value="dict.value" /> placeholder="请选择分组"
clearable
class="!w-240px"
>
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.ITEM_GROUP)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="颜色" prop="color"> <el-form-item label="颜色" prop="color">
<el-select v-model="queryParams.color" placeholder="请选择颜色" clearable class="!w-240px"> <el-select v-model="queryParams.color" placeholder="请选择颜色" clearable class="!w-240px">
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.ITEM_COLOR)" :key="dict.value" :label="dict.label" <el-option
:value="dict.value" /> v-for="dict in getStrDictOptions(DICT_TYPE.ITEM_COLOR)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="配置" prop="configuration"> <el-form-item label="配置" prop="configuration">
<el-select v-model="queryParams.configuration" placeholder="请选择配置" clearable class="!w-240px"> <el-select
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.ITEM_CONFIGURATION)" :key="dict.value" :label="dict.label" v-model="queryParams.configuration"
:value="dict.value" /> placeholder="请选择配置"
clearable
class="!w-240px"
>
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.ITEM_CONFIGURATION)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="项目" prop="project"> <el-form-item label="项目" prop="project">
<el-input v-model="queryParams.project" placeholder="请输入项目" clearable @keyup.enter="handleQuery" <el-input
class="!w-240px" /> v-model="queryParams.project"
placeholder="请输入项目"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item> </el-form-item>
<el-form-item label="质量等级" prop="eqLevel"> <el-form-item label="质量等级" prop="eqLevel">
<el-select v-model="queryParams.eqLevel" placeholder="请选择质量等级" clearable class="!w-240px"> <el-select
<el-option v-for="dict in getStrDictOptions(DICT_TYPE.EQ_LEVEL)" :key="dict.value" :label="dict.label" v-model="queryParams.eqLevel"
:value="dict.value" /> placeholder="请选择质量等级"
clearable
class="!w-240px"
>
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.EQ_LEVEL)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="有效天数" prop="validityDays"> <el-form-item label="有效天数" prop="validityDays">
<el-input v-model="queryParams.validityDays" placeholder="请输入有效天数" clearable @keyup.enter="handleQuery" <el-input
class="!w-240px" /> v-model="queryParams.validityDays"
placeholder="请输入有效天数"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="是否可用" prop="available">
<el-input
v-model="queryParams.available"
placeholder="请输入是否可用"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item> </el-form-item>
<el-form-item label="生效时间" prop="activeTime"> <el-form-item label="生效时间" prop="activeTime">
<el-date-picker v-model="queryParams.activeTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange" <el-date-picker
start-placeholder="开始日期" end-placeholder="结束日期" :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" v-model="queryParams.activeTime"
class="!w-240px" /> 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>
<el-form-item label="失效时间" prop="expireTime"> <el-form-item label="失效时间" prop="expireTime">
<el-date-picker v-model="queryParams.expireTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange" <el-date-picker
start-placeholder="开始日期" end-placeholder="结束日期" :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" v-model="queryParams.expireTime"
class="!w-240px" /> 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>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input v-model="queryParams.remark" placeholder="请输入备注" clearable @keyup.enter="handleQuery" <el-input
class="!w-240px" /> v-model="queryParams.remark"
placeholder="请输入备注"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item> </el-form-item>
<el-form-item label="创建时间" prop="createTime"> <el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange" <el-date-picker
start-placeholder="开始日期" end-placeholder="结束日期" :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" v-model="queryParams.createTime"
class="!w-240px" /> 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>
<el-form-item label="创建者ID" prop="creator"> <el-form-item label="创建者ID" prop="creator">
<el-input v-model="queryParams.creator" placeholder="请输入创建者ID" clearable @keyup.enter="handleQuery" <el-input
class="!w-240px" /> v-model="queryParams.creator"
placeholder="请输入创建者ID"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="info" plain @click="handleQuery"> <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<Icon icon="ep:search" class="mr-5px" /> 搜索 <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
</el-button> <el-button
<el-button type="info" plain @click="resetQuery"> type="primary"
<Icon icon="ep:refresh" class="mr-5px" /> 重置 plain
</el-button> @click="openForm('create')"
<el-button type="primary" @click="openForm('create')" v-hasPermi="['wms:itembasic:create']"> v-hasPermi="['wms:itembasic:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增 <Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button> </el-button>
<el-button type="warning" @click="handleImport" v-hasPermi="['wms:itembasic:import']"> <el-button
<Icon icon="ep:upload" /> 导入 type="success"
</el-button> plain
<el-button type="success" @click="handleExport" :loading="exportLoading" v-hasPermi="['wms:itembasic:export']"> @click="handleExport"
:loading="exportLoading"
v-hasPermi="['wms:itembasic:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出 <Icon icon="ep:download" class="mr-5px" /> 导出
</el-button> </el-button>
</el-form-item> </el-form-item>
@ -254,32 +456,59 @@
</el-table-column> </el-table-column>
<el-table-column label="有效天数" align="center" prop="validityDays" width="150px" /> <el-table-column label="有效天数" align="center" prop="validityDays" width="150px" />
<el-table-column label="是否可用" align="center" prop="available" width="150px" /> <el-table-column label="是否可用" align="center" prop="available" width="150px" />
<el-table-column label="生效时间" align="center" prop="activeTime" :formatter="dateFormatter" width="150px" /> <el-table-column
<el-table-column label="失效时间" align="center" prop="expireTime" :formatter="dateFormatter" width="150px" /> 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="remark" width="150px" />
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" 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="创建者ID" align="center" prop="creator" width="150px" />
<el-table-column label="操作" align="center" width="240px" fixed='right'> <el-table-column label="操作" align="center" width="150px">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" @click="openForm('update', scope.row.id)" v-hasPermi="['wms:itembasic:update']"> <el-button
<Icon icon="ep:edit" />编辑 link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['wms:itembasic:update']"
>
编辑
</el-button> </el-button>
<el-button link type="primary" @click="openForm('update', scope.row.id)" v-hasPermi="['wms:itembasic:update']"> <el-button
<Icon icon="ep:document-copy" />详情 link
</el-button> type="danger"
<el-button link type="danger" @click="handleDelete(scope.row.id)" v-hasPermi="['wms:itembasic:delete']"> @click="handleDelete(scope.row.id)"
<Icon icon="ep:delete" /> 删除 v-hasPermi="['wms:itembasic:delete']"
>
删除
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- 分页 --> <!-- 分页 -->
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" <Pagination
@pagination="getList" /> :total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</ContentWrap> </ContentWrap>
<!-- 物品基本信息管理导入对话框 -->
<ItembasicImportForm ref="importFormRef" @success="getList" />
<!-- 表单弹窗添加/修改 --> <!-- 表单弹窗添加/修改 -->
<ItembasicForm ref="formRef" @success="getList" /> <ItembasicForm ref="formRef" @success="getList" />
</template> </template>
@ -290,7 +519,6 @@ import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download' import download from '@/utils/download'
import * as ItembasicApi from '@/api/wms/itembasic' import * as ItembasicApi from '@/api/wms/itembasic'
import ItembasicForm from './ItembasicForm.vue' import ItembasicForm from './ItembasicForm.vue'
import ItembasicImportForm from './ItembasicImportForm.vue'
defineOptions({ name: 'Itembasic' }) defineOptions({ name: 'Itembasic' })
@ -340,6 +568,7 @@ const getList = async () => {
loading.value = true loading.value = true
try { try {
const data = await ItembasicApi.getItembasicPage(queryParams) const data = await ItembasicApi.getItembasicPage(queryParams)
list.value = data.list list.value = data.list
total.value = data.total total.value = data.total
} finally { } finally {
@ -359,12 +588,6 @@ const resetQuery = () => {
handleQuery() handleQuery()
} }
/** 用户导入 */
const importFormRef = ref()
const handleImport = () => {
importFormRef.value.open()
}
/** 添加/修改操作 */ /** 添加/修改操作 */
const formRef = ref() const formRef = ref()
const openForm = (type: string, id?: number) => { const openForm = (type: string, id?: number) => {

271
src/views/wms/itempackaging/ItempackagingForm.vue

@ -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) // 12
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>

441
src/views/wms/itempackaging/index.vue

@ -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>

290
src/views/wms/location/LocationForm.vue

@ -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) // 12
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>

443
src/views/wms/location/index.vue

@ -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>

177
src/views/wms/locationgroup/LocationgroupForm.vue

@ -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) // 12
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>

300
src/views/wms/locationgroup/index.vue

@ -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>

191
src/views/wms/process/ProcessForm.vue

@ -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) // 12
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>

312
src/views/wms/process/index.vue

@ -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>

199
src/views/wms/productionline/ProductionlineForm.vue

@ -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) // 12
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>

327
src/views/wms/productionline/index.vue

@ -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>

162
src/views/wms/productionlineitem/ProductionlineitemForm.vue

@ -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) // 12
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>

287
src/views/wms/productionlineitem/index.vue

@ -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>

167
src/views/wms/project/ProjectForm.vue

@ -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) // 12
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>

285
src/views/wms/project/index.vue

@ -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>

177
src/views/wms/purchaseprice/PurchasepriceForm.vue

@ -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) // 12
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>

308
src/views/wms/purchaseprice/index.vue

@ -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>

177
src/views/wms/saleprice/SalepriceForm.vue

@ -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) // 12
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>

308
src/views/wms/saleprice/index.vue

@ -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>

177
src/views/wms/stdcostprice/StdcostpriceForm.vue

@ -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) // 12
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>

308
src/views/wms/stdcostprice/index.vue

@ -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>

261
src/views/wms/supplier/SupplierForm.vue

@ -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) // 12
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>

419
src/views/wms/supplier/index.vue

@ -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>

268
src/views/wms/supplieritem/SupplieritemForm.vue

@ -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) // 12
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>

437
src/views/wms/supplieritem/index.vue

@ -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>

168
src/views/wms/systemcalendar/SystemcalendarForm.vue

@ -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) // 12
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>

303
src/views/wms/systemcalendar/index.vue

@ -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>

173
src/views/wms/warehouse/WarehouseForm.vue

@ -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) // 12
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>

294
src/views/wms/warehouse/index.vue

@ -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>

173
src/views/wms/workshop/WorkshopForm.vue

@ -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) // 12
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>

290
src/views/wms/workshop/index.vue

@ -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>

207
src/views/wms/workstation/WorkstationForm.vue

@ -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) // 12
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>

338
src/views/wms/workstation/index.vue

@ -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…
Cancel
Save