feat(customer): 新增客户代码和税率字段
- 在CustomerDO中新增custCode和taxRate字段 - 在CustomerRespVO和CustomerSaveReqVO中新增custCode字段 - 在CustomerForm.vue中新增客户代码表单项 - 在index.vue中新增客户代码表格列 - 将客户简称验证注解从@NotEmpty改为@NotBlank - 更新API接口定义以包含custCode字段 feat(projectorder): 新增辅助项字段 - 在ProjectOrderDO中新增auItem字段 - 在ProjectOrderRespVO和ProjectOrderSaveReqVO中新增auItem字段 - 在项目订单详情页面中新增辅助项表单项 - 添加辅助项字段验证规则 feat(storage): 新增供应商信息关联功能 - 在StorageDO中新增supplierId、brief、name字段 - 在StorageRespVO和StorageSaveReqVO中新增供应商相关字段 - 在StorageForm.vue中新增供应商下拉选择组件 - 实现采购订单选择时自动带出供应商信息功能 - 集成供应商列表查询和显示功能 - 在入库单保存时同步供应商信息 feat(supplier): 新增税率字段 - 在SupplierDO中新增taxRate字段 - 在SupplierRespVO和SupplierSaveReqVO中新增taxRate字段 - 在SupplierForm.vue中新增税率输入框并添加百分号后缀
This commit is contained in:
parent
117d9f50a5
commit
41428661ea
@ -23,6 +23,10 @@ public class CustomerRespVO {
|
||||
@ExcelProperty("客户编码")
|
||||
private String code;
|
||||
|
||||
@Schema(description = "客户代码", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("客户代码")
|
||||
private String custCode;
|
||||
|
||||
@Schema(description = "简码", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("简码")
|
||||
private String brief;
|
||||
@ -155,5 +159,4 @@ public class CustomerRespVO {
|
||||
@Schema(description = "公司税号")
|
||||
@ExcelProperty("公司税号")
|
||||
private String taxNo;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -21,9 +21,13 @@ public class CustomerSaveReqVO {
|
||||
private String brief;
|
||||
|
||||
@Schema(description = "客户简称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
|
||||
@NotEmpty(message = "客户简称不能为空")
|
||||
@NotBlank(message = "客户简称不能为空")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "客户代码", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotBlank(message = "客户代码不能为空")
|
||||
private String custCode;
|
||||
|
||||
@Schema(description = "客户全称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
|
||||
@NotEmpty(message = "客户全称不能为空")
|
||||
private String fullName;
|
||||
@ -107,4 +111,7 @@ public class CustomerSaveReqVO {
|
||||
@Schema(description = "公司税号")
|
||||
private String taxNo;
|
||||
|
||||
@Schema(description = "税率")
|
||||
private Integer taxRate;
|
||||
|
||||
}
|
||||
|
||||
@ -254,4 +254,8 @@ public class ProjectOrderRespVO {
|
||||
@ExcelProperty("六次付款 保留四位小数")
|
||||
private LocalDateTime sixFuKuanTime;
|
||||
|
||||
@Schema(description = "辅助项")
|
||||
@ExcelProperty("辅助项")
|
||||
private String auItem;
|
||||
|
||||
}
|
||||
|
||||
@ -197,4 +197,7 @@ public class ProjectOrderSaveReqVO {
|
||||
@Schema(description = "六次付款时间")
|
||||
private LocalDateTime sixFuKuanTime;
|
||||
|
||||
@Schema(description = "辅助项")
|
||||
private String auItem;
|
||||
|
||||
}
|
||||
|
||||
@ -114,4 +114,10 @@ public class StorageRespVO {
|
||||
@ExcelProperty("即入即出标志 1 是:0不是")
|
||||
private Boolean inOutFlag;
|
||||
|
||||
|
||||
// 供应商信息
|
||||
private Long supplierId;
|
||||
private String brief;
|
||||
private String name;
|
||||
|
||||
}
|
||||
|
||||
@ -87,4 +87,6 @@ public class StorageSaveReqVO {
|
||||
|
||||
private Boolean inOutFlag;
|
||||
|
||||
private Long supplierId;
|
||||
|
||||
}
|
||||
|
||||
@ -158,4 +158,8 @@ public class SupplierRespVO {
|
||||
@ExcelProperty("公司税号")
|
||||
private String taxNo;
|
||||
|
||||
}
|
||||
@Schema(description = "税率")
|
||||
@ExcelProperty("税率")
|
||||
private String taxRate;
|
||||
|
||||
}
|
||||
|
||||
@ -106,4 +106,7 @@ public class SupplierSaveReqVO {
|
||||
@Schema(description = "公司税号")
|
||||
private String taxNo;
|
||||
|
||||
@Schema(description = "税率")
|
||||
private Integer taxRate;
|
||||
|
||||
}
|
||||
|
||||
@ -31,6 +31,8 @@ public class CustomerDO extends BaseDO {
|
||||
* 客户编码
|
||||
*/
|
||||
private String code;
|
||||
|
||||
private String custCode;
|
||||
/**
|
||||
* 简码
|
||||
*/
|
||||
@ -153,4 +155,6 @@ public class CustomerDO extends BaseDO {
|
||||
*/
|
||||
private String taxNo;
|
||||
|
||||
private Integer taxRate;
|
||||
|
||||
}
|
||||
|
||||
@ -316,6 +316,8 @@ public class ProjectOrderDO extends BaseDO {
|
||||
@TableField(exist = false)
|
||||
private Set<String> alterFieldNames;
|
||||
|
||||
private String auItem;
|
||||
|
||||
public boolean canSave(){
|
||||
return this.orderStatus.intValue() <= ProjectOrderStatusEnum.SAVE.getCode();
|
||||
}
|
||||
|
||||
@ -148,4 +148,9 @@ public class StorageDO extends BaseDO {
|
||||
private Long headerId;
|
||||
@TableField(exist = false)
|
||||
private String type;
|
||||
|
||||
// 供应商信息
|
||||
private Long supplierId;
|
||||
private String brief;
|
||||
private String name;
|
||||
}
|
||||
|
||||
@ -153,4 +153,6 @@ public class SupplierDO extends BaseDO {
|
||||
*/
|
||||
private String taxNo;
|
||||
|
||||
private Integer taxRate;
|
||||
|
||||
}
|
||||
|
||||
@ -14,6 +14,7 @@ import com.chanko.yunxi.mes.module.heli.controller.admin.storageinventory.Storag
|
||||
import com.chanko.yunxi.mes.module.heli.controller.admin.storagemat.vo.StorageMatSaveReqVO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.bdgzsomthing.bdgzsomthingDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.composition.CompositionDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.deliverorder.DeliverOrderDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.material.MaterialDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.outsourcestock.OutsourceStockDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.outsourcestockboom.OutsourceStockBoomDO;
|
||||
@ -26,8 +27,10 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.storageinventory.StorageI
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelog.StorageLogDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelogNow.StorageLogNowDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagemat.StorageMatDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.supplier.SupplierDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.dataobject.warehouse.WarehouseDO;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.composition.CompositionMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.deliverorder.DeliverOrderMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.master.MasterMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.material.MaterialMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.outsourcestock.OutsourceStockMapper;
|
||||
@ -40,6 +43,7 @@ import com.chanko.yunxi.mes.module.heli.dal.mysql.storageinventory.StorageInvent
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogNowMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagemat.StorageMatMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.supplier.SupplierMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.dal.mysql.warehouse.WarehouseMapper;
|
||||
import com.chanko.yunxi.mes.module.heli.enums.BusinesTypeEnum;
|
||||
import com.chanko.yunxi.mes.module.heli.enums.CodeEnum;
|
||||
@ -135,8 +139,11 @@ public class StorageServiceImpl implements StorageService {
|
||||
@Resource
|
||||
private PnMapper pnMapper;
|
||||
|
||||
@Resource
|
||||
private StorageLogService storageLogService;
|
||||
@Resource
|
||||
private SupplierMapper supplierMapper;
|
||||
|
||||
@Resource
|
||||
private StorageLogService storageLogService;
|
||||
/*
|
||||
*
|
||||
* 委外验收取消提交,作废入库单
|
||||
@ -442,6 +449,16 @@ private StorageLogService storageLogService;
|
||||
}
|
||||
// 更新
|
||||
StorageDO updateObj = BeanUtils.toBean(updateReqVO, StorageDO.class);
|
||||
|
||||
//根据供应商ID查询供应商信息
|
||||
if (updateReqVO.getSupplierId() != null) {
|
||||
SupplierDO supplierDO = supplierMapper.selectById(updateReqVO.getSupplierId());
|
||||
if (supplierDO != null) {
|
||||
updateObj.setName(supplierDO.getName());
|
||||
updateObj.setSupplierId(supplierDO.getId());
|
||||
updateObj.setBrief(supplierDO.getBrief());
|
||||
}
|
||||
}
|
||||
storageMapper.updateById(updateObj);
|
||||
}
|
||||
@Override
|
||||
|
||||
@ -33,6 +33,7 @@ export interface CustomerVO {
|
||||
bankNo: string
|
||||
bankAddress: string
|
||||
taxNo: string
|
||||
custCode: string
|
||||
}
|
||||
|
||||
// 查询客户新表分页
|
||||
|
||||
@ -19,6 +19,8 @@ export interface StorageVO {
|
||||
pickmode: string
|
||||
pickmcar: string
|
||||
projectSubName: string
|
||||
supplierId: number
|
||||
name: string
|
||||
}
|
||||
|
||||
// 查询入/出库分页
|
||||
|
||||
@ -40,6 +40,13 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item prop="custCode" label="客户代码">
|
||||
<el-input v-model="formData.custCode" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注" prop="description">
|
||||
@ -385,6 +392,7 @@ const formData = ref({
|
||||
bankNo: undefined,
|
||||
bankAddress: undefined,
|
||||
taxNo: undefined,
|
||||
custCode: undefined,
|
||||
attachments: [],
|
||||
operateLogs: [],
|
||||
alterFieldNames: [],
|
||||
@ -667,7 +675,8 @@ const resetForm = () => {
|
||||
attachments: [],
|
||||
operateLogs: [],
|
||||
alterFieldNames: [],
|
||||
taxNo: undefined
|
||||
taxNo: undefined,
|
||||
custCode: undefined
|
||||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
|
||||
@ -85,6 +85,7 @@
|
||||
<dict-tag :type="DICT_TYPE.HELI_CUSTOMER_LEVEL" :value="scope.row.level" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="客户代码" align="center" min-width="120" prop="custCode" />
|
||||
<el-table-column label="业务员" align="center" min-width="120" prop="userId" >
|
||||
<template #default="scope">
|
||||
{{ userList.find((user) => user.id === scope.row.userId)?.nickname }}
|
||||
|
||||
@ -241,15 +241,23 @@ class="!w-250px" v-model="formData.fiveFuKuanTime"
|
||||
|
||||
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="可引用的原有技术" prop="referenceTechnology">
|
||||
<el-input
|
||||
class="!w-703px" :disabled="detailDisabled || priceDisabled || formData.deliveryStatus == 3"
|
||||
class="!w-250px" :disabled="detailDisabled || priceDisabled || formData.deliveryStatus == 3"
|
||||
v-model="formData.referenceTechnology" placeholder="请输入可引用的原有技术"
|
||||
:class="{ 'alter-class': fieldHasAlter('referenceTechnology') }" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="辅助项" prop="auItem">
|
||||
<el-input
|
||||
class="!w-250px" :disabled="detailDisabled || priceDisabled || formData.deliveryStatus == 3"
|
||||
v-model="formData.auItem" placeholder="请输入辅助项"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
</el-col>
|
||||
|
||||
<el-col :span="6">
|
||||
@ -965,7 +973,8 @@ type="textarea" v-model="formData.activeOpinion" placeholder="请输入打回原
|
||||
sixFuKuanTime: undefined,
|
||||
|
||||
sumMoney:undefined,
|
||||
sumBl:undefined
|
||||
sumBl:undefined,
|
||||
auItem: undefined
|
||||
})
|
||||
const formRules = reactive({
|
||||
businessDeptId: [{
|
||||
@ -998,6 +1007,16 @@ type="textarea" v-model="formData.activeOpinion" placeholder="请输入打回原
|
||||
message: '是否有价格不能为空',
|
||||
trigger: 'blur'
|
||||
}],
|
||||
auItem: [{
|
||||
validator: (rule, value, callback) => {
|
||||
if (value === null || value === undefined) {
|
||||
callback(new Error('辅助项必须跟新中大一致,请确认!'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
},
|
||||
trigger: 'blur'
|
||||
}],
|
||||
projectStartTime: [{
|
||||
required: true,
|
||||
message: '项目开始日期不能为空',
|
||||
|
||||
@ -92,12 +92,31 @@ v-model="formData.whId" placeholder="下拉选择" clearable class="!w-400px" @c
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="8">
|
||||
<el-col :span="4">
|
||||
<el-form-item label="即入即出" prop="inOutFlag">
|
||||
<el-switch v-model="formData.inOutFlag" :disabled="ctrView || ctrSave" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="16">
|
||||
<el-col :span="4">
|
||||
<el-form-item label="供应商" prop="supplierId">
|
||||
<el-select
|
||||
v-model="formData.supplierId"
|
||||
placeholder="请选择供应商"
|
||||
clearable
|
||||
filterable
|
||||
style="width: 100%"
|
||||
:disabled="ctrView || ctrSave"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in supplierList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="15">
|
||||
<el-form-item label="备注" prop="description">
|
||||
<el-input
|
||||
type="textarea" v-model="formData.description" show-word-limit maxlength="200"
|
||||
@ -475,11 +494,13 @@ import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import * as StorageApi from '@/api/heli/storage'
|
||||
import * as StorageCheckApi from '@/api/heli/storagecheck'
|
||||
import * as StorageMatApi from '@/api/heli/storagemat'
|
||||
import * as SupplierApi from '@/api/heli/supplier'
|
||||
import { getAccessToken, getTenantId } from '@/utils/auth'
|
||||
import { useUserStore } from '@/store/modules/user'
|
||||
import * as MaterialApi from '@/api/heli/material'
|
||||
import * as WarehouseApi from '@/api/heli/warehouse'
|
||||
import * as PurchaseordernodetailApi from '@/api/heli/purchaseordernodetail'
|
||||
import * as PurchaseordernoApi from '@/api/heli/purchaseorderno'
|
||||
import * as RgApi from '@/api/heli/rg'
|
||||
import * as PnApi from '@/api/heli/pn'
|
||||
import { deleteFile, downloadFile, getFilePage } from '@/api/infra/file'
|
||||
@ -524,6 +545,7 @@ const formData = ref({
|
||||
attachments: [],
|
||||
headerId:undefined,
|
||||
inOutFlag: false,
|
||||
supplierId: undefined,
|
||||
})
|
||||
const formRules = reactive({
|
||||
// name: [{ required: true, message: '模具类型不能为空', trigger: 'blur' }],
|
||||
@ -723,17 +745,27 @@ function limitTo20Chars(input) {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
const handleSelectedProjectPurchaseorder = (arr) => {
|
||||
const handleSelectedProjectPurchaseorder = async (arr) => {
|
||||
if (arr) {
|
||||
formData.value.headerNo = arr.purchaseNo
|
||||
formData.value.headerId=arr.id
|
||||
formData.value.headerId = arr.id
|
||||
|
||||
// 获取采购订单详情,自动带出供应商信息
|
||||
if (arr.id) {
|
||||
try {
|
||||
const purchaseOrder = await PurchaseordernoApi.getPurchaseOrderNo(arr.id)
|
||||
if (purchaseOrder && purchaseOrder.supplierId) {
|
||||
formData.value.supplierId = purchaseOrder.supplierId
|
||||
// 从供应商列表中获取供应商名称
|
||||
const supplier = supplierList.value.find(s => s.id === purchaseOrder.supplierId)
|
||||
if (supplier) {
|
||||
formData.value.name = supplier.name
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取采购订单详情失败:', error)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
const openProjectForm = (scope) => {
|
||||
@ -1194,6 +1226,8 @@ const rgList = ref([])
|
||||
const pnList = ref([])
|
||||
//采购订单数组
|
||||
const noList = ref([])
|
||||
//供应商列表
|
||||
const supplierList = ref([])
|
||||
const handleWh = async (wid) => {
|
||||
//-------------------库区全数据
|
||||
// 获得库区列表
|
||||
@ -1309,9 +1343,12 @@ onMounted(async () => {
|
||||
// 页面标题展示
|
||||
dialogTitle.value = query.type === 'review' ? '查看' : t('action.' + query.type)
|
||||
|
||||
//- 获取仓库全数据
|
||||
// 获取仓库全数据
|
||||
whList.value = await WarehouseApi.getWarehouseSimpList()
|
||||
|
||||
// 获取供应商列表
|
||||
supplierList.value = await SupplierApi.getSimpList()
|
||||
|
||||
if (whList.value.length==1){
|
||||
formData.value.whId = whList.value[0].id;
|
||||
const dataRgList = await RgApi.getSimpList()
|
||||
|
||||
@ -85,7 +85,15 @@
|
||||
</el-select> -->
|
||||
<UserSelect v-model="formData.userId" @update:newValue="handleSelectedUser" class="!w-400px"/>
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="税率" prop="taxRate">
|
||||
<el-input v-model="formData.taxRate" placeholder="请输入税率" class="!w-400px" type="number" >
|
||||
<template #append>%</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-col>
|
||||
@ -319,6 +327,7 @@ const formData = ref({
|
||||
industry: undefined,
|
||||
level: undefined,
|
||||
category: undefined,
|
||||
taxRate: undefined,
|
||||
userId: undefined,
|
||||
description: undefined,
|
||||
contact1Name: undefined,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user