|
|
|
|
@ -221,8 +221,11 @@
|
|
|
|
|
|
|
|
|
|
<!-- 合同物料表格 -->
|
|
|
|
|
<div style="margin-bottom: 16px">
|
|
|
|
|
<el-button type="primary" icon="Plus" v-if="routeParams.type !== 'view' && routeParams.type != 'approval'" @click="handleAddMaterial"
|
|
|
|
|
>新增物料
|
|
|
|
|
<el-button type="primary" icon="Plus" v-if="!isFormDisabled" @click="handleAddMaterial"
|
|
|
|
|
>新增合同物料
|
|
|
|
|
</el-button>
|
|
|
|
|
<el-button type="success" icon="Plus" v-if="!isFormDisabled" @click="handleAddMaterialInfo" v-hasPermi="['oa/base:materialInfo:contractAdd']"
|
|
|
|
|
>添加SAP物料
|
|
|
|
|
</el-button>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
@ -259,7 +262,7 @@
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="备注" align="center" prop="remark" min-width="100" />
|
|
|
|
|
<el-table-column label="操作" align="center" fixed="right" width="150" v-if="routeParams.type !== 'view' && routeParams.type != 'approval'">
|
|
|
|
|
<el-table-column label="操作" align="center" fixed="right" width="150" v-if="!isFormDisabled">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<el-button link type="primary" icon="Edit" @click="handleEditMaterial(scope.row)">编辑</el-button>
|
|
|
|
|
<el-button link type="danger" icon="Delete" @click="handleDeleteMaterial(scope.row)">删除</el-button>
|
|
|
|
|
@ -404,6 +407,52 @@
|
|
|
|
|
</el-dialog>
|
|
|
|
|
<!-- 销售物料选择 -->
|
|
|
|
|
<SaleMaterialSelect ref="saleMaterialSelectRef" :multiple="false" @confirm-call-back="saleMaterialSelectCallBack"></SaleMaterialSelect>
|
|
|
|
|
|
|
|
|
|
<!-- 添加SAP物料对话框 -->
|
|
|
|
|
<el-dialog title="添加SAP物料" v-model="materialInfoDialog.visible" width="800px" append-to-body>
|
|
|
|
|
<el-form ref="materialInfoFormRef" :model="materialInfoForm" :rules="materialInfoRules" label-width="120px">
|
|
|
|
|
<el-row :gutter="20">
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="SAP物料名称" prop="materialName">
|
|
|
|
|
<el-input v-model="materialInfoForm.materialName" placeholder="请输入SAP物料名称" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="物料品牌" prop="materialBrand">
|
|
|
|
|
<el-input v-model="materialInfoForm.materialBrand" placeholder="请输入物料品牌" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="物料型号" prop="materialModel">
|
|
|
|
|
<el-input v-model="materialInfoForm.materialModel" placeholder="请输入物料型号" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="物料单位" prop="unitId">
|
|
|
|
|
<el-select v-model="materialInfoForm.unitId" placeholder="请选择物料单位" style="width: 100%">
|
|
|
|
|
<el-option v-for="item in unitInfoList" :key="item.unitId" :label="item.unitName" :value="item.unitId" />
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<el-form-item label="物料参数" prop="materialParameter">
|
|
|
|
|
<el-input v-model="materialInfoForm.materialParameter" placeholder="请输入物料参数" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="24">
|
|
|
|
|
<el-form-item label="备注" prop="remark">
|
|
|
|
|
<el-input v-model="materialInfoForm.remark" type="textarea" placeholder="请输入备注" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
</el-form>
|
|
|
|
|
<template #footer>
|
|
|
|
|
<div class="dialog-footer">
|
|
|
|
|
<el-button type="primary" @click="submitMaterialInfoForm" :loading="materialInfoLoading">确 定</el-button>
|
|
|
|
|
<el-button @click="cancelMaterialInfo">取 消</el-button>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
</el-dialog>
|
|
|
|
|
<!-- 添加或修改OSS对象存储对话框 -->
|
|
|
|
|
<el-dialog v-model="dialog.visible" :title="dialog.title" width="500px" append-to-body>
|
|
|
|
|
<el-form ref="ossFormRef" :model="form" :rules="rules" label-width="80px">
|
|
|
|
|
@ -447,6 +496,8 @@ import { getUserList } from '@/api/system/user';
|
|
|
|
|
import { CodeRuleEnum, FlowCodeEnum } from '@/enums/OAEnum';
|
|
|
|
|
import { getInfo } from '@/api/login';
|
|
|
|
|
import FileUpload from '@/components/FileUpload/index.vue';
|
|
|
|
|
import { contractAddMaterialInfo } from '@/api/oa/base/materialInfo';
|
|
|
|
|
import { MaterialInfoForm } from '@/api/oa/base/materialInfo/types';
|
|
|
|
|
|
|
|
|
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
|
|
|
|
const route = useRoute();
|
|
|
|
|
@ -668,6 +719,33 @@ const generateContractCode = async () => {
|
|
|
|
|
|
|
|
|
|
const saleMaterialSelectRef = ref<InstanceType<typeof SaleMaterialSelect>>();
|
|
|
|
|
|
|
|
|
|
// 物料信息对话框
|
|
|
|
|
const materialInfoDialog = reactive({
|
|
|
|
|
visible: false,
|
|
|
|
|
title: '添加SAP物料'
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 物料信息表单数据
|
|
|
|
|
const materialInfoForm = ref<MaterialInfoForm>({
|
|
|
|
|
materialName: undefined,
|
|
|
|
|
materialBrand: undefined,
|
|
|
|
|
materialModel: undefined,
|
|
|
|
|
unitId: undefined,
|
|
|
|
|
materialParameter: undefined,
|
|
|
|
|
stockingPeriod: undefined,
|
|
|
|
|
remark: undefined,
|
|
|
|
|
addMethod: '2', // 2表示从合同页面添加
|
|
|
|
|
activeFlag: '1'
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 物料信息表单验证规则
|
|
|
|
|
const materialInfoRules = {
|
|
|
|
|
materialName: [{ required: true, message: 'SAP物料名称不能为空', trigger: 'blur' }]
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const materialInfoFormRef = ref<ElFormInstance>();
|
|
|
|
|
const materialInfoLoading = ref(false);
|
|
|
|
|
|
|
|
|
|
//打开销售物料选择
|
|
|
|
|
const openSaleMaterialSelect = () => {
|
|
|
|
|
saleMaterialSelectRef.value.open();
|
|
|
|
|
@ -1004,4 +1082,90 @@ watch(
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// 打开添加SAP物料对话框
|
|
|
|
|
const handleAddMaterialInfo = () => {
|
|
|
|
|
materialInfoForm.value = {
|
|
|
|
|
materialName: undefined,
|
|
|
|
|
materialBrand: undefined,
|
|
|
|
|
materialModel: undefined,
|
|
|
|
|
unitId: undefined,
|
|
|
|
|
materialParameter: undefined,
|
|
|
|
|
stockingPeriod: undefined,
|
|
|
|
|
remark: undefined,
|
|
|
|
|
addMethod: '2',
|
|
|
|
|
activeFlag: '1'
|
|
|
|
|
};
|
|
|
|
|
materialInfoFormRef.value?.resetFields();
|
|
|
|
|
materialInfoDialog.visible = true;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 取消添加SAP物料
|
|
|
|
|
const cancelMaterialInfo = () => {
|
|
|
|
|
materialInfoForm.value = {
|
|
|
|
|
materialName: undefined,
|
|
|
|
|
materialBrand: undefined,
|
|
|
|
|
materialModel: undefined,
|
|
|
|
|
unitId: undefined,
|
|
|
|
|
materialParameter: undefined,
|
|
|
|
|
stockingPeriod: undefined,
|
|
|
|
|
remark: undefined,
|
|
|
|
|
addMethod: '2',
|
|
|
|
|
activeFlag: '1'
|
|
|
|
|
};
|
|
|
|
|
materialInfoFormRef.value?.resetFields();
|
|
|
|
|
materialInfoDialog.visible = false;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 提交物料信息表单
|
|
|
|
|
const submitMaterialInfoForm = async () => {
|
|
|
|
|
materialInfoFormRef.value?.validate(async (valid: boolean) => {
|
|
|
|
|
if (valid) {
|
|
|
|
|
try {
|
|
|
|
|
materialInfoLoading.value = true;
|
|
|
|
|
const res = await contractAddMaterialInfo(materialInfoForm.value);
|
|
|
|
|
const newMaterial = res.data;
|
|
|
|
|
|
|
|
|
|
// 添加成功后,自动填充到合同物料表格
|
|
|
|
|
if (!(form.value as any).contractMaterialList) {
|
|
|
|
|
(form.value as any).contractMaterialList = [];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 创建新的合同物料项
|
|
|
|
|
// const newContractMaterial = {
|
|
|
|
|
// contractMaterialId: Date.now(), // 临时ID
|
|
|
|
|
// contractId: form.value.contractId,
|
|
|
|
|
// materialFlag: '1', // 标准物料标识
|
|
|
|
|
// materialId: newMaterial.materialId,
|
|
|
|
|
// materialCode: newMaterial.materialCode || '',
|
|
|
|
|
// materialName: newMaterial.materialName,
|
|
|
|
|
// productName: newMaterial.materialName, // 使用物料名称作为产品名称
|
|
|
|
|
// specificationDescription: '',
|
|
|
|
|
// saleMaterialName: newMaterial.materialName,
|
|
|
|
|
// amount: undefined,
|
|
|
|
|
// unitId: newMaterial.unitId,
|
|
|
|
|
// unitName: unitInfoList.value.find((item: any) => item.unitId === newMaterial.unitId)?.unitName || '',
|
|
|
|
|
// beforePrice: undefined,
|
|
|
|
|
// taxRate: undefined,
|
|
|
|
|
// includingPrice: undefined,
|
|
|
|
|
// subtotal: undefined,
|
|
|
|
|
// remark: '',
|
|
|
|
|
// activeFlag: '1'
|
|
|
|
|
// };
|
|
|
|
|
//
|
|
|
|
|
// (form.value as any).contractMaterialList.push(newContractMaterial);
|
|
|
|
|
//
|
|
|
|
|
// proxy?.$modal.msgSuccess('物料信息添加成功,已自动填充到合同物料表格');
|
|
|
|
|
materialInfoDialog.visible = false;
|
|
|
|
|
cancelMaterialInfo();
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('添加SAP物料失败:', error);
|
|
|
|
|
proxy?.$modal.msgError('添加SAP物料失败');
|
|
|
|
|
} finally {
|
|
|
|
|
materialInfoLoading.value = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
</script>
|
|
|
|
|
|