njzscloud-dispose-web/src/pages/wh/purchase-order/PurchaseOrderForm.vue

210 lines
8.9 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<ElDialog v-model="showDialog" :destroy-on-close="true" :close-on-click-modal="false" width="fit-content" @close="dialogCloseHandler">
<ElForm :model="formData" :rules="rules" ref="purchaseOrderForm" class="form-panel" label-width="auto">
<!-- <ElFormItem label-width="90" label="Id" prop="id">
<ElInput v-model="formData.id" :disabled="status === 'view'" placeholder="Id" />
</ElFormItem> -->
<!-- <ElFormItem label-width="90" label="编号" prop="sn">
<ElInput v-model="formData.sn" :disabled="status === 'view'" placeholder="编号" />
</ElFormItem> -->
<!-- JinXingZhong--进行中、YiDaoHuo--已到货、YiRuKu--已入库、YiQuXiao--已取消 -->
<!-- <ElFormItem label-width="90" label="状态" prop="purchaseOrderStatus">
<ElInput v-model="formData.purchaseOrderStatus" :disabled="status === 'view'" placeholder="状态" />
</ElFormItem> -->
<ElFormItem label-width="90" label="供货客户" prop="customerId">
<!-- <ElSelect v-model="formData.goodsCategoryId" :disabled="status === 'view'" placeholder="产品类型" filterable remote reserve-keyword remote-show-suffix :remote-method="remoteMethod" :loading="loading" style="width: 240px">
<ElOption v-for="item in category" :key="item.id" :label="item.categoryName" :value="item.id" />
</ElSelect> -->
<ASelect labelKey="customerName" :tableColumn="customerColumn" v-model="formData.customerId" :api="CustomerApi.paging" :disabled="status === 'view'" placeholder="供货客户" />
</ElFormItem>
<ElFormItem label-width="90" label="采购日期" prop="purchaseDate">
<el-date-picker v-model="formData.purchaseDate" :disabled="status === 'view'" format="YYYY-MM-DD" value-format="YYYY-MM-DD" type="date" placeholder="请选择采购日期" />
</ElFormItem>
<ElFormItem label-width="90" label="到货日期" prop="arrivalDate">
<el-date-picker v-model="formData.arrivalDate" :disabled="status === 'view'" format="YYYY-MM-DD" value-format="YYYY-MM-DD" type="date" placeholder="请选择采购日期" />
<!-- <ElInput v-model="formData.arrivalDate" :disabled="status === 'view'" placeholder="到货日期" /> -->
</ElFormItem>
<!-- <ElFormItem label-width="90" label="产品分类" prop="goodsCategoryId">
<ElInput v-model="formData.goodsCategoryId" :disabled="status === 'view'" placeholder="产品分类" />
</ElFormItem>
<ElFormItem label-width="90" label="分类名称" prop="goodsCategoryName">
<ElInput v-model="formData.goodsCategoryName" :disabled="status === 'view'" placeholder="分类名称" />
</ElFormItem> -->
<ElFormItem label-width="90" label="产品" prop="goodsId">
<ASelect labelKey="goodsName" v-model="formData.goodsId" :tableColumn="goodColumn" @change="goodsChange" :api="GoodsApi.paging" :disabled="status === 'view'" placeholder="选择产品" />
</ElFormItem>
<!-- <ElFormItem label-width="90" label="商品编码" prop="goodSn">
<ElInput v-model="formData.goodSn" :disabled="status === 'view'" placeholder="商品编码" />
</ElFormItem> -->
<ElFormItem label-width="90" label="数量" prop="quantity">
<ElInput v-model="formData.quantity" :disabled="status === 'view'" placeholder="数量" />
</ElFormItem>
<ElFormItem label-width="90" label="计量单位" prop="unit">
<ElInput v-model="formData.unit" readonly placeholder="计量单位" />
</ElFormItem>
<ElFormItem label-width="90" label="总金额" prop="totalMoney">
<ElInput v-model="formData.totalMoney" :disabled="status === 'view'" placeholder="总金额;单位:元" />
</ElFormItem>
<ElFormItem label-width="90" label="备注" prop="memo">
<ElInput v-model="formData.memo" :disabled="status === 'view'" placeholder="备注" />
</ElFormItem>
</ElForm>
<template #footer>
<ElButton @click="showDialog = false">{{ status === "view" ? "关闭" : "取消" }}</ElButton>
<ElButton v-if="status !== 'view'" :loading="submiting" type="primary" @click="submitHandler">提交</ElButton>
</template>
</ElDialog>
</template>
<script lang="ts" setup>
import PurchaseOrderApi from "@/pages/wh/purchase-order/purchase-order-api.ts";
import Strings from "@/common/utils/strings.ts";
import FormUtil from "@/common/utils/formUtil.ts";
import Utils from "@/common/utils";
import { ElMessage, type FormInstance, type FormRules } from "element-plus";
// import GoodsCategoryApi from '@/pages/gds/goods-category/goods-category-api.ts'
import CustomerApi from "@/pages/cst/customer/customer-api.ts";
import GoodsApi from "@/pages/gds/goods/goods-api.ts";
import ASelect from "@/components/a-select/ASelect.vue";
const emits = defineEmits(["editSucc"]);
const showDialog = ref(false);
const submiting = ref(false);
const status = ref<"add" | "view" | "modify">("add");
const purchaseOrderFormIns = useTemplateRef<FormInstance>("purchaseOrderForm");
const formData = Utils.resetAble(reactive<PurchaseOrderTypes.SearchPurchaseOrderResult>({}));
const rules = reactive<FormRules<PurchaseOrderTypes.SearchPurchaseOrderResult>>({
sn: [{ required: true, message: "请填写编号", trigger: "blur" }],
purchaseOrderStatus: [{ required: true, message: "请填写状态", trigger: "blur" }],
customerId: [{ required: true, message: "请填写供货客户", trigger: "blur" }],
purchaseDate: [{ required: true, message: "请填写采购日期", trigger: "blur" }],
arrivalDate: [{ required: true, message: "请填写到货日期", trigger: "blur" }],
goodsCategoryId: [{ required: true, message: "请填写产品分类", trigger: "blur" }],
goodsCategoryName: [{ required: true, message: "请填写分类名称", trigger: "blur" }],
goodsId: [{ required: true, message: "请填写产品", trigger: "blur" }],
goodsName: [{ required: true, message: "请填写产品名称", trigger: "blur" }],
goodSn: [{ required: true, message: "请填写商品编码", trigger: "blur" }],
quantity: [{ required: true, message: "请填写数量", trigger: "blur" }],
unit: [{ required: true, message: "请填写计量单位", trigger: "blur" }],
totalMoney: [{ required: true, message: "请填写总金额;单位:元", trigger: "blur" }],
memo: [{ required: true, message: "请填写备注", trigger: "blur" }],
creatorId: [{ required: true, message: "请填写创建人", trigger: "blur" }],
modifierId: [{ required: true, message: "请填写修改人", trigger: "blur" }],
createTime: [{ required: true, message: "请填写创建时间", trigger: "blur" }],
modifyTime: [{ required: true, message: "请填写修改时间", trigger: "blur" }],
});
const goodColumn = [
{
label: "名称",
prop: "goodsName",
},
{
label: "规格",
prop: "specParams",
},
{
label: "计量单位",
prop: "unitTxt",
},
];
const customerColumn = [
{
label: "公司",
prop: "orgName",
},
{
label: "地区",
prop: "areaName",
},
{
label: "负责人",
prop: "customerName",
},
];
const goodsChange = (val: any) => {
// console.log(item, 'itemmm')
formData.goodsCategoryName = val.goodsCategoryName;
formData.goodsName = val.goodsName;
formData.goodSn = val.sn;
formData.unit = val.unit;
formData.goodsCategoryId = val.goodsCategoryId;
};
// const iconTableDataSource = ref<any>(
// icons.glyphs.filter((_, i) => {
// return i >= 0 && i < 5;
// })
// );
// const remoteMethod = (query: string) => {
// console.log(query, "query");
// loading.value = true;
// CustomerApi.paging({ size: 50, categoryName: query || undefined }).then((res) => {
// category.value = res.data.records;
// loading.value = false;
// });
// };
function dialogCloseHandler() {
formData.$reset();
}
function submitHandler() {
if (status.value === "view") return;
submiting.value = true;
if (formData.id != null) {
FormUtil.submit(purchaseOrderFormIns, () => PurchaseOrderApi.modify(formData))
.then(() => {
ElMessage.success("修改成功");
emits("editSucc");
showDialog.value = false;
})
.finally(() => {
submiting.value = false;
});
} else {
FormUtil.submit(purchaseOrderFormIns, () => PurchaseOrderApi.add(formData))
.then(() => {
ElMessage.success("添加成功");
emits("editSucc");
showDialog.value = false;
})
.finally(() => {
submiting.value = false;
});
}
}
defineExpose({
open(data: PurchaseOrderTypes.SearchPurchaseOrderResult = {}) {
if (!Strings.isBlank(data.id)) {
status.value = "modify";
PurchaseOrderApi.detail(data.id!).then((res) => {
formData.$reset(res.data);
});
} else {
status.value = "add";
formData.$reset(data);
}
showDialog.value = true;
console.log(formData.goodsId, "formData");
},
});
</script>
<style lang="stylus" scoped>
.form-panel {
padding 20px
}
</style>