|
|
@@ -10,20 +10,35 @@
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :md="8" :xs="24">
|
|
|
- <el-form-item label="单据日期" prop="orderTime">
|
|
|
- <el-date-picker v-model="form.orderTime" :clearable="false" value-format="YYYY-MM-DD" :default-time="new Date()" placeholder="请选择单据日期"></el-date-picker>
|
|
|
+ <el-form-item label="单据日期" prop="orderDate">
|
|
|
+ <el-date-picker v-model="form.orderDate" :clearable="false" value-format="YYYY-MM-DD" :default-time="new Date()" placeholder="请选择单据日期"></el-date-picker>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
-
|
|
|
<el-col :md="8" :xs="24">
|
|
|
<el-form-item label="客户" prop="customer.id">
|
|
|
- <sc-table-input v-model="form.customer" :hideShow="!!form.id" placeholder="选择客户" valueKey="name" tableKey="customer" :options="selectOptions"></sc-table-input>
|
|
|
+ <sc-table-input v-model="form.customer" placeholder="选择客户" valueKey="name" tableKey="customer" :options="selectOptions"></sc-table-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :md="8" :xs="24">
|
|
|
+ <el-form-item label="合同编号" prop="contractNo">
|
|
|
+ <el-input v-model="form.contractNo" maxlength="50" show-word-limit placeholder="请输入合同编号"></el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
-
|
|
|
<el-col :md="8" :xs="24">
|
|
|
- <el-form-item label="预计交期" prop="confirmedDeliveryDate">
|
|
|
- <el-date-picker v-model="form.confirmedDeliveryDate" :clearable="false" value-format="YYYY-MM-DD" :default-time="new Date()" placeholder="请选择预计交期"></el-date-picker>
|
|
|
+ <el-form-item label="预计交期" prop="planReceiveDate">
|
|
|
+ <el-date-picker v-model="form.planReceiveDate" :clearable="false" value-format="YYYY-MM-DD" :default-time="new Date()" placeholder="请选择预计交期"></el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :md="8" :xs="24">
|
|
|
+ <el-form-item label="业务员">
|
|
|
+ <el-select v-model="form.managerId" clearable placeholder="请选择业务员">
|
|
|
+ <el-option v-for="item in users" :key="item.id" :label="item.nickName" :value="item.id" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :md="16" :xs="24">
|
|
|
+ <el-form-item label="客户收货地址">
|
|
|
+ <el-input v-model="form.deliveryAddress" type="textarea" maxlength="200" :rows="1" placeholder="请输入客户收货地址"></el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
@@ -33,6 +48,25 @@
|
|
|
<sc-form-table ref="formTableRef" v-model="form.childrenList" v-bind="tableOptions"></sc-form-table>
|
|
|
</el-collapse-item>
|
|
|
|
|
|
+ <el-collapse-item title="金额信息" name="amount">
|
|
|
+ <el-row>
|
|
|
+ <el-col :md="8" :xs="24">
|
|
|
+ <el-form-item label="整单折扣额">
|
|
|
+ <el-input-number v-model="form.freePrice" :min="0" :precision="2" :controls="false" clearable placeholder="请输入折扣金额">
|
|
|
+ <template #suffix>元</template>
|
|
|
+ </el-input-number>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :md="8" :xs="24">
|
|
|
+ <el-form-item label="成交金额" required>
|
|
|
+ <el-input-number v-model="form.actualPrice" readonly :controls="false">
|
|
|
+ <template #suffix>元</template>
|
|
|
+ </el-input-number>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-collapse-item>
|
|
|
+
|
|
|
<el-collapse-item title="其他说明" name="other">
|
|
|
<el-row>
|
|
|
<el-col :xs="24">
|
|
|
@@ -54,7 +88,7 @@
|
|
|
|
|
|
<template #footer>
|
|
|
<el-button auto-insert-space @click="visible = false">取消</el-button>
|
|
|
- <el-button :loading="isSaving" type="primary" auto-insert-space @click="submit">{{ mode == "upgrade" ? "发布" : "保存" }}</el-button>
|
|
|
+ <el-button :loading="isSaving" type="primary" auto-insert-space @click="submit">保存</el-button>
|
|
|
</template>
|
|
|
</el-dialog>
|
|
|
</template>
|
|
|
@@ -73,36 +107,53 @@ const visible = ref(false);
|
|
|
const isSaving = ref(false);
|
|
|
const isDel = ref(false);
|
|
|
|
|
|
-const activeNames = ref(["basic", "material", "other"]);
|
|
|
+const activeNames = ref(["basic", "material", "amount", "other"]);
|
|
|
const mode = ref("add");
|
|
|
const titleMap = reactive({
|
|
|
add: "新增销售订单",
|
|
|
edit: "修改销售订单"
|
|
|
});
|
|
|
|
|
|
+const users = ref([]);
|
|
|
const form = ref({
|
|
|
id: null,
|
|
|
code: null,
|
|
|
- orderTime: moment().format("YYYY-MM-DD HH:mm:ss"),
|
|
|
- confirmedDeliveryDate: null,
|
|
|
- customer: {
|
|
|
- id: null,
|
|
|
- label: null
|
|
|
- },
|
|
|
+ orderDate: moment().format("YYYY-MM-DD"),
|
|
|
+ customer: { id: null, name: null },
|
|
|
+ contractNo: null,
|
|
|
+ planReceiveDate: null,
|
|
|
+ managerId: null,
|
|
|
+ deliveryAddress: null,
|
|
|
childrenList: [],
|
|
|
+ freePrice: null,
|
|
|
+ incomePrice: null,
|
|
|
+ actualPrice: null,
|
|
|
remark: null,
|
|
|
fileList: []
|
|
|
});
|
|
|
const rules = reactive({
|
|
|
+ orderDate: [{ required: true, message: "请选择单据日期" }],
|
|
|
+ "customer.id": [{ required: true, message: "请选择客户" }],
|
|
|
+ planReceiveDate: [{ required: true, message: "请选择预计交期" }],
|
|
|
+ contractNo: [{ required: true, message: "请输入合同编号" }]
|
|
|
});
|
|
|
|
|
|
+watch(() => XEUtils.pick(form.value, "childrenList", "freePrice"), value => {
|
|
|
+ if (!value.childrenList.length) form.value.incomePrice = null;
|
|
|
+ else {
|
|
|
+ form.value.incomePrice = XEUtils.sum(XEUtils.map(value.childrenList, item => XEUtils.multiply(item.quantity, item.price)));
|
|
|
+ form.value.actualPrice = XEUtils.subtract(form.value.incomePrice, value.freePrice);
|
|
|
+ }
|
|
|
+}, { deep: true });
|
|
|
+
|
|
|
const open = () => visible.value = true;
|
|
|
const setData = data => {
|
|
|
open();
|
|
|
mode.value = "edit";
|
|
|
XEUtils.objectEach(form.value, (_, key) => {
|
|
|
- if (key == "fileList") XEUtils.set(form.value, key, XEUtils.map(XEUtils.get(data, key), item => ({ ...item, name: item.fileName })));
|
|
|
- else if (key == "childrenList") XEUtils.set(form.value, key, XEUtils.map(XEUtils.get(data, key), item => ({ ...item.stage, ...XEUtils.omit(item, "id", "stage") })));
|
|
|
+ if (key == "customer") XEUtils.set(form.value, key, { id: XEUtils.get(data, "customerId"), name: XEUtils.get(data, "customerName") });
|
|
|
+ else if (key == "childrenList") XEUtils.set(form.value, key, XEUtils.map(XEUtils.get(data, key), item => ({ ...item.material, quantity: item.materialQuantity, price: item.materialPrice })));
|
|
|
+ else if (key == "fileList") XEUtils.set(form.value, key, XEUtils.map(XEUtils.get(data, key), item => ({ ...item, name: item.fileName })));
|
|
|
else XEUtils.set(form.value, key, XEUtils.get(data, key));
|
|
|
});
|
|
|
}
|
|
|
@@ -110,26 +161,26 @@ const setData = data => {
|
|
|
const formRef = ref();
|
|
|
const formTableRef = ref();
|
|
|
const submit = () => {
|
|
|
- console.log('submit called', form.value.customerId);
|
|
|
formRef.value.validate(async valid => {
|
|
|
if (valid) {
|
|
|
if (!form.value.childrenList.length) return ElMessage.warning("请添加产品信息后再保存");
|
|
|
|
|
|
if (await formTableRef.value.validateFormTable()) {
|
|
|
- // const data = XEUtils.omit(form.value, "fileList", "childrenList");
|
|
|
- // const childrenList = XEUtils.map(form.value.childrenList, item => XEUtils.omit(item, "id", "name", "code", "processType"));
|
|
|
- // const fileList = XEUtils.map(XEUtils.filter(form.value.fileList, item => !item.id), item => ({ ...XEUtils.omit(item, "id", "name"), fileName: item.name, fileType: "processRouteFile" }));
|
|
|
- // XEUtils.set(data, "childrenList", childrenList);
|
|
|
- // fileList.length > 0 && XEUtils.set(data, "fileList", fileList);
|
|
|
-
|
|
|
- // isSaving.value = true;
|
|
|
- // API.workmanship.route[mode.value](data).then(res => {
|
|
|
- // ElMessage.success("操作成功");
|
|
|
- // isSaving.value = false;
|
|
|
- // isDel.value = false;
|
|
|
- // visible.value = false;
|
|
|
- // $emit("success", mode.value);
|
|
|
- // }).catch(() => isSaving.value = false);
|
|
|
+ const data = XEUtils.omit(form.value, "customer", "childrenList", "fileList");
|
|
|
+ const childrenList = XEUtils.map(form.value.childrenList, item => ({ materialCode: item.code, materialQuantity: item.quantity, materialPrice: item.price }));
|
|
|
+ const fileList = XEUtils.map(XEUtils.filter(form.value.fileList, item => !item.id), item => ({ ...XEUtils.omit(item, "id", "name"), fileName: item.name, fileType: "salesOrderFile" }));
|
|
|
+ XEUtils.set(data, "customerId", form.value.customer.id);
|
|
|
+ XEUtils.set(data, "childrenList", childrenList);
|
|
|
+ fileList.length > 0 && XEUtils.set(data, "fileList", fileList);
|
|
|
+
|
|
|
+ isSaving.value = true;
|
|
|
+ API.sales.order[mode.value](data).then(res => {
|
|
|
+ ElMessage.success("操作成功");
|
|
|
+ isSaving.value = false;
|
|
|
+ isDel.value = false;
|
|
|
+ visible.value = false;
|
|
|
+ $emit("success", mode.value);
|
|
|
+ }).catch(() => isSaving.value = false);
|
|
|
}
|
|
|
} else {
|
|
|
return false;
|
|
|
@@ -141,6 +192,9 @@ const removeSuccess = () => {
|
|
|
if (form.value.id) isDel.value = true;
|
|
|
}
|
|
|
|
|
|
+const fetchUser = () => API.auth.user.all({ orderBy: "id_desc" }).then(res => users.value = res).catch(() => users.value = []);
|
|
|
+fetchUser();
|
|
|
+
|
|
|
defineExpose({
|
|
|
open,
|
|
|
setData
|
|
|
@@ -149,6 +203,9 @@ defineExpose({
|
|
|
|
|
|
<style scoped>
|
|
|
.el-form {padding-left: 16px;padding-right: 22px;}
|
|
|
+.el-form .el-input-number {width: 100%;}
|
|
|
+.el-form .el-input-number :deep(.el-input__inner) {text-align: unset;}
|
|
|
+.el-form .el-input-number :deep(.el-input__suffix) {font-size: 12px;}
|
|
|
|
|
|
.el-collapse {border: none;}
|
|
|
.el-collapse-item {margin-top: 15px;padding: 0 24px;background-color: var(--el-fill-color-blank);border: 1px solid var(--el-border-color-light);border-radius: 4px;color: var(--el-text-color-primary);box-shadow: var(--el-box-shadow-light);transition: var(--el-transition-duration);}
|