Commit c050efab authored by honghy's avatar honghy Committed by wux

需求95 报价单页面和列表调整

parent 2e69ea5e
...@@ -43,6 +43,15 @@ export function getOfferPage(query) { ...@@ -43,6 +43,15 @@ export function getOfferPage(query) {
}) })
} }
// 汇总
export function statistics(query) {
return request({
url: "/ecw/offer/statistics",
method: "get",
params: query
})
}
// 导出报价单管理 Excel // 导出报价单管理 Excel
export function exportOfferExcel(query) { export function exportOfferExcel(query) {
return request({ return request({
......
...@@ -4941,6 +4941,10 @@ ...@@ -4941,6 +4941,10 @@
"标题(英文)": "Title (English)", "标题(英文)": "Title (English)",
"标题(法文)": "Title (French)", "标题(法文)": "Title (French)",
"是否确认删除广告设置编号为'{0}'的数据项?": "Are you sure you want to delete the advertisement setting with ID '{0}'?", "是否确认删除广告设置编号为'{0}'的数据项?": "Are you sure you want to delete the advertisement setting with ID '{0}'?",
"渠道已关闭,禁止下单": "The channel has been closed and orders are prohibited" "渠道已关闭,禁止下单": "The channel has been closed and orders are prohibited",
"询盘来源": "Inquiry Source",
"货物状态": "Goods Status",
"厂家": "Manufacturer",
"厂家电话": "Manufacturer Phone",
"预计发货时间": "Estimated Delivery Time"
} }
...@@ -3,8 +3,8 @@ ...@@ -3,8 +3,8 @@
* *
* 数据字典工具类 * 数据字典工具类
*/ */
import store from "@/store"; import store from "@/store"
import i18n from "@/i18n"; import i18n from "@/i18n"
export const DICT_TYPE = { export const DICT_TYPE = {
USER_TYPE: "user_type", USER_TYPE: "user_type",
...@@ -27,9 +27,9 @@ export const DICT_TYPE = { ...@@ -27,9 +27,9 @@ export const DICT_TYPE = {
SYSTEM_SMS_TEMPLATE_TYPE: "system_sms_template_type", SYSTEM_SMS_TEMPLATE_TYPE: "system_sms_template_type",
SYSTEM_SMS_SEND_STATUS: "system_sms_send_status", SYSTEM_SMS_SEND_STATUS: "system_sms_send_status",
SYSTEM_SMS_RECEIVE_STATUS: "system_sms_receive_status", SYSTEM_SMS_RECEIVE_STATUS: "system_sms_receive_status",
SYSTEM_SMS_NODE_NODE: 'system_sms_node_node',//节点 SYSTEM_SMS_NODE_NODE: "system_sms_node_node", //节点
SYSTEM_SMS_TEMPLATE_MESSAGE_TYPE: 'system_sms_template_message_type',//发送类型 SYSTEM_SMS_TEMPLATE_MESSAGE_TYPE: "system_sms_template_message_type", //发送类型
SYSTEM_SMS_TEMPLATE_LANGUAGE: 'system_sms_template_language',//节点 SYSTEM_SMS_TEMPLATE_LANGUAGE: "system_sms_template_language", //节点
SYSTEM_MAIL_SEND_STATUS: "mail_send_status", SYSTEM_MAIL_SEND_STATUS: "mail_send_status",
SYSTEM_ERROR_CODE_TYPE: "system_error_code_type", SYSTEM_ERROR_CODE_TYPE: "system_error_code_type",
INTERNAL_MESSAGE_TYPE: "internal_message_type", INTERNAL_MESSAGE_TYPE: "internal_message_type",
...@@ -158,25 +158,29 @@ export const DICT_TYPE = { ...@@ -158,25 +158,29 @@ export const DICT_TYPE = {
ECW_PORT_TYPE: "port_type", //港口类型 ECW_PORT_TYPE: "port_type", //港口类型
CERTIFICATE_TYPE: "certificate_type", //证件类型 CERTIFICATE_TYPE: "certificate_type", //证件类型
//customer //customer
CUSTOMER_CREDIT_RULE_TYPE: 'customer_credit_rule_type', CUSTOMER_CREDIT_RULE_TYPE: "customer_credit_rule_type",
CUSTOMER_LEVEL_RULE_TYPE: 'customer_level_rule_type', CUSTOMER_LEVEL_RULE_TYPE: "customer_level_rule_type",
CUSTOMER_ESOURCE_TYPE:'customer_resource_type',//客户资源类型 CUSTOMER_ESOURCE_TYPE: "customer_resource_type", //客户资源类型
CUSTOMER_OPERATE_TYPE:'customer_operate_type', CUSTOMER_OPERATE_TYPE: "customer_operate_type",
CUSTOMER_GET_METHOD: 'customer_get_method', //获取方式 CUSTOMER_GET_METHOD: "customer_get_method", //获取方式
CUSTOMER_FROM: 'customer_from', //创建入口 CUSTOMER_FROM: "customer_from", //创建入口
CUSTOMER_ROLE: 'customer_role', //角色 CUSTOMER_ROLE: "customer_role", //角色
PICKUP_POINTS: 'pickup_points', //常用提货网点 PICKUP_POINTS: "pickup_points", //常用提货网点
CUSTOMER_FOLLOWUP_TYPE: 'customer_followup_type', //跟进类型 CUSTOMER_FOLLOWUP_TYPE: "customer_followup_type", //跟进类型
CUSTOMER_FOLLOWUP_METHOD: 'customer_followup_method', //跟进方式 CUSTOMER_FOLLOWUP_METHOD: "customer_followup_method", //跟进方式
CUSTOMER_FOLLOWUP_SALE_STAGE: 'sale_stage', //销售阶段 CUSTOMER_FOLLOWUP_SALE_STAGE: "sale_stage", //销售阶段
CUSTOMER_FOLLOWUP_RESULT_TYPE: 'customer_followup_result_type', //跟进结果 ECW_OFFER_CUSTOMER_STATUS: "ecw_offer_customer_status", //客户状态
CUSTOMER_FOLLOWUP_STATUS: 'customer_followup_status', //跟进状态 ECW_OFFER_CARGO_STATUS: "ecw_offer_cargo_status", //货物状态
ECW_OFFER_INQUIRY_SOURCE: "ecw_offer_inquiry_source", //询盘来源
ECW_OFFER_REASON_DICT: "ecw_offer_reason_dict", //输单原因
CUSTOMER_FOLLOWUP_RESULT_TYPE: "customer_followup_result_type", //跟进结果
CUSTOMER_FOLLOWUP_STATUS: "customer_followup_status", //跟进状态
CUSTOMER_QUERY_NUMBER_FIELD: "customer_query_number_field", //客户查询数字字段 CUSTOMER_QUERY_NUMBER_FIELD: "customer_query_number_field", //客户查询数字字段
// order // order
ORDER_TYPE: "order_type", // 订单类型 ORDER_TYPE: "order_type", // 订单类型
PRODUCT_RECORD_ATTRIBUTE: "product_record_attribute", //产品备案属性 PRODUCT_RECORD_ATTRIBUTE: "product_record_attribute", //产品备案属性
PROD_QUERY_TITLE_ZH_FIELD: 'prod_query_title_zh_field', // 商品列表商品中文名称查询类型 PROD_QUERY_TITLE_ZH_FIELD: "prod_query_title_zh_field", // 商品列表商品中文名称查询类型
CONTROL_GOODS_STATUS: "control_goods_status", //控货状态 CONTROL_GOODS_STATUS: "control_goods_status", //控货状态
DISBURSEMENT_TYPE: "disbursement_type", //垫付类型 DISBURSEMENT_TYPE: "disbursement_type", //垫付类型
DRAWEE: "drawee", // 付款人 DRAWEE: "drawee", // 付款人
...@@ -280,7 +284,17 @@ export const DICT_TYPE = { ...@@ -280,7 +284,17 @@ export const DICT_TYPE = {
MEMBERSHIP_LEVELS: "membership_levels", //会员等级 MEMBERSHIP_LEVELS: "membership_levels", //会员等级
ENABLE_STATUS: "enable_status", //会员等级规则开启状态 ENABLE_STATUS: "enable_status", //会员等级规则开启状态
MEMBER_USER_OPERATE_LOG: "member_user_operate_log", //会员等级操作日志 MEMBER_USER_OPERATE_LOG: "member_user_operate_log", //会员等级操作日志
}; INVOICE_DATA_STATUS: "invoice_data_status", // 开票资料状态
INVOICING_STATUS: "invoicing_status", //开票状态
RECEIPT_DETAIL_STATUS: "receipt_detail_status", //明细状态
INVOICEING_LINK: "invoicing_link", //开票环节
RECEIPT_GENERATE_PATH: "receipt_generate_path", //收款单生成路径
RECEIPT_LINK: "receipt_link", //应收款日志环节
ECW_INCOME_RELATION_SYMBOL: "income_relation_symbol", //银行收支明细查询关系符号
LADING_BILL_STATUS_DATA: "lading_Bill_Status_Data", //提单制作
ATTRIBUTION_OF_INCOME: "attribution_of_income", //收入归属
PICKUP_RATE_COMPARISON_SYMBOLS: "pickup_rate_comparison_symbols" //提货率比较符号
}
/** /**
* 获取 dictType 对应的数据字典数组 * 获取 dictType 对应的数据字典数组
...@@ -313,7 +327,7 @@ export function getDictDatas2(dictType, values) { ...@@ -313,7 +327,7 @@ export function getDictDatas2(dictType, values) {
values = [this.value]; values = [this.value];
} }
// 获得字典数据 // 获得字典数据
const results = []; const results = []
for (const value of values) { for (const value of values) {
const dict = getDictData(dictType, value); const dict = getDictData(dictType, value);
if (dict) { if (dict) {
...@@ -322,28 +336,28 @@ export function getDictDatas2(dictType, values) { ...@@ -322,28 +336,28 @@ export function getDictDatas2(dictType, values) {
} }
// debugger // debugger
// console.log(results); // console.log(results);
return results; return results
} }
export function getDictData(dictType, value) { export function getDictData(dictType, value) {
// 获取 dictType 对应的数据字典数组 // 获取 dictType 对应的数据字典数组
const dictDatas = getDictDatas(dictType); const dictDatas = getDictDatas(dictType)
if (!dictDatas || dictDatas.length === 0) { if (!dictDatas || dictDatas.length === 0) {
return ""; return ""
} }
// 获取 value 对应的展示名 // 获取 value 对应的展示名
value = value + ""; // 强制转换成字符串,因为 DictData 小类数值,是字符串 value = value + "" // 强制转换成字符串,因为 DictData 小类数值,是字符串
for (const dictData of dictDatas) { for (const dictData of dictDatas) {
if (dictData.value === value) { if (dictData.value === value) {
return dictData; return dictData
} }
} }
return undefined; return undefined
} }
export function getDictDataLabel(dictType, value) { export function getDictDataLabel(dictType, value) {
const dict = getDictData(dictType, value); const dict = getDictData(dictType, value)
return dict ? i18n.l(dict, "label") : ""; return dict ? i18n.l(dict, "label") : ""
} }
export class getDictDataL {} export class getDictDataL {}
...@@ -38,7 +38,20 @@ ...@@ -38,7 +38,20 @@
{{ consignorData.socialNumber ? "(" + consignorData.socialNumber + ")" : "" }} {{ consignorData.socialNumber ? "(" + consignorData.socialNumber + ")" : "" }}
</el-descriptions-item> </el-descriptions-item>
</el-descriptions> </el-descriptions>
<el-descriptions :column="4" border class="card" v-if="list.consignorId" :labelStyle="{ width: '110px' }" style="margin-top: 0">
<el-descriptions-item :label="$t('销售阶段') + ':'">
<dict-tag :type="DICT_TYPE.CUSTOMER_FOLLOWUP_SALE_STAGE" :value="list.saleStage" />
</el-descriptions-item>
<el-descriptions-item :label="$t('客户状态') + ':'">
<dict-tag :type="DICT_TYPE.ECW_OFFER_CUSTOMER_STATUS" :value="list.customerStatus" />
</el-descriptions-item>
<el-descriptions-item :label="$t('货物状态') + ':'">
<dict-tag :type="DICT_TYPE.ECW_OFFER_CARGO_STATUS" :value="list.cargoStatus" />
</el-descriptions-item>
<el-descriptions-item :label="$t('询盘来源') + ':'">
<dict-tag :type="DICT_TYPE.ECW_OFFER_INQUIRY_SOURCE" :value="list.inquirySource" />
</el-descriptions-item>
</el-descriptions>
<el-descriptions :column="3" border class="card" v-if="list.consigneeId" :labelStyle="{ width: '110px' }"> <el-descriptions :column="3" border class="card" v-if="list.consigneeId" :labelStyle="{ width: '110px' }">
<el-descriptions-item :label="$t('收货人') + ':'"> <el-descriptions-item :label="$t('收货人') + ':'">
{{ consigneeData.contactsName || $t("") }} {{ consigneeData.contactsName || $t("") }}
...@@ -124,6 +137,26 @@ ...@@ -124,6 +137,26 @@
<template>{{ $t("全包价") }} {{ row.oneSeaFreight }} {{ currentcyMap[row.seaFreightCurrency] }} / {{ unitMap[row.seaFreightVolume] }}</template> <template>{{ $t("全包价") }} {{ row.oneSeaFreight }} {{ currentcyMap[row.seaFreightCurrency] }} / {{ unitMap[row.seaFreightVolume] }}</template>
</template> </template>
<template v-else-if="!row.oneSeaFreight && !row.oneClearanceFreight">{{ $t("未报价") }}</template> <template v-else-if="!row.oneSeaFreight && !row.oneClearanceFreight">{{ $t("未报价") }}</template>
<template v-else-if="row.specialPriceType">
<div style="color: red;font-weight: 700;">
{{ $t("原价") }}
</div>
<div>
{{ $t("运费") }}{{ row.originalSeaFreight }} {{ currentcyMap[row.seaFreightCurrency] }} / {{ unitMap[row.seaFreightVolume] }}
</div>
<div>
{{ $t("清关费") }}{{ row.originalClearanceFreight }} {{ currentcyMap[row.clearanceFreightCurrency] }} / {{ unitMap[row.clearanceFreightVolume] }}
</div>
<div style="color: red;font-weight: 700;">
{{ $t("特价") }}
</div>
<div>
{{ $t("运费") }}{{ row.oneSeaFreight }} {{ currentcyMap[row.seaFreightCurrency] }} / {{ unitMap[row.seaFreightVolume] }}
</div>
<div>
{{ $t("清关费") }}{{ row.oneClearanceFreight }} {{ currentcyMap[row.clearanceFreightCurrency] }} / {{ unitMap[row.clearanceFreightVolume] }}
</div>
</template>
<template v-else> <template v-else>
<div>{{ $t("运费") }}{{ row.oneSeaFreight }} {{ currentcyMap[row.seaFreightCurrency] }} / {{ unitMap[row.seaFreightVolume] }}</div> <div>{{ $t("运费") }}{{ row.oneSeaFreight }} {{ currentcyMap[row.seaFreightCurrency] }} / {{ unitMap[row.seaFreightVolume] }}</div>
<div v-if="row.oneClearanceFreight">{{ $t("清关费") }}{{ row.oneClearanceFreight }} {{ currentcyMap[row.clearanceFreightCurrency] }} / {{ unitMap[row.clearanceFreightVolume] }}</div> <div v-if="row.oneClearanceFreight">{{ $t("清关费") }}{{ row.oneClearanceFreight }} {{ currentcyMap[row.clearanceFreightCurrency] }} / {{ unitMap[row.clearanceFreightVolume] }}</div>
...@@ -159,12 +192,12 @@ ...@@ -159,12 +192,12 @@
</template> </template>
<template v-if="otherFeeList.length == 0"> 0 </template> <template v-if="otherFeeList.length == 0"> 0 </template>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item :label="$t('原价')" :span="2"> <!-- <el-descriptions-item :label="$t('原价')" :span="2">-->
<template v-if="originalFeeList.length > 0" v-for="item in originalFeeList"> <!-- <template v-if="originalFeeList.length > 0" v-for="item in originalFeeList">-->
<div :key="item.currencyId">{{ item.amount || 0 }}{{ currentcyMap[item.currencyId] }}</div> <!-- <div :key="item.currencyId">{{ item.amount || 0 }}{{ currentcyMap[item.currencyId] }}</div>-->
</template> <!-- </template>-->
<template v-if="originalFeeList.length == 0"> 0 </template> <!-- <template v-if="originalFeeList.length == 0"> 0 </template>-->
</el-descriptions-item> <!-- </el-descriptions-item>-->
</el-descriptions> </el-descriptions>
<div class="card-title" style="padding: 20px 0">{{ $t("优惠信息") }}</div> <div class="card-title" style="padding: 20px 0">{{ $t("优惠信息") }}</div>
...@@ -225,6 +258,9 @@ ...@@ -225,6 +258,9 @@
<el-descriptions-item :label="$t('预计结束时间')"> <el-descriptions-item :label="$t('预计结束时间')">
{{ list.stopTime || "/" }} {{ list.stopTime || "/" }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item :label="$t('预计发货时间')">
{{ list.estimatedShippingTime || "/" }}
</el-descriptions-item>
<el-descriptions-item :label="$t('控货')"> <el-descriptions-item :label="$t('控货')">
{{ list.control ? $t("是") : $t("否") }} {{ list.control ? $t("是") : $t("否") }}
</el-descriptions-item> </el-descriptions-item>
......
This diff is collapsed.
This diff is collapsed.
...@@ -35,7 +35,12 @@ ...@@ -35,7 +35,12 @@
</el-form-item> </el-form-item>
</template> </template>
<template v-else> <template v-else>
<el-form-item :label="$t('原因')" prop="reason"> <el-form-item :label="$t('原因')" prop="reasonDict">
<el-select v-model="form.reasonDict " clearable :placeholder="$t('请选择')">
<el-option v-for="dict in getDictDatas(DICT_TYPE.ECW_OFFER_REASON_DICT)" :key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
</el-select>
</el-form-item>
<el-form-item :label="$t('备注')" prop="reason">
<el-input style="width: 500px;" type="textarea" placeholder="" v-model="form.reason"></el-input> <el-input style="width: 500px;" type="textarea" placeholder="" v-model="form.reason"></el-input>
</el-form-item> </el-form-item>
</template> </template>
...@@ -94,10 +99,10 @@ export default { ...@@ -94,10 +99,10 @@ export default {
if(this.$route.query.offerId){ if(this.$route.query.offerId){
this.form.offerId = this.$route.query.offerId this.form.offerId = this.$route.query.offerId
} }
}, },
methods: { methods: {
/** 提交按钮 */ /** 提交按钮 */
submitForm() { submitForm() {
this.$refs["form"].validate((valid) => { this.$refs["form"].validate((valid) => {
...@@ -131,4 +136,4 @@ export default { ...@@ -131,4 +136,4 @@ export default {
} }
}, },
}; };
</script> </script>
\ No newline at end of file
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