Merge branch 'dev' of https://git.yfgame.vip/r/hangtag into dev

# Conflicts:
#	hangtag-ui/hangtag-ui-front/src/locales/en.ts
#	hangtag-ui/hangtag-ui-front/src/views/oms/saleorder/index.vue
This commit is contained in:
yf 2024-12-15 12:52:55 +08:00
commit a232b6fe67
31 changed files with 632 additions and 102 deletions

View File

@ -11,4 +11,8 @@ public interface DictTypeConstants {
String BILL_STATUS = "oms_bill_status"; // 单据状态
String ORDER_STATUS = "oms_order_status"; // 订单状态
String OMS_CONTRACT_TYPE = "oms_contract_type"; // 合约类型
String OMS_CURRENCY_TYPE = "currency_type"; // 结算币种
}

View File

@ -2,6 +2,7 @@ package cn.hangtag.module.oms.controller.admin.app;
import cn.hangtag.framework.apilog.core.annotation.ApiAccessLog;
import cn.hangtag.framework.common.exception.ErrorCode;
import cn.hangtag.framework.common.pojo.CommonResult;
import cn.hangtag.framework.common.pojo.PageParam;
import cn.hangtag.framework.common.pojo.PageResult;
@ -36,6 +37,7 @@ import java.util.List;
import java.util.Map;
import static cn.hangtag.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
import static cn.hangtag.framework.common.pojo.CommonResult.error;
import static cn.hangtag.framework.common.pojo.CommonResult.success;
@Tag(name = "APP - 销售订单")
@ -97,9 +99,12 @@ public class AppSaleOrderController{
public CommonResult<PageResult<SaleOrderRespVO>> getSaleOrderPage(@Valid SaleOrderPageReqVO pageReqVO) {
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
CustomerDO customer = customerService.getCustomerByUserId(loginUser.getId());
pageReqVO.setCustomerId(customer.getId());
PageResult<SaleOrderDO> pageResult = saleOrderService.getSaleOrderPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, SaleOrderRespVO.class));
if(customer!=null){
pageReqVO.setCustomerId(customer.getId());
PageResult<SaleOrderDO> pageResult = saleOrderService.getSaleOrderPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, SaleOrderRespVO.class));
}
return error(new ErrorCode(99999,"该用户未绑定客户资料,请联系管理员维护数据!"));
}
@GetMapping("/export-excel")

View File

