emis-frontend/src/views/emis/emisQuotePrice/vipSpecialQuotePriceForm.vue
2024-07-20 13:39:03 +08:00

648 lines
23 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>
<div >
<el-row :gutter="0" type='flex'>
<el-form ref="form" size="mini" :model="form" :rules="rules" label-width="80px">
<el-col :span="6" :xs="6" style="border-right: 1px solid #f3f3f3;padding-right: 5px;">
<el-col :span="24">
<el-form-item label="报价名称" prop="quoteName">
<el-input v-model="form.quoteName" placeholder="请输入报价名称" />
</el-form-item>
</el-col>
<!-- <el-col :span="24">
<el-form-item label="所属国家" prop="country">
<CountryPicker :placeholder="$t('所属国家')" v-model="form.country" ></CountryPicker>
</el-form-item>
</el-col> -->
<el-col :span="24">
<el-form-item label="月结客户" prop="custNo">
<EmisMonthpayAccountPicker v-model="form.custNo"></EmisMonthpayAccountPicker>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="使用网点" prop="useSiteCode">
<EmisSiteSimplePicker v-if="ownerSiteCode == '88888'" v-model="form.useSiteCode" :placeholder="$t('使用网点')" isInitiated="true" @onChange="onUseSiteChange" @onClear="onUseSiteChange"></EmisSiteSimplePicker>
<el-input v-else v-model="ownerSiteName" placeholder="寄件网点" disabled />
<!-- <div v-if="ownerSiteCode == 88888">
<EmisSiteSimplePicker v-model="form.useSiteCode" :placeholder="$t('使用网点')" siteType="2" isInitiated="true" :disabled="false" ></EmisSiteSimplePicker>
</div>
<div v-else>
<EmisSiteSimplePicker v-model="form.useSiteCode" :placeholder="$t('使用网点')" siteType="2" isInitiated="true" :disabled="true" ></EmisSiteSimplePicker>
</div> -->
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="线路" prop="transLineCode">
<TransLinePicker v-model="form.transLineCode" isInitiated="true"></TransLinePicker>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="产品类型" prop="prodCode">
<TransProductMultiplePicker placeholder="产品类型" v-model="form.prodCode" :transLineCode="form.transLineCode"></TransProductMultiplePicker>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="最低价格" prop="leastPrice">
<el-input v-model="form.leastPrice" placeholder="最低价格" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="价格取值" prop="priceType">
<el-select v-model="form.priceType" placeholder="价格取值">
<el-option
v-for="dict in dict.type.emis_price_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="开始日期" prop="startDate">
<el-date-picker
style="width:100%"
clearable
v-model="form.startDate"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
default-time = "00:00:00"
placeholder="请选择开始日期"
@change="onStartDateChange"
>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="结束日期" prop="endDate">
<el-date-picker
style="width:100%"
clearable
v-model="form.endDate"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
default-time = "23:59:59"
placeholder="请选择结束日期">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="计费类型" prop="billType">
<el-radio-group v-model="form.billType">
<el-radio label="1" >重量计费</el-radio>
<el-radio label="2">体积计费</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="启用状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio :label="1">启用</el-radio>
<el-radio :label="0">停用</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="费用类型" prop="feeType">
<el-select v-model="form.feeType" placeholder="费用类型" >
<el-option
v-for="dict of dict.type.emis_fee_type.filter(el=> el.value != 1001)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
<!-- <el-select v-model="form.feeType" placeholder="费用类型" disabled v-if="chargeType == 3" >
<el-option
v-for="dict of dict.type.emis_fee_type.filter(el=> el.value == 1001)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select> -->
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="费用币种" prop="currency">
<el-select v-model="form.currency" placeholder="" >
<el-option
v-for="dict in dict.type.sys_currency_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-col>
<el-col :span="18" :xs="18">
<el-row>
<el-col :span="12" :xs="12" style="padding: 5px;">
<el-row :gutter="0">
<el-col :span="16">
<el-form-item label="寄件区域" prop="sendAreaId">
<el-select v-model="form.sendAreaId" placeholder="寄件区域" clearable @change="onSendAreaChange">
<el-option
v-for="item in emisQuoteSendAreaList"
:key="item.areaId"
:label="item.areaName"
:value="item.areaId*1"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-button
size="mini"
type="primary"
@click="handelSelectSendArea()"
:disabled="!form.useSiteCode"
>新增区域</el-button>
</el-col>
<el-col :span="24">
<el-form-item label="" prop="sendAreaSite" label-width="0px" style="margin-bottom: 0px;">
<el-input v-model="form.sendAreaSite" rows="6" type="textarea" placeholder="" disabled />
</el-form-item>
</el-col>
</el-row>
</el-col>
<el-col :span="12" :xs="12" style="padding: 5px;">
<el-row :gutter="0">
<el-col :span="16">
<el-form-item label="派件区域" prop="dispAreaId" >
<el-select v-model="form.dispAreaId" placeholder="派件区域" clearable @change="onDispAreaChange">
<el-option
v-for="item in emisQuoteDispAreaList"
:key="item.areaId"
:label="item.areaName"
:value="item.areaId"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-button
size="mini"
type="primary"
:disabled="!form.useSiteCode"
@click="handelSelectDispArea()"
>新增区域</el-button>
</el-col>
<el-col :span="24">
<el-form-item label="" prop="dispAreaSite" label-width="0px" style="margin-bottom: 0px;">
<el-input v-model="form.dispAreaSite" rows="6" type="textarea" placeholder="" disabled/>
</el-form-item>
</el-col>
</el-row>
</el-col>
</el-row>
<el-row>
<el-col :span="24" :xs="24" style="padding: 10px;">
<el-row>
<el-col :span="24">
<!-- 计算公式规则 -->
<el-alert
title="计算公式规则"
type="info"
description="说明: 计算公式中只能包含(w,数字,+,-,*,/),示例:0-1公斤 首重5元 ;1-3 公斤 每公斤2元加上首重,计算公式: 5+(w-1)*2输入完重量后回车跳转到表达式,输入完表达式后回车可以快速新增下一条公式"
show-icon
:closable="false"
style="margin-bottom: 10px;"
>
</el-alert>
</el-col>
<el-col :span="24">
<!-- <div style="max-height:200px;overflow-y: auto;"> -->
<!-- @onChange="onQuoteExpressionChange" -->
<QuoteExpressionPanel :quoteId="form.quoteId" :isCopy="isCopy" style="width:100%" v-model="form.exprList"></QuoteExpressionPanel>
<!-- </div> -->
</el-col>
</el-row>
</el-col>
</el-row>
</el-col>
</el-form>
</el-row>
<el-dialog :title="titleSendAreaForm" :visible.sync="openSendAreaForm" width="90%" :destroy-on-close="true" v-dialogDrag append-to-body>
<QuoteSendAreaPanel :useSiteCode="form.useSiteCode" :useSiteName="form.useSite" :feeType="form.feeType" @on-changed="handleSendAreaFormChanged" @on-cancel="cancelSendAreaForm"></QuoteSendAreaPanel>
</el-dialog>
<el-dialog :title="titleDispAreaForm" :visible.sync="openDispAreaForm" width="90%" :destroy-on-close="true" v-dialogDrag append-to-body>
<QuoteDispAreaPanel :useSiteCode="form.useSiteCode" :useSiteName="form.useSite" :feeType="form.feeType" @on-changed="handleDispAreaFormChanged" @on-cancel="cancelDispAreaForm"></QuoteDispAreaPanel>
</el-dialog>
<div style="text-align: center;margin-bottom: 10px;">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
import { listEmisQuoteSendArea, getEmisQuoteSendArea, delEmisQuoteSendArea, addEmisQuoteSendArea, updateEmisQuoteSendArea } from "@/api/emis/emisQuoteSendArea";
import { listEmisQuotePrice, getEmisQuotePrice, delEmisQuotePrice, addEmisQuotePrice, updateEmisQuotePrice } from "@/api/emis/emisQuotePrice";
import { listEmisQuoteDispArea, getEmisQuoteDispArea, delEmisQuoteDispArea, addEmisQuoteDispArea, updateEmisQuoteDispArea } from "@/api/emis/emisQuoteDispArea";
import {checkRole} from '@/utils/permission'
import {addDateTimeByDay,dateToStr} from '@/utils/custom'
import CountryPicker from '@/views/emis/EmisBaseTools/CountryPicker.vue';
import EmisSiteSimplePicker from '@/views/emis/EmisBaseTools/EmisSiteSimplePicker.vue';
import TransLinePicker from '@/views/emis/EmisBaseTools/TransLinePicker.vue';
import TransProductMultiplePicker from '@/views/emis/EmisBaseTools/TransProductMultiplePicker.vue';
import QuoteExpressionPanel from '@/views/emis/emisQuoteExpression/quoteExpressionPanel.vue';
import QuoteSendAreaPanel from '@/views/emis/emisQuoteSendArea/sendAreaPanel.vue';
import QuoteDispAreaPanel from '@/views/emis/emisQuoteDispArea/dispAreaPanel.vue';
import EmisMonthpayAccountPicker from '@/views/emis/EmisBaseTools/EmisMonthpayAccountPicker.vue';
export default {
name: "SpecialQuotePriceForm",
props:{
quoteId:{
type:[Number,Array]
},
isCopy:{
type:Boolean
},
chargeType:{
type:[Number,String]
},
},
components: {
CountryPicker,EmisSiteSimplePicker,TransLinePicker,
TransProductMultiplePicker,QuoteExpressionPanel,
QuoteSendAreaPanel,QuoteDispAreaPanel,
EmisMonthpayAccountPicker
},
dicts: ['emis_price_type','emis_fee_type','sys_currency_type'],
data() {
return {
emisQuotePriceOptions: [],
// 遮罩层
loading: true,
emisQuoteSendAreaList:[],
emisQuoteDispAreaList:[],
// sendAreaIdsOptions:[],
// dispAreaIdsOptions:[],
openSendAreaForm:false,
titleSendAreaForm:'',
openDispAreaForm:false,
titleDispAreaForm:'',
// 表单参数
form: {},
// 表单校验
rules: {
quoteName: [
{ required: true, message: "报价名称不能为空", trigger: "blur" }
],
useSiteCode: [
{ required: true, message: "使用站点不能为空", trigger: ["blur",'change'] }
],
custNo: [
{ required: true, message: "月结客户不能为空", trigger: ["blur",'change'] }
],
transLineCode: [
{ required: true, message: "线路不能为空", trigger: ["blur",'change'] }
],
prodCode: [
{ required: true, message: "产品不能为空", trigger: ["blur",'change'] }
],
leastPrice: [
{ required: true, message: "最低价格不能为空", trigger: "blur" }
],
priceType: [
{ required: true, message: "价格取值不能为空", trigger: "blur" }
],
startDate: [
{ required: true, message: "开始日期不能为空", trigger: "blur" }
],
endDate: [
{ required: true, message: "结束日期不能为空", trigger: "blur" }
],
billType: [
{ required: true, message: "计费类型不能为空", trigger: "blur" }
],
status: [
{ required: true, message: "启用类型不能为空", trigger: "blur" }
],
dispAreaId: [
{ required: true, message: "派件区域不能为空", trigger: "blur" }
],
sendAreaId: [
{ required: true, message: "寄件区域不能为空", trigger: "blur" }
],
// startDate: [
// { required: true, message: "价格取值不能为空", trigger: "blur" }
// ],
// startDate: [
// { required: true, message: "价格取值不能为空", trigger: "blur" }
// ],
// useSite: [
// { required: true, message: "使用站点名称不能为空", trigger: "blur" }
// ],
}
};
},
computed: {
...mapGetters([
'ownerSiteCode',
'ownerSiteName',
]),
},
watch: {
"quoteId": {
handler (newValue, oldValue) {
this.quoteId = newValue;
this.initData();
},
deep: true
},
isCopy(newValue, oldValue){
console.log(this.isCopy)
}
},
created() {
console.log(this.ownerSiteCode);
this.initData();
},
methods: {
initData() {
if(this.quoteId !=null) {
this.loading = true;
getEmisQuotePrice(this.quoteId).then(response => {
this.form.useSiteCode=this.ownerSiteCode;
this.form = response.data;
if(this.isCopy){
this.form.quoteName=this.form.quoteName+"_Copy"
console.log(this.form);
// this.form.transLineCode=response.data.transLineCode;
// console.log(this.form);
}
this.loading = false;
this.initSendAreaList();
this.initDispAreaList();
});
}else{
this.reset();
this.form.billType='1';
this.form.feeType='9999';
this.form.quoteType=4;
this.form.useSiteCode=this.ownerSiteCode;
this.initSendAreaList();
this.initDispAreaList();
}
},
onStartDateChange(){
this.form.endDate=dateToStr(addDateTimeByDay(this.form.startDate,365));
console.log(this.form.endDate);
},
onUseSiteChange(item){
if(item!=null){
this.form.useSite = item.siteName;
}
this.initSendAreaList();
this.initDispAreaList();
},
// 初始化寄件区域
initSendAreaList() {
this.loading = true;
let queryParams = {};
if(this.form.useSiteCode&&this.form.useSiteCode!=''){
queryParams = {
useSiteCode: this.form.useSiteCode,
};
}else{
this.emisQuoteSendAreaList=[]
return;
}
listEmisQuoteSendArea(queryParams).then(response => {
this.emisQuoteSendAreaList = response.rows;
if(this.form.sendAreaId != null){
this.emisQuoteSendAreaList.forEach(item=>{
if(this.form.sendAreaId==item.areaId){
this.form.sendAreaName=item.areaName;
this.form.sendAreaSiteCode=item.areaSiteCode;
this.form.sendAreaSite=item.areaSite;
}
});
}
this.loading = false;
});
},
initDispAreaList(){
this.loading = true;
let queryParams =null;
if(this.form.useSiteCode&&this.form.useSiteCode!=''){
queryParams = {
useSiteCode: this.form.useSiteCode,
};
}else{
this.emisQuoteDispAreaList=[]
return;
}
listEmisQuoteDispArea(queryParams).then(response => {
this.emisQuoteDispAreaList = response.rows;
if(this.form.dispAreaId != null){
this.emisQuoteDispAreaList.forEach(item=>{
if(this.form.dispAreaId==item.areaId){
this.form.dispAreaName=item.areaName;
this.form.dispAreaSiteCode=item.areaSiteCode;
this.form.dispAreaSite=item.areaSite;
}
});
}
this.loading = false;
});
},
// 选择寄件区域
onSendAreaChange(){
if(this.form.sendAreaId != null){
this.emisQuoteSendAreaList.forEach(item=>{
if(this.form.sendAreaId==item.areaId){
this.form.sendAreaName=item.areaName;
this.form.sendAreaSiteCode=item.areaSiteCode;
this.form.sendAreaSite=item.areaSite;
}
});
}
},
// 编辑寄件区域完成
handleSendAreaFormChanged(areaId){
this.form.sendAreaId = areaId;
this.initSendAreaList();
this.openSendAreaForm=false;
},
// 取消编辑寄件区域
cancelSendAreaForm(){
this.openSendAreaForm=false;
this.initSendAreaList();
},
// 公式改变
onQuoteExpressionChange(item){
// console.log(item)
this.form.exprList = item;
},
// 打开寄件区域
handelSelectSendArea(){
this.titleSendAreaForm="寄件区域";
this.openSendAreaForm=true;
},
// 打开派件区域编辑
handelSelectDispArea(){
this.titleDispAreaForm="派件区域";
this.openDispAreaForm=true;
},
// 编辑派件区域完成
handleDispAreaFormChanged(areaId){
this.form.dispAreaId = areaId;
this.initDispAreaList();
this.openDispAreaForm=false;
},
// 取消编辑派件区域
cancelDispAreaForm(){
this.openDispAreaForm=false;
this.initDispAreaList();
},
// 选择派件区域
onDispAreaChange(){
if(this.form.dispAreaId != null){
this.emisQuoteDispAreaList.forEach(item=>{
if(this.form.dispAreaId==item.areaId){
this.form.dispAreaName=item.areaName;
this.form.dispAreaSiteCode=item.areaSiteCode;
this.form.dispAreaSite=item.areaSite;
}
});
}
},
// 取消按钮
cancel() {
this.reset();
this.$emit("on-cancel");
},
// 表单重置
reset() {
this.form = {
quoteId: null,
quoteCode: null,
quoteName: null,
quoteType: null,
customerCode: null,
custNo: null,
useSiteCode: null,
transLineCode: null,
feeType: null,
prodCode: null,
recPayType: null,
billType: null,
otherType1: null,
otherType2: null,
carryType: null,
status: 1,
dispAreaId: null,
dispAreaName: null,
dispAreaSite: null,
dispAreaSiteCode: null,
dispAreaSiteId: null,
sendAreaId: null,
sendAreaName: null,
sendAreaSite: null,
sendAreaSiteCode: null,
sendAreaSiteId: null,
carriesNumber: null,
discardsNumber: null,
leastPrice: null,
priceType: null,
startDate: null,
endDate: null,
priorityLevel: null,
remark: null,
tenantId: null,
delFlag: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
createSite: null,
updateSite: null,
exprList:[],
};
this.resetForm("form");
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
// this.form.feeType='1001';
if (valid) {
// 复制的时候保存
if(this.isCopy){
this.form.quoteId=null;
addEmisQuotePrice(this.form).then(response => {
this.$modal.msgSuccess("保存成功");
this.$emit("on-changed");
});
return;
}
else{
if (this.form.quoteId != null) {
updateEmisQuotePrice(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.$emit("on-changed");
});
} else {
this.form.quoteId=null;
addEmisQuotePrice(this.form).then(response => {
this.$modal.msgSuccess("增加成功");
this.$emit("on-changed");
});
}
}
}
});
},
}
};
</script>
<style scoped>
.el-dialog .el-dialog__body {
margin: 5px!important;
padding: 0;
overflow: auto;
}
</style>