nursing_unit_vue/src/views/invoicing/cgd/components/NuInvoicingCgdRkdForm.vue

323 lines
11 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<a-spin :spinning="confirmLoading">
<JFormContainer :disabled="disabled">
<template #detail>
<a-form ref="formRef" class="antd-modal-form" :labelCol="labelCol" :wrapperCol="wrapperCol" name="NuInvoicingCgdMainForm">
<a-row>
<a-col :span="8">
<a-form-item label="采购单单号" v-bind="validateInfos.cgdNo" id="NuInvoicingCgdMainForm-cgdNo" name="cgdNo">
<span>{{formData.cgdNo}}</span>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="请购时间" v-bind="validateInfos.qgDate" id="NuInvoicingCgdMainForm-qgDate" name="qgDate">
<span>{{formData.qgDate}}</span>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="请购人" v-bind="validateInfos.qgBy" id="NuInvoicingCgdMainForm-qgBy" name="qgBy">
<span>{{formData.qgBy}}</span>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="供应商" v-bind="validateInfos.gysId" id="NuInvoicingCgdMainForm-gysId" name="gysId">
<span>{{formData.gysId_dictText}}</span>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="联系人" v-bind="validateInfos.gysLxr" id="NuInvoicingCgdMainForm-gysLxr" name="gysLxr">
<span>{{formData.gysLxr}}</span>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="联系电话" v-bind="validateInfos.gysLxrdh" id="NuInvoicingCgdMainForm-gysLxrdh" name="gysLxrdh">
<span>{{formData.gysLxrdh}}</span>
</a-form-item>
</a-col>
<!-- <a-col :span="8">
<a-form-item label="采购单类型" v-bind="validateInfos.cgdType" id="NuInvoicingCgdMainForm-cgdType" name="cgdType">
<span>{{formData.cgdType_dictText}}</span>
</a-form-item>
</a-col> -->
<!--
<a-col :span="8">
<a-form-item label="销账单" v-bind="validateInfos.xzdPath" id="NuInvoicingCgdMainForm-xzdPath" name="xzdPath">
<j-image-upload :fileMax="0" v-model:value="formData.xzdPath" ></j-image-upload>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="结账单" v-bind="validateInfos.jzdPath" id="NuInvoicingCgdMainForm-jzdPath" name="jzdPath">
<j-image-upload :fileMax="0" v-model:value="formData.jzdPath" ></j-image-upload>
</a-form-item>
</a-col> -->
<!-- <a-col :span="8">
<a-form-item label="审核状态" v-bind="validateInfos.status" id="NuInvoicingCgdMainForm-status" name="status">
<a-select v-model:value="formData.status" :disabled="disabled" placeholder="请选择审核状态">
<a-select-option value="">请选择</a-select-option>
<a-select-option value="1">审核通过</a-select-option>
<a-select-option value="3">作废</a-select-option>
</a-select>
</a-form-item>
</a-col> -->
<a-col :span="8">
<a-form-item label="审核人" v-bind="validateInfos.reviewedBy" id="NuInvoicingCgdMainForm-reviewedBy" name="reviewedBy">
<span>{{formData.reviewedBy}}</span>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="审核时间" v-bind="validateInfos.reviewedTime" id="NuInvoicingCgdMainForm-reviewedTime" name="reviewedTime">
<span>{{formData.reviewedTime}}</span>
</a-form-item>
</a-col>
<a-col :span="8">
<a-form-item label="付款方式" v-bind="validateInfos.gysFkfs" id="NuInvoicingCgdMainForm-gysFkfs" name="gysFkfs">
<span>{{formData.gysFkfs_dictText}}</span>
</a-form-item>
</a-col>
<a-col :span="24" >
<a-form-item label="审核备注" v-bind="validateInfos.content" id="NuInvoicingCgdMainForm-content" name="content" :labelCol="labelCol2" :wrapperCol="wrapperCol2">
<span>{{formData.content}}</span>
</a-form-item>
</a-col>
<a-col :span="24">
<a-form-item label="随行单" v-bind="validateInfos.sxdPath" id="NuInvoicingCgdMainForm-sxdPath" name="sxdPath" :labelCol="labelCol2" :wrapperCol="wrapperCol2">
<j-image-upload :fileMax="0" v-model:value="formData.sxdPath" ></j-image-upload>
</a-form-item>
</a-col>
</a-row>
</a-form>
</template>
</JFormContainer>
<a-table
:columns="rkcolumns"
:row-key="id"
:data-source="dataSource"
:pagination="false"
:loading="loading"
@change="handleTableChange"
>
<template #bodyCell="{ column, text ,record }">
<template v-if="column.dataIndex === 'arrivalPrice'">
<a-input-number :value="text" placeholder="到货单价" min="0" max="999" @change="(value) => handleRkslChange(record, 'arrivalPrice', value)" />
</template>
<template v-if="column.dataIndex === 'rksl'">
<a-input-number :value="text" placeholder="入库数量" min="0" max="999" @change="(value) => handleInputChange(record, 'rksl', value)" />
</template>
</template>
</a-table>
</a-spin>
</template>
<script lang="ts" setup>
import { ref, reactive, defineExpose, nextTick, defineProps, computed, onMounted } from 'vue';
import { defHttp } from '/@/utils/http/axios';
import { useMessage } from '/@/hooks/web/useMessage';
import JImageUpload from '/@/components/Form/src/jeecg/components/JImageUpload.vue';
import { getValueType } from '/@/utils';
import { rukuInfo } from '../NuInvoicingCgdMain.api';
import { rkcolumns } from '../NuInvoicingCgdInfo.data';
import { Form } from 'ant-design-vue';
import JFormContainer from '/@/components/Form/src/container/JFormContainer.vue';
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
import { useUserStore } from '/@/store/modules/user';
import dayjs from 'dayjs';
const props = defineProps({
formDisabled: { type: Boolean, default: false },
formData: { type: Object, default: () => ({})},
formBpm: { type: Boolean, default: true }
});
const formRef = ref();
const useForm = Form.useForm;
const emit = defineEmits(['register', 'ok']);
const dataSource = ref([]);
const userStore = useUserStore();
const formData = reactive<Record<string, any>>({
id: '',
qgdId: '',
cgdNo: '',
gysId: '',
qgDate: '',
qgBy: '',
gysLxr: '',
gysLxrdh: '',
gysFkfs: '',
status: '',
cgdType: '',
sxdPath: '',
xzdPath: '',
jzdPath: '',
reviewedBy: '',
reviewedTime: '',
content: '',
gysId_dictText:'',
status_dictText:'',
cgdType_dictText:'',
gysFkfs_dictText:'',
});
const { createMessage } = useMessage();
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 9 } });
const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 15 } });
const labelCol2 = ref<any>({ xs: { span: 24 }, sm: { span: 3 } });
const wrapperCol2 = ref<any>({ xs: { span: 24 }, sm: { span: 19 } });
const confirmLoading = ref<boolean>(false);
//表单验证
const validatorRules = reactive({
});
const { resetFields, validate, validateInfos } = useForm(formData, validatorRules, { immediate: false });
const handleInputChange = (record, field, value) => {
// 更新当前行的数据
record[field] = value;
var b = record.purchaseQuantity - value;
if(b<0){
record.wrksl = 0;
record.rksl = record.purchaseQuantity;
return;
}
record.wrksl = b;
// 如果是修改了 rksl wrksl 会自动更新因为它是计算属性
// 如果需要强制更新视图可以使用以下方法
// 方法1使用 Vue 的强制更新不推荐常规使用
// this.$forceUpdate();
// 方法2更好的方式是更新整个 dataSource推荐
const index = dataSource.value.findIndex(item => item.id === record.id);
if (index !== -1) {
dataSource.value[index] = { ...record };
dataSource.value = [...dataSource.value]; // 创建新数组触发响应式更新
}
};
const handleRkslChange = (record, field, value) => {
// 更新当前行的数据
record[field] = value;
// // 方法2更好的方式是更新整个 dataSource推荐
// const index = dataSource.value.findIndex(item => item.id === record.id);
// if (index !== -1) {
// dataSource.value[index] = { ...record };
// dataSource.value = [...dataSource.value]; // 创建新数组触发响应式更新
// }
};
// 表单禁用
const disabled = computed(()=>{
if(props.formBpm === true){
if(props.formData.disabled === false){
return false;
}else{
return true;
}
}
return props.formDisabled;
});
/**
* 新增
*/
function add() {
edit({});
}
/**
* 编辑
*/
function edit(record) {
nextTick(() => {
resetFields();
const tmpData = {};
Object.keys(formData).forEach((key) => {
if(record.hasOwnProperty(key)){
tmpData[key] = record[key]
}
})
//赋值
Object.assign(formData, tmpData);
getCgdInfoList();
});
}
function getCgdInfoList() {
defHttp.get({ url: '/cgd/nuInvoicingCgdInfo/list', params: { cgdId: formData.id,pageSize:-1 } }).then((res) => {
console.log("🚀 ~ getCgdInfoList ~ res:", res)
dataSource.value = res.records;
for (let i = 0; i < dataSource.value.length; i++) {
const element = dataSource.value[i];
element.rksl = element.purchaseQuantity;
element.wrksl = 0;
element.arrivalPrice = element.procurementPrice;
}
});
}
/**
* 提交数据
*/
async function submitForm() {
try {
// 触发表单验证
await validate();
} catch ({ errorFields }) {
if (errorFields) {
const firstField = errorFields[0];
if (firstField) {
formRef.value.scrollToField(firstField.name, { behavior: 'smooth', block: 'center' });
}
}
return Promise.reject(errorFields);
}
confirmLoading.value = true;
const isUpdate = ref<boolean>(false);
//时间格式化
let model = formData;
if (model.id) {
isUpdate.value = true;
}
//循环数据
for (let data in model) {
//如果该数据是数组并且是字符串类型
if (model[data] instanceof Array) {
let valueType = getValueType(formRef.value.getProps, data);
//如果是字符串类型的需要变成以逗号分割的字符串
if (valueType === 'string') {
model[data] = model[data].join(',');
}
}
}
console.log("🚀 ~ submitForm ~ model.status:", model.status)
if(model.status == '3'){
model.cgdType = '9'
}
console.log("🚀 ~ submitForm ~ model:", model)
model.cgdInfoList = dataSource.value;
await rukuInfo(model, isUpdate.value)
.then((res) => {
if (res.success) {
createMessage.success(res.message);
emit('ok');
} else {
createMessage.warning(res.message);
}
})
.finally(() => {
confirmLoading.value = false;
});
}
defineExpose({
add,
edit,
submitForm,
});
</script>
<style lang="less" scoped>
.antd-modal-form {
padding: 14px;
}
</style>