@ -77,6 +77,9 @@ public class ProduceOrderSaveReqVO {
@Schema(description = "交货数量")
private Long deliveryQty;
@Schema(description = "合约类型")
private String contractType;
@Schema(description = "详情")
private String details;

View File

@ -55,6 +55,12 @@ public class SaleContractSaveReqVO {
@Schema(description = "地址")
private String address;
@Schema(description = "合约类型")
private String contractType;
@Schema(description = "结算币种")
private String currencyType;
@Schema(description = "OMS销售合约分录列表")
private List<SaleContractEntryDO> saleContractEntrys;

View File

@ -40,6 +40,16 @@ public class SaleOrderRespVO {
@DictFormat(DictTypeConstants.ORDER_STATUS)
private Integer orderStatus;
@Schema(description = "合约类型", example = "2")
@ExcelProperty(value = "合约类型", converter = DictConvert.class)
@DictFormat(DictTypeConstants.OMS_CONTRACT_TYPE)
private String contractType;
@Schema(description = "结算币种", example = "2")
@ExcelProperty(value = "结算币种", converter = DictConvert.class)
@DictFormat(DictTypeConstants.OMS_CURRENCY_TYPE)
private String currencyType;
@Schema(description = "业务日期")
@ExcelProperty("业务日期")
private LocalDateTime bizdate;

View File

@ -59,6 +59,12 @@ public class SaleOrderSaveReqVO {
@Schema(description = "单据状态", example = "2")
private String billStatus;
@Schema(description = "合约类型", example = "2")
private String contractType;
@Schema(description = "结算币种", example = "2")
private String currencyType;
@Schema(description = "订单状态", example = "2")
private Integer orderStatus;

View File

@ -23,7 +23,9 @@ public interface SaleOrderConvert {
@Mapping(source = "invoiceCode", target = "invoiceCode"),
@Mapping(source = "invoiceName", target = "invoiceName"),
@Mapping(source = "address", target = "address"),
@Mapping(source = "emails", target = "emails")
@Mapping(source = "emails", target = "emails"),
@Mapping(source = "contractType", target = "contractType"),
@Mapping(source = "currencyType", target = "currencyType")
})
SaleOrderRespVO convert(SaleOrderDO bean);

View File

@ -81,5 +81,13 @@ public class SaleContractDO extends BaseDO {
* 地址
*/
private String address;
/**
* 合约类型
*/
private String contractType;
/**
* 结算币种
*/
private String currencyType;
}

View File

@ -164,6 +164,16 @@ public class SaleOrderDO extends BaseDO {
*/
private String orderFollowerUser;
/**
* 合约类型
*/
private String contractType;
/**
* 结算币种
*/
private String currencyType;
public SaleOrderDO(CreateSaleOrderDTO dto) {
BeanUtil.copyProperties(dto, this,"bizdate","plansenddate");
}

View File

@ -17,6 +17,7 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.validation.ConstraintViolationException;
@ -59,7 +60,11 @@ public class ProduceOrderServiceImpl implements ProduceOrderService {
if(FuncUtil.isNotEmpty(code)){
checkCode(produceOrder.getId(),code);
}else {
produceOrder.setBillno(getNewCode());
String newCode = getNewCode();
if(StringUtils.isNotBlank(createReqVO.getContractType())){
newCode = newCode.replace("XSHY-",createReqVO.getContractType()+"-");
}
produceOrder.setBillno(newCode);
}
produceOrderMapper.insert(produceOrder);
// 返回
@ -76,10 +81,12 @@ public class ProduceOrderServiceImpl implements ProduceOrderService {
Double specSizeWidth = productInfo.getSpecSizeWidth();
Double specSizeHeight = productInfo.getSpecSizeHeight();
String specMaterial = productInfo.getSpecMaterial();
String productionInfo = productInfo.getProductionInfo();
StringBuffer str = new StringBuffer();
str.append(String.format("货名:%s\r\n",productInfo.getName()));
/* str.append(String.format("货名:%s\r\n",productInfo.getName()));
str.append(String.format("规格:%s × %s \r\n",specSizeWidth,specSizeHeight));
str.append(String.format("纸质:%s \r\n",specMaterial));
str.append(String.format("纸质:%s \r\n",specMaterial));*/;
str.append(String.format("%s ",productionInfo));
updateObj.setDetails(str.toString());
produceOrderMapper.updateById(updateObj);

View File

@ -160,6 +160,12 @@ public class SaleOrderServiceImpl implements SaleOrderService {
// 插入
SaleOrderDO saleOrder = BeanUtils.toBean(createReqVO, SaleOrderDO.class);
saleOrder.setOrderStatus(SaleOrderStatusEnum.YXD.getValue());
List<SaleOrderEntryDO> entrys = createReqVO.getEntrys();
String currency = null;
if(entrys!=null&&entrys.size()>0){
currency = entrys.get(0).getCurrency();
}
saleOrder.setCurrency(currency);
saleOrderMapper.insert(saleOrder);
// 插入子表
createSaleOrderEntryList(saleOrder.getId(), createReqVO.getEntrys());
@ -322,8 +328,15 @@ public class SaleOrderServiceImpl implements SaleOrderService {
case "audit": //审核
for (SaleOrderDO saleOrder : saleOrders) {
if (BillStatusEnum.SUBMIT.getValue().equals(saleOrder.getBillStatus())) {
List<SaleOrderEntryDO> entrys = getSaleOrderEntryListByParentId(saleOrder.getId());
String contractType = saleOrder.getContractType();
String currencyType = saleOrder.getCurrencyType();
if(StringUtils.isBlank(contractType)){
throw new ServiceException(001, "合约类型不允许为空!");
}
if(StringUtils.isBlank(currencyType)){
throw new ServiceException(001, "结算币种不允许为空!");
}
if (entrys == null || entrys.isEmpty()) {
throw new ServiceException(001, "产品明细为空");
}
@ -401,7 +414,7 @@ public class SaleOrderServiceImpl implements SaleOrderService {
}
}
break;
case "unaudit": //审核
case "unaudit": //审核
for (SaleOrderDO saleOrder : saleOrders) {
if (!BillStatusEnum.AUDIT.getValue().equals(saleOrder.getBillStatus())) {
throw new ServiceException(001, "订单状态不等于已审核状态,不允许反审核!");
@ -439,7 +452,7 @@ public class SaleOrderServiceImpl implements SaleOrderService {
ProductInfoDO productInfo = productInfoService.getProductInfo(entry.getMaterialId());
ProduceOrderSaveReqVO saveReqVO = new ProduceOrderSaveReqVO();
saveReqVO.setOrderNo(saleOrder.getBillno());
saveReqVO.setSaleContractNo(saleOrder.getBillno());
saveReqVO.setSaleContractNo(saleOrder.getContractCode());
saveReqVO.setCustomerId(customer.getId());
saveReqVO.setCustomerCode(customer.getNumber());
saveReqVO.setProductId(entry.getMaterialId());
@ -474,6 +487,7 @@ public class SaleOrderServiceImpl implements SaleOrderService {
SaleOrderDO saleOrderDO = new SaleOrderDO();
saleOrderDO.setId(saleOrder.getId());
saleOrderDO.setOrderStatus(SaleOrderStatusEnum.YWC.getValue());
saleOrderDO.setBillStatus(BillStatusEnum.YPLAN.getValue());
saleOrderMapper.updateById(saleOrderDO);
//}
}
@ -508,6 +522,7 @@ public class SaleOrderServiceImpl implements SaleOrderService {
context.setVariable("clerk", saleContract.getClerk());
context.setVariable("saleOrderNo", saleContract.getCustomerBuyNo());
context.setVariable("totalAmount", saleContract.getAmount());
context.setVariable("currencyType", saleContract.getCurrencyType());
context.setVariable("zhTotalAmount", "合共人民币" + NumberChineseFormatterUtils.convertToChinese(saleContract.getAmount()) + "");
for (int i = 0; i < saleContractEntrys.size(); i++) {
@ -973,11 +988,17 @@ public class SaleOrderServiceImpl implements SaleOrderService {
private SaleContractSaveReqVO toSaleContractVO(SaleOrderDO saleOrder, List<SaleOrderEntryDO> entrys) {
CustomerDO customer = customerService.getCustomer(saleOrder.getCustomerId());
SaleContractSaveReqVO saveReqVO = new SaleContractSaveReqVO();
// 优先使用销售订单合同号
String billno = getNewOrderCode2();
String contractType = saleOrder.getContractType();
if(StringUtils.isNotBlank(contractType)){
billno = billno.replace("XXXX-",contractType+"-");
}
/* // 优先使用销售订单合同号
String billno = saleOrder.getContractCode();
if (FuncUtil.isEmpty(billno)) {
billno = getNewContractCode2();
}
}*/
saveReqVO.setBillno(billno);
saveReqVO.setCustomerId(saleOrder.getCustomerId());
saveReqVO.setCustomerName(customer.getName());
@ -990,6 +1011,8 @@ public class SaleOrderServiceImpl implements SaleOrderService {
saveReqVO.setFax(saleOrder.getFax());
saveReqVO.setAmount(saleOrder.getOrderAmount());
saveReqVO.setAddress(saleOrder.getDeliveryAddress());
saveReqVO.setContractType(saleOrder.getContractType());
saveReqVO.setCurrencyType(saleOrder.getCurrencyType());
List<SaleContractEntryDO> list = new ArrayList<>();
for (SaleOrderEntryDO entry : entrys) {
@ -1155,4 +1178,44 @@ public class SaleOrderServiceImpl implements SaleOrderService {
return saleOrderDO;
}
private String getNewOrderCode2() {
String s = "";
int count = 10;
while (true){
count --;
try {
s = CodingRulesUtils.generateCode(saleContractCodeId, false);
checkCode2(null,s);
return s;
}catch (ServiceException e){
log.warn("重复或者下一个编码");
if(count < 0){
log.error("编码获取失败");
return "";
}
}
}
}
private void checkCode2(Long id,String code){
if(FuncUtil.isNotEmpty(code)){
LambdaQueryWrapper<SaleContractDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.select(SaleContractDO::getId,SaleContractDO::getBillno, BaseDO::getDeleted);
lambdaQueryWrapper.eq(SaleContractDO::getBillno, code);
lambdaQueryWrapper.eq(SaleContractDO::getDeleted,false);
List<SaleContractDO> dos = saleContractMapper.selectList(lambdaQueryWrapper);
if(FuncUtil.isEmpty(id) && FuncUtil.isNotEmpty(dos)){
throw exception(GlobalErrorCodeConstants.DATA_DUPLICATE);
}
if (FuncUtil.isNotEmpty(id) && FuncUtil.isNotEmpty(dos)) {
for (SaleContractDO aDo : dos) {
// 出现重复并当前id 不一致
if(!FuncUtil.equals(aDo.getId(), id)){
throw exception(GlobalErrorCodeConstants.DATA_DUPLICATE);
}
}
}
}
}
}

View File

@ -118,9 +118,9 @@
<th style="width: 4%;">项目</th>
<th style="width: 25%;">产品说明</th>
<th style="width: 5%;text-align: center;">数量</th>
<th style="width: 8%;text-align: center;">单位订价RMB</th>
<th style="width: 8%;text-align: center;">单位订价<span th:text="${currencyType}"></span></th>
<th style="width: 5%;text-align: center;">折扣%</th>
<th style="width: 7%;text-align: center;">金额RMB</th>
<th style="width: 7%;text-align: center;">金额<span th:text="${currencyType}"></span></th>
<th style="width: 7%;text-align: center;">交货日期</th>
</tr>
</thead>
@ -252,7 +252,7 @@
<span
style="font-weight: bold;font-size: 16px; padding: 8px 0px 8px 0px;border-top: 1px solid #dddddd;border-bottom: 2px solid #dddddd;">
<span style="margin-right: 80px;">RMB</span>
<span style="margin-right: 80px;" th:text="${currencyType}">RMB</span>
<span th:text="${totalAmount}">XXXXXXXxXX</span>
</span>
</span>

View File

@ -1,7 +1,6 @@
package cn.hangtag.module.system.controller.admin.auth.vo;
import cn.hangtag.framework.common.validation.Email;
import cn.hangtag.framework.common.validation.Mobile;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
@ -9,6 +8,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@Schema(description = "管理后台 - 邮箱验证码的重置密码 Request VO")
@Data
@ -35,7 +35,7 @@ public class AuthMailModifyPwdReqVO {
private String code;
@Schema(description = "账户类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
@NotEmpty(message = "账户类型不能为空")
@NotNull(message = "账户类型不能为空")
private Integer type;
}

View File

@ -2,7 +2,7 @@
{
"id": 2804,
"parentId": 0,
"name": "订单管理",
"name": "order.ordermanage",
"path": "/order",
"component": "",
"componentName": "",
@ -14,7 +14,7 @@
{
"id": 2830,
"parentId": 2828,
"name": "我的订单",
"name": "order.myorder",
"path": "sale-order",
"component": "oms/saleorder/index",
"componentName": "SaleOrder",
@ -27,7 +27,7 @@
{
"id": 2818,
"parentId": 2804,
"name": "创建订单",
"name": "order.createorder",
"path": "createorder",
"component": "oms/order/createorder/index",
"componentName": "CreateOrder",

View File

@ -16,6 +16,8 @@ export interface SaleOrderVO {
address: string // 地址
currency: string // 货币
invoiceRemarks: string // 发票备注
contractType: string // 合约类型
currencyType: string // 结算币种
}
// 销售订单 API

View File

@ -69,12 +69,6 @@ export default defineComponent({
{size.value ? (
<SizeDropdown class="custom-hover" color="var(--top-header-text-color)"></SizeDropdown>
) : undefined}
{locale.value ? (
<LocaleDropdown
class="custom-hover"
color="var(--top-header-text-color)"
></LocaleDropdown>
) : undefined}
{message.value ? (
<Message class="custom-hover" color="var(--top-header-text-color)"></Message>
) : undefined}

View File

@ -207,6 +207,7 @@ export default {
toDo: 'To do',
introduction: 'A serious introduction',
shortcutOperation: 'Quick entry',
operationData: 'Operation Data',
operation: 'Operation',
index: 'Index',
personal: 'Personal',
@ -460,6 +461,86 @@ export default {
btn_zoom_out: 'Zoom out',
preview: 'Preivew'
},
order:{
ordermanage:'Order Manage',
myorder:'My Order',
createorder:'Create Order'
},
orderstatus:{
rejectedOrder:'Rejected Order',
waitAuditOrder:'Wait Audit Order',
waitArrangeOrder:'Wait Arrange Order',
},
omsSystem: {
title:'Silver Pringting OMS'
},
billform:{
pleaseenter:'pleaseenter ',
pleaseselect:'pleaseselect ',
startdate:'startdate',
enddate:'enddate',
},
billlist:{
search:'Search',
reset:'Reset',
cancel:'Cancel',
submit:'Submit',
export:'Export',
all:'All',
waitAudit:'Wait Audit',
waitArrange:'Wait Arrange',
planned:'Planned',
edit:'edit',
details:'details',
operate:'operate',
},
saleorder:{
title:{
details:'OrderDetails',
remarks:'remarks',
orderinfo:'OrderInfo',
orderstatus:'OrderStatus',
productinfo:'ProductInfo',
invoiceinfo:'InvoiceInfo',
billinfo:'BillInfo',
},
billno:'orderNo',
customer:'customer',
salesperson:'salesPerson',
followUpPerson:'followUpPerson',
bizdate:'bizdate',
confirmdate:'confirmdate',
plandate:'plandate',
orderstatus:'orderstatus',
phone:'phone',
remark:'remark',
contractType:'contractType',
emails:'emails',
fax:'fax',
customerCompany:'customerCompany',
customerNumber:'customerNumber',
customerName:'customerName',
currencyType:'currencyType',
invoiceCode:'invoiceCode',
invoiceName:'invoiceName',
invoiceAddress:'invoiceAddress',
invoiceRemarks:'invoiceRemarks',
createTime:'createTime',
updaterName:'updaterName',
updateTime:'updateTime',
auditorName:'auditorName',
auditorTime:'auditorTime',
entry:{
productNumber:'productNumber',
productName:'productName',
productSpec:'productSpec',
qty:'qty',
price:'price',
discount:'discount',
amount:'amount',
}
},
designInfo: {
"auditSubmitText": "Submit for Review",
"auditTips": "This draft is only for content verification and is not the final print file.",

View File

@ -208,6 +208,7 @@ export default {
toDo: '待办',
introduction: '一个正经的简介',
shortcutOperation: '快捷入口',
operationData: '运营数据',
operation: '操作',
index: '指数',
personal: '个人',
@ -454,6 +455,87 @@ export default {
btn_zoom_out: '缩小',
preview: '预览'
},
'OAuth 2.0': 'OAuth 2.0' // 避免菜单名是 OAuth 2.0 时,一直 warn 报错
,
order:{
ordermanage:'订单管理',
myorder:'我的订单',
createorder:'创建订单'
},
orderstatus:{
rejectedOrder:'已驳回订单',
waitAuditOrder:'待审核订单',
waitArrangeOrder:'待排产订单',
},
omsSystem: {
title:'嘉晋OMS下单系统'
},
billform:{
pleaseenter:'请输入',
pleaseselect:'请选择',
startdate:'开始日期',
enddate:'结束日期',
},
billlist:{
search:'搜索',
reset:'重置',
cancel:'作废',
submit:'提交',
export:'导出',
all:'全部',
waitAudit:'待审核',
waitArrange:'待排产',
planned:'已排产',
edit:'编辑',
details:'详情',
operate:'操作',
},
saleorder:{
title:{
details:'订单详情',
remarks:'备注',
orderinfo:'订单信息',
orderstatus:'订单状态',
productinfo:'产品信息',
invoiceinfo:'发票信息',
billinfo:'制单信息',
},
billno:'订单号',
customer:'客户',
salesperson:'销售员',
followUpPerson:'跟单员',
bizdate:'业务日期',
confirmdate:'确认日期',
plandate:'计划日期',
orderstatus:'订单状态',
phone:'手机',
remark:'备注',
contractType:'合约类型',
emails:'邮箱',
fax:'传真',
customerCompany:'客户公司',
customerNumber:'客户编号',
customerName:'客户名称',
currencyType:'结算币种',
invoiceCode:'发票抬头',
invoiceName:'发票名称',
invoiceAddress:'发票地址',
invoiceRemarks:'发票备注',
createTime:'创建时间',
updaterName:'修改人',
updateTime:'修改时间',
auditorName:'审核人',
auditorTime:'审核时间',
entry:{
productNumber:'产品编码',
productName:'产品名称',
productSpec:'产品规格',
qty:'数量',
price:'单价',
discount:'折扣',
amount:'金额',
}
},
designInfo: {
auditSubmitText: '批稿',
auditTips: '此稿件仅仅作为核对内容使用用,不作为最终印刷稿件;',
@ -586,5 +668,4 @@ export default {
colLabelRemark: '备注',
colLabelDetails: '详情描述',
},
'OAuth 2.0': 'OAuth 2.0' // 避免菜单名是 OAuth 2.0 时,一直 warn 报错
}

View File

@ -221,5 +221,6 @@ export enum DICT_TYPE {
OMS_ORDER_STATUS = 'oms_order_status',// 订单状态
OMS_PRODUCT_CARE_ITEM_TYPE = 'oms_product_care_item_type', //产品保养项目类型 1.成分说明 2.洗涤说明 3.使用说明 4.尺码
OMS_PRODUCT_CARE_PROCESS_TYPE = 'oms_product_care_process_type', //产品护理过程类型 1洗涤 2漂白 3烘干 4自然干燥 5熨烫 6专业纺织品护理工艺
OMS_CONTRACT_TYPE = 'oms_contract_type', //合约类型
}

View File

@ -175,6 +175,7 @@ import startPreview from "./components/preview.vue"
import {dateUtil} from "@/utils/dateUtil";
import {dateFormatter, formatDate} from '@/utils/formatTime'
import ProductInfoListDialog from "@/components/Dialog/src/ProductInfoListDialog/index.vue";
import {ProductInfoApi} from "@/api/oms/productinfo";
/** 生产制单 表单 */
@ -306,6 +307,7 @@ const downpdf = async () => {
if (id) {
formData.value = await ProduceOrderApi.getProduceOrder(id)
}
//
formData.value.contractDateStr = formatDate(formData.value.contractDate,'YYYY-MM-DD')
formData.value.reportDateStr = formatDate(formData.value.reportDate,'YYYY-MM-DD')
@ -315,6 +317,17 @@ const downpdf = async () => {
formData.value.deliverydateStr = formatDate(formData.value.deliverydate,'YYYY-MM-DD')
//formData.value.saleContractNo = formData.value.orderNo
if(formData.value.productId){
const material = await ProductInfoApi.getProductInfo(formData.value.productId)
formData.value.productCode = material.code
formData.value.productName = material.name
formData.value.details = material.productionInfo
}else {
formData.value.productCode = ''
formData.value.productName = ''
formData.value.details = ''
}
let printData = JSON.stringify(formData.value)
printData = JSON.parse(printData)
let hiprintTemplate = new hiprint.PrintTemplate({template: template1});
@ -345,6 +358,19 @@ const preview = async () => {
formData.value.deliverydateStr = formatDate(formData.value.deliverydate,'YYYY-MM-DD')
//formData.value.saleContractNo = formData.value.orderNo
if(formData.value.productId){
const material = await ProductInfoApi.getProductInfo(formData.value.productId)
formData.value.productCode = material.code
formData.value.productName = material.name
formData.value.details = material.productionInfo
}else {
formData.value.productCode = ''
formData.value.productName = ''
formData.value.details = ''
}
let printData = JSON.stringify(formData.value)
printData = JSON.parse(printData)
let hiprintTemplate = new hiprint.PrintTemplate({template: template1});

View File

@ -408,14 +408,14 @@ export default {
{
"options": {
"left": 474,
"top": 177,
"top": 187.5,
"height": 9.75,
"width": 120,
"title": "数量",
"right": 574.5,
"bottom": 131.25,
"vCenter": 514.5,
"hCenter": 126.375,
"right": 593.9926071166992,
"bottom": 186.7401351928711,
"vCenter": 533.9926071166992,
"hCenter": 181.8651351928711,
"field": "deliveryQty",
"coordinateSync": false,
"widthHeightSync": false,

View File

@ -21,16 +21,48 @@
@click="remark">备注</el-button>
<!-- 订单信息 -->
<el-descriptions title="订单信息">
<el-descriptions-item label="订单号: ">{{ formData.billno }}</el-descriptions-item>
<el-descriptions-item label="业务日期: ">{{ formatDate(formData.bizdate,'YYYY-MM-DD') }}</el-descriptions-item>
<el-descriptions-item label="确认日期: ">{{ formatDate(formData.confirmdate,'YYYY-MM-DD') }}</el-descriptions-item>
<el-descriptions-item label="计划日期: ">{{ formatDate(formData.plansenddate,'YYYY-MM-DD') }}</el-descriptions-item>
<el-descriptions-item label="订单号: " width="1000px">{{ formData.billno }}</el-descriptions-item>
<el-descriptions-item label="合约类型: " width="1000px" v-if="formData.billStatus == 'B'">
<el-select
v-model="formData.contractType"
placeholder="请选择合约类型"
clearable
class="!w-300px"
>
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.OMS_CONTRACT_TYPE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-descriptions-item>
<el-descriptions-item label="合约类型: " width="1000px" v-else>{{ formData.contractType }}</el-descriptions-item>
<el-descriptions-item label="业务日期: " width="500px">{{ formatDate(formData.bizdate,'YYYY-MM-DD') }}</el-descriptions-item>
<el-descriptions-item label="确认日期: " >{{ formatDate(formData.confirmdate,'YYYY-MM-DD') }}</el-descriptions-item>
<el-descriptions-item label="计划日期: " >{{ formatDate(formData.plansenddate,'YYYY-MM-DD') }}</el-descriptions-item>
<el-descriptions-item label="手机: ">{{ formData.phone }}</el-descriptions-item>
<el-descriptions-item label="传真: ">{{ formData.fax }}</el-descriptions-item>
<el-descriptions-item label="邮箱: ">{{ formData.emails }}</el-descriptions-item>
<el-descriptions-item label="客户编号: ">{{ formData?.customer?.number }}</el-descriptions-item>
<el-descriptions-item label="客户名称: ">{{ formData?.customer?.name }}</el-descriptions-item>
<el-descriptions-item label="客户公司: ">{{ formData?.customer?.company }}</el-descriptions-item>
<el-descriptions-item label="结算币种: " v-if="formData.billStatus == 'B'">
<el-select
v-model="formData.currencyType"
placeholder="请选择结算币种"
clearable
class="!w-300px"
>
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.CURRENCY_TYPE)"
:key="dict.value"
:label="dict.label+'('+dict.value+')'"
:value="dict.value"
/>
</el-select>
</el-descriptions-item>
<el-descriptions-item label="结算币种: " v-else >{{ formData.currencyType }}</el-descriptions-item>
<el-descriptions-item label="订单备注: ">{{ formData.remark }}</el-descriptions-item>
</el-descriptions>
@ -149,19 +181,19 @@
<!-- 订单信息 -->
<el-descriptions title="发票信息">
<el-descriptions-item label="发票抬头: ">{{ formData.invoiceCode }}</el-descriptions-item>
<el-descriptions-item label="发票名称: ">{{ formData.invoiceName }}</el-descriptions-item>
<el-descriptions-item label="货币: ">{{ formData.currency }}</el-descriptions-item>
<el-descriptions-item label="发票备注: ">{{ formData.invoiceRemarks }}</el-descriptions-item>
<el-descriptions-item label="发票抬头: " width="1000px">{{ formData.invoiceCode }}</el-descriptions-item>
<el-descriptions-item label="发票名称: " width="1000px">{{ formData.invoiceName }}</el-descriptions-item>
<el-descriptions-item label="发票地址: " width="500px">{{ formData.address }}</el-descriptions-item>
<el-descriptions-item label="发票备注: " width="500px">{{ formData.invoiceRemarks }}</el-descriptions-item>
</el-descriptions>
<!-- 订单信息 -->
<el-descriptions title="制单信息">
<el-descriptions-item label="创建时间: ">{{ formatDate(formData.createTime) }}</el-descriptions-item>
<el-descriptions-item label="修改人: ">{{ formData.updaterName }}</el-descriptions-item>
<el-descriptions-item label="修改时间: ">{{ formatDate(formData.updateTime) }}</el-descriptions-item>
<el-descriptions-item label="创建时间: " width="1000px">{{ formatDate(formData.createTime) }}</el-descriptions-item>
<el-descriptions-item label="修改人: " width="1000px">{{ formData.updaterName }}</el-descriptions-item>
<el-descriptions-item label="修改时间: " width="500px">{{ formatDate(formData.updateTime) }}</el-descriptions-item>
<el-descriptions-item label="审核人: ">{{ formData.auditorName }}</el-descriptions-item>
<el-descriptions-item label="审核时间: ">{{ formatDate(formData.auditorTime) }}</el-descriptions-item>
</el-descriptions>
@ -172,8 +204,8 @@
<OrderUpdateAddressForm ref="updateAddressFormRef" @success="getDetail" />
</template>
<script lang="ts" setup>
import { getIntDictOptions, getStrDictOptions, DICT_TYPE } from '@/utils/dict'
import { fenToYuan } from '@/utils'
import { DICT_TYPE, getDictLabel, getDictObj } from '@/utils/dict'
import { formatDate } from '@/utils/formatTime'
import OrderUpdateRemarkForm from '@/views/oms/saleorder/form/OrderUpdateRemarkForm.vue'
import OrderUpdateAddressForm from '@/views/oms/saleorder/form/OrderUpdateAddressForm.vue'
@ -187,16 +219,22 @@ const message = useMessage() // 消息弹窗
//
const formData = ref<SaleOrderVO>({
logs: []
})
const itemFormRules = reactive({
contractType: [{ required: true, message: '合约类型不能为空', trigger: 'blur' }],
})
const itemFormEntrysRef = ref() // Ref
const itemFormEntrysRules = reactive({
price: [{ required: true, message: '单价不能为空', trigger: 'blur' }],
})
//
const formData = ref<SaleOrderVO>({
logs: []
})
/** 各种操作 */
const updateRemarkForm = ref() // Ref
@ -214,16 +252,26 @@ const changeRow = async (row,key:string) => {
let price = row.price
let qty = row.qty
let discount = row.discount
row.amount = (price*qty) * (1-(discount/100))
let amount = (price*qty) * (1-(discount/100))
row.amount = amount.toFixed(2);
//100*(1-(2/100))
}
}
const handleSave = async () => {
try {
if(!formData.value.contractType){
message.alertError("合约类型不能为空")
return
}
if(!formData.value.currencyType){
message.alertError("结算币种不能为空")
return
}
//
await itemFormEntrysRef.value.validate()
//
await SaleOrderApi.updateOrderEntrys(formData.value)
await SaleOrderApi.updateSaleOrder(formData.value)
//await SaleOrderApi.updateOrderEntrys(formData.value)
message.success('保存成功')
//
await getDetail()
@ -233,6 +281,14 @@ const handleSave = async () => {
/** 审核 */
const handleAudit = async () => {
try {
if(!formData.value.contractType){
message.alertError("合约类型不能为空")
return
}
if(!formData.value.currencyType){
message.alertError("结算币种不能为空")
return
}
//
await itemFormEntrysRef.value.validate()
//

View File

@ -3,11 +3,11 @@ import { isString } from '@/utils/is'
import { useAppStoreWithOut } from '@/store/modules/app'
const appStore = useAppStoreWithOut()
const { t } = useI18n()
export const useTitle = (newTitle?: string) => {
const { t } = useI18n()
const title = ref(
newTitle ? `${appStore.getTitle} - ${t(newTitle as string)}` : appStore.getTitle
newTitle ? t('omsSystem.title') + ` - ${t(newTitle as string)}` : t('omsSystem.title')
)
watch(

View File

@ -8,7 +8,7 @@ defineOptions({ name: 'Footer' })
const { getPrefixCls } = useDesign()
const prefixCls = getPrefixCls('footer')
const { t } = useI18n()
const appStore = useAppStore()
const title = computed(() => appStore.getTitle)
@ -19,6 +19,6 @@ const title = computed(() => appStore.getTitle)
:class="prefixCls"
class="h-[var(--app-footer-height)] bg-[var(--app-content-bg-color)] text-center leading-[var(--app-footer-height)] text-[var(--el-text-color-placeholder)] dark:bg-[var(--el-bg-color)]"
>
<span class="text-14px">Copyright ©2022-{{ title }}</span>
<span class="text-14px">Copyright ©2022-{{ t('omsSystem.title') }}</span>
</div>
</template>

View File

@ -207,6 +207,7 @@ export default {
toDo: 'To do',
introduction: 'A serious introduction',
shortcutOperation: 'Quick entry',
operationData: 'Operation Data',
operation: 'Operation',
index: 'Index',
personal: 'Personal',
@ -460,6 +461,86 @@ export default {
btn_zoom_out: 'Zoom out',
preview: 'Preivew'
},
order:{
ordermanage:'Order Manage',
myorder:'My Order',
createorder:'Create Order'
},
orderstatus:{
rejectedOrder:'Rejected Order',
waitAuditOrder:'Wait Audit Order',
waitArrangeOrder:'Wait Arrange Order',
},
omsSystem: {
title:'Silver Pringting OMS'
},
billform:{
pleaseenter:'pleaseenter ',
pleaseselect:'pleaseselect ',
startdate:'startdate',
enddate:'enddate',
},
billlist:{
search:'Search',
reset:'Reset',
cancel:'Cancel',
submit:'Submit',
export:'Export',
all:'All',
waitAudit:'Wait Audit',
waitArrange:'Wait Arrange',
planned:'Planned',
edit:'edit',
details:'details',
operate:'operate',
},
saleorder:{
title:{
details:'OrderDetails',
remarks:'remarks',
orderinfo:'OrderInfo',
orderstatus:'OrderStatus',
productinfo:'ProductInfo',
invoiceinfo:'InvoiceInfo',
billinfo:'BillInfo',
},
billno:'orderNo',
customer:'customer',
salesperson:'salesPerson',
followUpPerson:'followUpPerson',
bizdate:'bizdate',
confirmdate:'confirmdate',
plandate:'plandate',
orderstatus:'orderstatus',
phone:'phone',
remark:'remark',
contractType:'contractType',
emails:'emails',
fax:'fax',
customerCompany:'customerCompany',
customerNumber:'customerNumber',
customerName:'customerName',
currencyType:'currencyType',
invoiceCode:'invoiceCode',
invoiceName:'invoiceName',
invoiceAddress:'invoiceAddress',
invoiceRemarks:'invoiceRemarks',
createTime:'createTime',
updaterName:'updaterName',
updateTime:'updateTime',
auditorName:'auditorName',
auditorTime:'auditorTime',
entry:{
productNumber:'productNumber',
productName:'productName',
productSpec:'productSpec',
qty:'qty',
price:'price',
discount:'discount',
amount:'amount',
}
},
designInfo: {
"auditSubmitText": "Submit for Review",
"auditTips": "This draft is only for content verification and is not the final print file.",

View File

@ -208,6 +208,7 @@ export default {
toDo: '待办',
introduction: '一个正经的简介',
shortcutOperation: '快捷入口',
operationData: '运营数据',
operation: '操作',
index: '指数',
personal: '个人',
@ -454,6 +455,87 @@ export default {
btn_zoom_out: '缩小',
preview: '预览'
},
'OAuth 2.0': 'OAuth 2.0' // 避免菜单名是 OAuth 2.0 时,一直 warn 报错
,
order:{
ordermanage:'订单管理',
myorder:'我的订单',
createorder:'创建订单'
},
orderstatus:{
rejectedOrder:'已驳回订单',
waitAuditOrder:'待审核订单',
waitArrangeOrder:'待排产订单',
},
omsSystem: {
title:'嘉晋OMS下单系统'
},
billform:{
pleaseenter:'请输入',
pleaseselect:'请选择',
startdate:'开始日期',
enddate:'结束日期',
},
billlist:{
search:'搜索',
reset:'重置',
cancel:'作废',
submit:'提交',
export:'导出',
all:'全部',
waitAudit:'待审核',
waitArrange:'待排产',
planned:'已排产',
edit:'编辑',
details:'详情',
operate:'操作',
},
saleorder:{
title:{
details:'订单详情',
remarks:'备注',
orderinfo:'订单信息',
orderstatus:'订单状态',
productinfo:'产品信息',
invoiceinfo:'发票信息',
billinfo:'制单信息',
},
billno:'订单号',
customer:'客户',
salesperson:'销售员',
followUpPerson:'跟单员',
bizdate:'业务日期',
confirmdate:'确认日期',
plandate:'计划日期',
orderstatus:'订单状态',
phone:'手机',
remark:'备注',
contractType:'合约类型',
emails:'邮箱',
fax:'传真',
customerCompany:'客户公司',
customerNumber:'客户编号',
customerName:'客户名称',
currencyType:'结算币种',
invoiceCode:'发票抬头',
invoiceName:'发票名称',
invoiceAddress:'发票地址',
invoiceRemarks:'发票备注',
createTime:'创建时间',
updaterName:'修改人',
updateTime:'修改时间',
auditorName:'审核人',
auditorTime:'审核时间',
entry:{
productNumber:'产品编码',
productName:'产品名称',
productSpec:'产品规格',
qty:'数量',
price:'单价',
discount:'折扣',
amount:'金额',
}
},
designInfo: {
auditSubmitText: '批稿',
auditTips: '此稿件仅仅作为核对内容使用用,不作为最终印刷稿件;',
@ -586,5 +668,4 @@ export default {
colLabelRemark: '备注',
colLabelDetails: '详情描述',
},
'OAuth 2.0': 'OAuth 2.0' // 避免菜单名是 OAuth 2.0 时,一直 warn 报错
}

View File

@ -257,7 +257,7 @@ const remainingRouter: AppRouteRecordRaw[] = [
component: () => import('@/views/oms/saleorder/detail/index.vue'),
name: 'SaleOrderDetail',
meta: {
title: '订单详情',
title: t('saleorder.title.details'),
icon: 'ep:view',
activeMenu: '/oms/saleorder'
}

View File

@ -1,7 +1,7 @@
<template>
<el-card shadow="never">
<template #header>
<CardTitle title="运营数据" />
<CardTitle :title="t('workplace.operationData')" />
</template>
<div class="flex flex-row flex-wrap items-center gap-8 p-4">
<div
@ -27,14 +27,14 @@ import { CardTitle } from '@/components/Card'
/** 运营数据卡片 */
defineOptions({ name: 'OperationDataCard' })
const { t } = useI18n()
const router = useRouter() //
/** 数据 */
const data = reactive({
orderCountAA: { name: '已驳回订单', value: 0, routerName: 'SaleOrder' },
orderCountB: { name: '待审核订单', value: 0, routerName: 'SaleOrder' },
orderCountC: { name: '待排产订单', value: 0, routerName: 'SaleOrder' }
orderCountAA: { name: t('orderstatus.rejectedOrder'), value: 0, routerName: 'SaleOrder' },
orderCountB: { name: t('orderstatus.waitAuditOrder'), value: 0, routerName: 'SaleOrder' },
orderCountC: { name: t('orderstatus.waitArrangeOrder'), value: 0, routerName: 'SaleOrder' }
})
/** 查询订单数据 */

View File

@ -1,7 +1,7 @@
<template>
<el-card shadow="never">
<template #header>
<CardTitle title="快捷入口" />
<CardTitle :title="t('workplace.shortcutOperation')" />
</template>
<div class="flex flex-row flex-wrap gap-8 p-4">
<div
@ -16,7 +16,7 @@
>
<Icon :icon="menu.icon" class="text-7.5!" />
</div>
<span>{{ menu.name }}</span>
<span>{{ menu.name }} </span>
</div>
</div>
</el-card>
@ -26,14 +26,14 @@
import { CardTitle } from '@/components/Card'
defineOptions({ name: 'ShortcutCard' })
const { t } = useI18n()
const router = useRouter() //
/** 菜单列表 */
const menuList = [
{ name: '订单管理', icon: 'ep:list', bgColor: 'bg-yellow-500', routerName: 'SaleOrder' },
{ name: t('order.ordermanage'), icon: 'ep:list', bgColor: 'bg-yellow-500', routerName: 'SaleOrder' },
{
name: '创建订单',
name: t('order.createorder'),
icon: 'fa-solid:project-diagram',
bgColor: 'bg-green-600',
routerName: 'CreateOrder'

View File

@ -10,7 +10,8 @@
<!-- 左上角的 logo + 系统标题 -->
<div class="relative flex items-center text-white">
<img alt="" class="mr-10px h-48px w-48px" src="@/assets/imgs/logo.png" />
<span class="text-20px font-bold">{{ underlineToHump(appStore.getTitle) }}</span>
<!-- <span class="text-20px font-bold">{{ underlineToHump(appStore.getTitle) }}</span>-->
<span class="text-20px font-bold">{{ t('omsSystem.title') }}</span>
</div>
<!-- 左边的背景图 + 欢迎语 -->
<div class="h-[calc(100%-60px)] flex items-center justify-center">

View File

@ -13,25 +13,27 @@
<el-button
v-if="formData.billStatus == 'AA' || formData.billStatus == 'B' "
type="primary"
@click="remark">备注</el-button>
@click="remark">{{t('saleorder.title.remarks')}}</el-button>
<!-- 订单信息 -->
<el-descriptions title="订单信息">
<el-descriptions-item label="订单号: ">{{ formData.billno }}</el-descriptions-item>
<el-descriptions-item label="业务日期: ">{{ formatDate(formData.bizdate,'YYYY-MM-DD') }}</el-descriptions-item>
<el-descriptions-item label="确认日期: ">{{ formatDate(formData.confirmdate,'YYYY-MM-DD') }}</el-descriptions-item>
<el-descriptions-item label="计划日期: ">{{ formatDate(formData.plansenddate,'YYYY-MM-DD') }}</el-descriptions-item>
<el-descriptions-item label="手机: ">{{ formData.phone }}</el-descriptions-item>
<el-descriptions-item label="传真: ">{{ formData.fax }}</el-descriptions-item>
<el-descriptions-item label="邮箱: ">{{ formData.emails }}</el-descriptions-item>
<el-descriptions-item label="客户编号: ">{{ formData?.customer?.number }}</el-descriptions-item>
<el-descriptions-item label="客户名称: ">{{ formData?.customer?.name }}</el-descriptions-item>
<el-descriptions-item label="客户公司: ">{{ formData?.customer?.company }}</el-descriptions-item>
<el-descriptions-item label="订单备注: ">{{ formData.remark }}</el-descriptions-item>
<el-descriptions :title="t('saleorder.title.orderinfo')">
<el-descriptions-item :label="t('saleorder.billno')+':' " width="1000px">{{ formData.billno }}</el-descriptions-item>
<el-descriptions-item :label="t('saleorder.contractType')+':'" width="1000px">{{formData.contractType}}</el-descriptions-item>
<el-descriptions-item :label="t('saleorder.bizdate')+':'" width="500px">{{ formatDate(formData.bizdate,'YYYY-MM-DD') }}</el-descriptions-item>
<el-descriptions-item :label="t('saleorder.confirmdate')+':'">{{ formatDate(formData.confirmdate,'YYYY-MM-DD') }}</el-descriptions-item>
<el-descriptions-item :label="t('saleorder.plandate')+':'">{{ formatDate(formData.plansenddate,'YYYY-MM-DD') }}</el-descriptions-item>
<el-descriptions-item :label="t('saleorder.phone')+':'">{{ formData.phone }}</el-descriptions-item>
<el-descriptions-item :label="t('saleorder.fax')+':'">{{ formData.fax }}</el-descriptions-item>
<el-descriptions-item :label="t('saleorder.emails')+':'">{{ formData.emails }}</el-descriptions-item>
<el-descriptions-item :label="t('saleorder.customerNumber')+':'">{{ formData?.customer?.number }}</el-descriptions-item>
<el-descriptions-item :label="t('saleorder.customerName')+':'">{{ formData?.customer?.name }}</el-descriptions-item>
<el-descriptions-item :label="t('saleorder.customerCompany')+':'">{{ formData?.customer?.company }}</el-descriptions-item>
<el-descriptions-item :label="t('saleorder.currencyType')+':'">{{ formData.currencyType }}</el-descriptions-item>
<el-descriptions-item :label="t('saleorder.remark')+':'">{{ formData.remark }}</el-descriptions-item>
</el-descriptions>
<!-- 订单状态 -->
<el-descriptions :column="3" title="订单状态">
<el-descriptions-item label="订单状态: ">
<el-descriptions :column="3" :title="t('saleorder.title.orderstatus')">
<el-descriptions-item :label="t('saleorder.orderstatus')+':'">
<dict-tag :type="DICT_TYPE.OMS_BILL_STATUS" :value="formData.billStatus" />
</el-descriptions-item>
<!-- <el-descriptions-item label="订单状态: ">
@ -73,7 +75,7 @@
<!-- 商品信息 -->
<el-descriptions title="产品信息">
<el-descriptions :title="t('saleorder.title.productinfo')">
<el-descriptions-item labelClassName="no-colon">
<el-row :gutter="20">
<el-col :span="544">
@ -90,10 +92,10 @@
>
<el-table-column label="产品编码" prop="materialName" width="150"/>
<el-table-column label="产品名称" prop="materialName" width="150"/>
<el-table-column label="产品规格" prop="materialSpec" width="150" />
<el-table-column label="数量" prop="qty" width="150" />
<el-table-column :label="t('saleorder.entry.productNumber')" prop="materialName" width="150"/>
<el-table-column :label="t('saleorder.entry.productName')" prop="materialName" width="150"/>
<el-table-column :label="t('saleorder.entry.productSpec')" prop="materialSpec" width="150" />
<el-table-column :label="t('saleorder.entry.qty')" prop="qty" width="150" />
<!-- <el-table-column label="单价" width="250" v-if="formData.billStatus == 'B'">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.price`" :rules="itemFormEntrysRules.price" class="mb-0px!"
@ -111,7 +113,7 @@
<span v-else @click="editRow($index)">{{ row.price }}</span>
</template>
</el-table-column>-->
<el-table-column label="单价" prop="price" width="250" />
<el-table-column :label="t('saleorder.entry.price')" prop="price" width="250" />
<!-- <el-table-column label="折扣(%)" prop="discount" width="250" v-if="formData.billStatus == 'B'">
<template #default="{ row, $index }">
<el-input-number
@ -128,8 +130,8 @@
<span v-else @click="editRow($index)">{{ row.discount }}</span>
</template>
</el-table-column>-->
<el-table-column label="折扣(%)" prop="discount" width="250" />
<el-table-column label="金额" prop="amount" width="250" />
<el-table-column :label="t('saleorder.entry.discount')+'(%)'" prop="discount" width="250" />
<el-table-column :label="t('saleorder.entry.amount')" prop="amount" width="250" />
<!-- <el-table-column label="合计" prop="payPrice" width="150">
<template #default="{ row }">{{ fenToYuan(row.payPrice) }}</template>
</el-table-column>-->
@ -142,22 +144,22 @@
</el-descriptions>
<!-- 订单信息 -->
<el-descriptions title="发票信息">
<el-descriptions-item label="发票抬头: ">{{ formData.invoiceCode }}</el-descriptions-item>
<el-descriptions-item label="发票名称: ">{{ formData.invoiceName }}</el-descriptions-item>
<el-descriptions-item label="货币: ">{{ formData.currency }}</el-descriptions-item>
<el-descriptions-item label="发票备注: ">{{ formData.invoiceRemarks }}</el-descriptions-item>
<el-descriptions :title="t('saleorder.title.productinfo')">
<el-descriptions-item :label="t('saleorder.invoiceCode')+': '" width="1000px">{{ formData.invoiceCode }}</el-descriptions-item>
<el-descriptions-item :label="t('saleorder.invoiceName')+': '" width="1000px">{{ formData.invoiceName }}</el-descriptions-item>
<el-descriptions-item :label="t('saleorder.invoiceAddress')+': '" width="500px">{{ formData.address }}</el-descriptions-item>
<el-descriptions-item :label="t('saleorder.invoiceRemarks')+': '" width="500px">{{ formData.invoiceRemarks }}</el-descriptions-item>
</el-descriptions>
<!-- 订单信息 -->
<el-descriptions title="制单信息">
<el-descriptions-item label="创建时间: ">{{ formatDate(formData.createTime) }}</el-descriptions-item>
<el-descriptions-item label="修改人: ">{{ formData.updaterName }}</el-descriptions-item>
<el-descriptions-item label="修改时间: ">{{ formatDate(formData.updateTime) }}</el-descriptions-item>
<el-descriptions-item label="审核人: ">{{ formData.auditorName }}</el-descriptions-item>
<el-descriptions-item label="审核时间: ">{{ formatDate(formData.auditorTime) }}</el-descriptions-item>
<el-descriptions :title="t('saleorder.title.billinfo')">
<el-descriptions-item :label="t('saleorder.createTime')+': '" width="1000px">{{ formatDate(formData.createTime) }}</el-descriptions-item>
<el-descriptions-item :label="t('saleorder.updaterName')+': '" width="1000px">{{ formData.updaterName }}</el-descriptions-item>
<el-descriptions-item :label="t('saleorder.updateTime')+': '" width="500px">{{ formatDate(formData.updateTime) }}</el-descriptions-item>
<el-descriptions-item :label="t('saleorder.auditorName')+': '">{{ formData.auditorName }}</el-descriptions-item>
<el-descriptions-item :label="t('saleorder.auditorTime')+': '">{{ formatDate(formData.auditorTime) }}</el-descriptions-item>
</el-descriptions>
</ContentWrap>
@ -179,7 +181,7 @@ defineOptions({ name: 'TradeOrderDetail' })
const message = useMessage() //
const { t } = useI18n() //
const itemFormEntrysRef = ref() // Ref