Commit 6f560892 by zhuzhequan

Merge branch 'release' into dev_ware_in

# Conflicts:
#	src/views/order/podCN/index.vue
#	src/views/warehouse/issueDoc.vue
#	src/views/warehouse/receiptDoc.vue
#	src/views/warehouse/warning.vue
parents 117516e6 e737142b
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
"@wangeditor/editor": "^5.1.23", "@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.12", "@wangeditor/editor-for-vue": "^5.1.12",
"axios": "^1.6.7", "axios": "^1.6.7",
"bignumber": "^1.1.0",
"bignumber.js": "^9.3.0", "bignumber.js": "^9.3.0",
"dayjs": "^1.11.13", "dayjs": "^1.11.13",
"echarts": "^6.0.0", "echarts": "^6.0.0",
...@@ -3171,6 +3172,14 @@ ...@@ -3171,6 +3172,14 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/bignumber": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/bignumber/-/bignumber-1.1.0.tgz",
"integrity": "sha512-EGqHCKkEAwVwufcEOCYhZQqdVH+7cNCyPZ9yxisYvSjHFB+d9YcGMvorsFpeN5IJpC+lC6K+FHhu8+S4MgJazw==",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/bignumber.js": { "node_modules/bignumber.js": {
"version": "9.3.0", "version": "9.3.0",
"resolved": "https://registry.npmmirror.com/bignumber.js/-/bignumber.js-9.3.0.tgz", "resolved": "https://registry.npmmirror.com/bignumber.js/-/bignumber.js-9.3.0.tgz",
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
"@wangeditor/editor": "^5.1.23", "@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.12", "@wangeditor/editor-for-vue": "^5.1.12",
"axios": "^1.6.7", "axios": "^1.6.7",
"bignumber": "^1.1.0",
"bignumber.js": "^9.3.0", "bignumber.js": "^9.3.0",
"dayjs": "^1.11.13", "dayjs": "^1.11.13",
"echarts": "^6.0.0", "echarts": "^6.0.0",
......
...@@ -5,6 +5,8 @@ import { LogisticBill } from '@/types/api/podMakeOrder' ...@@ -5,6 +5,8 @@ import { LogisticBill } from '@/types/api/podMakeOrder'
import { userData } from '@/types/api/user' import { userData } from '@/types/api/user'
import { VersionImageList } from '@/types/api/typesetting' import { VersionImageList } from '@/types/api/typesetting'
import { SupplierItem, WarehouseListData } from '@/types'
import { loactionData } from './warehouse'
// 获取物流公司 // 获取物流公司
export function getLogisticsCompanyList() { export function getLogisticsCompanyList() {
...@@ -49,3 +51,38 @@ export function getLogisticCNApi(content: string) { ...@@ -49,3 +51,38 @@ export function getLogisticCNApi(content: string) {
`factory/podJomallOrder/getOrderByThirdSubOrderNumber?thirdSubOrderNumber=${content}`, `factory/podJomallOrder/getOrderByThirdSubOrderNumber?thirdSubOrderNumber=${content}`,
) )
} }
// 获取仓库列表
export function loadWarehouseListApi() {
return axios.get<never, BaseRespData<WarehouseListData[]>>(
'factoryWarehouseInfo/getAll',
)
}
// 获取用户列表
export function getEmployeeListApi() {
return axios.get<never, BaseRespData<userData[]>>(`/factory/factoryUser/list`)
}
// 获取供应商列表
export function getSupplierListApi() {
return axios.get<never, BaseRespData<SupplierItem[]>>(
`/factory/supplier/list`,
)
}
// 获取币种接口
export function getBaseCurrencyInfoApi() {
return axios.get<never, BaseRespData<never>>(
'factory/supplier/getBaseCurrencyInfo',
)
}
// 获取库位List
export function LocationInfoGetAll(wareHouseId?: string | number) {
return axios.get<never, BaseRespData<loactionData[]>>(
'/factoryWarehouseLocation/getByWareHouse',
{
params: { wareHouseId },
},
)
}
import axios from './axios' import axios from './axios'
import { BasePaginationData, BaseRespData } from '@/types/api' import { BasePaginationData, BaseRespData } from '@/types/api'
import { SearchForm, OutOfStockItem } from '@/types/api/outOfStockStatistics' import { SearchForm, OutOfStockItem } from '@/types/api/supply/outOfStockStatistics'
export function getOutOfStockStatisticsListApi( export function getOutOfStockStatisticsListApi(
data: SearchForm, data: SearchForm,
currentPage: number, currentPage: number,
......
...@@ -5,7 +5,6 @@ import { ...@@ -5,7 +5,6 @@ import {
SearchForm, SearchForm,
Tab, Tab,
LogListData, LogListData,
WarehouseListData,
LogisticsData, LogisticsData,
ExportParams, ExportParams,
IconfirmSubmit, IconfirmSubmit,
...@@ -39,10 +38,6 @@ export function syncReceiverAddress(data: number[]) { ...@@ -39,10 +38,6 @@ export function syncReceiverAddress(data: number[]) {
) )
} }
export function getEmployeeListApi() {
return axios.get(`/factory/factoryUser/list`)
}
// 播种墙配货 扫码放入箱子 // 播种墙配货 扫码放入箱子
export function getPackingCnDataApi( export function getPackingCnDataApi(
code: string, code: string,
...@@ -419,11 +414,7 @@ export function getLogisticsCalculation(id: number) { ...@@ -419,11 +414,7 @@ export function getLogisticsCalculation(id: number) {
{ params: { id } }, { params: { id } },
) )
} }
export function loadWarehouseListApi() {
return axios.get<never, BaseRespData<WarehouseListData[]>>(
'factoryWarehouseInfo/getAll',
)
}
export function refreshMaterialApi(data: { export function refreshMaterialApi(data: {
orderIds?: string orderIds?: string
productIds?: string productIds?: string
......
...@@ -6,7 +6,6 @@ import { ...@@ -6,7 +6,6 @@ import {
Tab, Tab,
LogListData, LogListData,
ProductionClient, ProductionClient,
WarehouseListData,
LogisticsData, LogisticsData,
ExportParams, ExportParams,
InterceptStateGroupData, InterceptStateGroupData,
...@@ -310,11 +309,6 @@ export function getLogisticsCalculation(id: number) { ...@@ -310,11 +309,6 @@ export function getLogisticsCalculation(id: number) {
{ params: { id } }, { params: { id } },
) )
} }
export function loadWarehouseListApi() {
return axios.get<never, BaseRespData<WarehouseListData[]>>(
'factoryWarehouseInfo/getAll',
)
}
export function refreshMaterialApi(data: { export function refreshMaterialApi(data: {
orderIds?: string orderIds?: string
productIds?: string productIds?: string
...@@ -640,11 +634,6 @@ export function getAccountCodeByFactoryIdApi(params: { token: string }) { ...@@ -640,11 +634,6 @@ export function getAccountCodeByFactoryIdApi(params: { token: string }) {
export function getLogisticsWayApi() { export function getLogisticsWayApi() {
return axios.get(`logisticsWay/usableAllList`) return axios.get(`logisticsWay/usableAllList`)
} }
export function getEmployeeListApi() {
return axios.get(`/factory/factoryUser/list`)
}
// 打印拣货单item // 打印拣货单item
export function printPickPdfByBatchNumberApi(params: { export function printPickPdfByBatchNumberApi(params: {
batchArrangeNumber: string batchArrangeNumber: string
......
import axios from '../axios'
import { BasePaginationData, BaseRespData } from '@/types/api'
import {
SearchForm,
TableData,
TreeData,
AddStockingOrderForm,
StockingOrderProduct,
InternalMemoList,
RelatedDocumentList,
LogListData,
} from '@/types/api/supply/stockingOrder'
export function getStockingOrderListApi(
data: SearchForm,
currentPage: number,
pageSize: number,
) {
return axios.post<never, BasePaginationData<TableData>>(
'factory/supply/stockingUpManage/list_page',
{ ...data, currentPage, pageSize },
)
}
export function getStockingOrderStatusTreeApi() {
return axios.get<never, BaseRespData<TreeData[]>>(
'factory/supply/stockingUpManage/getStatusTree',
)
}
// 新增备货单
export function addStockingOrderApi(url: string, data: AddStockingOrderForm) {
return axios.post<never, BaseRespData<never>>(url, data)
}
// 根据父SKU查询商品信息
export function getProductBySkuApi(spu: string, supplierId: number) {
return axios.get<never, BaseRespData<StockingOrderProduct[]>>(
'factory/supply/stockingUpManage/getCustomProductItem',
{
params: { productItemSku: spu, supplierId },
},
)
}
export function getStockingOrderDetailByIdApi(id: number) {
return axios.get<never, BaseRespData<AddStockingOrderForm>>(
`factory/supply/stockingUpManage/get?id=${id}`,
)
}
export function getStockingOrderDetailListByIdApi(id: number) {
return axios.get<never, BaseRespData<StockingOrderProduct[]>>(
`factory/supply/stockingUpManage/getManageDetailsList?id=${id}`,
)
}
export function getStockingOrderRelatedDocumentListByIdApi(id: number) {
return axios.get<never, BaseRespData<RelatedDocumentList[]>>(
`factory/supply/stockingUpManage/getWarehouseApplyList?id=${id}`,
)
}
export function getStockingOrderInternalMemoListByIdApi(id: number) {
return axios.get<never, BaseRespData<InternalMemoList[]>>(
`factory/supply/stockingUpManage/getInternalMemoList?id=${id}`,
)
}
export function getStockingOrderLogListByIdApi(id: number) {
return axios.get<never, BaseRespData<LogListData[]>>(
`factory/supply/stockingUpManageLog/getStockingUpManageLog?manageId=${id}`,
)
}
export function submitStockingOrderAuditApi(ids: string) {
return axios.get<never, BaseRespData<void>>(
'factory/supply/stockingUpManage/submission',
{
params: { ids },
},
)
}
export function rejectedStockingOrderApi(params: {
id: number | string
turnDownReason: string
}) {
return axios.get<never, BaseRespData<void>>(
'factory/supply/stockingUpManage/rejected',
{
params,
},
)
}
export function supplierDispatchApi(data: {
manageId: number | string
manageNo: string
warehouseId: number | string
warehouseName: string
expectDeliveryTime: string
currencyCode: string
detailsList: StockingOrderProduct[]
}) {
return axios.post<never, BaseRespData<void>>(
'factory/supply/stockingUpWarehouseApply/add',
data,
)
}
export function stockingCompleteApi(id: number) {
return axios.get<never, BaseRespData<void>>(
`factory/supply/stockingUpManage/delivery?id=${id}`,
)
}
export function deleteStockingOrderApi(id: string | number) {
return axios.get<never, BaseRespData<void>>(
`factory/supply/stockingUpManage/delete`,
{
params: { id },
},
)
}
export function cancelStockingOrderApi(
id: string | number,
cancelReason: string,
) {
return axios.get<never, BaseRespData<void>>(
`factory/supply/stockingUpManage/cancel`,
{
params: { id, cancelReason },
},
)
}
export function addStockingOrderInternalTagApi(memo: string, idList: number[]) {
return axios.post<never, BaseRespData<void>>(
`factory/supply/stockingUpManage/batchAddInternalMemo`,
{
content: memo,
idList,
},
)
}
...@@ -45,12 +45,7 @@ export function getProductInfoBySpuApi(spu: string | number) { ...@@ -45,12 +45,7 @@ export function getProductInfoBySpuApi(spu: string | number) {
}, },
) )
} }
// 获取币种接口
export function getBaseCurrencyInfoApi() {
return axios.get<never, BaseRespData<never>>(
'factory/supplier/getBaseCurrencyInfo',
)
}
//新增 //新增
export function addSupplierApi(params: IsupplierType) { export function addSupplierApi(params: IsupplierType) {
return axios.post<never, BaseRespData<never>>('/factory/supplier/add', params) return axios.post<never, BaseRespData<never>>('/factory/supplier/add', params)
......
...@@ -284,14 +284,6 @@ export function warehouseInfoGetAll() { ...@@ -284,14 +284,6 @@ export function warehouseInfoGetAll() {
'/factoryWarehouseInfo/getAll', '/factoryWarehouseInfo/getAll',
) )
} }
export function LocationInfoGetAll(wareHouseId?: string | number) {
return axios.get<never, BaseRespData<loactionData[]>>(
'/factoryWarehouseLocation/getByWareHouse',
{
params: { wareHouseId },
},
)
}
export function createWarehouseInventoryApi(data: WarehouseWarningData) { export function createWarehouseInventoryApi(data: WarehouseWarningData) {
return axios.post<never, BaseRespData<never>>( return axios.post<never, BaseRespData<never>>(
......
import axios from '@/api/axios'
import { BasePaginationData, BaseRespData } from '@/types/api'
import { LogListData } from '@/types/api/supply/stockingOrder'
import {
SearchForm,
TableData,
TreeData,
StockingApplyOrderDetailList,
RelatedDocumentList,
StockingApplyOrderDetailData,
LocationDataBySkuData,
} from '@/types/api/warehouse/stockingApplyOrder'
export function getStockingApplyOrderListApi(
data: SearchForm,
currentPage: number,
pageSize: number,
) {
return axios.post<never, BasePaginationData<TableData>>(
'factory/supply/stockingUpWarehouseApply/list_page',
{ ...data, currentPage, pageSize },
)
}
export function getStockingApplyOrderTreeApi() {
return axios.get<never, BaseRespData<TreeData[]>>(
'factory/supply/stockingUpWarehouseApply/getStatusTree',
)
}
export function getStockingApplyOrderDetailListByIdApi(id: number) {
return axios.get<never, BaseRespData<StockingApplyOrderDetailList[]>>(
`factory/supply/stockingUpWarehouseApply/getWarehouseApplyList?id=${id}`,
)
}
export function getStockingApplyOrderRelatedDocumentListByIdApi(
warehouseApplyNo: string,
) {
return axios.get<never, BaseRespData<RelatedDocumentList[]>>(
`factory/supply/stockingUpWarehouseApply/getWarehouseInList?warehouseApplyNo=${warehouseApplyNo}`,
)
}
export function getStockingApplyOrderLogListByIdApi(id: number) {
return axios.get<never, BaseRespData<LogListData[]>>(
`factory/supply/stockingUpWarehouseApplyLog/getWarehouseApplyLog?warehouseApplyId=${id}`,
)
}
export function warehouseReceiptApi(id: number) {
return axios.get<never, BaseRespData<void>>(
`factory/supply/stockingUpWarehouseApply/receiving?id=${id}`,
)
}
export function submitWarehousingApi(data: StockingApplyOrderDetailData) {
return axios.post<never, BaseRespData<void>>(
'factory/supply/stockingUpWarehouseApply/submitInventory',
data,
)
}
export function getStockingApplyOrderDetailById(id: number) {
return axios.get<never, BaseRespData<StockingApplyOrderDetailData>>(
`factory/supply/stockingUpWarehouseApply/get?id=${id}`,
)
}
export function getLocationListApi(sku: string, warehouseId: string | number) {
return axios.post<never, BaseRespData<LocationDataBySkuData[]>>(
'factoryWarehouseInventory/getBySkuAndWarehouseId',
{
sku,
warehouseId,
},
)
}
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
<ElTable <ElTable
ref="tableRef" ref="tableRef"
:data="paginatedData" :data="paginatedData"
show-overflow-tooltip
border border
:stripe="stripe" :stripe="stripe"
header-align="center" header-align="center"
......
...@@ -167,7 +167,14 @@ const router = createRouter({ ...@@ -167,7 +167,14 @@ const router = createRouter({
meta: { meta: {
title: '缺货统计', title: '缺货统计',
}, },
component: () => import('@/views/supply/OutOfStockStatistics.vue') component: () => import('@/views/supply/OutOfStockStatistics.vue'),
},
{
path: '/supply/stocking-order',
meta: {
title: '备货订单',
},
component: () => import('@/views/supply/stockingOrder/index.vue'),
}, },
{ {
path: '/system/delivery-note', path: '/system/delivery-note',
...@@ -296,6 +303,14 @@ const router = createRouter({ ...@@ -296,6 +303,14 @@ const router = createRouter({
component: stockingPlan, component: stockingPlan,
}, },
{ {
path: '/warehouse/stocking-application',
meta: {
title: '入库申请单',
},
component: () =>
import('@/views/warehouse/stockingApplicationOrder/index.vue'),
},
{
path: '/warehouse/warning', path: '/warehouse/warning',
meta: { meta: {
title: '仓库预警', title: '仓库预警',
......
...@@ -11,11 +11,6 @@ const menu: MenuItem[] = [ ...@@ -11,11 +11,6 @@ const menu: MenuItem[] = [
id: 1, id: 1,
label: '概览', label: '概览',
}, },
// {
// index: '/product',
// id: 11,
// label: '商品',
// },
{ {
index: '4', index: '4',
id: 7, id: 7,
...@@ -74,6 +69,11 @@ const menu: MenuItem[] = [ ...@@ -74,6 +69,11 @@ const menu: MenuItem[] = [
label: '库存', label: '库存',
children: [ children: [
{ {
index: '/warehouse/stocking-application',
id: 126,
label: '入库申请单',
},
{
index: '/warehouse/warning', index: '/warehouse/warning',
id: 125, id: 125,
label: '仓库预警', label: '仓库预警',
...@@ -159,8 +159,13 @@ const menu: MenuItem[] = [ ...@@ -159,8 +159,13 @@ const menu: MenuItem[] = [
id: 1, id: 1,
}, },
{ {
index: '/supply/supplierManagement', label: '备货订单',
index: '/supply/stocking-order',
id: 2, id: 2,
},
{
index: '/supply/supplierManagement',
id: 3,
label: '供应商管理', label: '供应商管理',
}, },
], ],
...@@ -238,17 +243,5 @@ const menu: MenuItem[] = [ ...@@ -238,17 +243,5 @@ const menu: MenuItem[] = [
}, },
], ],
}, },
// {
// index: '',
// id: 3,
// label: '生产管理',
// children: [
// {
// index: '/production/complete',
// id: 4,
// label: '生产完成',
// }
// ]
// },
] ]
export default menu export default menu
...@@ -32,6 +32,15 @@ ...@@ -32,6 +32,15 @@
color: #409eff !important; color: #409eff !important;
} }
} }
.el-form-item {
margin-right: 10px !important;
}
:root { :root {
--el-menu-icon-width: 0px; --el-menu-icon-width: 0px;
} }
.el-loading-mask.is-fullscreen {
z-index: 5000 !important;
}
.el-loading-mask {
z-index: 1020 !important;
}
\ No newline at end of file
...@@ -55,6 +55,7 @@ export interface SearchForm { ...@@ -55,6 +55,7 @@ export interface SearchForm {
employeeId?: number employeeId?: number
blocking?: boolean blocking?: boolean
outOfStock?: boolean outOfStock?: boolean
receiverCountry?: string
} }
export interface PodCnOrderListData { export interface PodCnOrderListData {
id: number id: number
......
...@@ -194,16 +194,7 @@ export interface PodOrderRes extends ProductList { ...@@ -194,16 +194,7 @@ export interface PodOrderRes extends ProductList {
note?: Array<{ prop: string | number; value: string | number }> note?: Array<{ prop: string | number; value: string | number }>
imgList: cardImages[] imgList: cardImages[]
} }
export interface WarehouseListData {
code?: string
defaulted?: number
factoryCode?: string
factoryId?: number
id: number
name?: string
remarks?: string
sort?: number
}
export interface LogisticsData { export interface LogisticsData {
logisticsWayName: string // 物流名称 logisticsWayName: string // 物流名称
warehouseName: string // 发货仓库 warehouseName: string // 发货仓库
......
...@@ -27,11 +27,17 @@ export interface statisticData { ...@@ -27,11 +27,17 @@ export interface statisticData {
outOfStockSkuNum: number outOfStockSkuNum: number
outOfStockProductNum: number outOfStockProductNum: number
yesterdayOverTimeShipmentOrderNum: number yesterdayOverTimeShipmentOrderNum: number
notShipmentProductNum: number
overTimeNotShipmentProductNum: number
yesterdayShipmentProductNum: number
} }
export interface trendType { export interface trendType {
confirmNum: number // 接单数 confirmNum: number // 接单数
produceNum: number // 生产数 produceNum: number // 生产数
shipmentNum: number // 发货数 shipmentNum: number // 发货数
confirmProductNum?: number // 新接数(件)
produceProductNum?: number // 生产数(件)
shipmentProductNum?: number // 发货数(件)
shipmentRateOf24Hour: number // 24小时发货率 shipmentRateOf24Hour: number // 24小时发货率
shipmentRateOf48Hour: number // 48小时发货率 shipmentRateOf48Hour: number // 48小时发货率
overtimeShipmentRate: number // 超48小时发货率 overtimeShipmentRate: number // 超48小时发货率
......
export interface TreeData {
name: string
code: string
children?: TreeData[]
countQuantity?: number
id?: number
}
export interface SearchForm {
currentPage: number
endDate?: string
pageSize: number
shippingStatusList?: string[]
startDate?: string
status?: string
stockingUpManageNo?: string
stockingUpUserId?: string[]
supplierId?: string[]
warehouseId?: string | number[]
warehouseSku?: string | number[]
warehouseSkuName?: string
remark?: string
}
export interface TableData {
id: number
factoryId?: number
factoryCode?: string
stockingUpManageNo?: string
currencyCode?: string
skuTotal?: number
total?: number
totalPrice?: number
buyStored?: number
storedPrice?: number
buyUnstored?: number
unstoragePrice?: number
shipmentQuantity?: number
rejectsAmount?: number
shipmentFreight?: number
expectDeliveryTime?: string
status?: string
supplierId?: number
supplierName?: string
warehouseId?: number
warehouseName?: string
stockingUpUserId?: number
stockingUpUserName?: string
createUserId?: number
createUserName?: string
createTime?: string
updateTime?: string
remark?: string
dataVersion?: number
shippingStatus?: number
delayDays?: number
lastDeliveryTime?: string
completeTime?: string
auditName?: string
auditTime?: string
}
export interface StockProduct {
skuImage?: string
productName?: string
styleNumber?: string
warehouseSku?: string
stockQuantity?: number
stockUnitPrice?: number
stockAmount?: number
unshippedQuantity?: number
shippedQuantity?: number
inWarehouseQuantity?: number
defectiveQuantity?: number
}
export interface AddStockingOrderForm {
id?: number | string
stockingUpManageNo?: string
supplierId?: number
supplierName?: string
stockingUpUserId?: number
stockingUpUserName?: string
warehouseId?: number
warehouseName?: string
expectDeliveryTime?: string
totalPrice?: string
currencyCode?: string
currencyName?: string
remark?: string
status?: number
submission?: boolean
detailsList?: StockingOrderProduct[]
examineStatus?: number // 审核状态:1通过,0驳回
rejectReason?: string // 驳回原因
}
export interface StockingOrderProduct {
productNo?: string
warehouseSkuId?: number
warehouseSku?: string
warehouseSkuName?: string
warehouseSkuImage?: string
buyAmount?: number | string
price?: number | string
currencyCode?: string
currencyName?: string
totalPrice?: number | string
shipmentQuantity?: number | string
buyStored?: number
// 供应商发货相关字段
remainingQuantity?: number // 剩余待发货数量
currentShipQuantity?: number | string // 本次发货数量
}
export interface RelatedDocumentList {
id: number
factoryId?: number
factoryCode?: string
manageId?: number
manageNo?: string
warehouseApplyNo?: string
warehouseId?: number
warehouseName?: string
skuTotal?: number
total?: number
buyStored?: number
rejectsAmount?: number
storeStatus?: string
expectDeliveryTime?: string
createUserId?: number
createUserName?: string
createTime?: string
updateTime?: string
dataVersion?: number
}
export interface InternalMemoList {
id: number
outId?: number
operatorEmployeeName?: string
operatorTime?: string
content?: string
remark?: string
type?: number
}
export interface LogListData {
id: number
manageId?: number
userId?: number
userName?: string
description?: string
updateTime?: string
}
export interface SearchForm {
warehouseApplyNo?: string
manageNo?: string
warehouseId?: string | number[]
warehouseSku?: string | number[]
warehouseSkuName?: string
currentPage: number
pageSize: number
storeStatus?: string
}
export interface TreeData {
id?: number
code?: string
name?: string
countQuantity?: number
children?: TreeData[]
leaf?: boolean
}
export interface TableData {
id: number
factoryId?: number
factoryCode?: string
manageId?: number
manageNo?: string
warehouseApplyNo: string
warehouseId?: number
warehouseName?: string
skuTotal?: number
total?: number
buyStored?: number
rejectsAmount?: number
storeStatus: string
expectDeliveryTime?: string
createUserId?: number
createUserName?: string
createTime?: string
updateTime?: string
dataVersion?: number
}
export interface StockingApplyOrderDetailList {
id: number
manageId?: number
warehouseApplyId?: number
warehouseApplyNo?: string
warehouseSku?: string
productNo?: string
warehouseSkuName?: string
warehouseSkuImage?: string
shipmentQuantity?: number
buyStored?: number | string
rejectsAmount?: number | string
price?: number
createTime?: string
updateTime?: string
locationId?: number
locationCode?: string | undefined
finallyShipmentQuantity?: number
storedPending?: number
}
export interface RelatedDocumentList {
id: number
dataVersion?: number
createTime?: string
updateTime?: string
factoryId?: number
factoryCode?: string
warehouseId?: number
warehouseName?: string
inNo?: string
skuAmount?: number
total?: number
totalPrice?: number
billStatus?: string
billStatusTxt?: string
makerName?: string
makerUserId?: number
makeTime?: string
checkerUserId?: number
checkerName?: string
source?: string
sourceOn?: string
}
export interface StockingApplyOrderDetailData {
id: number
warehouseApplyNo?: string
warehouseName?: string
warehouseId?: number
checkerUserId?: number
remark?: string
checkerName?: string
detailsList: StockingApplyOrderDetailList[]
}
export interface LocationDataBySkuData {
id: number
factoryId?: number
warehouseId?: number
warehouseName?: string
locationId?: number
locationCode?: string
warehouseSku?: string
customSku?: string
skuName?: string
createTime?: string
updateTime?: string
productItem?: unknown
usableInventory?: number
image?: string
price?: number
currencyCode?: string
currencyName?: string
sumOccupyInventory?: number
}
// 放系统中公共类型
export interface WarehouseListData {
code?: string
defaulted?: number
factoryCode?: string
factoryId?: number
id: number
name?: string
remarks?: string
sort?: number
}
export interface SupplierItem {
id: number
supplierName?: string
contacts?: string
contactsNumber?: string
address?: string
remark?: string
factoryId?: number
updateTime?: string
createTime?: string
supplierProductInfoList?: []
}
export interface CurrencyCodeData {
currencyName?: string
currencyCode?: string
id?: string
}
...@@ -86,10 +86,10 @@ import { ...@@ -86,10 +86,10 @@ import {
getTiktokCarrier, getTiktokCarrier,
} from '@/api/logistics' } from '@/api/logistics'
import type { FormItemRule } from 'element-plus' import type { FormItemRule } from 'element-plus'
import { WarehouseListData } from '@/types/api/podUsOrder' import { WarehouseListData } from '@/types'
import { ISeachFormConfig } from '@/types/searchType' import { ISeachFormConfig } from '@/types/searchType'
import { TableColumn } from '@/components/VxeTable' import { TableColumn } from '@/components/VxeTable'
import { loadWarehouseListApi } from '@/api/podUsOrder' import { loadWarehouseListApi } from '@/api/common'
import type { import type {
LogisticsMethod, LogisticsMethod,
platformObj, platformObj,
......
...@@ -757,19 +757,6 @@ const handleSelectionChange = (val: PodUsOrderListData[]) => { ...@@ -757,19 +757,6 @@ const handleSelectionChange = (val: PodUsOrderListData[]) => {
selection.value = val selection.value = val
} }
// 修改行样式方法
const getRowStyle = ({ row }: { row: PodUsOrderListData }) => {
// 如果行被选中,设置背景色为 #fdf6ec
if (selection.value.some((item) => item.id === row.id)) {
return {
backgroundColor: '#fdf6ec',
}
}
return {
backgroundColor: '',
}
}
// 获取行类名方法 // 获取行类名方法
const getRowClassName = ({ row }: { row: PodUsOrderListData }) => { const getRowClassName = ({ row }: { row: PodUsOrderListData }) => {
return selection.value.some((item) => item.id === row.id) return selection.value.some((item) => item.id === row.id)
...@@ -948,6 +935,7 @@ onMounted(() => { ...@@ -948,6 +935,7 @@ onMounted(() => {
<el-radio-button value="single">单面</el-radio-button> <el-radio-button value="single">单面</el-radio-button>
<el-radio-button value="multiple">多面</el-radio-button> <el-radio-button value="multiple">多面</el-radio-button>
<el-radio-button value="normal">普品</el-radio-button> <el-radio-button value="normal">普品</el-radio-button>
<el-radio-button value="custom_normal">胚衣</el-radio-button>
</el-radio-group> </el-radio-group>
</ElFormItem> </ElFormItem>
<ElFormItem label="数量"> <ElFormItem label="数量">
...@@ -1156,7 +1144,6 @@ onMounted(() => { ...@@ -1156,7 +1144,6 @@ onMounted(() => {
:serial-numberable="true" :serial-numberable="true"
:selectionable="true" :selectionable="true"
:paginated-data="tableData" :paginated-data="tableData"
:row-style="getRowStyle"
:row-class-name="getRowClassName" :row-class-name="getRowClassName"
@row-click="rowClick" @row-click="rowClick"
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
...@@ -1385,11 +1372,22 @@ onMounted(() => { ...@@ -1385,11 +1372,22 @@ onMounted(() => {
} }
} }
// 确保选中行的背景色在 hover 时也保持 // 设置选中行的背景色
:deep(.el-table__body) { :deep(.el-table__body) {
.el-table__row:hover {
td {
background-color: #e1ebf5 !important;
}
}
.el-table__row.row-selected {
td {
background-color: #faecd8 !important;
}
}
// 确保选中行的背景色在 hover 时也保持
.el-table__row.row-selected:hover { .el-table__row.row-selected:hover {
td { td {
background-color: #fdf6ec !important; background-color: #faecd8 !important;
} }
} }
} }
......
...@@ -772,20 +772,6 @@ const handleSelectionChange = (val: PodCnOrderListData[]) => { ...@@ -772,20 +772,6 @@ const handleSelectionChange = (val: PodCnOrderListData[]) => {
selection.value = val selection.value = val
} }
// 修改行样式方法
const getRowStyle = ({ row }: { row: PodCnOrderListData }) => {
// 如果行被选中,设置背景色为 #fdf6ec
if (selection.value.some((item) => item.id === row.id)) {
return {
backgroundColor: '#fdf6ec',
}
}
return {
backgroundColor: '',
}
}
// 获取行类名方法 // 获取行类名方法
const getRowClassName = ({ row }: { row: PodCnOrderListData }) => { const getRowClassName = ({ row }: { row: PodCnOrderListData }) => {
return selection.value.some((item) => item.id === row.id) return selection.value.some((item) => item.id === row.id)
...@@ -988,6 +974,7 @@ onMounted(() => { ...@@ -988,6 +974,7 @@ onMounted(() => {
<el-radio-button value="single">单面</el-radio-button> <el-radio-button value="single">单面</el-radio-button>
<el-radio-button value="multiple">多面</el-radio-button> <el-radio-button value="multiple">多面</el-radio-button>
<el-radio-button value="normal">普品</el-radio-button> <el-radio-button value="normal">普品</el-radio-button>
<el-radio-button value="custom_normal">胚衣</el-radio-button>
</el-radio-group> </el-radio-group>
</ElFormItem> </ElFormItem>
<ElFormItem label="数量"> <ElFormItem label="数量">
...@@ -1246,7 +1233,6 @@ onMounted(() => { ...@@ -1246,7 +1233,6 @@ onMounted(() => {
:serial-numberable="true" :serial-numberable="true"
:selectionable="true" :selectionable="true"
:paginated-data="tableData" :paginated-data="tableData"
:row-style="getRowStyle"
:row-class-name="getRowClassName" :row-class-name="getRowClassName"
@row-click="rowClick" @row-click="rowClick"
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
...@@ -1482,11 +1468,22 @@ onMounted(() => { ...@@ -1482,11 +1468,22 @@ onMounted(() => {
} }
} }
// 确保选中行的背景色在 hover 时也保持 // 设置选中行的背景色
:deep(.el-table__body) { :deep(.el-table__body) {
.el-table__row:hover {
td {
background-color: #e1ebf5 !important;
}
}
.el-table__row.row-selected {
td {
background-color: #faecd8 !important;
}
}
// 确保选中行的背景色在 hover 时也保持
.el-table__row.row-selected:hover { .el-table__row.row-selected:hover {
td { td {
background-color: #fdf6ec !important; background-color: #faecd8 !important;
} }
} }
} }
......
...@@ -282,7 +282,7 @@ import { ...@@ -282,7 +282,7 @@ import {
} from '@/api/podCnOrder' } from '@/api/podCnOrder'
const { getCLodop } = useLodop() const { getCLodop } = useLodop()
import useOrderStore from '@/store/cnOrder' import useOrderStore from '@/store/cnOrder'
import { WarehouseListData } from '@/types/api/podUsOrder' import { WarehouseListData } from '@/types/index'
const orderStore = useOrderStore() const orderStore = useOrderStore()
const boxList = computed(() => orderStore.podBoxList) const boxList = computed(() => orderStore.podBoxList)
const podOrderDetailsColumns = computed(() => [ const podOrderDetailsColumns = computed(() => [
......
...@@ -279,7 +279,7 @@ import { ...@@ -279,7 +279,7 @@ import {
import useUserStore from '@/store/user' import useUserStore from '@/store/user'
import { Check, Refresh } from '@element-plus/icons-vue' import { Check, Refresh } from '@element-plus/icons-vue'
import socket from '@/utils/cnWebsocket' import socket from '@/utils/cnWebsocket'
import { WarehouseListData } from '@/types/api/podUsOrder' import { WarehouseListData } from '@/types/index'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import { filePath } from '@/api/axios.ts' import { filePath } from '@/api/axios.ts'
......
...@@ -237,6 +237,7 @@ ...@@ -237,6 +237,7 @@
<el-radio-button label="single">单面</el-radio-button> <el-radio-button label="single">单面</el-radio-button>
<el-radio-button label="multiple">多面</el-radio-button> <el-radio-button label="multiple">多面</el-radio-button>
<el-radio-button label="normal">普品</el-radio-button> <el-radio-button label="normal">普品</el-radio-button>
<el-radio-button value="custom_normal">胚衣</el-radio-button>
</el-radio-group> </el-radio-group>
</ElFormItem> </ElFormItem>
<ElFormItem v-if="status !== 'BATCH_DOWNLOAD'" label="数量"> <ElFormItem v-if="status !== 'BATCH_DOWNLOAD'" label="数量">
...@@ -379,6 +380,34 @@ ...@@ -379,6 +380,34 @@
style="width: 150px" style="width: 150px"
></ElInput> ></ElInput>
</ElFormItem> </ElFormItem>
<ElFormItem
v-if="
![
'TO_BE_ARRANGE',
'PICKING',
'TO_BE_REPLENISHMENT',
'IN_PRODUCTION',
].includes(status)
"
label="收件国家"
>
<ElSelect
v-model="searchForm.receiverCountry"
placeholder="收件国家"
clearable
:teleported="false"
style="width: 150px"
filterable
@change="changeReplaceShipment"
>
<ElOption
v-for="item in receiverCountryList"
:key="item.countryCode"
:value="item.countryCode"
:label="item.nameCn + '(' + item.countryCode + ')'"
></ElOption>
</ElSelect>
</ElFormItem>
<ElFormItem label="是否代发"> <ElFormItem label="是否代发">
<ElSelect <ElSelect
v-model="searchForm.replaceShipment" v-model="searchForm.replaceShipment"
...@@ -2880,7 +2909,6 @@ import { ...@@ -2880,7 +2909,6 @@ import {
printPrintOrderApi, printPrintOrderApi,
stockOutCheckApi, stockOutCheckApi,
toBePickingApi, toBePickingApi,
loadWarehouseListApi,
getLogisticsCalculation, getLogisticsCalculation,
refreshProductInformationApi, refreshProductInformationApi,
composingDesignImages, composingDesignImages,
...@@ -2918,10 +2946,11 @@ import { ...@@ -2918,10 +2946,11 @@ import {
printNormalPdf, printNormalPdf,
printNormalProducePdf, printNormalProducePdf,
changeLogisticsApi, changeLogisticsApi,
getEmployeeListApi,
allErpCodeListApi, allErpCodeListApi,
updateProductOutOfStockApi, updateProductOutOfStockApi,
} from '@/api/podCnOrder' } from '@/api/podCnOrder'
import { loadWarehouseListApi, getEmployeeListApi } from '@/api/common'
// import { logisticsCompanyAllCodelist } from '@/api/logistics.ts' // import { logisticsCompanyAllCodelist } from '@/api/logistics.ts'
import { BaseRespData } from '@/types/api' import { BaseRespData } from '@/types/api'
...@@ -2940,7 +2969,6 @@ import { ...@@ -2940,7 +2969,6 @@ import {
ProductionClient, ProductionClient,
SearchForm, SearchForm,
Tab, Tab,
WarehouseListData,
cardImages, cardImages,
AddressInfo, AddressInfo,
LogisticsData, LogisticsData,
...@@ -2948,6 +2976,7 @@ import { ...@@ -2948,6 +2976,7 @@ import {
CraftListData, CraftListData,
ExportParams, ExportParams,
} from '@/types/api/podCnOrder' } from '@/types/api/podCnOrder'
import { WarehouseListData } from '@/types'
import usePageList from '@/utils/hooks/usePageList' import usePageList from '@/utils/hooks/usePageList'
import { useValue } from '@/utils/hooks/useValue' import { useValue } from '@/utils/hooks/useValue'
import { showConfirm } from '@/utils/ui' import { showConfirm } from '@/utils/ui'
...@@ -2974,6 +3003,7 @@ import { ...@@ -2974,6 +3003,7 @@ import {
type RouteLocationNormalized, type RouteLocationNormalized,
} from 'vue-router' } from 'vue-router'
import UpdateCustomDeclarationInfoDialog from './components/UpdateCustomDeclarationInfoDialog.vue' import UpdateCustomDeclarationInfoDialog from './components/UpdateCustomDeclarationInfoDialog.vue'
import { userData } from '@/types/api/user.ts'
declare global { declare global {
interface Window { interface Window {
...@@ -3049,7 +3079,7 @@ const sourceList = [ ...@@ -3049,7 +3079,7 @@ const sourceList = [
}, },
] ]
const sizes = ['FS', 'XS', 'S', 'M', 'L', 'XL', 'XXL', '3XL', '4XL', '5XL'] const sizes = ['FS', 'XS', 'S', 'M', 'L', 'XL', 'XXL', '3XL', '4XL', '5XL']
const employeeList = ref<{ account: string; id: number }[]>([]) const employeeList = ref<userData[]>([])
const exportData = () => { const exportData = () => {
exportVisible.value = true exportVisible.value = true
...@@ -3170,6 +3200,7 @@ const [searchForm, resetSearchForm] = useValue<SearchForm>({ ...@@ -3170,6 +3200,7 @@ const [searchForm, resetSearchForm] = useValue<SearchForm>({
batchArrangeNumber: '', batchArrangeNumber: '',
craftCode: [], craftCode: [],
thirdStockSku: '', thirdStockSku: '',
receiverCountry: '',
}) })
const shipmentArea = ref(0) const shipmentArea = ref(0)
const userMarkList = ref<string[]>([]) const userMarkList = ref<string[]>([])
...@@ -5543,15 +5574,8 @@ const getRowStyle = ({ row }: { row: PodCnOrderListData }) => { ...@@ -5543,15 +5574,8 @@ const getRowStyle = ({ row }: { row: PodCnOrderListData }) => {
color: '#67c23a', color: '#67c23a',
} }
} }
// 如果行被选中,设置背景色为 #fdf6ec // 选中状态通过 CSS 类名控制,这里不再处理
if (selection.value.some((item) => item.id === row.id)) { return {}
return {
backgroundColor: '#fdf6ec',
}
}
return {
backgroundColor: '',
}
} }
// 获取行类名方法 // 获取行类名方法
...@@ -5646,6 +5670,17 @@ const getlogisticsCompanyAllCodelist = async () => { ...@@ -5646,6 +5670,17 @@ const getlogisticsCompanyAllCodelist = async () => {
} }
} }
const receiverCountryList = ref<{ countryCode: string; nameCn: string }[]>([])
const getReceiverCountryList = async () => {
try {
const res = await getAllCountryApi()
if (res.code !== 200) return
receiverCountryList.value = res.data
} catch (e) {
console.error(e)
}
}
function tooltipContent(arr: { name: string }[]) { function tooltipContent(arr: { name: string }[]) {
return arr.map((tag) => tag.name).join('、') return arr.map((tag) => tag.name).join('、')
} }
...@@ -5746,6 +5781,7 @@ onMounted(() => { ...@@ -5746,6 +5781,7 @@ onMounted(() => {
getCustomTagList() getCustomTagList()
loadCraftList() loadCraftList()
getlogisticsCompanyAllCodelist() getlogisticsCompanyAllCodelist()
getReceiverCountryList()
// 每60秒更新一次当前时间 // 每60秒更新一次当前时间
timer = window.setInterval(() => { timer = window.setInterval(() => {
currentTime.value = new Date() currentTime.value = new Date()
...@@ -6549,11 +6585,22 @@ const onUpdateCustomsDeclarationInfo = () => { ...@@ -6549,11 +6585,22 @@ const onUpdateCustomsDeclarationInfo = () => {
} }
} }
// 确保选中行的背景色在 hover 时也保持 // 设置选中行的背景色
:deep(.el-table__body) { :deep(.el-table__body) {
.el-table__row:hover {
td {
background-color: #e1ebf5 !important;
}
}
.el-table__row.row-selected {
td {
background-color: #faecd8 !important;
}
}
// 确保选中行的背景色在 hover 时也保持
.el-table__row.row-selected:hover { .el-table__row.row-selected:hover {
td { td {
background-color: #fdf6ec !important; background-color: #faecd8 !important;
} }
} }
} }
......
...@@ -267,7 +267,7 @@ import { ...@@ -267,7 +267,7 @@ import {
import useUserStore from '@/store/user' import useUserStore from '@/store/user'
import { Check, Refresh } from '@element-plus/icons-vue' import { Check, Refresh } from '@element-plus/icons-vue'
import socket from '@/utils/websocket' import socket from '@/utils/websocket'
import { WarehouseListData } from '@/types/api/podUsOrder' import { WarehouseListData } from '@/types/index'
import { filePath } from '@/api/axios.ts' import { filePath } from '@/api/axios.ts'
import { ElButton, ElIcon } from 'element-plus' import { ElButton, ElIcon } from 'element-plus'
......
...@@ -227,6 +227,7 @@ ...@@ -227,6 +227,7 @@
<el-radio-button label="single">单面</el-radio-button> <el-radio-button label="single">单面</el-radio-button>
<el-radio-button label="multiple">多面</el-radio-button> <el-radio-button label="multiple">多面</el-radio-button>
<el-radio-button label="normal">普品</el-radio-button> <el-radio-button label="normal">普品</el-radio-button>
<el-radio-button value="custom_normal">胚衣</el-radio-button>
</el-radio-group> </el-radio-group>
</ElFormItem> </ElFormItem>
<ElFormItem v-if="status !== 'BATCH_DOWNLOAD'" label="数量"> <ElFormItem v-if="status !== 'BATCH_DOWNLOAD'" label="数量">
...@@ -3161,7 +3162,7 @@ ...@@ -3161,7 +3162,7 @@
</template> </template>
<script setup lang="tsx"> <script setup lang="tsx">
import LogisticsWaySelect from '../../logistics/components/LogisticsWaySelect.tsx' import LogisticsWaySelect from '../../logistics/components/LogisticsWaySelect.tsx'
import { getUserMarkList } from '@/api/common' import { getUserMarkList, loadWarehouseListApi } from '@/api/common'
// import { AnyObject } from '@/types/api/warehouse' // import { AnyObject } from '@/types/api/warehouse'
import uploadBox from '@/components/uploadBox.vue' import uploadBox from '@/components/uploadBox.vue'
import { convertToChinaTime } from '@/utils/index' import { convertToChinaTime } from '@/utils/index'
...@@ -3194,7 +3195,6 @@ import { ...@@ -3194,7 +3195,6 @@ import {
printPrintOrderApi, printPrintOrderApi,
stockOutCheckApi, stockOutCheckApi,
toBePickingApi, toBePickingApi,
loadWarehouseListApi,
getLogisticsCalculation, getLogisticsCalculation,
refreshMaterialApi, refreshMaterialApi,
getTrackingNumberApi, getTrackingNumberApi,
...@@ -3240,7 +3240,6 @@ import { ...@@ -3240,7 +3240,6 @@ import {
getLogisticsWayApi, getLogisticsWayApi,
printNormalPickPdfApi, printNormalPickPdfApi,
updatePRNDownloadStatus, updatePRNDownloadStatus,
getEmployeeListApi,
updateProductOutOfStockApi, updateProductOutOfStockApi,
} from '@/api/podUsOrder' } from '@/api/podUsOrder'
import { BaseRespData } from '@/types/api' import { BaseRespData } from '@/types/api'
...@@ -3248,7 +3247,7 @@ import { BaseRespData } from '@/types/api' ...@@ -3248,7 +3247,7 @@ import { BaseRespData } from '@/types/api'
import UpdateAddress from './components/updateAddress.vue' import UpdateAddress from './components/updateAddress.vue'
import { getAllCountryApi } from '@/api/logistics.ts' import { getAllCountryApi } from '@/api/logistics.ts'
import { getEmployeeListApi } from '@/api/common'
import TableView from '@/components/TableView.vue' import TableView from '@/components/TableView.vue'
import { import {
LogListData, LogListData,
...@@ -3257,7 +3256,6 @@ import { ...@@ -3257,7 +3256,6 @@ import {
ProductionClient, ProductionClient,
SearchForm, SearchForm,
Tab, Tab,
WarehouseListData,
cardImages, cardImages,
AddressInfo, AddressInfo,
LogisticsData, LogisticsData,
...@@ -3293,6 +3291,7 @@ import platformJson from '../../../json/platform.json' ...@@ -3293,6 +3291,7 @@ import platformJson from '../../../json/platform.json'
import { getToken } from '@/api/axios' import { getToken } from '@/api/axios'
import usePermissionBtnStore from '@/store/permission' import usePermissionBtnStore from '@/store/permission'
import ReissueOrderComponent from './components/ReissueOrder.vue' import ReissueOrderComponent from './components/ReissueOrder.vue'
import { WarehouseListData } from '@/types'
const permissionBtns = usePermissionBtnStore() const permissionBtns = usePermissionBtnStore()
...@@ -3302,6 +3301,7 @@ import { ...@@ -3302,6 +3301,7 @@ import {
type RouteLocationNormalized, type RouteLocationNormalized,
} from 'vue-router' } from 'vue-router'
import PrintWarehouseSkuTag from '@/views/order/components/printWarehouseSkuTag.vue' import PrintWarehouseSkuTag from '@/views/order/components/printWarehouseSkuTag.vue'
import { userData } from '@/types/api/user.ts'
declare global { declare global {
interface Window { interface Window {
...@@ -3339,7 +3339,7 @@ const printWarehouseSkuDialogRef = ref() ...@@ -3339,7 +3339,7 @@ const printWarehouseSkuDialogRef = ref()
const isAuto = ref(true) const isAuto = ref(true)
const countryList = ref([]) const countryList = ref([])
const logisticsWayList = ref<{ name: string; id: number }[]>([]) const logisticsWayList = ref<{ name: string; id: number }[]>([])
const employeeList = ref<{ account: string; id: number }[]>([]) const employeeList = ref<userData[]>([])
const currentRow = ref<AddressInfo>({ const currentRow = ref<AddressInfo>({
receiverName: '', receiverName: '',
receiverPhone: '', receiverPhone: '',
...@@ -6176,15 +6176,8 @@ const getRowStyle = ({ row }: { row: PodUsOrderListData }) => { ...@@ -6176,15 +6176,8 @@ const getRowStyle = ({ row }: { row: PodUsOrderListData }) => {
color: '#67c23a', color: '#67c23a',
} }
} }
// 如果行被选中,设置背景色为 #fdf6ec // 选中状态通过 CSS 类名控制,这里不再处理
if (selection.value.some((item) => item.id === row.id)) { return {}
return {
backgroundColor: '#fdf6ec',
}
}
return {
backgroundColor: '',
}
} }
// 获取行类名方法 // 获取行类名方法
...@@ -7327,11 +7320,22 @@ useRouter().beforeEach((to, from, next) => { ...@@ -7327,11 +7320,22 @@ useRouter().beforeEach((to, from, next) => {
} }
} }
// 确保选中行的背景色在 hover 时也保持 // 设置选中行的背景色
:deep(.el-table__body) { :deep(.el-table__body) {
.el-table__row:hover {
td {
background-color: #e1ebf5 !important;
}
}
.el-table__row.row-selected {
td {
background-color: #faecd8 !important;
}
}
// 确保选中行的背景色在 hover 时也保持
.el-table__row.row-selected:hover { .el-table__row.row-selected:hover {
td { td {
background-color: #fdf6ec !important; background-color: #faecd8 !important;
} }
} }
} }
......
...@@ -107,9 +107,9 @@ ...@@ -107,9 +107,9 @@
import { computed, ref, onMounted } from 'vue' import { computed, ref, onMounted } from 'vue'
import TableView from '@/components/TableView.vue' import TableView from '@/components/TableView.vue'
import usePageList from '@/utils/hooks/usePageList' import usePageList from '@/utils/hooks/usePageList'
import { loadWarehouseListApi } from '@/api/podCnOrder' import { loadWarehouseListApi } from '@/api/common'
import type { WarehouseListData } from '@/types/api/podCnOrder' import { WarehouseListData } from '@/types'
import { SearchForm, OutOfStockItem } from '@/types/api/outOfStockStatistics' import { SearchForm, OutOfStockItem } from '@/types/api/supply/outOfStockStatistics'
import { import {
getOutOfStockStatisticsListApi, getOutOfStockStatisticsListApi,
exportOutOfStockStatisticsListApi, exportOutOfStockStatisticsListApi,
......
<template>
<ElTabs
v-model="activeTab"
v-loading="loading"
class="detail-tabs"
@tab-click="handleTabClick"
>
<ElTabPane name="stockProducts" label="备货商品">
<div class="detail-table-content">
<TableView
:serial-numberable="true"
:columns="stockProductsColumns"
:paginated-data="stockProductsData"
/>
</div>
</ElTabPane>
<ElTabPane name="relatedDocuments" label="关联单据">
<div class="detail-table-content">
<TableView
:serial-numberable="true"
:columns="relatedDocumentsColumns"
:paginated-data="relatedDocumentsData"
/>
</div>
</ElTabPane>
<ElTabPane name="internalMemo" label="内部便签">
<div class="detail-table-content memo-content">
<div class="memo-input-wrapper">
<ElInput
v-model="memoInputValue"
placeholder="请输入内容"
clearable
class="memo-input"
/>
<ElButton type="primary" :loading="addingMemo" @click="handleAddMemo">
添加
</ElButton>
</div>
<div class="memo-list">
<template v-if="internalMemoData.length > 0">
<div
v-for="item in internalMemoData"
:key="item.id"
class="memo-item"
>
<span class="memo-user">{{ item.operatorEmployeeName }}</span>
<span class="memo-text">{{ item.content }}</span>
<span class="memo-time">({{ item.operatorTime }})</span>
</div>
</template>
<div v-else class="empty-content">暂无数据</div>
</div>
</div>
</ElTabPane>
<ElTabPane name="operationLog" label="操作日志">
<div class="detail-table-content">
<LogList :log-list="operationLogData" />
<div class="empty-content">暂无数据</div>
</div>
</ElTabPane>
</ElTabs>
</template>
<script setup lang="tsx">
import { ref } from 'vue'
import type { TabsPaneContext } from 'element-plus'
import TableView from '@/components/TableView.vue'
import {
InternalMemoList,
LogListData,
RelatedDocumentList,
StockingOrderProduct,
TableData,
} from '@/types/api/supply/stockingOrder'
import ImageView from '@/components/ImageView.vue'
import {
addStockingOrderInternalTagApi,
getStockingOrderDetailListByIdApi,
getStockingOrderInternalMemoListByIdApi,
getStockingOrderLogListByIdApi,
getStockingOrderRelatedDocumentListByIdApi,
} from '@/api/supplier/stockingOrder'
import { ElMessage } from 'element-plus'
import LogList from '@/components/LogList.vue'
const relatedDocumentsColumns = computed(() => {
return [
{
label: '关联单据',
prop: 'warehouseApplyNo',
align: 'center',
},
{
label: '关联单号',
prop: 'manageNo',
align: 'center',
},
{
label: '制单人',
width: 120,
prop: 'createUserName',
align: 'center',
},
{
label: '制单时间',
width: 160,
prop: 'createTime',
align: 'center',
},
{
label: 'SKU个数',
width: 120,
align: 'right',
prop: 'skuTotal',
},
{
label: '入库数量',
width: 120,
align: 'right',
prop: 'buyStored',
},
{
label: '申请数量',
width: 120,
prop: 'total',
align: 'right',
},
{
label: '预计到货日期',
width: 160,
align: 'center',
prop: 'expectDeliveryTime',
},
{
label: '实际到货日期',
width: 160,
align: 'center',
prop: 'deliveryTime',
},
]
})
const stockProductsColumns = computed(() => {
return [
{
label: 'SKU图片',
prop: 'skuImage',
width: 100,
align: 'center',
render: (item: StockingOrderProduct) => (
<ImageView src={item.warehouseSkuImage} width="50px" height="50px" />
),
},
{
label: '商品名称',
prop: 'warehouseSkuName',
minWidth: 200,
align: 'left',
},
{
label: '款号',
prop: 'productNo',
width: 120,
align: 'center',
},
{
label: '库存SKU',
prop: 'warehouseSku',
width: 180,
align: 'center',
},
{
label: '备货数量',
prop: 'buyAmount',
width: 100,
align: 'right',
},
{
label: '备货单价',
prop: 'price',
width: 100,
align: 'right',
},
{
label: '备货金额',
prop: 'totalPrice',
width: 120,
align: 'right',
},
{
label: '已发货数量',
prop: 'shipmentQuantity',
width: 120,
align: 'right',
},
{
label: '已入库数量',
prop: 'buyStored',
width: 120,
align: 'right',
},
{
label: '不良品数量',
prop: 'rejectsAmount',
width: 120,
align: 'right',
},
]
})
const props = defineProps<{
selectedRow: TableData | null
}>()
const stockProductsData = ref<StockingOrderProduct[]>([])
const relatedDocumentsData = ref<RelatedDocumentList[]>([])
const internalMemoData = ref<InternalMemoList[]>([])
const operationLogData = ref<LogListData[]>([])
const activeTab = ref('stockProducts')
const loading = ref(false)
const memoInputValue = ref('')
const addingMemo = ref(false)
const handleAddMemo = async () => {
if (!memoInputValue.value.trim()) {
ElMessage.warning('请输入内容')
return
}
if (!props.selectedRow) return
addingMemo.value = true
try {
const res = await addStockingOrderInternalTagApi(
memoInputValue.value.trim(),
[props.selectedRow.id],
)
if (res.code === 200) {
ElMessage.success('添加成功')
memoInputValue.value = ''
loadInternalMemo(props.selectedRow)
}
} catch (e) {
console.error(e)
} finally {
addingMemo.value = false
}
}
watch(
() => props.selectedRow,
(newVal) => {
if (newVal) {
if (activeTab.value === 'stockProducts') {
loadStockProducts(newVal)
} else if (activeTab.value === 'relatedDocuments') {
loadRelatedDocuments(newVal)
} else if (activeTab.value === 'internalMemo') {
loadInternalMemo(newVal)
} else if (activeTab.value === 'operationLog') {
loadOperationLog(newVal)
}
} else {
stockProductsData.value = []
relatedDocumentsData.value = []
internalMemoData.value = []
operationLogData.value = []
}
},
)
const loadStockProducts = async (row: TableData) => {
loading.value = true
try {
const res = await getStockingOrderDetailListByIdApi(row.id)
if (res.code !== 200) return
stockProductsData.value = res.data || []
} catch (e) {
console.error(e)
} finally {
loading.value = false
}
}
const loadRelatedDocuments = async (row: TableData) => {
loading.value = true
try {
const res = await getStockingOrderRelatedDocumentListByIdApi(row.id)
if (res.code !== 200) return
relatedDocumentsData.value = res.data || []
} catch (e) {
console.error(e)
} finally {
loading.value = false
}
}
const loadInternalMemo = async (row: TableData) => {
loading.value = true
try {
const res = await getStockingOrderInternalMemoListByIdApi(row.id)
if (res.code !== 200) return
internalMemoData.value = res.data || []
} catch (e) {
console.error(e)
} finally {
loading.value = false
}
}
const loadOperationLog = async (row: TableData) => {
loading.value = true
try {
const res = await getStockingOrderLogListByIdApi(row.id)
if (res.code !== 200) return
operationLogData.value = res.data || []
} catch (e) {
console.error(e)
} finally {
loading.value = false
}
}
const handleTabClick = (tab: TabsPaneContext) => {
activeTab.value = tab.paneName as string
if (!props.selectedRow) return
if (activeTab.value === 'stockProducts') {
loadStockProducts(props.selectedRow as TableData)
} else if (activeTab.value === 'relatedDocuments') {
loadRelatedDocuments(props.selectedRow as TableData)
} else if (activeTab.value === 'internalMemo') {
loadInternalMemo(props.selectedRow as TableData)
} else if (activeTab.value === 'operationLog') {
loadOperationLog(props.selectedRow as TableData)
}
}
</script>
<style lang="scss" scoped>
.detail-tabs {
height: 100%;
display: flex;
:deep(.el-tab-pane) {
height: 100%;
overflow: hidden;
}
}
.detail-table-content {
height: 100%;
overflow: hidden;
}
.empty-content {
display: flex;
align-items: center;
justify-content: center;
height: 100%;
color: #909399;
font-size: 14px;
}
.memo-content {
display: flex;
flex-direction: column;
}
.memo-input-wrapper {
display: flex;
align-items: center;
gap: 12px;
.memo-input {
flex: 1;
max-width: 300px;
}
}
.memo-list {
flex: 1;
overflow-y: auto;
}
.memo-item {
padding: 8px 0;
font-size: 14px;
line-height: 1.5;
border-bottom: 1px solid #f0f0f0;
&:last-child {
border-bottom: none;
}
.memo-user {
color: #409eff;
}
.memo-text {
color: #303133;
}
.memo-time {
color: #909399;
margin-left: 8px;
}
}
</style>
...@@ -190,10 +190,10 @@ import { ...@@ -190,10 +190,10 @@ import {
getSupplierDetailApi, getSupplierDetailApi,
getPropertyByCateIdApi, getPropertyByCateIdApi,
getProductInfoBySpuApi, getProductInfoBySpuApi,
getBaseCurrencyInfoApi,
addSupplierApi, addSupplierApi,
updateSupplierApi, updateSupplierApi,
} from '@/api/supplier/supplierManagement.ts' } from '@/api/supplier/supplierManagement.ts'
import { getBaseCurrencyInfoApi } from '@/api/common'
import Dialog from './components/dialog.tsx' import Dialog from './components/dialog.tsx'
import CustomizeForm from '@/components/CustomizeForm.tsx' import CustomizeForm from '@/components/CustomizeForm.tsx'
......
...@@ -856,9 +856,7 @@ ...@@ -856,9 +856,7 @@
maxlength="1000" maxlength="1000"
show-word-limit show-word-limit
/> />
<div style="margin-top: 12px; color: #777"> <div style="margin-top: 12px; color: #777">多个字段使用","隔开</div>
多个字段使用,隔开
</div>
</div> </div>
<template #footer> <template #footer>
<span class="dialog-footer"> <span class="dialog-footer">
......
...@@ -125,7 +125,7 @@ ...@@ -125,7 +125,7 @@
提交审核 提交审核
</el-button> </el-button>
</ElFormItem> </ElFormItem>
<ElFormItem v-if="nodeCode === 'PENDING_AUDIT'"> <ElFormItem v-if="nodeCode === 'PENDING_SUBMIT'">
<el-button type="danger" @click="auditOrder('invalid')"> <el-button type="danger" @click="auditOrder('invalid')">
作废 作废
</el-button> </el-button>
...@@ -184,7 +184,7 @@ ...@@ -184,7 +184,7 @@
align="center" align="center"
></ElTableColumn> ></ElTableColumn>
<ElTableColumn <ElTableColumn
label="备货单号" label="来源单号"
show-overflow-tooltip show-overflow-tooltip
prop="sourceOn" prop="sourceOn"
width="130" width="130"
...@@ -278,7 +278,16 @@ ...@@ -278,7 +278,16 @@
label="操作" label="操作"
> >
<template #default="{ row }"> <template #default="{ row }">
<ElButton type="primary" link @click="addDialog(2, row)" <ElButton
:disabled="row.source === 'StockingUpWarehouseApply'"
:title="
row.source === 'StockingUpWarehouseApply'
? '来源为入库申请单,不允许编辑!请先操作取消,再重新提交入库单'
: ''
"
type="primary"
link
@click="addDialog(2, row)"
>编辑 >编辑
</ElButton> </ElButton>
</template> </template>
...@@ -299,7 +308,7 @@ ...@@ -299,7 +308,7 @@
</div> </div>
</template> </template>
<template #bottom> <template #bottom>
<el-tabs v-model="tabsValue" @tab-click="tabsClick"> <el-tabs v-loading="showDetailLoading" v-model="tabsValue" @tab-click="tabsClick">
<el-tab-pane name="0" label="入库商品"> <el-tab-pane name="0" label="入库商品">
<div class="table-wrap"> <div class="table-wrap">
<ElTable size="small" :data="detailList" height="100%" border> <ElTable size="small" :data="detailList" height="100%" border>
...@@ -878,9 +887,7 @@ ...@@ -878,9 +887,7 @@
maxlength="1000" maxlength="1000"
show-word-limit show-word-limit
/> />
<div style="margin-top: 12px; color: #777"> <div style="margin-top: 12px; color: #777">多个字段使用","隔开</div>
多个字段使用,隔开
</div>
</div> </div>
<template #footer> <template #footer>
<span class="dialog-footer"> <span class="dialog-footer">
...@@ -919,7 +926,7 @@ import { ...@@ -919,7 +926,7 @@ import {
} from '@/api/warehouse' } from '@/api/warehouse'
import { filePath } from '@/api/axios.ts' import { filePath } from '@/api/axios.ts'
import BigNumber from 'bignumber.js' import BigNumber from 'bignumber.js'
import { ref, onMounted, watch, nextTick } from 'vue' import { ref, onMounted, watch, nextTick, computed } from 'vue'
import 'element-plus/dist/index.css' import 'element-plus/dist/index.css'
import { import {
warehouseSearchForm, warehouseSearchForm,
...@@ -1072,6 +1079,10 @@ const tabsValue = ref<string>('0') ...@@ -1072,6 +1079,10 @@ const tabsValue = ref<string>('0')
const singleTableRef = ref<InstanceType<typeof ElTable>>() const singleTableRef = ref<InstanceType<typeof ElTable>>()
const currentRow = ref<InterWarehousePage | null>(null) const currentRow = ref<InterWarehousePage | null>(null)
const logList = ref<LogListData[]>([]) const logList = ref<LogListData[]>([])
const detailLoading = ref(false)
const showDetailLoading = computed(() => {
return detailLoading.value && !newDialogVisible.value
})
const rules = { const rules = {
warehouseId: [{ required: true, message: '请选择仓库', trigger: 'change' }], warehouseId: [{ required: true, message: '请选择仓库', trigger: 'change' }],
} }
...@@ -1584,10 +1595,21 @@ const auditOrder = (key: string) => { ...@@ -1584,10 +1595,21 @@ const auditOrder = (key: string) => {
dataVersion, dataVersion,
}), }),
) )
const loading = ElLoading.service({
fullscreen: true,
text: '操作中...',
background: 'rgba(0, 0, 0, 0.3)',
})
try {
await auditOrderApi(url, data) await auditOrderApi(url, data)
ElMessage.success('操作成功') ElMessage.success('操作成功')
search() search()
await getTreeNum() await getTreeNum()
} catch (e) {
console.error(e)
} finally {
loading.close()
}
}) })
} }
const rejectedInRecord = () => { const rejectedInRecord = () => {
...@@ -1826,6 +1848,7 @@ const nodeClick = (data: InterWarehouseTree) => { ...@@ -1826,6 +1848,7 @@ const nodeClick = (data: InterWarehouseTree) => {
// total: 0, // total: 0,
// }) // })
const searchDetail = async () => { const searchDetail = async () => {
detailLoading.value = true
try { try {
const res = await getWarehouseInRecordDetailApi(currentRow.value?.id) const res = await getWarehouseInRecordDetailApi(currentRow.value?.id)
res.data.productList.forEach(item => { res.data.productList.forEach(item => {
...@@ -1835,14 +1858,19 @@ const searchDetail = async () => { ...@@ -1835,14 +1858,19 @@ const searchDetail = async () => {
detailList.value = res.data?.productList || [] detailList.value = res.data?.productList || []
} catch (e) { } catch (e) {
console.error(e) console.error(e)
} finally {
detailLoading.value = false
} }
} }
const getLogList = async () => { const getLogList = async () => {
detailLoading.value = true
try { try {
const res = await getInRecordLogApi(currentRow.value?.id) const res = await getInRecordLogApi(currentRow.value?.id)
logList.value = res.data logList.value = res.data
} catch (e) { } catch (e) {
console.error(e) console.error(e)
} finally {
detailLoading.value = false
} }
} }
const locationList = ref<ILocation[]>([]) const locationList = ref<ILocation[]>([])
...@@ -2106,7 +2134,6 @@ $border: solid 1px #ddd; ...@@ -2106,7 +2134,6 @@ $border: solid 1px #ddd;
::v-deep(.el-tree-node) { ::v-deep(.el-tree-node) {
cursor: pointer; cursor: pointer;
margin-bottom: 5px;
} }
::v-deep(.el-tree-node__label) { ::v-deep(.el-tree-node__label) {
......
<template>
<ElTabs
v-model="activeTab"
v-loading="loading"
class="detail-tabs"
@tab-click="handleTabClick"
>
<ElTabPane name="stockProducts" label="入库商品">
<div class="detail-table-content">
<TableView
:serial-numberable="true"
:columns="stockProductsColumns"
:paginated-data="stockProductsData"
/>
</div>
</ElTabPane>
<ElTabPane name="relatedDocuments" label="关联单据">
<div class="detail-table-content">
<TableView
:serial-numberable="true"
:columns="relatedDocumentsColumns"
:paginated-data="relatedDocumentsData"
/>
</div>
</ElTabPane>
<ElTabPane name="operationLog" label="操作日志">
<div class="detail-table-content">
<LogList :log-list="operationLogData" />
<div class="empty-content">暂无数据</div>
</div>
</ElTabPane>
</ElTabs>
</template>
<script setup lang="tsx">
import { ref } from 'vue'
import type { TabsPaneContext } from 'element-plus'
import TableView from '@/components/TableView.vue'
import {
RelatedDocumentList,
StockingApplyOrderDetailList,
TableData,
} from '@/types/api/warehouse/stockingApplyOrder'
import ImageView from '@/components/ImageView.vue'
import {
getStockingApplyOrderDetailListByIdApi,
getStockingApplyOrderLogListByIdApi,
getStockingApplyOrderRelatedDocumentListByIdApi,
} from '@/api/warehouse/stockingApplyOrder'
import LogList from '@/components/LogList.vue'
import { LogListData } from '@/types/api/supply/stockingOrder'
const relatedDocumentsColumns = computed(() => {
return [
{
label: '关联单据',
prop: 'inNo',
align: 'center',
},
{
label: '关联单号',
prop: 'sourceOn',
align: 'center',
},
{
label: '制单人',
width: 120,
prop: 'checkerName',
align: 'center',
},
{
label: '制单时间',
width: 160,
prop: 'createTime',
align: 'center',
},
{
label: 'SKU个数',
width: 120,
align: 'right',
prop: 'skuAmount',
},
{
label: '入库数量',
width: 120,
align: 'right',
prop: 'total',
},
]
})
const stockProductsColumns = computed(() => {
return [
{
label: 'SKU图片',
prop: 'skuImage',
width: 100,
align: 'center',
render: (item: StockingApplyOrderDetailList) => (
<ImageView src={item.warehouseSkuImage} width="50px" height="50px" />
),
},
{
label: '商品名称',
prop: 'warehouseSkuName',
minWidth: 200,
align: 'left',
},
{
label: '款号',
prop: 'productNo',
width: 120,
align: 'center',
},
{
label: '库存SKU',
prop: 'warehouseSku',
width: 180,
align: 'center',
},
{
label: '申请数量',
prop: 'shipmentQuantity',
width: 100,
align: 'right',
},
{
label: '入库数量',
prop: 'buyStored',
width: 120,
align: 'right',
},
{
label: '不良品数',
prop: 'rejectsAmount',
width: 120,
align: 'right',
},
{
label: '实际质检数',
prop: 'finallyShipmentQuantity',
width: 120,
align: 'right',
},
{
label: '入库待审核数',
prop: 'storedPending',
width: 120,
align: 'right',
},
{
label: '币种',
prop: 'currencyCode',
width: 100,
align: 'center',
},
{
label: '入库单价',
prop: 'price',
width: 100,
align: 'right',
},
]
})
const props = defineProps<{
selectedRow: TableData | null
}>()
const stockProductsData = ref<StockingApplyOrderDetailList[]>([])
const relatedDocumentsData = ref<RelatedDocumentList[]>([])
const activeTab = ref('stockProducts')
const loading = ref(false)
const operationLogData = ref<LogListData[]>([])
watch(
() => props.selectedRow,
(newVal) => {
if (newVal) {
if (activeTab.value === 'stockProducts') {
loadStockProducts(newVal)
} else if (activeTab.value === 'relatedDocuments') {
loadRelatedDocuments(newVal)
} else if (activeTab.value === 'operationLog') {
loadOperationLog(newVal)
}
} else {
stockProductsData.value = []
relatedDocumentsData.value = []
}
},
)
const loadStockProducts = async (row: TableData) => {
loading.value = true
try {
const res = await getStockingApplyOrderDetailListByIdApi(row.id)
if (res.code !== 200) return
stockProductsData.value = res.data || []
} catch (e) {
console.error(e)
} finally {
loading.value = false
}
}
const loadRelatedDocuments = async (row: TableData) => {
loading.value = true
try {
const res = await getStockingApplyOrderRelatedDocumentListByIdApi(
row.warehouseApplyNo,
)
if (res.code !== 200) return
relatedDocumentsData.value = res.data || []
} catch (e) {
console.error(e)
} finally {
loading.value = false
}
}
const loadOperationLog = async (row: TableData) => {
try {
const res = await getStockingApplyOrderLogListByIdApi(row.id)
if (res.code !== 200) return
operationLogData.value = res.data || []
} catch (e) {
console.error(e)
} finally {
loading.value = false
}
}
const handleTabClick = (tab: TabsPaneContext) => {
activeTab.value = tab.paneName as string
if (activeTab.value === 'stockProducts') {
loadStockProducts(props.selectedRow as TableData)
} else if (activeTab.value === 'relatedDocuments') {
loadRelatedDocuments(props.selectedRow as TableData)
} else if (activeTab.value === 'operationLog') {
loadOperationLog(props.selectedRow as TableData)
}
}
</script>
<style lang="scss" scoped>
.detail-tabs {
height: 100%;
display: flex;
:deep(.el-tab-pane) {
height: 100%;
overflow: hidden;
}
}
.detail-table-content {
height: 100%;
overflow: hidden;
}
.empty-content {
display: flex;
align-items: center;
justify-content: center;
height: 100%;
color: #909399;
font-size: 14px;
}
</style>
...@@ -60,11 +60,11 @@ ...@@ -60,11 +60,11 @@
value-format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss"
/> />
</ElFormItem> </ElFormItem>
<ElFormItem label="备货单号"> <ElFormItem label="备货计划单号">
<ElInput <ElInput
v-model.trim="searchForm.inNo" v-model.trim="searchForm.inNo"
clearable clearable
placeholder="请输入备货单号" placeholder="请输入备货计划单号"
style="width: 160px" style="width: 160px"
/> />
</ElFormItem> </ElFormItem>
...@@ -206,7 +206,7 @@ ...@@ -206,7 +206,7 @@
align="center" align="center"
/> />
<ElTableColumn <ElTableColumn
label="备货单号" label="备货计划单号"
show-overflow-tooltip show-overflow-tooltip
prop="inNo" prop="inNo"
width="130" width="130"
...@@ -553,7 +553,7 @@ ...@@ -553,7 +553,7 @@
inline inline
label-width="90px" label-width="90px"
> >
<ElFormItem label="备货单号" prop="account"> <ElFormItem label="备货计划单号" prop="account">
<ElInput v-model.trim="editForm.inNo" clearable disabled /> <ElInput v-model.trim="editForm.inNo" clearable disabled />
</ElFormItem> </ElFormItem>
<ElFormItem label="工厂编号:" prop="factoryCode"> <ElFormItem label="工厂编号:" prop="factoryCode">
...@@ -926,9 +926,7 @@ ...@@ -926,9 +926,7 @@
maxlength="1000" maxlength="1000"
show-word-limit show-word-limit
/> />
<div style="margin-top: 12px; color: #777"> <div style="margin-top: 12px; color: #777">多个字段使用","隔开</div>
{{ '多个字段使用_##_,_##_隔开' }}
</div>
</div> </div>
<template #footer> <template #footer>
<span class="dialog-footer"> <span class="dialog-footer">
...@@ -943,7 +941,7 @@ ...@@ -943,7 +941,7 @@
width="500px" width="500px"
> >
<ElTable :data="updateShipmentNumberForm" border> <ElTable :data="updateShipmentNumberForm" border>
<ElTableColumn prop="inNo" label="备货单号" /> <ElTableColumn prop="inNo" label="备货计划单号" />
<ElTableColumn prop="shipmentNumber" label="物流单号"> <ElTableColumn prop="shipmentNumber" label="物流单号">
<template #default="{ row }"> <template #default="{ row }">
<el-input <el-input
...@@ -968,7 +966,7 @@ ...@@ -968,7 +966,7 @@
<el-input <el-input
ref="scanInputRef" ref="scanInputRef"
v-model="scanInput" v-model="scanInput"
placeholder="请输入备货单号" placeholder="请输入备货计划单号"
style="width: 90%" style="width: 90%"
clearable clearable
@keyup.enter="scan" @keyup.enter="scan"
...@@ -980,7 +978,7 @@ ...@@ -980,7 +978,7 @@
<el-descriptions-item label="备货仓库"> <el-descriptions-item label="备货仓库">
{{ scanData.warehouseName || '-' }} {{ scanData.warehouseName || '-' }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="备货单号"> <el-descriptions-item label="备货计划单号">
{{ scanData.inNo || '-' }} {{ scanData.inNo || '-' }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="物流单号"> <el-descriptions-item label="物流单号">
...@@ -2063,7 +2061,7 @@ const scan = async () => { ...@@ -2063,7 +2061,7 @@ const scan = async () => {
console.log(scanInput.value, 'scanInput.value') console.log(scanInput.value, 'scanInput.value')
if (!scanInput.value) { if (!scanInput.value) {
return ElMessage.warning('请输入备货单号') return ElMessage.warning('请输入备货计划单号')
} }
scanInput.value = scanInput.value.trim() scanInput.value = scanInput.value.trim()
// 将中文破折号转换为下划线 // 将中文破折号转换为下划线
...@@ -2289,7 +2287,6 @@ $border: solid 1px #ddd; ...@@ -2289,7 +2287,6 @@ $border: solid 1px #ddd;
::v-deep(.el-tree-node) { ::v-deep(.el-tree-node) {
cursor: pointer; cursor: pointer;
margin-bottom: 5px;
} }
::v-deep(.el-tree-node__label) { ::v-deep(.el-tree-node__label) {
......
...@@ -6,7 +6,6 @@ import { ...@@ -6,7 +6,6 @@ import {
updateLocationApi, updateLocationApi,
updateProductNoApi, updateProductNoApi,
updateCustomSkuApi, updateCustomSkuApi,
LocationInfoGetAll,
getWarehouseInventoryInfo, getWarehouseInventoryInfo,
factoryLogWarehouseLog, factoryLogWarehouseLog,
LogListData, LogListData,
...@@ -26,6 +25,8 @@ interface UserMark{ ...@@ -26,6 +25,8 @@ interface UserMark{
userMark: string userMark: string
userName: string userName: string
} }
import { LocationInfoGetAll } from '@/api/common'
const searchForm = ref({ const searchForm = ref({
warehouseId: '', warehouseId: '',
inventoryStart: '', inventoryStart: '',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment