Commit 17cb701c authored by zs嵩's avatar zs嵩

Merge branch 'pre-release-zs-tmp-0302' into order_fee_update

parents 906a348a 5b36caa5
......@@ -6,8 +6,8 @@ VUE_APP_TITLE = 捷道管理系统-测试站
# 捷道管理系统/开发环境
VUE_APP_BASE_API = 'https://devapi.jd.qipx.top'
# VUE_APP_BASE_API = 'https://apitest.groupage.cn'
# VUE_APP_BASE_API = 'https://devapi.jd.qipx.top'
VUE_APP_BASE_API = 'https://apitest.groupage.cn'
# VUE_APP_BASE_API = 'http://110.41.143.128:48080'
# VUE_APP_BASE_API = 'http://127.0.0.1:48080'
......
This diff is collapsed.
......@@ -107,6 +107,24 @@ export function feeApplicationCreate(data) {
})
}
// 批量申请费用
export function feeApplicationBatch(data) {
return request({
url: "ecw/batch-order-fee-apply/create",
method: "post",
data: data
})
}
// 批量获取需要申请费用的订单详情
export function feeApplicationBatchGetOrderListByIds(data) {
return request({
url: "ecw/batch-order-fee-apply/getOrderListByIds",
method: "get",
params: data
})
}
// 批量申请费用
export function feeApplicationCreateBatch(data) {
return request({
......@@ -165,6 +183,7 @@ export function ApplicationListByOrderId(params) {
params: params
})
}
// 批量更新特需
export function specialNeedCreate(data) {
return request({
......@@ -932,7 +951,6 @@ export function noNeedPacks(data) {
})
}
// 完成打包
export function finishPacked(data) {
return request({
......
......@@ -2,6 +2,7 @@
<div class="dict-selector">
<el-select v-if="formType == 'select'" v-model="valueSync" filterable :placeholder="placeholder || $t('请选择')" :clearable="clearable" :multiple="multiple" :disabled="disabled" @change="(val) => $emit('change', val)">
<el-option v-for="dict in formattedList" :key="dict.value" :label="$l(dict, 'label')" :value="dict.value" />
<slot></slot>
</el-select>
<el-radio-group v-if="formType == 'radio'" v-model="valueSync" :disabled="disabled">
<el-radio v-for="dict in formattedList" :label="dict.value" :checked="valueSync === dict.value" :key="dict.value">{{ $l(dict, "label") }}</el-radio>
......
This diff is collapsed.
......@@ -14,6 +14,9 @@
display: flex;
justify-content: center;
align-items: center;
.fills {
flex: 1;
}
}
.custom-form-1 {
......@@ -25,3 +28,12 @@
width: 100%;
}
}
.el-table--mini {
.el-link {
font-size: 12px;
}
.el-table__header-wrapper th {
font-size: 12px !important;
}
}
This diff is collapsed.
This diff is collapsed.
<template>
<div class="shipping-update-error">
<div class="message-title">{{$t(`您确定撤销${cancelClearInfo.orderNo}已清关状态吗?`)}}</div>
<div class="message-title">{{ $t(`您确定撤销${cancelClearInfo.orderNo}已清关状态吗?`) }}</div>
<el-form ref="arrivalForm" :rules="rules" :model="cusClearanceObj" label-width="120px">
<el-form-item :label="$t('撤销理由')" prop="clEstTime">
<el-input v-if="!flag" v-model="cusClearanceObj.applyReason" type="textarea" :rows="4"></el-input>
<template v-else>
{{apply.applyReason}}
{{ apply.applyReason }}
</template>
</el-form-item>
</el-form>
<el-row class="operate-button">
<el-button v-if="!flag" type="primary" @click="onSubmit">{{$t('确定')}}</el-button>
<el-button v-if="flag" type="primary" @click="$router.push({path: '/bpm/process-instance/detail', query: {id: apply.bpmProcessId}})">{{$t('审核中')}}</el-button>
<el-button v-if="flag" plain type="primary" @click="canclAudit">{{$t('取消审核')}}</el-button>
<el-button @click="cancel">{{$t('取消')}}</el-button>
<el-button v-if="!flag" type="primary" @click="onSubmit">{{ $t("确定") }}</el-button>
<el-button v-if="flag" type="primary" @click="$router.push({ path: '/bpm/process-instance/detail', query: { id: apply.bpmProcessId } })">{{ $t("审核中") }}</el-button>
<el-button v-if="flag" plain type="primary" @click="canclAudit">{{ $t("取消审核") }}</el-button>
<el-button @click="cancel">{{ $t("取消") }}</el-button>
</el-row>
</div>
</template>
<script>
import { approvalCreate } from "@/api/ecw/boxSea";
import {cancelProcessInstance} from "@/api/bpm/processInstance";
import { approvalCreate } from "@/api/ecw/boxSea"
import { cancelProcessInstance } from "@/api/bpm/processInstance"
export default {
name: "updateError",
......@@ -29,7 +29,7 @@ export default {
components: {},
props: {
shipmentObj: Object,
cancelClearInfo: Object,
cancelClearInfo: Object
},
data() {
return {
......@@ -37,21 +37,19 @@ export default {
cusClearanceObj: {},
// 校验
rules: {
applyReason: [
{ required: true, message: this.$t("必填"), trigger: "change" },
]
applyReason: [{ required: true, message: this.$t("必填"), trigger: "change" }]
},
apply: {},
flag: false
};
}
},
created() {
let orders = this.shipmentObj.clearanceInfo?.clearanceOrderBackList
let order = orders.find(item=>item.orderId == this.cancelClearInfo.orderId)
console.log(order,11,this.cancelClearInfo.orderId,orders);
if(order){
let order = orders.find((item) => item.orderId == this.cancelClearInfo.orderId)
console.log(order, 11, this.cancelClearInfo.orderId, orders)
if (order) {
this.apply = order
if(this.apply.approvalStatus == 1){
if (this.apply.approvalStatus == 1) {
this.flag = true
}
}
......@@ -66,24 +64,24 @@ export default {
approvalType: 21,
orderId: this.cancelClearInfo.orderId,
applyReason: this.cusClearanceObj.applyReason
}).then(()=>{
this.$message.success("成功");
this.cancel()
})
}).then(() => {
this.$message.success("成功")
this.cancel()
})
}
});
})
},
/* 取消审核 */
canclAudit() {
cancelProcessInstance(this.apply.bpmProcessId, this.$t("取消审核")).then(() => {
this.$emit("closeDialog","edit");
});
this.$emit("closeDialog", "edit")
})
},
cancel() {
this.$emit("closeDialog","edit");
},
},
};
this.$emit("closeDialog", "edit")
}
}
}
</script>
<style lang="scss" scoped>
......
......@@ -3,7 +3,7 @@
<template slot="title">
<div class="el-dialog__title">{{ update ? '编辑' : '新增' }}</div>
</template>
<el-form label-width="100px" :rules="rules" :model="model" ref="form">
<el-form label-width="100px" :rules="rules" :model="model" ref="form" :disabled="loading">
<el-form-item :label="$t('币种')" prop="currencies">
<el-col :span="11">
<el-select v-model="model.sourceId" :placeholder="$t('请选择原币种')" :disabled="update" clearable style="width: 100%">
......@@ -46,7 +46,7 @@
</el-form-item>
<el-form-item :label="$t('有效期')" prop="expiration">
<el-col :span="11">
<el-date-picker v-model="model.expiration" type="datetime" :placeholder="$t('请选择有效期')" :picker-options="pickerOptions" style="width: 100%"/>
<el-date-picker v-model="model.expiration" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" :placeholder="$t('请选择有效期')" :picker-options="pickerOptions" style="width: 100%"/>
</el-col>
<el-col :span="2">&nbsp;</el-col>
<el-col :span="11">
......@@ -61,7 +61,7 @@
</el-form-item>
</el-form>
<template slot="footer">
<el-button type="primary" @click="submit">{{ $t('确定') }}</el-button>
<el-button type="primary" @click="submit" :disabled="loading">{{ $t('确定') }}</el-button>
<el-button @click="close">{{ $t('取消') }}</el-button>
</template>
</el-dialog>
......@@ -106,11 +106,11 @@ export default Vue.extend({
return dayjs(time).isBefore(dayjs().startOf('day').add(1, 'day'))
},
shortcuts: [
{ text: this.$t('一周'), onClick(picker) { picker.$emit('pick', dayjs().add(7, 'day')) }, },
{ text: this.$t('一个月'), onClick(picker) { picker.$emit('pick', dayjs().add(1, 'month')) }, },
{ text: this.$t('三个月'), onClick(picker) { picker.$emit('pick', dayjs().add(3, 'month')) }, },
{ text: this.$t('半年'), onClick(picker) { picker.$emit('pick', dayjs().add(6, 'month')) }, },
{ text: this.$t('一年'), onClick(picker) { picker.$emit('pick', dayjs().add(1, 'year')) }, },
{ text: this.$t('一周'), onClick(picker) { picker.$emit('pick', dayjs().add(7, 'day').toDate()) }, },
{ text: this.$t('一个月'), onClick(picker) { picker.$emit('pick', dayjs().add(1, 'month').toDate()) }, },
{ text: this.$t('三个月'), onClick(picker) { picker.$emit('pick', dayjs().add(3, 'month').toDate()) }, },
{ text: this.$t('半年'), onClick(picker) { picker.$emit('pick', dayjs().add(6, 'month').toDate()) }, },
{ text: this.$t('一年'), onClick(picker) { picker.$emit('pick', dayjs().add(1, 'year').toDate()) }, },
],
}
},
......@@ -127,6 +127,7 @@ export default Vue.extend({
data() {
return {
model: { ...modelDefaults, ...this.data, },
loading: false,
rules: {
currencies: { required: true, validator: this.validateCurrencies, },
amounts: { required: true, validator: this.validateAmounts, required: true, },
......@@ -143,10 +144,15 @@ export default Vue.extend({
},
async submit() {
if (await this.$refs['form'].validate().catch(() => {})) {
if (this.update) {
await updateCurrencyRate(this.model.id, this.model)
} else {
await createCurrencyRate(this.model)
this.loading = true
try {
if (this.update) {
await updateCurrencyRate(this.model.id, this.model)
} else {
await createCurrencyRate(this.model)
}
} finally {
this.loading = false
}
this.$emit('update:model', this.model)
......
......@@ -12,37 +12,41 @@
<el-table v-loading="query.loading" :data="query.result.list">
<el-table-column align="center" :label="$t('原币种')">
<template v-slot="{ row }">
{{ $l(currency(row.sourceId), 'title') }}
{{ $l(row.source, 'title') }}
</template>
</el-table-column>
<el-table-column align="center" :label="$t('支付币种')">
<template v-slot="{ row }">
{{ $l(currency(row.targetId), 'title') }}
{{ $l(row.target, 'title') }}
</template>
</el-table-column>
<el-table-column :label="$t('汇率')">
<el-table-column align="center" :label="$t('汇率')">
<template v-slot="{ row }">
{{ currency(row.sourceId).fuhao }} {{ row.sourceAmount }} : {{ row.targetAmount }} {{ currency(row.targetId).fuhao }}
{{ row.source.fuhao }} {{ row.sourceAmount }} : {{ row.targetAmount }} {{ row.target.fuhao }}
</template>
</el-table-column>
<el-table-column align="center" :label="$t('有效期')">
<template v-slot="{ row }">
{{ dayjs(row.expiration).format('YYYY-MM-DD HH:mm:ss') }}
{{ parseTime(row.expiration) }}
</template>
</el-table-column>
<el-table-column align="left" :label="$t('国家')" prop="countries" :formatter="countries"/>
<el-table-column :label="$t('备注')" prop="remarks"/>
<el-table-column :label="$t('状态')">
<el-table-column align="center" :label="$t('国家')" prop="countries" :formatter="countries"/>
<el-table-column align="center" :label="$t('备注')" prop="remarks"/>
<el-table-column align="center" :label="$t('状态')">
<template v-slot="{ row }">
<dict-tag :type="DICT_TYPE.CURRENCY_RATE_STATUS" :value="expired(row.expiration)" />
</template>
</el-table-column>
<el-table-column :label="$t('最后修改时间')">
<el-table-column align="center" :label="$t('最后修改时间')">
<template v-slot="{ row }">
{{ parseTime(row.updateTime) }}
</template>
</el-table-column>
<el-table-column :label="$t('最后修改人')" prop="updater"/>
<el-table-column align="center" :label="$t('最后修改人')">
<template v-slot="{ row }">
{{ user(row.updater).nickname }}
</template>
</el-table-column>
<el-table-column align="center" :label="$t('操作')">
<template v-slot="{ row }">
<el-button size="mini" type="text" icon="el-icon-edit" v-hasPermi="['ecw:currency:rate:update']" @click="edit(row)">{{ $t('修改') }}</el-button>
......@@ -56,7 +60,7 @@
<pagination :total="query.result.total" :page.sync="query.params.page" :limit.sync="query.params.rows" @pagination="pagination"/>
<form-dialog :visible.sync="dialogs.form.visible" :id="dialogs.form.id" :data="dialogs.form.data" @update:model="pagination" :countries="dict.countries" :currencies="dict.currencies"/>
<logs-dialog :visible.sync="dialogs.logs.visible" :id="dialogs.logs.id" :source="dialogs.logs.source" :target="dialogs.logs.target"/>
<logs-dialog :visible.sync="dialogs.logs.visible" :id="dialogs.logs.id" :source="dialogs.logs.source" :target="dialogs.logs.target" :users="map.users" :countries="map.countries"/>
</div>
</template>
......@@ -71,6 +75,7 @@ import LogsDialog from './logs.vue'
import Query from './query.vue'
import Audit from './audit.vue'
import Decimal from 'decimal.js'
import { listAllSimpl } from '@/api/system/user'
const components = { FormDialog, LogsDialog, Query, Audit, }
......@@ -78,7 +83,7 @@ export default Vue.extend({
components,
data() {
return {
map: { countries: {}, currencies: {}, },
map: { users: {}, countries: {}, currencies: {}, },
dict: { countries: [], currencies: [], },
query: {
show: true,
......@@ -97,7 +102,9 @@ export default Vue.extend({
async pagination() {
this.query.loading = true
try {
this.query.result = await getCurrencyRatePage(this.query.params).then(it => it.data)
const result = await getCurrencyRatePage(this.query.params).then(it => it.data)
result.list = result.list.map(e => (e.source = this.currency(e.sourceId), e.target = this.currency(e.targetId), e))
this.query.result = result
} finally {
this.query.loading = false
}
......@@ -105,14 +112,6 @@ export default Vue.extend({
expired(day) {
return dayjs().isAfter(day) ? 1 : 0
},
amount(row) {
const source = this.currency(row.sourceId)
const target = this.currency(row.targetId)
return `${source.fuhao} ${row.sourceAmount} : ${target.fuhao} ${row.targetAmount}`
},
rate(row) {
return this.decimal(row.targetAmount).dividedBy(row.sourceAmount).toFixed(8)
},
add() {
this.dialogs.form = { visible: true, id: null, data: {}, }
},
......@@ -123,7 +122,7 @@ export default Vue.extend({
this.$confirm(this.$t('确定要删除吗?'), this.$t('确认'), { type: 'warning' }).then(() => deleteCurrencyRate(row.id)).catch(() => {}).finally(this.pagination)
},
logs(row) {
this.dialogs.logs = { visible: true, id: row.id, source: this.currency(row.sourceId), target: this.currency(row.targetId), }
this.dialogs.logs = { visible: true, id: row.id, source: row.source, target: row.target, }
},
async reverse(row) {
var swap = { sourceId: row.targetId, targetId: row.sourceId, }
......@@ -134,6 +133,9 @@ export default Vue.extend({
decimal(a) {
return new Decimal(a)
},
user(id) {
return this.map.users[id] || { id, }
},
country(id) {
return this.map.countries[id]
},
......@@ -144,9 +146,10 @@ export default Vue.extend({
return this.map.currencies[id]
},
},
async mounted() {
async created() {
this.dict.countries = await getCountryListAll().then(it => it.data)
this.dict.currencies = await getCurrencyList().then(it => it.data)
this.map.users = Array.prototype.reduce.apply(await listAllSimpl().then(it => it.data),[(m, e) => (m[e.id] = e, m), {}])
this.map.countries = this.dict.countries.reduce((m, e) => (m[e.id] = e, m), {})
this.map.currencies = this.dict.currencies.reduce((m, e) => (m[e.id] = e, m), {})
await this.pagination()
......
......@@ -6,12 +6,17 @@
<el-table class="logs" :data="list" v-loading="loading">
<el-table-column type="index" :label="$t('序号')" align="center"/>
<el-table-column :label="$t('修改人')">
<template v-slot="{ row }"><audit :row="row"/></template>
<template v-slot="{ row }">
<div>
<div><i>{{ user(row.updater).nickname }}</i>: <i class="remarks">{{ row.remarks || $t('') }}</i></div>
<div><i>{{ parseTime(row.updateTime) }}</i></div>
</div>
</template>
</el-table-column>
<el-table-column :label="$t('金额修改')" align="right">
<el-table-column :label="$t('金额修改')" align="center">
<template v-slot="{ row }">
<div v-if="row.sourceAmount1 == row.sourceAmount2 && row.targetAmount1 == row.targetAmount2">
<div>{{ amount(row.sourceAmount1, row.targetAmount1) }}</div>
<div v-if="row.sourceAmount1 === row.sourceAmount2 && row.targetAmount1 === row.targetAmount2">
<div>{{ amount(row.sourceAmount2, row.targetAmount2) }}</div>
</div>
<div v-else>
<div class="after">{{ amount(row.sourceAmount2, row.targetAmount2) }}</div>
......@@ -19,25 +24,25 @@
</div>
</template>
</el-table-column>
<el-table-column :label="$t('汇率变化')" align="left">
<el-table-column :label="$t('国家变化')" align="center">
<template v-slot="{ row }">
<div v-if="row.sourceAmount1 == row.sourceAmount2 && row.targetAmount1 == row.targetAmount2">
<div>1 : {{ rate(row.sourceAmount1, row.targetAmount1) }}</div>
<div v-if="row.countries1String === row.countries2String">
<div>{{ countriesString(row.countries2) }}</div>
</div>
<div v-else>
<div class="after">1 : {{ rate(row.sourceAmount2, row.targetAmount2) }}</div>
<div class="before">1 : {{ rate(row.sourceAmount1, row.targetAmount1) }}</div>
<div class="after">{{ row.countries2String }}</div>
<div class="before">{{ row.countries1String }}</div>
</div>
</template>
</el-table-column>
<el-table-column :label="$t('日期变化')">
<el-table-column :label="$t('日期变化')" align="center">
<template v-slot="{ row }">
<div v-if="dayjs(row.sourceExpiration) != dayjs(row.targetExpiration)">
<div class="after">{{ dayjs(row.targetExpiration).format('YYYY-MM-DD HH:mm:ss') }}</div>
<div class="before">{{ dayjs(row.sourceExpiration).format('YYYY-MM-DD HH:mm:ss') }}</div>
<div v-if="row.expiration1 === row.expiration2">
<div>{{ parseTime(row.expiration2) }}</div>
</div>
<div v-else>
<div>{{ dayjs(row.sourceExpiration).format('YYYY-MM-DD HH:mm:ss') }}</div>
<div class="after">{{ parseTime(row.expiration2) }}</div>
<div class="before">{{ parseTime(row.expiration1) }}</div>
</div>
</template>
</el-table-column>
......@@ -48,7 +53,6 @@
<script>
import { getCurrencyRateLogs } from '@/api/ecw/currencyRate'
import dayjs from 'dayjs'
import Decimal from 'decimal.js'
import Vue from 'vue'
import Audit from './audit.vue'
......@@ -62,6 +66,8 @@ const props = {
visible: { type: Boolean, default: false, },
source: Object,
target: Object,
users: Object,
countries: Object,
}
export default Vue.extend({
......@@ -72,10 +78,15 @@ export default Vue.extend({
return { loading: false, page: 1, limit: 10, list: [], total: 0, }
},
methods: {
dayjs,
close() {
this.$emit('update:visible', false)
},
user(id) {
return this.users[id] || { id, nickname: id, }
},
countriesString(list) {
return (list || []).map(e => this.countries[e]).filter(e => e).map(c => this.$l(c, 'name')).join(',')
},
decimal(a) {
return new Decimal(a)
},
......@@ -83,14 +94,14 @@ export default Vue.extend({
return `${this.source.fuhao} ${amount1} : ${this.target.fuhao} ${amount2}`
},
rate(amount1, amount2) {
return this.decimal(amount1).dividedBy(amount2).toFixed(8)
return this.decimal(amount2).dividedBy(amount1).toFixed(8)
},
async pagination() {
this.loading = true
try {
const data = await getCurrencyRateLogs({ id: this.id, page: this.page, rows: this.limit, }).then(it => it.data)
this.list = data.list
this.total = data.total
const result = await getCurrencyRateLogs({ id: this.id, page: this.page, rows: this.limit, }).then(it => it.data)
this.list = result.list.map(e => (e.countries1String = this.countriesString(e.countries1), e.countries2String = this.countriesString(e.countries2), e))
this.total = result.total
} finally {
this.loading = false
}
......
......@@ -21,7 +21,7 @@
</el-select>
</el-form-item>
<el-form-item :label="$t('有效期')" prop="expiration">
<el-date-picker v-model="params.expiration" type="daterange" value-format="yyyy-MM-dd" :start-placeholder="$t('开始日期')" :end-placeholder="$t('结束日期')"/>
<el-date-picker v-model="params.expiration" type="datetimerange" value-format="yyyy-MM-dd HH:mm:ss" :start-placeholder="$t('开始日期')" :end-placeholder="$t('结束日期')"/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="submit">{{ $t('搜索') }}</el-button>
......@@ -48,12 +48,17 @@ export default Vue.extend({
params: this.value,
}
},
watch: {
value(v) {
this.params = v
}
},
methods: {
submit() {
this.$emit('query', this.params)
},
clear() {
this.$emit('update:value', this.params = {})
this.$emit('update', { expiration: ['', ''], countries: [], sourceId: '', targetId: '', expired: null,})
},
},
})
......
......@@ -129,7 +129,7 @@
<template slot-scope="{ row }">
<div v-for="item in row.netReceiptsTotalFeeGroupDtoList || []" :key="item.currencyId">{{ item.amount }}{{ item.currencyName }}</div>
</template>
</el-table-column>
</el-table-column>
<el-table-column :label="$t('已收总金额')" width="150" align="center" prop="writeOffTotalFeeGroupDtoList">
<template slot-scope="{ row }">
<div v-for="item in row.writeOffTotalFeeGroupDtoList || []" :key="item.currencyId">{{ item.amount }}{{ item.currencyName }}</div>
......@@ -278,14 +278,14 @@
</el-table-column>
<el-table-column :label="$t('客户经理')" prop="salesmanName" width="150" align="center"></el-table-column>
<el-table-column :label="$t('发货人')" width="300" align="center">
<template slot-scope="{ row }"
><router-link :to="'/customer/query/' + row.consignorCustomerId"> {{ row.consignorCustomerNumber }}-{{ isChinese ? row.consignorName : row.consignorNameEn }}-{{ row.consignorPhone }} </router-link></template
>
<template slot-scope="{ row }">
<router-link :to="'/customer/query/' + row.consignorCustomerId"> {{ row.consignorCustomerNumber }}-{{ isChinese ? row.consignorName : row.consignorNameEn }}-{{ row.consignorPhone }} </router-link>
</template>
</el-table-column>
<el-table-column :label="$t('收货人')" width="300" align="center">
<template slot-scope="{ row }">
<router-link :to="'/customer/query/' + row.consigneeCustomerId">{{ row.consigneeCustomerNumber }}-{{ isChinese ? row.consigneeName : row.consigneeNameEn }}-{{ row.consigneePhone }} </router-link></template
>
<router-link :to="'/customer/query/' + row.consigneeCustomerId">{{ row.consigneeCustomerNumber }}-{{ isChinese ? row.consigneeName : row.consigneeNameEn }}-{{ row.consigneePhone }} </router-link>
</template>
</el-table-column>
<el-table-column :label="$t('订单入仓时间')" width="150" align="center">
<template slot-scope="{ row }">
......
......@@ -71,7 +71,9 @@
<!-- <el-input v-if="$route.query.type==1 && form.relation==2" v-model="$route.query.customer.defaultEmail" disabled class="w-200"/>
<el-input v-else v-model="form.consigneeEmail" disabled class="w-200"/> -->
</el-form-item>
</div>
<div class="form-section">
<el-form-item :label="$t('客户状态')" prop="customerStatus">
<el-select v-model="form.customerStatus" clearable :placeholder="$t('请选择')" class="w-200">
<el-option v-for="dict in getDictDatas(DICT_TYPE.ECW_OFFER_CUSTOMER_STATUS)" :key="dict.value" :label="isChinese ? dict.label : dict.labelEn" :value="parseInt(dict.value)" />
......@@ -93,7 +95,6 @@
</el-select>
</el-form-item>
</div>
<!-- <el-descriptions :column="3" border>
<el-descriptions-item :label="$t('*发货人')" :labelStyle="labelStyle" >
<el-form-item label="" label-width="0" style="margin-bottom: 0" prop="consignorId" required :error="$t('发货人不能为空')">
......@@ -306,11 +307,11 @@
{{ $t("原价") }}
</div>
<div>
{{ $t("运费") }}{{ row.fee.groupDto.orgClearanceFeePrice }} {{ currencyMap[row.fee.freightCurrency] }} /
{{ $t("运费") }}{{ row.fee.groupDto.orgFreightPrice }} {{ currencyMap[row.fee.freightCurrency] }} /
{{ unitMap[row.fee.freightVolume] }}
</div>
<div>
{{ $t("清关费") }}{{ row.fee.groupDto.orgFreightPrice }} {{ currencyMap[row.fee.clearanceFeeCurrency] }} /
{{ $t("清关费") }}{{ row.fee.groupDto.orgClearanceFeePrice }} {{ currencyMap[row.fee.clearanceFeeCurrency] }} /
{{ unitMap[row.fee.clearanceFeeVolume] }}
</div>
<div style="color: red;font-weight: 700;">
......@@ -1268,50 +1269,76 @@ export default {
formData.transportVO.packageTypeArr = formData.transportVO.packageType.split(",").filter((item) => item && item != "")
}
if (res.data.offerProdRespVOList) {
res.data.offerProdRespVOList.forEach((item) => {
formData.prodCreateReqVOList.push({
goodsType: item.goodsType,
brand: item.brand,
unit: item.unit,
channelId: item.channelId,
lineId: item.lineId,
prodId: item.prodId,
num: item.num,
quantity: item.quantity,
boxGauge: item.boxGauge,
volume: item.volume,
transportId: item.transportId,
weight: item.weight,
worth: item.worth,
specialPriceType: item.specialPriceType,
oneSeaFreight: item.oneSeaFreight,
orgFreightPrice: item.originalSeaFreight,
originalSeaFreight: item.originalSeaFreight,
oneClearanceFee: item.oneClearanceFreight,
oneClearanceFreight: item.oneClearanceFreight,
orgClearanceFeePrice: item.originalClearanceFreight,
originalClearanceFreight: item.originalClearanceFreight,
freightVolume: item.seaFreightVolume,
seaFreightVolume: item.seaFreightVolume,
clearanceFeeVolume: item.clearanceFreightVolume,
clearanceFreightVolume: item.clearanceFreightVolume,
charging: item.charging,
freightCurrency: item.seaFreightCurrency,
seaFreightCurrency: item.seaFreightCurrency,
freight: item.seaFreight,
clearanceFeeCurrency: item.clearanceFreightCurrency,
clearanceFreightCurrency: item.clearanceFreightCurrency,
clearanceFee: item.clearanceFreight,
prodAttrArr:
item.prodAttrIds && item.prodAttrIds != ""
? item.prodAttrIds
if (this.$route.query.id) {
res.data.offerProdRespVOList.forEach((item) => {
formData.prodCreateReqVOList.push({
goodsType: item.goodsType,
brand: item.brand,
unit: item.unit,
channelId: item.channelId,
lineId: item.lineId,
prodId: item.prodId,
num: item.num,
quantity: item.quantity,
boxGauge: item.boxGauge,
volume: item.volume,
transportId: item.transportId,
weight: item.weight,
worth: item.worth,
specialPriceType: item.specialPriceType,
oneSeaFreight: item.oneSeaFreight,
orgFreightPrice: item.originalSeaFreight,
originalSeaFreight: item.originalSeaFreight,
oneClearanceFee: item.oneClearanceFreight,
oneClearanceFreight: item.oneClearanceFreight,
orgClearanceFeePrice: item.originalClearanceFreight,
originalClearanceFreight: item.originalClearanceFreight,
freightVolume: item.seaFreightVolume,
seaFreightVolume: item.seaFreightVolume,
clearanceFeeVolume: item.clearanceFreightVolume,
clearanceFreightVolume: item.clearanceFreightVolume,
charging: item.charging,
freightCurrency: item.seaFreightCurrency,
seaFreightCurrency: item.seaFreightCurrency,
freight: item.seaFreight,
clearanceFeeCurrency: item.clearanceFreightCurrency,
clearanceFreightCurrency: item.clearanceFreightCurrency,
clearanceFee: item.clearanceFreight,
prodAttrArr:
item.prodAttrIds && item.prodAttrIds != ""
? item.prodAttrIds
.split(",")
.filter((item) => item != "")
.map((item) => +item)
: []
: []
})
})
})
} else {
res.data.offerProdRespVOList.forEach((item) => {
formData.prodCreateReqVOList.push({
goodsType: item.goodsType,
brand: item.brand,
unit: item.unit,
channelId: item.channelId,
lineId: item.lineId,
prodId: item.prodId,
num: item.num,
quantity: item.quantity,
boxGauge: item.boxGauge,
volume: item.volume,
transportId: item.transportId,
weight: item.weight,
worth: item.worth,
prodAttrArr:
item.prodAttrIds && item.prodAttrIds != ""
? item.prodAttrIds
.split(",")
.filter((item) => item != "")
.map((item) => +item)
: []
})
})
}
}
if (this.$route.query.copyId) {
......@@ -1573,7 +1600,11 @@ export default {
var a = null
if(res.data.prodCostDtoList[index]) {
a = res.data.prodCostDtoList[index]
a['specialPriceType'] = item.specialPriceType
if(this.$route.query.copyId==undefined) {
a['specialPriceType'] = item.specialPriceType
} else {
a['specialPriceType'] = false
}
}
this.$set(item, "fee", a)
})
......
......@@ -302,7 +302,6 @@
<el-dropdown>
<el-button icon="el-icon-plus" circle type="primary"></el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="$router.push('detail?offerId=' + scope.row.offerId)" v-hasPermi="['ecw:offer:show']">{{ $t("详情") }}</el-dropdown-item>
<el-dropdown-item @click.native="$router.push('edit?id=' + scope.row.offerId)" v-if="[1, 2, 3, 7].indexOf(scope.row.status) > -1" v-hasPermi="['ecw:offer:update']">{{ $t("编辑") }}</el-dropdown-item>
<el-dropdown-item @click.native="$router.push('create?copyId=' + scope.row.offerId)" v-if="[1, 2, 3, 7].indexOf(scope.row.status) > -1" v-hasPermi="['ecw:offer:update']">{{ $t("复制") }}</el-dropdown-item>
<el-dropdown-item @click.native="handleAddOffer(scope.row)" v-if="[1, 3, 7].indexOf(scope.row.status) > -1">{{ $t("跟进") }}</el-dropdown-item>
......@@ -312,6 +311,7 @@
<el-dropdown-item @click.native="recovery(scope.row.offerId)" v-if="[0].indexOf(scope.row.status) > -1" v-hasPermi="['ecw:offer:recovery']">{{ $t("恢复") }}</el-dropdown-item>
<el-dropdown-item @click.native="deleteOffer(scope.row.offerId)" v-if="[0, 1, 2, 3, 4, 5, 6, 7].indexOf(scope.row.status) > -1" v-hasPermi="['ecw:offer:delete']">{{ $t("删除") }}</el-dropdown-item>
</el-dropdown-menu>
<el-dropdown-item @click.native="$router.push('detail?offerId=' + scope.row.offerId)" v-hasPermi="['ecw:offer:show']">{{ $t("详情") }}</el-dropdown-item>
</el-dropdown>
</template>
</el-table-column>
......
......@@ -7,7 +7,7 @@
</el-form-item>
<el-form-item :label="$t('结果')" prop="result">
<dict-selector form-type="radio" :type="DICT_TYPE.ECW_OFFER_RESULT" v-model="form.result" :disabled="saleStage==11?true:false"/>
<dict-selector form-type="radio" :type="DICT_TYPE.ECW_OFFER_RESULT" v-model="form.result" :disabled="saleStage==6?true:false"/>
</el-form-item>
<template v-if="form.result==1">
......
......@@ -5,18 +5,18 @@
<el-form-item :label="$t('编号')" prop="orderNo">
<el-input class="w-200" v-model.trim="noParam.value" :placeholder="$t('请输入订单号、唛头、提单号')" clearable @keyup.enter.native="handleQuery" @input="replaceSpace(noParam, 'value')">
<template slot="prepend">
<dict-selector :type="DICT_TYPE.ORDER_QUERY_NO_FIELD" defaultable v-model="noParam.key"/>
<dict-selector :type="DICT_TYPE.ORDER_QUERY_NO_FIELD" defaultable v-model="noParam.key" />
</template>
</el-input>
</el-form-item>
<el-form-item :label="$t('发货人')" prop="consignorKey">
<el-input v-model.trim="queryParams.consignorKey" :placeholder="$t('发货人')" clearable @keyup.enter.native="handleQuery" class="w-200"/>
<el-input v-model.trim="queryParams.consignorKey" :placeholder="$t('发货人')" clearable @keyup.enter.native="handleQuery" class="w-200" />
</el-form-item>
<el-form-item :label="$t('收货人')" prop="consigneeKey">
<el-input v-model.trim="queryParams.consigneeKey" :placeholder="$t('收货人')" clearable @keyup.enter.native="handleQuery" class="w-200"/>
<el-input v-model.trim="queryParams.consigneeKey" :placeholder="$t('收货人')" clearable @keyup.enter.native="handleQuery" class="w-200" />
</el-form-item>
<el-form-item :label="$t('控货状态')" prop="isCargoControl">
<dict-selector v-model="queryParams.cargoControlStatusList" multiple :type="DICT_TYPE.CONTROL_GOODS_STATUS" clearable @change="handleQuery" class="w-200"/>
<dict-selector v-model="queryParams.cargoControlStatusList" multiple :type="DICT_TYPE.CONTROL_GOODS_STATUS" clearable @change="handleQuery" class="w-200" />
</el-form-item>
<div>
<el-form-item :label="$t('始发仓')" prop="startWarehouseIds">
......@@ -41,10 +41,10 @@
</el-form-item>
</div>
<el-form-item :label="$t('客户经理')">
<user-selector manage v-model="queryParams.salesmanIds" multiple clearable @change="handleQuery" :prepend="{ id: 0, nickname: $t('未分配客户经理') }" class="w-200"/>
<user-selector manage v-model="queryParams.salesmanIds" multiple clearable @change="handleQuery" :prepend="{ id: 0, nickname: $t('未分配客户经理') }" class="w-200" />
</el-form-item>
<el-form-item :label="$t('运输方式')" prop="transportId" v-show="showSearch">
<dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model.number="queryParams.transportId" clearable @change="handleQuery" class="w-200"/>
<dict-selector :type="DICT_TYPE.ECW_TRANSPORT_TYPE" v-model.number="queryParams.transportId" clearable @change="handleQuery" class="w-200" />
</el-form-item>
<el-form-item :label="$t('出货渠道')" prop="channelIds">
<selector clearable :options="channelList" :label-field="$l('name')" value-field="channelId" v-model="queryParams.channelIds" multiple class="w-200"></selector>
......@@ -55,28 +55,27 @@
<el-form-item :label="$t('商品') + ':'" v-show="showSearch">
<el-input v-model.trim="prodParam.value" :placeholder="$t('请输入商品类型、品名或品牌')" clearable @keyup.enter.native="handleQuery" class="w-200">
<template slot="prepend">
<dict-selector :type="DICT_TYPE.ORDER_QUERY_PROD_FIELD" defaultable v-model="prodParam.key"/>
<dict-selector :type="DICT_TYPE.ORDER_QUERY_PROD_FIELD" defaultable v-model="prodParam.key" />
</template>
</el-input>
</el-form-item>
<el-form-item :label="$t('订单状态')" prop="statusList" v-show="showSearch">
<dict-selector :type="DICT_TYPE.ORDER_STATUS" multiple v-model="queryParams.statusList" @keyup.enter.native="handleQuery" clearable @change="handleQuery" class="w-200"/>
<dict-selector :type="DICT_TYPE.ORDER_STATUS" multiple v-model="queryParams.statusList" @keyup.enter.native="handleQuery" clearable @change="handleQuery" class="w-200" />
</el-form-item>
<!--<el-form-item :label="$t('提单号')" prop="tidanNo">
<el-input v-model.trim="queryParams.tidanNo" :placeholder="$t('提单号')" clearable @keyup.enter.native="handleQuery" />
</el-form-item>-->
<el-form-item :label="$t('报关方式')" prop="customsTypes" v-show="showSearch">
<dict-selector :type="DICT_TYPE.ECW_CUSTOMS_TYPE" multiple v-model="queryParams.customsTypes" clearable @change="handleQuery" class="w-200"/>
<dict-selector :type="DICT_TYPE.ECW_CUSTOMS_TYPE" multiple v-model="queryParams.customsTypes" clearable @change="handleQuery" class="w-200" />
</el-form-item>
<!--<el-form-item :label="$t('唛头')" prop="marks">
<el-input v-model="queryParams.marks" :placeholder="$t('唛头')" clearable @keyup.enter.native="handleQuery" />
</el-form-item>-->
<el-form-item :label="$t('备案属性')" prop="productRecords" v-show="showSearch">
<dict-selector :type="DICT_TYPE.PRODUCT_RECORD_ATTRIBUTE" multiple v-model="queryParams.productRecords" clearable @change="handleQuery" class="w-200"/>
<dict-selector :type="DICT_TYPE.PRODUCT_RECORD_ATTRIBUTE" multiple v-model="queryParams.productRecords" clearable @change="handleQuery" class="w-200" />
</el-form-item>
<el-form-item :label="$t('外部仓')" prop="isExternalWarehouse" v-show="showSearch">
<el-select v-model="queryParams.isExternalWarehouse" :placeholder="$t('请选择')" clearable @change="handleQuery" class="w-200">
......@@ -98,19 +97,19 @@
</el-form-item>-->
<el-form-item :label="$t('提货状态')" v-show="showSearch">
<dict-selector :type="DICT_TYPE.PICK_STATE" multiple v-model="queryParams.pickStateList" clearable @change="handleQuery" class="w-200"/>
<dict-selector :type="DICT_TYPE.PICK_STATE" multiple v-model="queryParams.pickStateList" clearable @change="handleQuery" class="w-200" />
</el-form-item>
<el-form-item :label="$t('放货率')" v-show="showSearch">
<el-input type="number" v-model.trim="releaseRatio.value" :placeholder="$t('请输入数字')" clearable @keyup.enter.native="handleQuery" class="w-200">
<template slot="prepend">
<dict-selector :type="DICT_TYPE.RELEASE_RATIO_FIELD" defaultable v-model="releaseRatio.key"/>
<dict-selector :type="DICT_TYPE.RELEASE_RATIO_FIELD" defaultable v-model="releaseRatio.key" />
</template>
</el-input>
</el-form-item>
<el-form-item :label="$t('提货率')" v-show="showSearch">
<el-input type="number" v-model.trim="pickRatio.value" :placeholder="$t('请输入数字')" clearable @keyup.enter.native="handleQuery" class="w-200">
<template slot="prepend">
<dict-selector :type="DICT_TYPE.PICK_RATIO_FIELD" defaultable v-model="pickRatio.key"/>
<dict-selector :type="DICT_TYPE.PICK_RATIO_FIELD" defaultable v-model="pickRatio.key" />
</template>
</el-input>
</el-form-item>
......@@ -128,7 +127,7 @@
</el-select>
</el-form-item>
<div class="flex pb-20">
<dict-selector :type="DICT_TYPE.ECW_BEGINTIME_TYPE_ENDTIME" v-model="dateFilterType" defaultable class="w-200 mr-5" />
<dict-selector :type="DICT_TYPE.ECW_BEGINTIME_TYPE_ENDTIME" v-model="dateFilterType" defaultable class="w-200 mr-5" />
<el-date-picker v-model="dateFilter" type="datetimerange" range-separator="-" :start-placeholder="$t('开始日期')" :end-placeholder="$t('结束日期')" value-format="yyyy-MM-dd HH:mm:ss" @change="handleQuery"> </el-date-picker>
<el-button type="primary" icon="el-icon-search" @click="handleQuery" :loading="loading" class="ml-10">{{ $t("搜索") }}</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">{{ $t("重置") }}</el-button>
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
'use strict'
const path = require('path')
const defaultSettings = require('./src/settings.js')
"use strict"
const path = require("path")
const defaultSettings = require("./src/settings.js")
function resolve(dir) {
return path.join(__dirname, dir)
}
const CompressionPlugin = require('compression-webpack-plugin')
const CompressionPlugin = require("compression-webpack-plugin")
const name = process.env.VUE_APP_TITLE || '捷道管理系统' // 网页标题
const name = process.env.VUE_APP_TITLE || "捷道管理系统" // 网页标题
const port = process.env.port || process.env.npm_config_port || 80 // 端口
......@@ -19,18 +19,18 @@ module.exports = {
// 部署生产环境和开发环境下的URL。
// 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上
// 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
publicPath: process.env.PUBLIC_PATH ? process.env.PUBLIC_PATH : '/',
publicPath: process.env.PUBLIC_PATH ? process.env.PUBLIC_PATH : "/",
// 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist)
outputDir: 'dist',
outputDir: "dist",
// 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)
assetsDir: 'static',
assetsDir: "static",
// 是否开启eslint保存检测,有效值:ture | false | 'error'
lintOnSave: process.env.NODE_ENV === 'development',
lintOnSave: process.env.NODE_ENV === "development",
// 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
productionSourceMap: false,
// webpack-dev-server 相关配置
devServer: {
host: '0.0.0.0',
host: "0.0.0.0",
port: port,
open: true,
proxy: {
......@@ -40,14 +40,14 @@ module.exports = {
// target: `http://api-dashboard.yudao.iocoder.cn`,
changeOrigin: true,
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: ''
["^" + process.env.VUE_APP_BASE_API]: ""
}
}
},
disableHostCheck: true
},
css: {
sourceMap: true, // 开启 CSS source maps
sourceMap: true, // 开启 CSS source maps
loaderOptions: {
sass: {
sassOptions: { outputStyle: "expanded" }
......@@ -58,81 +58,76 @@ module.exports = {
name: name,
resolve: {
alias: {
'@': resolve('src')
"@": resolve("src")
}
},
plugins: [
// http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解压缩静态文件
new CompressionPlugin({
test: /\.(js|css|html)?$/i, // 压缩文件格式
filename: '[path].gz[query]', // 压缩后的文件名
algorithm: 'gzip', // 使用gzip压缩
minRatio: 0.8 // 压缩率小于1才会压缩
test: /\.(js|css|html)?$/i, // 压缩文件格式
filename: "[path].gz[query]", // 压缩后的文件名
algorithm: "gzip", // 使用gzip压缩
minRatio: 0.8 // 压缩率小于1才会压缩
})
],
]
},
chainWebpack(config) {
config.plugins.delete('preload') // TODO: need test
config.plugins.delete('prefetch') // TODO: need test
config.plugins.delete("preload") // TODO: need test
config.plugins.delete("prefetch") // TODO: need test
// set svg-sprite-loader
config.module.rule("svg").exclude.add(resolve("src/assets/icons")).end()
config.module
.rule('svg')
.exclude.add(resolve('src/assets/icons'))
.end()
config.module
.rule('icons')
.rule("icons")
.test(/\.svg$/)
.include.add(resolve('src/assets/icons'))
.include.add(resolve("src/assets/icons"))
.end()
.use('svg-sprite-loader')
.loader('svg-sprite-loader')
.use("svg-sprite-loader")
.loader("svg-sprite-loader")
.options({
symbolId: 'icon-[name]'
symbolId: "icon-[name]"
})
.end()
config
.when(process.env.NODE_ENV !== 'development',
config => {
config
.plugin('ScriptExtHtmlWebpackPlugin')
.after('html')
.use('script-ext-html-webpack-plugin', [{
// `runtime` must same as runtimeChunk name. default is `runtime`
inline: /runtime\..*\.js$/
}])
.end()
config
.optimization.splitChunks({
chunks: 'all',
cacheGroups: {
libs: {
name: 'chunk-libs',
test: /[\\/]node_modules[\\/]/,
priority: 10,
chunks: 'initial' // only package third parties that are initially dependent
},
elementUI: {
name: 'chunk-elementUI', // split elementUI into a single package
priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
},
commons: {
name: 'chunk-commons',
test: resolve('src/components'), // can customize your rules
minChunks: 3, // minimum common number
priority: 5,
reuseExistingChunk: true
}
}
})
config.optimization.runtimeChunk('single'),
config.when(process.env.NODE_ENV !== "development", (config) => {
config
.plugin("ScriptExtHtmlWebpackPlugin")
.after("html")
.use("script-ext-html-webpack-plugin", [
{
from: path.resolve(__dirname, './public/robots.txt'), //防爬虫文件
to: './', //到根目录下
// `runtime` must same as runtimeChunk name. default is `runtime`
inline: /runtime\..*\.js$/
}
])
.end()
config.optimization.splitChunks({
chunks: "all",
cacheGroups: {
libs: {
name: "chunk-libs",
test: /[\\/]node_modules[\\/]/,
priority: 10,
chunks: "initial" // only package third parties that are initially dependent
},
elementUI: {
name: "chunk-elementUI", // split elementUI into a single package
priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
},
commons: {
name: "chunk-commons",
test: resolve("src/components"), // can customize your rules
minChunks: 3, // minimum common number
priority: 5,
reuseExistingChunk: true
}
}
})
config.optimization.runtimeChunk("single"),
{
from: path.resolve(__dirname, "./public/robots.txt"), //防爬虫文件
to: "./" //到根目录下
}
)
})
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment