Commit 6d69dfe7 by linjinhong

Merge remote-tracking branch 'origin/linjinhong' into dev

parents ed2f87d9 27bd0959
......@@ -11,7 +11,18 @@ import {
} from '@/types/api/podUsOrder'
import axios from './axios'
import { PodMakeOrderData } from '@/types/api/podMakeOrder'
export interface AddressInfo {
id?: string
receiverName: string
receiverPhone: string
receiverCountry: string
receiverProvince: string
receiverCity: string
receiverDistrict: string
receiverAddress1: string
receiverAddress2: string
receiverPostCode: string
}
// 同步收货地址
export function syncReceiverAddress(data: number[]) {
return axios.post<never, BaseRespData<never>>(
......@@ -37,6 +48,7 @@ export function getOrderTabData() {
'/factory/podJomallOrderUs/findStateGroupList',
)
}
export function getOrderList(
params: SearchForm,
currentPage: number,
......@@ -51,12 +63,14 @@ export function getOrderList(
},
)
}
export function handleExceptionOrderApi(orderIds: number[]) {
return axios.post<never, BaseRespData<never>>(
'factory/podJomallOrderUs/processExceptionOrders',
orderIds,
)
}
export function getCardOrderList(
params: SearchForm,
currentPage: number,
......@@ -71,6 +85,7 @@ export function getCardOrderList(
},
)
}
export function confirmOrderApi(
data: number[],
productionClient: string,
......@@ -87,11 +102,13 @@ export function confirmOrderApi(
},
)
}
export function getProductionClientApi() {
return axios.get<never, BaseRespData<ProductionClient[]>>(
'factory/podJomallOrderUs/getProductionClientList',
)
}
export function updateExceptionOrderApi(data: number[]) {
return axios.post<never, BaseRespData<never>>(
'factory/podJomallOrderUs/updateExceptionOrders',
......@@ -100,6 +117,15 @@ export function updateExceptionOrderApi(data: number[]) {
},
)
}
// // 同步收货地址
// export function syncReceiverAddress(data: number[]) {
// return axios.post<never, BaseRespData<never>>(
// 'factory/podJomallOrderUs/syncReceiverAddress',
// data,
// )
// }
export function changeExceptionOrderApi(
url: string,
ids: number[],
......@@ -112,6 +138,7 @@ export function changeExceptionOrderApi(
exceptionReason: value,
})
}
export function cancelOrderApi(ids: number[], value: string) {
return axios.post<never, BaseRespData<never>>(
'factory/podJomallOrderUs/cancelOrders',
......@@ -121,11 +148,13 @@ export function cancelOrderApi(ids: number[], value: string) {
},
)
}
export function getOperationLogApi(id: number) {
return axios.get<never, BaseRespData<LogListData[]>>(
`factory/podJomallOrderUsLog/getPodJomallOrderUsLog?id=${id}`,
)
}
export function getSubOrderBySubOrderNumber(factorySubOrderNumber: string) {
return axios.get<never, BaseRespData<ProductList>>(
'factory/podJomallOrderProductUs/getProductUsByFactorySubOrderNumber',
......@@ -136,12 +165,14 @@ export function getSubOrderBySubOrderNumber(factorySubOrderNumber: string) {
},
)
}
export function downloadMaterialApi(id: number[]) {
return axios.post<never, BaseRespData<never>>(
'factory/podJomallOrderProductUs/downloadDesignImages',
id,
)
}
export function productionQueryApi(id: number, podJomallOrderUsId: number) {
return axios.post<never, BasePaginationData<never>>(
'factory/podJomallOrderProductUs/completeDelivery',
......@@ -151,12 +182,14 @@ export function productionQueryApi(id: number, podJomallOrderUsId: number) {
},
)
}
export function printProductionOrderApi(orderIds: number[]) {
return axios.post<never, BaseRespData<string>>(
'factory/podJomallOrderUs/printProducePdf',
orderIds,
)
}
export function printPrintOrderApi(orderIds: number[]) {
return axios.post<never, BaseRespData<string>>(
'factory/podJomallOrderUs/printPickPdf',
......@@ -165,6 +198,7 @@ export function printPrintOrderApi(orderIds: number[]) {
},
)
}
export function printPickingOrderApi(orderIds: number[]) {
return axios.post<never, BaseRespData<string>>(
'factory/podJomallOrderUs/pickingComplete',
......@@ -173,11 +207,13 @@ export function printPickingOrderApi(orderIds: number[]) {
},
)
}
export function stockOutCheckApi(orderIds: number[]) {
return axios.get<never, BaseRespData<number[]>>(
`factory/podJomallOrderUs/replenishVerify?ids=${orderIds.join(',')}`,
)
}
export function toBePickingApi(orderIds: number[]) {
return axios.get<never, BaseRespData<never>>(
`factory/podJomallOrderUs/updateStockOutOrderToPicking?ids=${orderIds.join(
......@@ -185,11 +221,13 @@ export function toBePickingApi(orderIds: number[]) {
)}`,
)
}
export function getOrderDetailById(id: number) {
return axios.get<never, BaseRespData<ProductList>>(
`factory/podJomallOrderProductUs/getProductUsById?id=${id}`,
)
}
export function getPackingDataApi(
code: string,
factoryNo: number,
......@@ -208,6 +246,7 @@ export function getPackingDataApi(
},
)
}
export function getPodBoxListApi(
factoryNo: number | string,
warehouseId: number | string,
......@@ -232,6 +271,7 @@ export function submitInspectionApi(
},
)
}
export function clearBoxApi(
factoryNo: number,
box: number | null,
......@@ -244,11 +284,13 @@ export function clearBoxApi(
},
)
}
export function clearAllBoxApi() {
return axios.get<never, BaseRespData<never>>(
'factory/podJomallOrderUs/delPodBoxOrderDetails',
)
}
export function updateRemarkApi(id: number, content: string) {
return axios.post<never, BaseRespData<never>>(
'factory/podJomallOrderUs/addRemark',
......@@ -256,23 +298,40 @@ export function updateRemarkApi(id: number, content: string) {
)
}
// export function refreshAddressApi(idList: number[]) {
// return axios.post<never, BaseRespData<never>>(
// 'factory/podJomallOrderUs/syncReceiverAddress',
// idList,
// )
// }
// export function updateAddressApi(data: PodUsOrderListData) {
// return axios.post<never, BaseRespData<never>>(
// 'factory/podJomallOrderUs/updateReceiverAddress',
// data,
// )
// }
export function getLogisticsCalculation(id: number) {
return axios.get<never, BaseRespData<never>>(
'factory/podJomallOrderUs/getLogisticsCalculation',
{ params: { id } },
)
}
export function loadWarehouseListApi() {
return axios.get<never, BaseRespData<WarehouseListData[]>>(
'factoryWarehouseInfo/getAll',
)
}
export function refreshMaterialApi(orderIds: string) {
return axios.post<never, BaseRespData<never>>(
'factory/podJomallOrderProductUs/refreshDesignImages ',
{ orderIds },
)
}
// 获取跟踪号
export function getTrackingNumberApi(orderIds: (string | number)[]) {
return axios.post<never, BaseRespData<never>>(
......@@ -280,6 +339,7 @@ export function getTrackingNumberApi(orderIds: (string | number)[]) {
orderIds,
)
}
// 获取打印面单
export function getfaceSimplexFileApi(orderIds: (string | number)[]) {
return axios.post<never, BaseRespData<never>>(
......@@ -287,6 +347,7 @@ export function getfaceSimplexFileApi(orderIds: (string | number)[]) {
orderIds,
)
}
// 取消物流订单
export function cancelLogisticsOrderApi(orderIds: (string | number)[]) {
return axios.post<never, BaseRespData<never>>(
......@@ -294,6 +355,7 @@ export function cancelLogisticsOrderApi(orderIds: (string | number)[]) {
orderIds,
)
}
// 更改物流
export function changeLogisticsApi(params: {
updateByIdParam: {
......@@ -307,6 +369,7 @@ export function changeLogisticsApi(params: {
params,
)
}
// 创建物流
export function createLogisticsOrderApi(params: {
updateByIdParam: {
......@@ -322,12 +385,13 @@ export function createLogisticsOrderApi(params: {
}
// 更改物流
export function composingDesignImages(data:number[]) {
export function composingDesignImages(data: number[]) {
return axios.post<never, BaseRespData<never>>(
'factory/podJomallOrderUs/composingDesignImages',
data
data,
)
}
// 转至待拣胚
export function updateLogisticsToPickingApi(params: { ids: string }) {
return axios.get<never, BaseRespData<never>>(
......@@ -337,6 +401,7 @@ export function updateLogisticsToPickingApi(params: { ids: string }) {
},
)
}
//创建物流订单
export function createLogisticsOrdersApi(orderIds: (string | number)[]) {
return axios.post<never, BaseRespData<never>>(
......@@ -344,3 +409,17 @@ export function createLogisticsOrdersApi(orderIds: (string | number)[]) {
orderIds,
)
}
//确认生产
export function confirmProductApi(orderIds: (string | number)[]) {
return axios.post<never, BaseRespData<never>>(
`factory/podJomallOrderUs/confirmProduct`,
orderIds,
)
}
//转至锐印
export function confirmProductToRiinApi(orderIds: (string | number)[]) {
return axios.post<never, BaseRespData<never>>(
`factory/podJomallOrderUs/confirmProductToRiin`,
orderIds,
)
}
......@@ -19,7 +19,7 @@ export interface SearchForm {
endTime: string | null
exceptionHandling: number | undefined
platform: string
productionClient: string
productionClient:string
}
export interface PodUsOrderListData {
id: number
......@@ -93,7 +93,6 @@ export interface ProductList {
tagIds?: string
isProduction?: boolean
createTime?: string
startStockingTime?: string | null
updateTime?: string
remark?: string | null
version?: number
......
......@@ -10,7 +10,7 @@
>
<template #ontherBtn>
<div style="margin-left: 10px; display: flex; gap: 10px">
<ElButton @click="downloadExcel" type="info" plain
<ElButton @click="downloadExcel" type="primary" plain
>下载模版</ElButton
>
......
......@@ -10,7 +10,7 @@
>
<template #ontherBtn>
<div style="margin-left: 10px; display: flex; gap: 10px">
<ElButton @click="downloadExcel" type="info" plain
<ElButton @click="downloadExcel" type="primary" plain
>下载模版</ElButton
>
......
......@@ -4,6 +4,7 @@
v-model="resultDialog"
width="600px"
:close-on-click-modal="false"
@closed="closedFn"
>
<div style="display: flex">
<el-checkbox
......@@ -24,16 +25,16 @@
<el-button type="danger" @click="resultfilter(false)">
{{ '选择异常' }}
</el-button>
<el-button type="success" @click="copyAllCode(list, 'shopNumber')">
{{ '复制店铺单号' }}
<el-button type="success" @click="copyAllCode('factoryOrderNumber')">
{{ '复制工厂订单号' }}
</el-button>
</div>
<div style="height: 50vh; overflow: auto">
<div style="margin: 15px 0"></div>
<el-checkbox-group v-model="selectedList" @change="checkChange">
<div style="display: block" v-for="(item, index) in list" :key="index">
<el-checkbox :value="item.id">
{{ '店铺编号:' + item.shopNumber + ' ' + item.message }}
<el-checkbox :value="item">
{{ '工厂订单号:' + item.factoryOrderNumber + ' ' + item.message }}
</el-checkbox>
</div>
</el-checkbox-group>
......@@ -55,7 +56,8 @@ import { copyText } from '@/utils/index'
interface IList {
id: string | number
shopNumber: string
shopNumber?: string
factoryOrderNumber?: string
message: string
status: boolean
}
......@@ -71,7 +73,7 @@ const props = withDefaults(
const resultDialog = ref(false)
const isIndeterminate = ref(false)
const checkAll = ref(false)
const selectedList = ref<(string | number)[]>([])
const selectedList = ref<IList[]>([])
// 显示弹窗
const showDialog = (type?: string) => {
......@@ -84,7 +86,7 @@ const showDialog = (type?: string) => {
// 全选状态改变
const checkAllChange = (value: boolean) => {
selectedList.value = value ? props.list.map((v) => v.id) : []
selectedList.value = value ? props.list : []
isIndeterminate.value = false
}
......@@ -98,36 +100,52 @@ const checkChange = () => {
// 确认选择
const confirm = () => {
resultDialog.value = false
emits('confirm', selectedList.value)
// emits('confirm', selectedList.value)
}
// 结果过滤
const resultfilter = (bool: boolean) => {
const arr = props.list
.filter((item) => item.status === bool)
.map((item) => item.id)
const arr = props.list.filter((item) => item.status === bool)
selectedList.value = arr
const checkedCount = arr.length
console.log(112, checkedCount)
console.log(113, props.list)
checkAll.value = checkedCount === props.list.length
isIndeterminate.value = checkedCount > 0 && checkedCount < props.list.length
}
// 复制店铺单号
const copyAllCode = (list: IList[], field: string) => {
const str = list.map((el) => el[field as keyof IList]).join(',')
const copyAllCode = (field: string) => {
if (!selectedList.value.length) {
return ElMessage.warning('请先选择数据')
}
const str = selectedList.value.map((el) => el[field as keyof IList]).join(',')
console.log('复制店铺单号', str)
copyText(str)
}
function closedFn() {
emits('confirm', selectedList.value)
}
// 监听弹窗状态
// watch(
// () => resultDialog.value,
// (v) => {
// if (v) {
// console.log(127, props.list)
// resultfilter(true)
// }
// },
// )
watch(
() => resultDialog.value,
() => props.list,
(v) => {
if (v) {
console.log(127)
if (v.length) {
console.log(127, v)
resultfilter(true)
}
},
......@@ -137,7 +155,7 @@ defineExpose({
showDialog,
})
const emits = defineEmits<{
(e: 'confirm', data: (string | number)[]): void
(e: 'confirm', data: IList[]): void
}>()
</script>
......
<script setup lang="ts">
import { defineModel } from 'vue'
import { updateAddressApi,AddressInfo } from '@/api/podUsOrder.ts'
import { updateAddressApi, AddressInfo } from '@/api/podUsOrder.ts'
const emits = defineEmits(['success'])
defineProps<{
countryList: { countryCode: string }[]
......@@ -24,10 +24,16 @@ const rules = {
receiverName: [{ required: true, message: '请输入姓名', trigger: 'blur' }],
receiverPhone: [{ required: true, message: '请输入电话', trigger: 'blur' }],
receiverCountry: [{ required: true, message: '请输入国家', trigger: 'blur' }],
receiverProvince: [{ required: true, message: '请输入省/州', trigger: 'blur' }],
receiverProvince: [
{ required: true, message: '请输入省/州', trigger: 'blur' },
],
receiverCity: [{ required: true, message: '请输入市', trigger: 'blur' }],
receiverAddress1: [{ required: true, message: '请输入地址1', trigger: 'blur' }],
receiverPostCode: [{ required: true, message: '请输入邮政编码', trigger: 'blur' }],
receiverAddress1: [
{ required: true, message: '请输入地址1', trigger: 'blur' },
],
receiverPostCode: [
{ required: true, message: '请输入邮政编码', trigger: 'blur' },
],
}
const submitForm = async () => {
......@@ -36,12 +42,16 @@ const submitForm = async () => {
await updateAddressApi(form.value as never)
visible.value = false
emits('success')
await ElMessageBox.alert('请修改/刷新地址后取消物流重新创建物流订单、获取跟踪号、获取打印面单。', '提示', {
await ElMessageBox.alert(
'请修改/刷新地址后取消物流重新创建物流订单、获取跟踪号、获取打印面单。',
'提示',
{
type: 'warning',
confirmButtonText:'确定',
cancelButtonText:'取消',
confirmButtonText: '确定',
cancelButtonText: '取消',
showCancelButton: true,
})
},
)
}
})
}
......@@ -56,45 +66,78 @@ const submitForm = async () => {
>
<el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
<el-form-item label="姓名" prop="receiverName">
<el-input v-model="form.receiverName" clearable placeholder="请输入姓名" />
<el-input
v-model="form.receiverName"
clearable
placeholder="请输入姓名"
/>
</el-form-item>
<el-form-item label="电话" prop="receiverPhone">
<el-input v-model="form.receiverPhone" clearable placeholder="请输入电话" />
<el-input
v-model="form.receiverPhone"
clearable
placeholder="请输入电话"
/>
</el-form-item>
<el-form-item label="国家" prop="receiverCountry">
<el-select v-model="form.receiverCountry" clearable filterable>
<el-option
v-for="it in countryList" :key="it.countryCode" :label="it.countryCode"
:value="it.countryCode"></el-option>
v-for="it in countryList"
:key="it.countryCode"
:label="it.countryCode"
:value="it.countryCode"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="省/州" prop="receiverProvince">
<el-input v-model="form.receiverProvince" clearable placeholder="请输入省/州" />
<el-input
v-model="form.receiverProvince"
clearable
placeholder="请输入省/州"
/>
</el-form-item>
<el-form-item label="市" prop="receiverCity">
<el-input v-model="form.receiverCity" clearable placeholder="请输入市" />
<el-input
v-model="form.receiverCity"
clearable
placeholder="请输入市"
/>
</el-form-item>
<el-form-item label="区/县" prop="receiverDistrict">
<el-input v-model="form.receiverDistrict" clearable placeholder="请输入区/县" />
<el-input
v-model="form.receiverDistrict"
clearable
placeholder="请输入区/县"
/>
</el-form-item>
<el-form-item label="地址1" prop="receiverAddress1">
<el-input v-model="form.receiverAddress1" clearable placeholder="请输入地址1" />
<el-input
v-model="form.receiverAddress1"
clearable
placeholder="请输入地址1"
/>
</el-form-item>
<el-form-item label="地址2" prop="receiverAddress2">
<el-input v-model="form.receiverAddress2" clearable placeholder="请输入地址2" />
<el-input
v-model="form.receiverAddress2"
clearable
placeholder="请输入地址2"
/>
</el-form-item>
<el-form-item label="邮政编码" prop="receiverPostCode">
<el-input v-model="form.receiverPostCode" clearable placeholder="请输入邮政编码" />
<el-input
v-model="form.receiverPostCode"
clearable
placeholder="请输入邮政编码"
/>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="visible=false">取消</el-button>
<el-button @click="visible = false">取消</el-button>
<el-button type="primary" @click="submitForm">提交</el-button>
</template>
</el-dialog>
</template>
<style scoped lang="scss">
</style>
<style scoped lang="scss"></style>
......@@ -117,7 +117,7 @@
>
删除
</el-button>
<el-button type="success" @click="handleExport"> 导出 </el-button>
<el-button type="success" @click="handleExport"> 导出</el-button>
<el-button type="primary" @click="printProductTag">
打印库存SKU标签
</el-button>
......@@ -609,7 +609,7 @@
></el-input>
<el-popover placement="top-start" width="1000" trigger="click">
<div v-if="skuData.length > 0" style="height: 50vh">
<ElTable size="small" :data="skuData" height="100%" border>
<ElTable size="small" :data="filterSkuData" height="100%" border>
<ElTableColumn
show-overflow-tooltip
width="60"
......@@ -669,9 +669,9 @@
label="操作"
>
<template #default="{ row }">
<el-icon :size="32" color="#67C23A" class="cursor-pointer"
><CirclePlusFilled @click="skudblclick(row)"
/></el-icon>
<el-icon :size="32" color="#67C23A" class="cursor-pointer">
<CirclePlusFilled @click="skudblclick(row)" />
</el-icon>
</template>
</ElTableColumn>
</ElTable>
......@@ -742,7 +742,7 @@
</el-radio-group>
</el-form-item>
<el-form-item label="">
<el-checkbox v-model="exportForm.delivery"> 包含详情 </el-checkbox>
<el-checkbox v-model="exportForm.delivery"> 包含详情</el-checkbox>
</el-form-item>
</el-form>
<template #footer>
......@@ -827,7 +827,7 @@
<script setup lang="ts">
import { ElMessage, ElRadioGroup, ElTree } from 'element-plus'
import { CirclePlusFilled,Download } from '@element-plus/icons-vue'
import { CirclePlusFilled, Download } from '@element-plus/icons-vue'
import splitDiv from '@/components/splitDiv/splitDiv.vue'
import { ElTable } from 'element-plus'
import usePageList from '@/utils/hooks/usePageList'
......@@ -979,6 +979,7 @@ const pickerOptions = {
},
],
}
function getStartTime() {
const date = new Date()
const year = date.getFullYear()
......@@ -1083,6 +1084,7 @@ const printProductTag = async () => {
console.error(e)
}
}
async function handlePrintProductTag() {
const flag = printData.value.every(
(el: InterWarehousePage) => el.number && el.number != '0',
......@@ -1112,6 +1114,7 @@ async function handlePrintProductTag() {
showPrintDialog.value = false
window.open(filePath + res.message, '_blank')
}
const batchAddCommodity = async (sku: string): Promise<InterskuList[]> => {
if (!editForm.value.warehouseId) {
ElMessage.error('请选择仓库')
......@@ -1137,11 +1140,14 @@ const batchAddCommodity = async (sku: string): Promise<InterskuList[]> => {
return []
}
}
interface InterImportData {
warehouseSku: string
remark?: string | null
[key: string]: unknown
}
// 前端导入Excel
const excelFieldMap: Record<string, keyof InterProductList> = {
// SKU图片: 'skuImage',
......@@ -1545,6 +1551,12 @@ const addOtherCurrency = async () => {
upSection()
}
}
const filterSkuData = computed(() => {
const skuList = otherPurchaseData.value.map((el) => el.warehouseSku)
console.log(skuList, skuData.value)
return skuData.value.filter((el) => !skuList.includes(el.sku))
})
const addSection = async () => {
const params = { ...editForm.value }
params.productList = otherPurchaseData.value
......@@ -1607,9 +1619,10 @@ const upSection = async () => {
}
}
const addPurchaseVisible = ref(false)
const purchaseTextarea = ref(null)
const purchaseTextarea = ref('')
const addPurchase = async () => {
addPurchaseVisible.value = true
purchaseTextarea.value = ''
}
const submitPurchase = async () => {
if (!purchaseTextarea.value) {
......@@ -1744,20 +1757,24 @@ onMounted(() => {
width: 500px;
text-align: center;
}
.cursor-pointer {
cursor: pointer;
}
.header-filter-form {
:deep(.el-form-item) {
margin-right: 14px;
margin-bottom: 10px;
}
}
.product-dialog-footer {
display: flex;
justify-content: space-between;
margin: 8px 0;
}
$border: solid 1px #ddd;
.send-order-list {
......@@ -1805,10 +1822,12 @@ $border: solid 1px #ddd;
.left {
width: 160px;
:deep(.el-tree-node__content) {
height: 30px;
line-height: 30px;
}
:deep(.el-tree-node__label) {
font-size: 13px;
cursor: pointer;
......@@ -1900,6 +1919,7 @@ $border: solid 1px #ddd;
height: 5px;
background: #eff3f6;
}
.btn-list {
margin-bottom: 10px;
}
......@@ -1931,6 +1951,7 @@ $border: solid 1px #ddd;
}
}
}
.delivery-note-page {
:deep(#top) {
height: 100%;
......
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