refactor(biz): 优化销售订单和出库单功能
This commit is contained in:
parent
281bedbaa5
commit
14b19dc223
@ -7,9 +7,11 @@ import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult;
|
|||||||
import com.ningxia.yunxi.chemmes.framework.common.util.object.BeanUtils;
|
import com.ningxia.yunxi.chemmes.framework.common.util.object.BeanUtils;
|
||||||
import com.ningxia.yunxi.chemmes.framework.excel.core.util.ExcelUtils;
|
import com.ningxia.yunxi.chemmes.framework.excel.core.util.ExcelUtils;
|
||||||
import com.ningxia.yunxi.chemmes.framework.operatelog.core.annotations.OperateLog;
|
import com.ningxia.yunxi.chemmes.framework.operatelog.core.annotations.OperateLog;
|
||||||
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.order.vo.*;
|
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.order.vo.OrderItemWithOrderRespVO;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.order.vo.OrderPageReqVO;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.order.vo.OrderRespVO;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.order.vo.OrderSaveReqVO;
|
||||||
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.order.OrderDO;
|
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.order.OrderDO;
|
||||||
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.orderitem.OrderItemDO;
|
|
||||||
import com.ningxia.yunxi.chemmes.module.biz.service.order.OrderService;
|
import com.ningxia.yunxi.chemmes.module.biz.service.order.OrderService;
|
||||||
import com.ningxia.yunxi.chemmes.module.biz.service.orderitem.OrderItemService;
|
import com.ningxia.yunxi.chemmes.module.biz.service.orderitem.OrderItemService;
|
||||||
import com.ningxia.yunxi.chemmes.module.system.dal.dataobject.user.AdminUserDO;
|
import com.ningxia.yunxi.chemmes.module.system.dal.dataobject.user.AdminUserDO;
|
||||||
@ -105,6 +107,7 @@ public class TsoOrderController {
|
|||||||
}
|
}
|
||||||
return success(respPageResult);
|
return success(respPageResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 分页查询子表(关联主表)
|
// 分页查询子表(关联主表)
|
||||||
@GetMapping("/page-item")
|
@GetMapping("/page-item")
|
||||||
@Operation(summary = "获得销售订单子项分页(关联主表)")
|
@Operation(summary = "获得销售订单子项分页(关联主表)")
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package com.ningxia.yunxi.chemmes.module.biz.controller.admin.order.vo;
|
|||||||
|
|
||||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||||
import com.alibaba.excel.annotation.ExcelProperty;
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@ -84,6 +85,7 @@ public class OrderItemWithOrderRespVO {
|
|||||||
|
|
||||||
@Schema(description = "下单日期")
|
@Schema(description = "下单日期")
|
||||||
@ExcelProperty("下单日期")
|
@ExcelProperty("下单日期")
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||||
private LocalDate ordDate;
|
private LocalDate ordDate;
|
||||||
|
|
||||||
@Schema(description = "客户id", example = "23476")
|
@Schema(description = "客户id", example = "23476")
|
||||||
@ -128,6 +130,7 @@ public class OrderItemWithOrderRespVO {
|
|||||||
|
|
||||||
@Schema(description = "要求交货日期")
|
@Schema(description = "要求交货日期")
|
||||||
@ExcelProperty("要求交货日期")
|
@ExcelProperty("要求交货日期")
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||||
private LocalDate reqDeliveryDate;
|
private LocalDate reqDeliveryDate;
|
||||||
|
|
||||||
@Schema(description = "是否急单(0 是 1 否)")
|
@Schema(description = "是否急单(0 是 1 否)")
|
||||||
@ -164,6 +167,7 @@ public class OrderItemWithOrderRespVO {
|
|||||||
|
|
||||||
@Schema(description = "审核时间")
|
@Schema(description = "审核时间")
|
||||||
@ExcelProperty("审核时间")
|
@ExcelProperty("审核时间")
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
private LocalDateTime auditTime;
|
private LocalDateTime auditTime;
|
||||||
|
|
||||||
@Schema(description = "附件信息")
|
@Schema(description = "附件信息")
|
||||||
|
|||||||
@ -251,13 +251,6 @@ export enum DICT_TYPE {
|
|||||||
KEEP_TYPE='keep_type', // 保管类型
|
KEEP_TYPE='keep_type', // 保管类型
|
||||||
KEEP_MARK='keep_mark', // 保管标识
|
KEEP_MARK='keep_mark', // 保管标识
|
||||||
PLAN_STATUS='plan_status', // 计划状态
|
PLAN_STATUS='plan_status', // 计划状态
|
||||||
CHECK_STATUS='check_status', // 原材料单据状态
|
|
||||||
CHECK_RESULT='check_result', // 原材料检验结果
|
|
||||||
BILL_TYPE='bill_type', // 采购订单单据类型
|
|
||||||
STOCK_OUT_TYPE='stock_out_type', // 出库类型
|
|
||||||
STOCK_OUT_STATUS='stock_out_status', // 出库状态
|
|
||||||
DELIVERY_METHOD='delivery_method', // 配送方式
|
|
||||||
BILL_STATUS='bill_status', // 单据状态
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -28,64 +28,83 @@
|
|||||||
|
|
||||||
<!-- 订单列表 -->
|
<!-- 订单列表 -->
|
||||||
<el-table
|
<el-table
|
||||||
|
ref="orderTableRef"
|
||||||
v-loading="loading"
|
v-loading="loading"
|
||||||
:data="orderList"
|
:data="orderList"
|
||||||
:show-overflow-tooltip="true"
|
:show-overflow-tooltip="true"
|
||||||
row-key="id"
|
row-key="uniqueId"
|
||||||
:tree-props="{ children: 'items', hasChildren: 'hasChildren' }"
|
:tree-props="{ children: 'items', hasChildren: 'hasChildren' }"
|
||||||
@row-dblclick="handleRowDoubleClick"
|
@row-dblclick="handleRowDoubleClick"
|
||||||
@row-click="handleRowClick"
|
@row-click="handleRowClick"
|
||||||
highlight-current-row
|
highlight-current-row
|
||||||
|
:height="400"
|
||||||
|
border
|
||||||
>
|
>
|
||||||
<el-table-column type="radio" width="50px" />
|
<el-table-column label="" width="50px" align="center">
|
||||||
<el-table-column label="序号" type="index" width="60px" />
|
<template #default="scope">
|
||||||
|
<!-- 只有子行显示单选按钮 -->
|
||||||
|
<div
|
||||||
|
v-if="!scope.row.hasChildren"
|
||||||
|
class="radio-btn"
|
||||||
|
:class="{ checked: selectedId === scope.row.uniqueId }"
|
||||||
|
@click.stop="handleSelect(scope.row)"
|
||||||
|
>
|
||||||
|
<span v-if="selectedId === scope.row.uniqueId" class="radio-inner"></span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="序号" type="index" width="60px" align="center" />
|
||||||
<el-table-column label="订单号" align="center" prop="saleOrdNo" width="130px" />
|
<el-table-column label="订单号" align="center" prop="saleOrdNo" width="130px" />
|
||||||
<el-table-column label="发货状态" align="center" prop="deliveryStatus" width="100px">
|
<el-table-column label="发货状态" align="center" prop="deliveryStatus" width="100px">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<dict-tag :type="DICT_TYPE.SHIPPING_STATUS" :value="scope.row.deliveryStatus" />
|
<dict-tag :type="DICT_TYPE.SHIPPING_STATUS" :value="scope.row.deliveryStatus" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="订单日期" align="center" prop="ordDate" width="100px" />
|
<el-table-column label="订单日期" align="center" prop="ordDate" width="110px" />
|
||||||
<el-table-column label="客户名称" align="center" prop="custName" width="200px" />
|
<el-table-column label="客户名称" align="center" prop="custName" width="220px" />
|
||||||
<el-table-column label="订单状态" align="center" prop="ordStatus" width="100px">
|
<el-table-column label="订单状态" align="center" prop="ordStatus" width="100px">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<dict-tag :type="DICT_TYPE.ORDER_STATUS" :value="scope.row.ordStatus" />
|
<dict-tag :type="DICT_TYPE.ORDER_STATUS" :value="scope.row.ordStatus" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="交货日期" align="center" prop="reqDeliveryDate" width="100px" />
|
<el-table-column label="交货日期" align="center" prop="reqDeliveryDate" width="110px" />
|
||||||
<el-table-column label="产品名称" align="center" prop="materialName" width="180px" />
|
<el-table-column label="产品名称" align="center" prop="materialName" width="180px" />
|
||||||
<el-table-column label="规格型号" align="center" prop="spec" width="110px" />
|
<el-table-column label="规格型号" align="center" prop="spec" width="110px" />
|
||||||
<el-table-column label="订单数量" align="center" prop="ordQty" width="100px" />
|
<el-table-column label="订单数量" align="center" prop="ordQty" width="100px" />
|
||||||
<el-table-column label="剩余数量" align="center" prop="remaimQty" width="100px" />
|
<el-table-column label="剩余数量" align="center" width="100px">
|
||||||
<!-- 单位转换 -->
|
<template #default="scope">
|
||||||
|
{{ (scope.row.ordQty || 0) - (scope.row.deliveriedQty || 0) }}
|
||||||
<el-table-column label="单位" align="center" prop="unit" width="80px" >
|
|
||||||
<template #default="scope">
|
|
||||||
<dict-tag :type="DICT_TYPE.UNIT" :value="scope.row.unit" />
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
<el-table-column label="单位" align="center" width="80px">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag v-if="scope.row.unit" :type="DICT_TYPE.UNIT" :value="scope.row.unit" />
|
||||||
|
<span v-else>-</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
||||||
<!-- 分页 -->
|
<!-- 分页 -->
|
||||||
<Pagination
|
<div class="pagination-container">
|
||||||
:total="total"
|
<Pagination
|
||||||
v-model:page="queryParams.pageNo"
|
:total="total"
|
||||||
v-model:limit="queryParams.pageSize"
|
v-model:page="queryParams.pageNo"
|
||||||
@pagination="getList"
|
v-model:limit="queryParams.pageSize"
|
||||||
class="mt-4"
|
@pagination="getList"
|
||||||
/>
|
class="mb-4 mt-4"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- 底部按钮 -->
|
<!-- 底部按钮 -->
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button @click="handleSave" type="primary" :disabled="!selectedRow">保存</el-button>
|
<el-button @click="handleSave" type="primary" :disabled="!selectedId">保存</el-button>
|
||||||
<el-button @click="dialogVisible = false">取消</el-button>
|
<el-button @click="dialogVisible = false">取消</el-button>
|
||||||
</template>
|
</template>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, reactive } from 'vue'
|
import { ref, reactive, computed, onMounted, watch } from 'vue'
|
||||||
import * as OrderApi from '@/api/biz/tsoorder'
|
import * as OrderApi from '@/api/biz/tsoorder'
|
||||||
import { DICT_TYPE } from '@/utils/dict'
|
import { DICT_TYPE } from '@/utils/dict'
|
||||||
|
|
||||||
@ -93,7 +112,8 @@ const dialogVisible = ref(false)
|
|||||||
const loading = ref(false)
|
const loading = ref(false)
|
||||||
const orderList = ref([])
|
const orderList = ref([])
|
||||||
const total = ref(0)
|
const total = ref(0)
|
||||||
const selectedRow = ref(null)
|
const selectedId = ref('') // 初始化为空字符串
|
||||||
|
const orderTableRef = ref(null)
|
||||||
|
|
||||||
const emit = defineEmits(['select', 'close'])
|
const emit = defineEmits(['select', 'close'])
|
||||||
|
|
||||||
@ -104,25 +124,51 @@ const queryParams = reactive({
|
|||||||
saleOrdNo: undefined,
|
saleOrdNo: undefined,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// 获取选中的行数据
|
||||||
|
const selectedRow = computed(() => {
|
||||||
|
if (!selectedId.value) return null
|
||||||
|
for (const order of orderList.value) {
|
||||||
|
if (order.uniqueId === selectedId.value) {
|
||||||
|
return order
|
||||||
|
}
|
||||||
|
if (order.items) {
|
||||||
|
for (const item of order.items) {
|
||||||
|
if (item.uniqueId === selectedId.value) {
|
||||||
|
return item
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
})
|
||||||
|
|
||||||
/** 获取订单列表 */
|
/** 获取订单列表 */
|
||||||
const getList = async () => {
|
const getList = async () => {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
try {
|
try {
|
||||||
const data = await OrderApi.getOrderList(queryParams)
|
const data = await OrderApi.getOrderList(queryParams)
|
||||||
// 处理数据,添加剩余数量计算
|
// 使用时间戳确保每次请求的ID唯一
|
||||||
orderList.value = data.list.map(order => {
|
const requestId = Date.now().toString(36)
|
||||||
|
orderList.value = data.list.map((order, orderIndex) => {
|
||||||
const items = order.items || []
|
const items = order.items || []
|
||||||
return {
|
return {
|
||||||
...order,
|
...order,
|
||||||
|
uniqueId: `order_${requestId}_${orderIndex}_${order.id}`,
|
||||||
hasChildren: items.length > 0,
|
hasChildren: items.length > 0,
|
||||||
items: items.map(item => ({
|
items: items.map((item, itemIndex) => ({
|
||||||
...item,
|
...item,
|
||||||
remaimQty: item.ordQty - (item.deliveriedQty || 0),
|
uniqueId: `item_${requestId}_${orderIndex}_${itemIndex}_${item.id || Math.random().toString(36).substr(2, 9)}`,
|
||||||
|
// 剩余数量 = 订单数量 - 已发货数量,默认为0
|
||||||
|
remaimQty: ((item.ordQty || 0) - (item.deliveriedQty || 0)) || 0,
|
||||||
ordStatus: order.ordStatus,
|
ordStatus: order.ordStatus,
|
||||||
deliveryStatus: order.deliveryStatus,
|
deliveryStatus: order.deliveryStatus,
|
||||||
ordDate: order.ordDate,
|
ordDate: order.ordDate,
|
||||||
custName: order.custName,
|
custName: order.custName,
|
||||||
reqDeliveryDate: order.reqDeliveryDate,
|
reqDeliveryDate: order.reqDeliveryDate,
|
||||||
|
saleOrdNo: order.saleOrdNo,
|
||||||
|
saleOrdId: order.id,
|
||||||
|
custId: order.custId, // 添加客户ID
|
||||||
|
deliveriedQty: item.deliveriedQty || 0,
|
||||||
})),
|
})),
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -135,6 +181,7 @@ const getList = async () => {
|
|||||||
/** 搜索 */
|
/** 搜索 */
|
||||||
const handleQuery = () => {
|
const handleQuery = () => {
|
||||||
queryParams.pageNo = 1
|
queryParams.pageNo = 1
|
||||||
|
selectedId.value = '' // 清空选中
|
||||||
getList()
|
getList()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -147,16 +194,23 @@ const resetQuery = () => {
|
|||||||
|
|
||||||
/** 点击行选择 */
|
/** 点击行选择 */
|
||||||
const handleRowClick = (row) => {
|
const handleRowClick = (row) => {
|
||||||
selectedRow.value = row
|
// 只有子行可以选中
|
||||||
|
if (!row.hasChildren && !row.items) {
|
||||||
|
selectedId.value = row.uniqueId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 点击单选按钮 */
|
||||||
|
const handleSelect = (row) => {
|
||||||
|
selectedId.value = row.uniqueId
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 双击行 */
|
/** 双击行 */
|
||||||
const handleRowDoubleClick = (row) => {
|
const handleRowDoubleClick = (row) => {
|
||||||
// 如果是子行(有detailId),返回子行数据;否则返回父行的第一个子行
|
// 只有子行(没有hasChildren或hasChildren为false)才能双击选择
|
||||||
if (row.detailId) {
|
if (!row.hasChildren) {
|
||||||
|
selectedId.value = row.uniqueId
|
||||||
emitSelect(row)
|
emitSelect(row)
|
||||||
} else if (row.items && row.items.length > 0) {
|
|
||||||
emitSelect(row.items[0])
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -169,33 +223,75 @@ const handleSave = () => {
|
|||||||
|
|
||||||
/** 触发选择事件 */
|
/** 触发选择事件 */
|
||||||
const emitSelect = (row) => {
|
const emitSelect = (row) => {
|
||||||
emit('select', {
|
console.log('emitSelect row:', row)
|
||||||
|
const selectData = {
|
||||||
saleOrdId: row.saleOrdId || row.id,
|
saleOrdId: row.saleOrdId || row.id,
|
||||||
saleOrdNo: row.saleOrdNo,
|
saleOrdNo: row.saleOrdNo,
|
||||||
custName: row.custName,
|
custName: row.custName,
|
||||||
|
custId: row.custId,
|
||||||
|
ordDate: row.ordDate,
|
||||||
|
reqDeliveryDate: row.reqDeliveryDate,
|
||||||
materialName: row.materialName,
|
materialName: row.materialName,
|
||||||
|
materialId: row.materialId,
|
||||||
|
materialCode: row.materialCode,
|
||||||
spec: row.spec,
|
spec: row.spec,
|
||||||
ordQty: row.ordQty,
|
ordQty: row.ordQty,
|
||||||
remaimQty: row.remaimQty,
|
remaimQty: ((row.ordQty || 0) - (row.deliveriedQty || 0)) || 0,
|
||||||
|
deliveriedQty: row.deliveriedQty || 0,
|
||||||
unit: row.unit,
|
unit: row.unit,
|
||||||
})
|
}
|
||||||
|
console.log('emitSelect data:', selectData)
|
||||||
|
emit('select', selectData)
|
||||||
dialogVisible.value = false
|
dialogVisible.value = false
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 打开弹窗 */
|
/** 打开弹窗 */
|
||||||
const open = () => {
|
const open = () => {
|
||||||
dialogVisible.value = true
|
dialogVisible.value = true
|
||||||
selectedRow.value = null
|
selectedId.value = ''
|
||||||
handleQuery()
|
handleQuery()
|
||||||
}
|
}
|
||||||
|
|
||||||
defineExpose({ open })
|
defineExpose({ open })
|
||||||
|
|
||||||
/** 监听关闭 */
|
|
||||||
import { watch } from 'vue'
|
|
||||||
watch(dialogVisible, (val) => {
|
watch(dialogVisible, (val) => {
|
||||||
if (!val) {
|
if (!val) {
|
||||||
emit('close')
|
emit('close')
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.pagination-container {
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.radio-btn {
|
||||||
|
width: 18px;
|
||||||
|
height: 18px;
|
||||||
|
border: 2px solid #d9d9d9;
|
||||||
|
border-radius: 50%;
|
||||||
|
cursor: pointer;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
transition: all 0.2s;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.radio-btn:hover {
|
||||||
|
border-color: #409eff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.radio-btn.checked {
|
||||||
|
border-color: #409eff;
|
||||||
|
background-color: #409eff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.radio-inner {
|
||||||
|
width: 8px;
|
||||||
|
height: 8px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
@ -11,35 +11,20 @@
|
|||||||
<el-card title="基础信息" class="mb-4">
|
<el-card title="基础信息" class="mb-4">
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item label="*销售订单" prop="saleOrdId">
|
<el-form-item label="销售订单" prop="saleOrdId">
|
||||||
<el-select
|
<el-input
|
||||||
v-model="formData.saleOrdId"
|
v-model="formData.saleOrdNo"
|
||||||
filterable
|
|
||||||
placeholder="请选择"
|
placeholder="请选择"
|
||||||
@change="handleSaleOrderChange"
|
readonly
|
||||||
disabled
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="order in saleOrderOptions"
|
|
||||||
:key="order.id"
|
|
||||||
:label="order.saleOrdNo"
|
|
||||||
:value="order.id"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
<el-button
|
|
||||||
v-if="formType === 'create'"
|
|
||||||
type="text"
|
|
||||||
@click="openOrderSelect"
|
@click="openOrderSelect"
|
||||||
class="ml-2"
|
class="cursor-pointer"
|
||||||
>
|
/>
|
||||||
选择订单
|
|
||||||
</el-button>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item label="*单据日期" prop="deliveryDate">
|
<el-form-item label="单据日期" prop="ordDate">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
v-model="formData.deliveryDate"
|
v-model="formData.ordDate"
|
||||||
type="date"
|
type="date"
|
||||||
value-format="YYYY-MM-DD"
|
value-format="YYYY-MM-DD"
|
||||||
format="YYYY-MM-DD"
|
format="YYYY-MM-DD"
|
||||||
@ -48,7 +33,7 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item label="*单据状态" prop="deliveryStatus">
|
<el-form-item label="单据状态" prop="deliveryStatus">
|
||||||
<el-select v-model="formData.deliveryStatus" disabled>
|
<el-select v-model="formData.deliveryStatus" disabled>
|
||||||
<el-option label="已创建" value="1" />
|
<el-option label="已创建" value="1" />
|
||||||
<el-option label="已确认" value="2" />
|
<el-option label="已确认" value="2" />
|
||||||
@ -66,40 +51,46 @@
|
|||||||
</el-row>
|
</el-row>
|
||||||
<el-row :gutter="20" class="mt-4">
|
<el-row :gutter="20" class="mt-4">
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="*客户名称" prop="custName">
|
<el-form-item label="客户名称" prop="custName">
|
||||||
<el-input v-model="formData.custName" placeholder="请输入客户名称" readonly />
|
<el-input v-model="formData.custName" placeholder="请输入客户名称" disabled />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="*产品名称" prop="materialName">
|
<el-form-item label="产品名称" prop="materialName">
|
||||||
<el-input v-model="formData.materialName" placeholder="请输入产品名称" readonly />
|
<el-input v-model="formData.materialName" placeholder="请输入产品名称" disabled />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="*规格型号" prop="spec">
|
<el-form-item label="规格型号" prop="spec">
|
||||||
<el-input v-model="formData.spec" placeholder="请输入规格型号" readonly />
|
<el-input v-model="formData.spec" placeholder="请输入规格型号" disabled />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row :gutter="20" class="mt-4">
|
<el-row :gutter="20" class="mt-4">
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item label="*出库单号" prop="saleDeliveryNo">
|
<el-form-item label="出库单号" prop="saleDeliveryNo">
|
||||||
<el-input v-model="formData.saleDeliveryNo" placeholder="自动生成" readonly />
|
<el-input v-model="formData.saleDeliveryNo" placeholder="自动生成" disabled />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item label="*订单数量" prop="ordQty">
|
<el-form-item label="订单数量" prop="ordQty">
|
||||||
<el-input v-model="formData.ordQty" placeholder="请输入订单数量" readonly />
|
<el-input v-model="formData.ordQty" placeholder="请输入订单数量" disabled />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item label="*剩余数量" prop="remaimQty">
|
<el-form-item label="剩余数量" prop="remaimQty">
|
||||||
<el-input v-model="formData.remaimQty" placeholder="请输入剩余数量" readonly />
|
<el-input v-model="formData.remaimQty" placeholder="请输入剩余数量" disabled />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item label="*发货数量" prop="deliveriedQty">
|
<el-form-item label="发货数量" prop="deliveriedQty">
|
||||||
<el-input v-model="formData.deliveriedQty" placeholder="请输入" />
|
<el-input
|
||||||
|
v-model="formData.deliveriedQty"
|
||||||
|
placeholder="请输入发货数量"
|
||||||
|
type="number"
|
||||||
|
:min="0"
|
||||||
|
:max="formData.remaimQty || 0"
|
||||||
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
@ -122,38 +113,17 @@
|
|||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="联系人" prop="contact">
|
<el-form-item label="联系人" prop="contact">
|
||||||
<el-select v-model="formData.contact" placeholder="请选择">
|
<el-input v-model="formData.contact" placeholder="请输入联系人" />
|
||||||
<el-option
|
|
||||||
v-for="item in contactOptions"
|
|
||||||
:key="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="联系电话" prop="conPhone">
|
<el-form-item label="联系电话" prop="conPhone">
|
||||||
<el-select v-model="formData.conPhone" placeholder="请选择">
|
<el-input v-model="formData.conPhone" placeholder="请输入联系电话" />
|
||||||
<el-option
|
|
||||||
v-for="item in phoneOptions"
|
|
||||||
:key="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="联系地址" prop="conAddress">
|
<el-form-item label="联系地址" prop="conAddress">
|
||||||
<el-select v-model="formData.conAddress" placeholder="请选择">
|
<el-input v-model="formData.conAddress" placeholder="请输入联系地址" />
|
||||||
<el-option
|
|
||||||
v-for="item in addressOptions"
|
|
||||||
:key="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
@ -165,7 +135,7 @@
|
|||||||
<span></span>
|
<span></span>
|
||||||
<el-button type="primary" plain @click="addProductItem">新增</el-button>
|
<el-button type="primary" plain @click="addProductItem">新增</el-button>
|
||||||
</div>
|
</div>
|
||||||
<el-table :data="productList" border>
|
<el-table :data="productList" show-summary border :summary-method="getSummary">
|
||||||
<el-table-column label="序号" type="index" width="60px" />
|
<el-table-column label="序号" type="index" width="60px" />
|
||||||
<el-table-column label="仓库(*)" prop="warehouse" width="100px">
|
<el-table-column label="仓库(*)" prop="warehouse" width="100px">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
@ -197,12 +167,12 @@
|
|||||||
<el-input v-model="scope.row.bagSpec" placeholder="手动录入" />
|
<el-input v-model="scope.row.bagSpec" placeholder="手动录入" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="发货袋数(*)" prop="deliveriedBag" width="100px">
|
<el-table-column label="发货袋数(*)" prop="deliveriedBag" width="120px">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-input v-model="scope.row.deliveriedBag" placeholder="请输入" />
|
<el-input v-model="scope.row.deliveriedBag" placeholder="请输入" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="发货数量(*)" prop="deliveriedQty" width="100px">
|
<el-table-column label="发货数量(*)" prop="deliveriedQty" width="120px">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-input v-model="scope.row.deliveriedQty" placeholder="请输入" />
|
<el-input v-model="scope.row.deliveriedQty" placeholder="请输入" />
|
||||||
</template>
|
</template>
|
||||||
@ -224,12 +194,6 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<!-- 合计行 -->
|
|
||||||
<div class="mt-2 flex justify-end">
|
|
||||||
<span class="font-bold">合计: </span>
|
|
||||||
<span>发货袋数: {{ totalBag }}</span>
|
|
||||||
<span class="ml-4">发货数量: {{ totalQty }}</span>
|
|
||||||
</div>
|
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-form>
|
</el-form>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
@ -247,6 +211,7 @@
|
|||||||
import { ref, reactive, computed } from 'vue'
|
import { ref, reactive, computed } from 'vue'
|
||||||
import * as SaleDeliveryApi from '@/api/biz/saledelivery'
|
import * as SaleDeliveryApi from '@/api/biz/saledelivery'
|
||||||
import * as OrderApi from '@/api/biz/tsoorder'
|
import * as OrderApi from '@/api/biz/tsoorder'
|
||||||
|
import * as CustomerApi from '@/api/biz/customer'
|
||||||
import { watch } from 'vue'
|
import { watch } from 'vue'
|
||||||
import OrderSelectDialog from './OrderSelectDialog.vue'
|
import OrderSelectDialog from './OrderSelectDialog.vue'
|
||||||
|
|
||||||
@ -264,23 +229,6 @@ const saleOrderOptions = ref([])
|
|||||||
// 订单选择弹窗
|
// 订单选择弹窗
|
||||||
const orderSelectRef = ref()
|
const orderSelectRef = ref()
|
||||||
|
|
||||||
// 联系人选项
|
|
||||||
const contactOptions = ref([
|
|
||||||
{ label: '联系人1', value: '联系人1' },
|
|
||||||
{ label: '联系人2', value: '联系人2' },
|
|
||||||
])
|
|
||||||
|
|
||||||
// 联系电话选项
|
|
||||||
const phoneOptions = ref([
|
|
||||||
{ label: '13800138001', value: '13800138001' },
|
|
||||||
{ label: '13800138002', value: '13800138002' },
|
|
||||||
])
|
|
||||||
|
|
||||||
// 联系地址选项
|
|
||||||
const addressOptions = ref([
|
|
||||||
{ label: '地址1', value: '地址1' },
|
|
||||||
{ label: '地址2', value: '地址2' },
|
|
||||||
])
|
|
||||||
|
|
||||||
// 获取今日日期
|
// 获取今日日期
|
||||||
const getToday = () => {
|
const getToday = () => {
|
||||||
@ -297,6 +245,7 @@ const formData = reactive({
|
|||||||
deliveryDate: getToday(),
|
deliveryDate: getToday(),
|
||||||
deliveryStatus: '1',
|
deliveryStatus: '1',
|
||||||
deliveryType: undefined,
|
deliveryType: undefined,
|
||||||
|
ordDate: undefined,
|
||||||
custId: undefined,
|
custId: undefined,
|
||||||
custName: undefined,
|
custName: undefined,
|
||||||
contact: undefined,
|
contact: undefined,
|
||||||
@ -341,6 +290,26 @@ const totalQty = computed(() => {
|
|||||||
return productList.value.reduce((sum, item) => sum + (parseInt(item.deliveriedQty) || 0), 0)
|
return productList.value.reduce((sum, item) => sum + (parseInt(item.deliveriedQty) || 0), 0)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
/** 表格合计方法 */
|
||||||
|
const getSummary = (param: any) => {
|
||||||
|
const { columns, data } = param
|
||||||
|
const sums: any[] = []
|
||||||
|
columns.forEach((column: any, index: number) => {
|
||||||
|
if (index === 0) {
|
||||||
|
sums[index] = '合计'
|
||||||
|
} else if (column.prop === 'deliveriedBag') {
|
||||||
|
const total = data.reduce((sum: number, item: any) => sum + (parseInt(item.deliveriedBag) || 0), 0)
|
||||||
|
sums[index] = total
|
||||||
|
} else if (column.prop === 'deliveriedQty') {
|
||||||
|
const total = data.reduce((sum: number, item: any) => sum + (parseInt(item.deliveriedQty) || 0), 0)
|
||||||
|
sums[index] = total
|
||||||
|
} else {
|
||||||
|
sums[index] = ''
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return sums
|
||||||
|
}
|
||||||
|
|
||||||
// 监听弹窗关闭
|
// 监听弹窗关闭
|
||||||
watch(dialogVisible, (val) => {
|
watch(dialogVisible, (val) => {
|
||||||
if (!val) {
|
if (!val) {
|
||||||
@ -352,7 +321,19 @@ const formRules = reactive({
|
|||||||
saleOrdId: [{ required: true, message: '销售订单不能为空', trigger: 'change' }],
|
saleOrdId: [{ required: true, message: '销售订单不能为空', trigger: 'change' }],
|
||||||
deliveryDate: [{ required: true, message: '单据日期不能为空', trigger: 'change' }],
|
deliveryDate: [{ required: true, message: '单据日期不能为空', trigger: 'change' }],
|
||||||
deliveryStatus: [{ required: true, message: '单据状态不能为空', trigger: 'change' }],
|
deliveryStatus: [{ required: true, message: '单据状态不能为空', trigger: 'change' }],
|
||||||
deliveriedQty: [{ required: true, message: '发货数量不能为空', trigger: 'change' }],
|
deliveriedQty: [
|
||||||
|
{ required: true, message: '发货数量不能为空', trigger: 'change' },
|
||||||
|
{
|
||||||
|
validator: (rule, value, callback) => {
|
||||||
|
if (value && formData.remaimQty !== undefined && Number(value) > Number(formData.remaimQty)) {
|
||||||
|
callback(new Error(`发货数量不能大于剩余数量(${formData.remaimQty})`))
|
||||||
|
} else {
|
||||||
|
callback()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
trigger: ['change', 'blur']
|
||||||
|
}
|
||||||
|
],
|
||||||
})
|
})
|
||||||
|
|
||||||
const formRef = ref()
|
const formRef = ref()
|
||||||
@ -415,23 +396,60 @@ const handleSaleOrderChange = async (value: number) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 防止重复点击
|
||||||
|
let isOpeningOrderSelect = false
|
||||||
|
|
||||||
/** 打开订单选择弹窗 */
|
/** 打开订单选择弹窗 */
|
||||||
const openOrderSelect = () => {
|
const openOrderSelect = () => {
|
||||||
orderSelectRef.value.open()
|
if (isOpeningOrderSelect) return
|
||||||
|
isOpeningOrderSelect = true
|
||||||
|
try {
|
||||||
|
orderSelectRef.value.open()
|
||||||
|
} finally {
|
||||||
|
setTimeout(() => {
|
||||||
|
isOpeningOrderSelect = false
|
||||||
|
}, 300)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 处理订单选择 */
|
/** 处理订单选择 */
|
||||||
const handleOrderSelect = (data: any) => {
|
const handleOrderSelect = async (data: any) => {
|
||||||
|
console.log('handleOrderSelect data:', data)
|
||||||
formData.saleOrdId = data.saleOrdId
|
formData.saleOrdId = data.saleOrdId
|
||||||
formData.saleOrdNo = data.saleOrdNo
|
formData.saleOrdNo = data.saleOrdNo
|
||||||
|
formData.custId = data.custId
|
||||||
formData.custName = data.custName
|
formData.custName = data.custName
|
||||||
formData.materialName = data.materialName
|
formData.materialName = data.materialName
|
||||||
|
formData.materialId = data.materialId
|
||||||
|
formData.materialCode = data.materialCode
|
||||||
formData.spec = data.spec
|
formData.spec = data.spec
|
||||||
formData.ordQty = data.ordQty
|
formData.ordQty = data.ordQty
|
||||||
formData.remaimQty = data.remaimQty
|
formData.remaimQty = data.remaimQty
|
||||||
formData.deliveriedQty = data.remaimQty
|
formData.deliveriedQty = data.remaimQty
|
||||||
formData.unit = data.unit
|
formData.unit = data.unit
|
||||||
|
|
||||||
|
// 将订单日期带入到单据日期
|
||||||
|
if (data.ordDate) {
|
||||||
|
// 确保日期格式为 YYYY-MM-DD 字符串类型
|
||||||
|
const ordDateStr = String(data.ordDate).trim()
|
||||||
|
if (/^\d{4}-\d{2}-\d{2}$/.test(ordDateStr)) {
|
||||||
|
formData.ordDate = ordDateStr
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
const date = new Date(data.ordDate)
|
||||||
|
if (!isNaN(date.getTime())) {
|
||||||
|
formData.ordDate = date.toISOString().split('T')[0]
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.warn('日期转换失败:', e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 如果没有订单日期,清空单据日期
|
||||||
|
formData.ordDate = null
|
||||||
|
}
|
||||||
|
console.log('formData after set:', formData)
|
||||||
|
|
||||||
// 添加到选项列表以便显示
|
// 添加到选项列表以便显示
|
||||||
if (!saleOrderOptions.value.find(item => item.id === data.saleOrdId)) {
|
if (!saleOrderOptions.value.find(item => item.id === data.saleOrdId)) {
|
||||||
saleOrderOptions.value.push({
|
saleOrderOptions.value.push({
|
||||||
@ -442,8 +460,29 @@ const handleOrderSelect = (data: any) => {
|
|||||||
spec: data.spec,
|
spec: data.spec,
|
||||||
ordQty: data.ordQty,
|
ordQty: data.ordQty,
|
||||||
remaimQty: data.remaimQty,
|
remaimQty: data.remaimQty,
|
||||||
|
deliveriedQty: data.deliveriedQty,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 如果有客户ID,查询客户联系人信息
|
||||||
|
if (data.custId) {
|
||||||
|
await loadCustomerContact(data.custId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 根据客户ID查询客户联系人信息 */
|
||||||
|
const loadCustomerContact = async (custId: number) => {
|
||||||
|
try {
|
||||||
|
const customer = await CustomerApi.getCustomer(custId)
|
||||||
|
if (customer) {
|
||||||
|
// 优先使用contact1,如果为空则使用contact2
|
||||||
|
formData.contact = customer.contact1 || customer.contact2
|
||||||
|
formData.conPhone = customer.conPhone1 || customer.conPhone2
|
||||||
|
formData.conAddress = customer.conAddress1 || customer.conAddress2
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('查询客户联系人信息失败', error)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 添加产品项 */
|
/** 添加产品项 */
|
||||||
@ -551,6 +590,7 @@ const resetForm = () => {
|
|||||||
ordQty: undefined,
|
ordQty: undefined,
|
||||||
remaimQty: undefined,
|
remaimQty: undefined,
|
||||||
deliveriedQty: undefined,
|
deliveriedQty: undefined,
|
||||||
|
ordDate: null,
|
||||||
})
|
})
|
||||||
|
|
||||||
productList.value = [{
|
productList.value = [{
|
||||||
|
|||||||
@ -77,7 +77,7 @@
|
|||||||
<el-table-column type="selection" width="55px" />
|
<el-table-column type="selection" width="55px" />
|
||||||
<el-table-column label="序号" align="center" type="index" width="60px"/>
|
<el-table-column label="序号" align="center" type="index" width="60px"/>
|
||||||
<el-table-column label="出库单号" align="center" prop="saleDeliveryNo" width="140px" />
|
<el-table-column label="出库单号" align="center" prop="saleDeliveryNo" width="140px" />
|
||||||
<el-table-column label="单据日期" align="center" prop="deliveryDate" width="120px" />
|
<el-table-column label="单据日期" align="center" prop="ordDate" width="120px" />
|
||||||
<el-table-column label="客户名称" align="center" prop="custName" width="120px" />
|
<el-table-column label="客户名称" align="center" prop="custName" width="120px" />
|
||||||
<el-table-column label="产品名称" align="center" prop="materialName" width="120px" />
|
<el-table-column label="产品名称" align="center" prop="materialName" width="120px" />
|
||||||
<el-table-column label="产品规格" align="center" prop="spec" width="120px" />
|
<el-table-column label="产品规格" align="center" prop="spec" width="120px" />
|
||||||
|
|||||||
@ -260,8 +260,8 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="发货数量(*)" align="center" prop="deliveriedQty" />
|
<el-table-column label="发货数量" align="center" prop="deliveriedQty" />
|
||||||
<el-table-column label="已转生成数量(*)" align="center" prop="produceQty" />
|
<el-table-column label="已转生成数量" align="center" prop="produceQty" />
|
||||||
<el-table-column label="备注" align="center" prop="remark">
|
<el-table-column label="备注" align="center" prop="remark">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-input v-model="scope.row.remark" placeholder="请输入" />
|
<el-input v-model="scope.row.remark" placeholder="请输入" />
|
||||||
@ -286,6 +286,7 @@
|
|||||||
:headers="uploadHeaders"
|
:headers="uploadHeaders"
|
||||||
:auto-upload="true"
|
:auto-upload="true"
|
||||||
:limit="10"
|
:limit="10"
|
||||||
|
:show-file-list="false"
|
||||||
:on-success="handleUploadSuccess"
|
:on-success="handleUploadSuccess"
|
||||||
:on-error="handleUploadError"
|
:on-error="handleUploadError"
|
||||||
:on-remove="handleRemoveFile"
|
:on-remove="handleRemoveFile"
|
||||||
@ -311,10 +312,10 @@
|
|||||||
size="small"
|
size="small"
|
||||||
class="mt-20px"
|
class="mt-20px"
|
||||||
>
|
>
|
||||||
<el-table-column type="index" label="序号" width="80" align="center" />
|
<el-table-column type="index" label="序号" width="80px" align="center" />
|
||||||
<el-table-column prop="name" label="文件名称" align="center" />
|
<el-table-column prop="name" label="文件名称" align="center" />
|
||||||
<el-table-column prop="uploadTime" label="上传时间" width="100" align="center" />
|
<el-table-column prop="uploadTime" label="上传时间" width="180px" align="center" />
|
||||||
<el-table-column label="操作" width="80" align="center">
|
<el-table-column label="操作" width="80px" align="center">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button
|
<el-button
|
||||||
type="text"
|
type="text"
|
||||||
@ -333,7 +334,7 @@
|
|||||||
<!-- 底部按钮区域 -->
|
<!-- 底部按钮区域 -->
|
||||||
<div class="form-footer">
|
<div class="form-footer">
|
||||||
<el-button @click="submitForm" type="primary" :disabled="formLoading">保存</el-button>
|
<el-button @click="submitForm" type="primary" :disabled="formLoading">保存</el-button>
|
||||||
<el-button @click="submitAudit" type="success" :disabled="formLoading">送审</el-button>
|
<el-button @click="submitAudit" type="success" :disabled="formLoading">确认</el-button>
|
||||||
<el-button @click="handleCancel">取消</el-button>
|
<el-button @click="handleCancel">取消</el-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -418,7 +419,7 @@ const formData = reactive({
|
|||||||
saleManName: undefined,
|
saleManName: undefined,
|
||||||
saleDeptId: undefined,
|
saleDeptId: undefined,
|
||||||
saleDeptName: undefined,
|
saleDeptName: undefined,
|
||||||
ordType: undefined,
|
ordType: '2',
|
||||||
paymentTerms: undefined,
|
paymentTerms: undefined,
|
||||||
taxRate: undefined,
|
taxRate: undefined,
|
||||||
totalAmount: undefined,
|
totalAmount: undefined,
|
||||||
@ -720,7 +721,7 @@ const resetForm = () => {
|
|||||||
formData.saleManName = undefined
|
formData.saleManName = undefined
|
||||||
formData.saleDeptId = undefined
|
formData.saleDeptId = undefined
|
||||||
formData.saleDeptName = undefined
|
formData.saleDeptName = undefined
|
||||||
formData.ordType = undefined
|
formData.ordType = '2'
|
||||||
formData.paymentTerms = undefined
|
formData.paymentTerms = undefined
|
||||||
formData.taxRate = undefined
|
formData.taxRate = undefined
|
||||||
formData.totalAmount = undefined
|
formData.totalAmount = undefined
|
||||||
@ -912,16 +913,18 @@ const handleUploadSuccess = (response: any, file: any, fileList: any) => {
|
|||||||
if (response.code === 0) {
|
if (response.code === 0) {
|
||||||
const fileUrl = response.data
|
const fileUrl = response.data
|
||||||
// 计算上传耗时(秒)
|
// 计算上传耗时(秒)
|
||||||
const startTime = uploadStartTime.value.get(file.name) || Date.now()
|
|
||||||
const uploadDuration = ((Date.now() - startTime) / 1000).toFixed(2) + 's'
|
|
||||||
uploadStartTime.value.delete(file.name)
|
uploadStartTime.value.delete(file.name)
|
||||||
|
|
||||||
const fileId = fileUrl.split('/').pop() || Date.now().toString()
|
const fileId = fileUrl.split('/').pop() || Date.now().toString()
|
||||||
|
|
||||||
|
// 获取当前时间作为上传时间
|
||||||
|
const now = new Date()
|
||||||
|
const uploadTime = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')} ${String(now.getHours()).padStart(2, '0')}:${String(now.getMinutes()).padStart(2, '0')}:${String(now.getSeconds()).padStart(2, '0')}`
|
||||||
|
|
||||||
uploadedFiles.value.push({
|
uploadedFiles.value.push({
|
||||||
id: fileId,
|
id: fileId,
|
||||||
name: file.name,
|
name: file.name,
|
||||||
uploadTime: uploadDuration, // 显示上传耗时,如 "2.35s"
|
uploadTime: uploadTime, // 显示上传的当前时间
|
||||||
url: fileUrl
|
url: fileUrl
|
||||||
})
|
})
|
||||||
// ...
|
// ...
|
||||||
|
|||||||
@ -59,7 +59,7 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="是否加急" prop="isUrgent">
|
<el-form-item label="是否加急" prop="isUrgent">
|
||||||
<el-select v-model="queryParams.isUrgent" class="!w-240px">
|
<el-select v-model="queryParams.isUrgent" class="!w-240px" clearable>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="dict in getStrDictOptions(DICT_TYPE.SYSTEM_IS_CELL)"
|
v-for="dict in getStrDictOptions(DICT_TYPE.SYSTEM_IS_CELL)"
|
||||||
:key="dict.value"
|
:key="dict.value"
|
||||||
@ -135,12 +135,12 @@
|
|||||||
<el-table-column label="包装要求" align="center" prop="packReq" width="180px" />
|
<el-table-column label="包装要求" align="center" prop="packReq" width="180px" />
|
||||||
<el-table-column label="质量要求" align="center" prop="qualityReq" width="180px" />
|
<el-table-column label="质量要求" align="center" prop="qualityReq" width="180px" />
|
||||||
|
|
||||||
<el-table-column label="订单状态" prop="ordStatus" width="120px">
|
<el-table-column label="订单状态" prop="ordStatus" width="120px" fixed="right">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<dict-tag :type="DICT_TYPE.ORDER_STATUS" :value="scope.row.ordStatus" />
|
<dict-tag :type="DICT_TYPE.ORDER_STATUS" :value="scope.row.ordStatus" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="发货状态" align="center" prop="deliveryStatus" width="110px">
|
<el-table-column label="发货状态" align="center" prop="deliveryStatus" width="110px" fixed="right">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<dict-tag :type="DICT_TYPE.SHIPPING_STATUS" :value="scope.row.deliveryStatus" />
|
<dict-tag :type="DICT_TYPE.SHIPPING_STATUS" :value="scope.row.deliveryStatus" />
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user