新增订单信息

This commit is contained in:
Mrking 2024-09-04 00:23:38 +08:00
parent 5e9a1449ec
commit ff46f4d940
4 changed files with 133 additions and 438 deletions

View File

@ -1,6 +1,7 @@
package cn.hangtag.module.oms.service.customer;
import cn.hangtag.module.system.controller.admin.user.vo.user.UserSaveReqVO;
import cn.hangtag.module.system.service.permission.PermissionService;
import cn.hangtag.module.system.service.user.AdminUserService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@ -41,6 +42,10 @@ public class CustomerServiceImpl implements CustomerService {
@Resource
private AdminUserService userService;
@Resource
private PermissionService permissionService;
@Override
@Transactional(rollbackFor = Exception.class)
public Long createCustomer(CustomerSaveReqVO createReqVO) {
@ -55,10 +60,20 @@ public class CustomerServiceImpl implements CustomerService {
userSaveReqVO.setPassword(userInitPassword);
userSaveReqVO.setDeptId(999999L); // 固定为用户分类
Long userId = userService.createUser(userSaveReqVO);
//分配角色
Set<Long> roleIds = new HashSet<>();
roleIds.add(-999L); // 固定客户角色
permissionService.assignUserRole(userId, roleIds);
customer.setUserId(userId);
customerMapper.insert(customer);
// 插入子表
createCustomerAddressList(customer.getId(), createReqVO.getCustomerAddresss());
// 返回
return customer.getId();
}

View File

@ -1,392 +0,0 @@
<template>
<ContentWrap>
<el-row :gutter="10">
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="150px"
v-loading="formLoading"
>
<div>
<el-card header="基本资料" style="width: 100%; margin-top: 20px" shadow="never" class="box-card">
<template #header>
<CardTitle title="基本资料" />
</template>
<el-row>
<el-col :span="12">
<el-form-item label="订单号码" prop="orderNo">
<el-input v-model="formData.orderNo" disabled="true" placeholder="*** New ***" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="订单状态" prop="orderstatus">
<el-input v-model="formData.orderstatus" disabled="true" placeholder="INITIAL" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="用户名称" prop="username">
<el-input v-model="formData.username" disabled="true" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="创建日期 (GMT+8)" prop="bizdate">
<el-date-picker
prefix-icon=""
style="width: 760px"
v-model="formData.bizdate"
type="date"
value-format="YYYY-MM-DD"
disabled="true"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="客户号" prop="id">
<el-input v-model="formData.id" disabled="true" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="企业公司" prop="company">
<el-input v-model="formData.company" disabled="true" placeholder="" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="品牌" prop="brandId">
<el-select v-model="formData.brandId" filterable placeholder="请选择品牌">
<el-option
v-for="brand in brandList"
:key="brand.id"
:label="brand.name"
:value="brand.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="要求交货日期" prop="plansenddate">
<el-date-picker
style="width: 760px"
v-model="formData.plansenddate"
type="date"
:size="size"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="联系人" prop="contacts">
<el-input v-model="formData.contacts" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="手机" prop="phone">
<el-input v-model="formData.phone" placeholder="" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="电话" prop="tel">
<el-input v-model="formData.tel" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="传真" prop="fax">
<el-input v-model="formData.fax" placeholder="" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="合同号" prop="contract">
<el-input v-model="formData.contractNo" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="零售商单号" prop="retailerno">
<el-input v-model="formData.retailerNo" placeholder="" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col>
<el-form-item label="备注" prop="remarks">
<el-input v-model="formData.remarks"
:autosize="{ minRows: 4, maxRows: 6 }"
type="textarea"
placeholder="请输入备注" />
</el-form-item>
</el-col>
</el-row>
</el-card>
<el-card header="电子邮件通知" style="width: 100%; margin-top: 20px" shadow="never">
<template #header>
<CardTitle title="电子邮件通知" />
</template>
<el-row>
<el-col :span="12">
<el-form-item label="电子邮件" prop="newEmail">
<el-input v-model="formData.newEmail" placeholder="" />
</el-form-item>
</el-col>
<el-col :span="12" >
<div style="margin-left: 30px">
<el-button size="Default" @click="onAddEmail">增加</el-button>
<el-button size="Default" @click="onDelEmail">删除</el-button>
</div>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="" prop="">
<div style="border: 1px solid #dcdfe6;width:100%;height: 200px;">
<el-scrollbar height="200px">
<ul style="padding-left: 4px;margin-top: 4px;">
<li style="list-style-type: none" v-for="(item, index) in formData.newEmails" :key="index" @click="selectItem(index)" :class="{'selected': selectedIndex === index}">
{{ item }}
</li>
</ul>
</el-scrollbar>
</div>
</el-form-item>
</el-col>
</el-row>
</el-card>
<!-- 右上角账户信息 -->
<el-col :span="12" class="detail-info-item" style="padding-left: 0px; margin-top: 20px">
<el-card shadow="never" class="h-full">
<template #header>
<CardTitle title="发票信息" />
</template>
<el-row>
<el-col :span="12">
<el-form-item label="发票抬头" prop="invoiceCode">
<el-input v-model="formData.invoiceCode" placeholder="请输入发票抬头" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="发票名称" prop="invoiceName">
<el-input v-model="formData.invoiceName" placeholder="请输入发票名称" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="发票地址" prop="invoiceAddress">
<el-input v-model="formData.invoiceAddress" placeholder="请输入发票地址" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="发票备注" prop="invoiceRemarks">
<el-input v-model="formData.invoiceRemarks"
:autosize="{ minRows: 4, maxRows: 6 }"
type="textarea"
placeholder="请输入发票备注" />
</el-form-item>
</el-col>
</el-row>
</el-card>
</el-col>
<!-- 右上角账户信息 -->
<!-- <el-col :span="12" class="detail-info-item" style="padding-right: 0px; margin-top: 20px">
<el-card shadow="never" class="h-full">
<template #header>
<CardTitle title="送货信息" />
</template>
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="150px"
v-loading="formLoading"
>
<el-row>
<el-col :span="12">
<el-form-item label="订单号码" prop="name">
<el-input v-model="formData.name" disabled="true" placeholder="*** New ***" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="订单状态" prop="email">
<el-input v-model="formData.email" placeholder="请输入邮箱" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col>
<el-form-item label="备注" prop="remarks">
<el-input v-model="formData.remarks" placeholder="请输入备注" />
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
</el-col>-->
</div>
</el-form>
</el-row>
<!-- <el-affix position="bottom" :offset="20">
<el-row style="margin-top: 20px;border-top: #1e83e9" justify="end" >
<el-col :span="2">
<el-button type="primary" plain size="mini" @click="openForm(undefined)">下一步</el-button>
</el-col>
</el-row>
</el-affix>
-->
</ContentWrap>
<!-- 固定在底部的行面板 -->
<el-affix position="bottom" :offset="20">
<div style="background-color: #909399; padding: 20px; text-align: right;">
<!-- 使用 el-row el-col 来控制布局虽然在这个简单场景下可能不是必需的 -->
<el-row>
<el-col :span="24">
<!-- 结算按钮 -->
<!-- <el-button type="primary">结算</el-button>-->
<!-- 下一步按钮 -->
<el-button type="success" style="margin-left: 10px;">下一步</el-button>
</el-col>
</el-row>
</div>
</el-affix>
</template>
<script setup lang="ts">
import {defaultProps} from "@/utils/tree";
import * as BrandApi from "@/api/oms/brand";
//
const calculateDateAfterDays = (days) => {
const now = new Date();
now.setDate(now.getDate() + days);
// 'YYYY-MM-DD'
return now.toISOString().split('T')[0];
}
const formRef = ref() // Ref
const selectedIndex = ref(-1)
const emails = ref([])
const formData = ref({
name: undefined,
email: undefined,
contacts: undefined,
phone: undefined,
invoiceAddress: undefined,
areaId: undefined,
status: undefined,
type: undefined,
remarks: undefined,
orderNo: undefined,
invoiceName: undefined,
newEmail: '',
newEmails: [],
bizdate: new Date().toISOString(),
plansenddate: calculateDateAfterDays(7)
})
const formRules = reactive({
name: [{ required: true, message: '名称不能为空', trigger: 'blur' }],
contacts: [{ required: true, message: '联系人不能为空', trigger: 'blur' }],
brandId: [{ required: true, message: '品牌不能为空', trigger: 'blur' }],
phone: [{ required: true, message: '联系人手机号不能为空', trigger: 'blur' },
{
pattern: /^(?:(?:\+|00)86)?1(?:3[\d]|4[5-79]|5[0-35-9]|6[5-7]|7[0-8]|8[\d]|9[189])\d{8}$/,
message: '请输入正确的手机号码',
trigger: 'blur'
}
],
email: [
{
type: 'email',
message: '请输入正确的邮箱地址',
trigger: ['blur', 'change']
}
]
})
const onAddEmail = () => {
debugger;
if (formData.value.newEmail.trim() !== '') {
formData.value.newEmails.push(formData.value.newEmail);
formData.value.newEmail = ''; //
}
}
const selectItem = async (index:number) => {
selectedIndex.value = index;
}
const onDelEmail = () => {
if(selectedIndex.value>=0){
debugger;
formData.value.newEmails.splice(selectedIndex.value, 1); //
//
if(selectedIndex.value === selectedIndex.value) {
selectedIndex.value = -1;
}
}
selectedIndex.value = -1;
}
/** 查询列表 */
const getCustomer = async () => {
loading.value = true
try {
const data = await CustomerApi.getCustomerPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
/** 初始化 **/
const brandList = ref<any[]>([]) //
onMounted(async () => {
//
brandList.value = await BrandApi.getSimpleBrandList()
})
</script>
<style scoped lang="scss">
/* 为选中的行添加背景色 */
.selected {
background-color: #dddee0; /* 浅绿色,可以根据需要调整 */
}
</style>

View File

@ -1,15 +1,15 @@
<template>
<ContentWrap>
<ContentWrap v-if="stepIndex==0">
<el-row :gutter="10">
<el-form
ref="formRef"
v-loading="formLoading"
:model="formData"
:rules="formRules"
label-width="150px"
v-loading="formLoading"
>
<div>
<el-card header="基本资料" style="width: 100%; margin-top: 20px" shadow="never" class="box-card">
<el-card class="box-card" header="基本资料" shadow="never" style="width: 100%; margin-top: 20px">
<template #header>
<CardTitle title="基本资料" />
</template>
@ -35,12 +35,12 @@
<el-col :span="12">
<el-form-item label="创建日期 (GMT+8)" prop="bizdate">
<el-date-picker
v-model="formData.bizdate"
disabled="true"
prefix-icon=""
style="width: 760px"
v-model="formData.bizdate"
type="date"
value-format="YYYY-MM-DD"
disabled="true"
/>
</el-form-item>
</el-col>
@ -73,10 +73,10 @@
<el-col :span="12">
<el-form-item label="要求交货日期" prop="plansenddate">
<el-date-picker
style="width: 760px"
v-model="formData.plansenddate"
type="date"
:size="size"
style="width: 760px"
type="date"
/>
</el-form-item>
</el-col>
@ -127,13 +127,13 @@
<el-form-item label="备注" prop="remarks">
<el-input v-model="formData.remarks"
:autosize="{ minRows: 4, maxRows: 6 }"
type="textarea"
placeholder="请输入备注" />
placeholder="请输入备注"
type="textarea" />
</el-form-item>
</el-col>
</el-row>
</el-card>
<el-card header="电子邮件通知" style="width: 100%; margin-top: 20px" shadow="never">
<el-card header="电子邮件通知" shadow="never" style="width: 100%; margin-top: 20px">
<template #header>
<CardTitle title="电子邮件通知" />
</template>
@ -157,7 +157,7 @@
<div style="border: 1px solid #dcdfe6;width:100%;height: 200px;">
<el-scrollbar height="200px">
<ul style="padding-left: 4px;margin-top: 4px;">
<li style="list-style-type: none" v-for="(item, index) in formData.newEmails" :key="index" @click="selectItem(index)" :class="{'selected': selectedIndex === index}">
<li v-for="(item, index) in formData.newEmails" :key="index" :class="{'selected': selectedIndex === index}" style="list-style-type: none" @click="selectItem(index)">
{{ item }}
</li>
</ul>
@ -170,7 +170,7 @@
<!-- 右上角账户信息 -->
<el-col :span="12" class="detail-info-item" style="padding-left: 0px; margin-top: 20px">
<el-card shadow="never" class="h-full">
<el-card class="h-full" shadow="never">
<template #header>
<CardTitle title="发票信息" />
</template>
@ -196,8 +196,8 @@
<el-form-item label="发票备注" prop="invoiceRemarks">
<el-input v-model="formData.invoiceRemarks"
:autosize="{ minRows: 4, maxRows: 6 }"
type="textarea"
placeholder="请输入发票备注" />
placeholder="请输入发票备注"
type="textarea" />
</el-form-item>
</el-col>
</el-row>
@ -242,24 +242,75 @@
</el-form>
</el-row>
<!-- <el-affix position="bottom" :offset="20">
<el-row style="margin-top: 20px;border-top: #1e83e9" justify="end" >
<el-col :span="2">
<el-button type="primary" plain size="mini" @click="openForm(undefined)">下一步</el-button>
</el-col>
</el-row>
</el-affix>
-->
</ContentWrap>
<!-- 列表 -->
<div v-if="stepIndex==1" style="height:100%">
<el-row :gutter="10">
<el-col :span="24">
<ContentWrap>
<el-tabs model-value="productContent">
<el-tab-pane label="产品内容" name="productContent">
<el-row :gutter="10" class="mb0px">
<el-col>
<el-button
plain
type="primary"
>
<Icon class="mr-5px" icon="ep:plus" />
新增
</el-button>
</el-col>
</el-row>
<el-table
v-loading="loading"
:data="list"
:s :stripe="true"
highlight-current-row
how-overflow-tooltip="true"
@current-change="handleCurrentChange"
>
<el-table-column align="center" label="客户产品编码" prop="id" />
<el-table-column align="center" label="产品描述" prop="name" />
<el-table-column align="center" label="产品图片" prop="name" />
<el-table-column align="center" label="数量单位" prop="name" />
<el-table-column align="center" label="订货数量" prop="name" />
<el-table-column align="center" label="补足数量" prop="name" />
<el-table-column align="center" label="总数量" prop="name" />
<el-table-column align="center" label="要求交货日期" prop="name" />
</el-table>
<!-- 分页 -->
<Pagination
v-model:limit="queryParams.pageSize"
v-model:page="queryParams.pageNo"
:total="total"
@pagination="getList"
/>
</el-tab-pane>
</el-tabs>
</ContentWrap>
</el-col>
</el-row>
<!-- 表单弹窗添加/修改 -->
<Demo03StudentForm ref="formRef" @success="getList" />
<el-row :gutter="12">
<el-col :span="24">
<!-- 子表的列表 -->
<ContentWrap>
<el-tabs model-value="variantCodeContent">
<el-tab-pane label="变码内容" name="variantCodeContent">
<Demo03CourseList :student-id="currentRow?.id" />
</el-tab-pane>
</el-tabs>
</ContentWrap>
</el-col>
</el-row>
</div>
<!-- 固定在底部的行面板 -->
<el-affix position="bottom" :offset="20">
<el-affix :offset="20" position="bottom">
<div style="background-color: #909399; padding: 20px; text-align: right;">
<!-- 使用 el-row el-col 来控制布局虽然在这个简单场景下可能不是必需的 -->
<el-row>
@ -267,7 +318,8 @@
<!-- 结算按钮 -->
<!-- <el-button type="primary">结算</el-button>-->
<!-- 下一步按钮 -->
<el-button type="success" style="margin-left: 10px;">下一步</el-button>
<el-button v-if="stepIndex>=1" style="margin-left: 10px;" type="primary" @click="backStep()">上一步</el-button>
<el-button style="margin-left: 10px;" type="primary" @click="nextStep()">下一步</el-button>
</el-col>
</el-row>
</div>
@ -275,11 +327,13 @@
</template>
<script setup lang="ts">
<script lang="ts" setup>
import {defaultProps} from "@/utils/tree";
import * as BrandApi from "@/api/oms/brand";
import {CustomerApi, getCustomer} from "@/api/oms/customer";
import Demo03CourseList from "@/views/oms/order/createorder/components/Demo03CourseList.vue";
import Demo03StudentForm from "@/views/oms/order/createorder/Demo03StudentForm.vue";
//
const calculateDateAfterDays = (days) => {
@ -289,9 +343,34 @@ const calculateDateAfterDays = (days) => {
return now.toISOString().split('T')[0];
}
const formRef = ref() // Ref
const loading = ref(false) //
const list = ref([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
name: null,
sex: null,
description: null,
createTime: []
})
/** 查询列表 */
const getList = async () => {
loading.value = true
try {
/*const data = await Demo03StudentApi.getDemo03StudentPage(queryParams)
list.value = data.list
total.value = data.total*/
} finally {
loading.value = true
}
}
const formRef = ref() // Ref
const selectedIndex = ref(-1)
const stepIndex = ref(0)
const emails = ref([])
@ -372,6 +451,12 @@ const getCustomer = async () => {
loading.value = false
}
}
const backStep = async () => {
stepIndex.value = stepIndex.value-1;
}
const nextStep = async () => {
stepIndex.value = stepIndex.value+1;
}
/** 初始化 **/
@ -389,7 +474,7 @@ onMounted(async () => {
</script>
<style scoped lang="scss">
<style lang="scss" scoped>
/* 为选中的行添加背景色 */
.selected {
background-color: #dddee0; /* 浅绿色,可以根据需要调整 */

View File

@ -1,13 +0,0 @@
<script setup lang="ts">
</script>
<template>
<div>
</div>
</template>
<style scoped lang="scss">
</style>