Commit 7e0c1c55 authored by yujinyao's avatar yujinyao

en_US.json和dict.js文件冲突

parents a378af4f 0f782c13
import request from "@/utils/request";
//获取网点列表
export function getNodeList(query) {
return request({
url: "/ecw/node/list-all-simple",
method: "get",
params: query,
});
}
//获取积分列表
export function getGiftList(data) {
return request({
url: "/ecw/reward/page",
method: "post",
params: {
page: data.page,
rows: data.rows,
},
data: data,
});
}
//新增礼品
export function addRewards(data) {
return request({
url: "/ecw/reward/create",
method: "post",
data: data,
});
}
//删除礼品
export function deleteRewards(data) {
return request({
url: "/ecw/reward/delete?id=" + data.id,
method: "delete",
});
}
//礼品延期
export function delayRewards(data) {
return request({
url: "/ecw/reward/delay",
method: "post",
data: data,
});
}
//编辑礼品
export function editRewards(data) {
return request({
url: "/ecw/reward/update",
method: "post",
data: data,
});
}
//礼品状态变更
export function changeRewardsStatus(data) {
return request({
url: "/ecw/reward/status",
method: "post",
data: data,
});
}
//复制礼品
export function copyRewardsAPI(id) {
return request({
url: "/ecw/reward/copy/" + id,
method: "post",
});
}
//获取单个礼品详情
export function getRewardsDetails(data) {
return request({
url: "/ecw/reward/get",
method: "get",
params: data,
});
}
//获取国家列表
export function getTradeCountryList() {
return request({
url: "/ecw/region/getTradeCountryList",
method: "get",
});
}
//获取城市列表
export function getCityList(query) {
return request({
url: "/ecw/region/getCityListByParent",
method: "get",
params: query,
});
}
//获取会员积分列表
export function getMemberList(data) {
return request({
url: "/member/user-score/page",
method: "post",
data,
});
}
//批量兑换礼品
export function bulkConversion(data) {
return request({
url: "/reward/redeem/batch",
method: "post",
data,
});
}
import request from "@/utils/request";
//操作积分
export function operateMemberScore(data) {
return request({
url: "/member/user-score/operate",
method: "post",
data: data,
});
}
//积分记录分页
export function queryMemberScoreRecord(data) {
return request({
url: "/member/user-score-log/page",
method: "post",
data: data,
});
}
//兑换记录分页
export function queryMemberExchangeRecord(data) {
return request({
url: "/reward/redeem/record/page",
method: "post",
data: data,
});
}
//批量核销按钮
export function batchVerifyAPI(data) {
return request({
url: "/reward/redeem/record/batch/verify",
method: "post",
data: data,
});
}
//兑换记录导出
export function batchRecordExport(data) {
return request({
url: "/reward/redeem/record/export",
method: "post",
data: data,
});
}
//兑换记录导入
export function batchRecordImport(data) {
return request({
url: "/reward/redeem/record/import",
method: "post",
data: data,
});
}
//兑换记录导入模板下载
export function batchRecordImportTemplate() {
return request({
url: "/reward/redeem/record/import/template",
method: "post",
responseType: "blob",
});
}
//撤销 操作
export function rewardCancelQuery(data) {
return request({
url: "/reward/redeem/record/cancel",
method: "post",
data: data,
});
}
//获取记录详情
export function getRewardDetailQuery(data) {
return request({
url: "/reward/redeem/record/detail",
method: "post",
data: data,
});
}
//更新兑换记录
export function updatedRewardsDetails(data) {
return request({
url: "/reward/redeem/record/update",
method: "post",
data: data,
});
}
//核销回退
export function verifyRollback(data) {
return request({
url: "/reward/redeem/record/verify-back",
method: "post",
data: data,
});
}
//核销 操作
export function verifyRedeem(data) {
return request({
url: "/reward/redeem/record/verify",
method: "post",
data: data,
});
}
//获取积分规则记录
export function getScoreRecordList(data) {
return request({
url: "/member/score-rule/page",
method: "post",
params: {
page: data.page,
rows: data.rows,
},
data,
});
}
//会员积分等级列表
export function getMemberLevelList(data) {
return request({
url: "/member/user-level/page",
method: "post",
data,
});
}
//新增会员等级设置
export function addNewMemberLevel(data) {
return request({
url: "/member/user-level/add",
method: "post",
data,
});
}
//删除会员等级
export function delMemberLevel(data) {
return request({
url: "/member/user-level/delete",
method: "post",
data,
});
}
//edit member level
export function editMemberLevel(data) {
return request({
url: "/member/user-level/update",
method: "post",
data,
});
}
//获得目的国、目的城市、目的仓列表
export function getRegionTreeList() {
return request({
url: "/member/score-rule/warehouse-tree-region-list",
method: "get",
});
}
//获取渠道列表
export function getChannelList() {
return request({
url: "/ecw/channel/list-all-simple",
method: "get",
});
}
//积分规则创建
export function createIntegralRule(data) {
return request({
url: "/member/score-rule/create",
method: "post",
data,
});
}
//启用关闭 积分规则
export function integralRuleStatus(data) {
return request({
url: "/member/score-rule/status",
method: "post",
data,
});
}
//复制积分规则
export function integralRuleCopy(data) {
return request({
url: "/member/score-rule/copy",
method: "post",
data,
});
}
//延期积分规则
export function integralRuleDelay(data) {
return request({
url: "/member/score-rule/delay",
method: "post",
data,
});
}
//删除积分规则
export function integralRuleDelete(data) {
return request({
url: "/member/score-rule/delete",
method: "post",
data,
});
}
//获取积分规则详情
export function integralRuleDetails(data) {
return request({
url: "/member/score-rule/get",
method: "post",
data,
});
}
//编辑积分规则
export function integralRuleUpdated(data) {
return request({
url: "/member/score-rule/update",
method: "post",
data,
});
}
<template> <template>
<div class="dict-selector"> <div class="dict-selector">
<el-select v-if="formType == 'select'" v-model="valueSync" :placeholder="placeholder || $t('请选择')" :clearable="clearable" :multiple="multiple" :disabled="disabled" @change="val => $emit('change', val)"> <el-select
<el-option v-for="dict in formattedList" v-if="formType == 'select'"
:key="dict.value" :label="$l(dict, 'label')" :value="dict.value"/> v-model="valueSync"
: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"
/>
</el-select> </el-select>
<el-radio-group v-if="formType == 'radio'" v-model="valueSync" :disabled="disabled"> <el-radio-group
<el-radio v-for="dict in formattedList" :label="dict.value" :checked="valueSync === dict.value" :key="dict.value">{{$l(dict, 'label')}}</el-radio> 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
>
</el-radio-group> </el-radio-group>
<el-checkbox-group v-if="formType == 'checkbox'" v-model="valueSync" :disabled="disabled"> <el-checkbox-group
<el-checkbox v-for="dict in formattedList" :label="dict.value" :key="dict.value">{{$l(dict, 'label')}}</el-checkbox> v-if="formType == 'checkbox'"
v-model="valueSync"
:disabled="disabled"
>
<el-checkbox
v-for="dict in formattedList"
:label="dict.value"
:key="dict.value"
>{{ $l(dict, "label") }}</el-checkbox
>
</el-checkbox-group> </el-checkbox-group>
</div> </div>
</template> </template>
<script> <script>
const FORMATTERS = { const FORMATTERS = {
"string": String, string: String,
"bool": function(val){ bool: function (val) {
return [false, 'false', 0, "0"].indexOf(val) < 0 return [false, "false", 0, "0"].indexOf(val) < 0;
}, },
'number': Number, number: Number,
'array': function(val){ array: function (val) {
return typeof val == 'string' ? val.split(',').filter(item => item && item !== '') : val return typeof val == "string"
} ? val.split(",").filter((item) => item && item !== "")
} : val;
},
};
export default { export default {
props:{ props: {
placeholder: { placeholder: {
type: String, type: String,
default: null default: null,
}, },
type: String, type: String,
value: [String, Number, Array, Boolean], value: [String, Number, Array, Boolean],
multiple: Boolean, multiple: Boolean,
formType:{ formType: {
type: String, type: String,
default: 'select' default: "select",
}, },
formatter: { formatter: {
type: [Function, String], type: [Function, String],
default: String default: String,
}, },
defaultable: Boolean, // 是否默认选择第一个 defaultable: Boolean, // 是否默认选择第一个
disabled: Boolean, disabled: Boolean,
...@@ -47,92 +80,107 @@ export default { ...@@ -47,92 +80,107 @@ export default {
*/ */
filter: { filter: {
type: Function, type: Function,
default: () => true default: () => true,
}, },
clearable: Boolean clearable: Boolean,
}, },
data(){ data() {
return { return {
valueSync: this.multiple ? [] : null valueSync: this.multiple ? [] : null,
} };
}, },
computed:{ computed: {
dicts(){ dicts() {
return this.getList(this.type) return this.getList(this.type);
}, },
dictList(){ dictList() {
return this.dicts.filter(this.filter) return this.dicts.filter(this.filter);
}, },
formattedList(){ formattedList() {
let arr = [] let arr = [];
this.dictList.forEach(item => { this.dictList.forEach((item) => {
arr.push({ arr.push({
label: item.label, label: item.label,
labelEn: item.labelEn, labelEn: item.labelEn,
value: this.format(item.value), value: this.format(item.value),
cssClass: item.cssClass, cssClass: item.cssClass,
colorType: item.colorType colorType: item.colorType,
}) });
}) });
return arr return arr;
} },
}, },
watch:{ watch: {
valueSync(val){ valueSync(val) {
this.$emit('input', val) this.$emit("input", val);
}, },
value(val){ value(val) {
if(val != this.valueSync)this.setValueSync() if (val != this.valueSync) this.setValueSync();
}, },
dictList(){ dictList() {
this.setDefault() this.setDefault();
},
},
created() {
this.setValueSync();
this.setDefault();
},
methods: {
format(val) {
if (val === null || val == undefined || val == "") return val;
let formatter =
typeof this.formatter == "function"
? this.formatter
: FORMATTERS[this.formatter];
if (!formatter) {
console.warn("格式器无效", this.formatter);
return val;
} }
},
created(){ return formatter(val);
this.setValueSync() },
this.setDefault() changeValue(val) {
}, this.valueSync = val;
methods:{ },
format(val){ setValueSync() {
if(val === null || val == undefined || val == '') return val if (
let formatter = typeof this.formatter == 'function' ? this.formatter : FORMATTERS[this.formatter] this.value === null ||
if(!formatter){ this.value === undefined ||
console.warn('格式器无效', this.formatter) this.value === ""
return val ) {
return (this.valueSync = this.multiple ? [] : this.value);
} }
return formatter(val) if (this.multiple) {
}, let value = this.value || [];
changeValue(val){ if (typeof this.value == "string") {
this.valueSync = val value = this.value.split(",").filter((item) => item && item != "");
},
setValueSync(){
if(this.value === null || this.value === undefined || this.value === ''){
return this.valueSync = this.multiple ? [] : this.value
} }
if(this.multiple){ this.valueSync = value.map((item) => this.format(item));
let value = this.value || [] } else {
if(typeof this.value == 'string'){ this.valueSync = this.format(this.value);
value = this.value.split(',').filter(item => item && item != '')
} }
this.valueSync = value.map(item => this.format(item)) },
}else{ getList() {
this.valueSync = this.format(this.value) return this.getDictDatas(this.type);
},
setDefault() {
if (!this.defaultable) return;
if (
this.dictList.length &&
(this.valueSync === null ||
this.valueSync == undefined ||
this.valueSync == "")
) {
this.valueSync = this.multiple ? [] : this.formattedList[0].value;
} }
}, },
getList(){
return this.getDictDatas(this.type)
}, },
setDefault(){ };
if(!this.defaultable) return
if(this.dictList.length && (this.valueSync === null || this.valueSync == undefined || this.valueSync == '')){
this.valueSync = this.multiple ? [] : this.formattedList[0].value
}
}
}
}
</script> </script>
<style scoped> <style scoped>
.dict-selector{ .dict-selector {
display: inline-block; display: inline-block;
} }
</style> </style>
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
:before-upload="handleBeforeUpload" :before-upload="handleBeforeUpload"
:file-list="fileList" :file-list="fileList"
:limit="limit" :limit="limit"
:disabled="disabled"
:on-error="handleUploadError" :on-error="handleUploadError"
:on-exceed="handleExceed" :on-exceed="handleExceed"
:on-success="handleUploadSuccess" :on-success="handleUploadSuccess"
...@@ -15,24 +16,40 @@ ...@@ -15,24 +16,40 @@
ref="upload" ref="upload"
> >
<!-- 上传按钮 --> <!-- 上传按钮 -->
<el-button size="mini" type="primary">{{$t('选取文件')}}</el-button> <el-button size="mini" type="primary" :disabled="disabled">{{
$t("选取文件")
}}</el-button>
<!-- 上传提示 --> <!-- 上传提示 -->
<div class="el-upload__tip" slot="tip" v-if="showTip"> <div class="el-upload__tip" slot="tip" v-if="showTip">
请上传 请上传
<template v-if="fileSize"> 大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b> </template> <template v-if="fileSize">
<template v-if="fileType"> 格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b> </template> 大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
</template>
<template v-if="fileType">
格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b>
</template>
的文件 的文件
</div> </div>
</el-upload> </el-upload>
<!-- 文件列表 --> <!-- 文件列表 -->
<transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear" tag="ul"> <transition-group
<li :key="file.url" class="el-upload-list__item ele-upload-list__item-content" v-for="(file, index) in fileList"> class="upload-file-list el-upload-list el-upload-list--text"
name="el-fade-in-linear"
tag="ul"
>
<li
:key="file.url"
class="el-upload-list__item ele-upload-list__item-content"
v-for="(file, index) in fileList"
>
<el-link :href="`${file.url}`" :underline="false" target="_blank"> <el-link :href="`${file.url}`" :underline="false" target="_blank">
<span class="el-icon-document"> {{ getFileName(file.name) }} </span> <span class="el-icon-document"> {{ getFileName(file.name) }} </span>
</el-link> </el-link>
<div class="ele-upload-list__item-content-action"> <div class="ele-upload-list__item-content-action">
<el-link :underline="false" @click="handleDelete(index)" type="danger">删除</el-link> <el-link :underline="false" @click="handleDelete(index)" type="danger"
>删除</el-link
>
</div> </div>
</li> </li>
</transition-group> </transition-group>
...@@ -62,18 +79,23 @@ export default { ...@@ -62,18 +79,23 @@ export default {
type: Array, type: Array,
default: () => ["doc", "xls", "ppt", "txt", "pdf"], default: () => ["doc", "xls", "ppt", "txt", "pdf"],
}, },
disabled: {
type: Boolean,
default: false,
},
// 是否显示提示 // 是否显示提示
isShowTip: { isShowTip: {
type: Boolean, type: Boolean,
default: true default: true,
} },
}, },
data() { data() {
return { return {
number: 0, number: 0,
uploadList: [], uploadList: [],
baseUrl: process.env.VUE_APP_BASE_API, baseUrl: process.env.VUE_APP_BASE_API,
uploadFileUrl: process.env.VUE_APP_BASE_API + "/admin-api/infra/file/org-name/up", // 上传的文件服务器地址 uploadFileUrl:
process.env.VUE_APP_BASE_API + "/admin-api/infra/file/org-name/up", // 上传的文件服务器地址
headers: { headers: {
Authorization: "Bearer " + getToken(), Authorization: "Bearer " + getToken(),
}, },
...@@ -86,9 +108,9 @@ export default { ...@@ -86,9 +108,9 @@ export default {
if (val) { if (val) {
let temp = 1; let temp = 1;
// 首先将值转为数组 // 首先将值转为数组
const list = Array.isArray(val) ? val : this.value.split(','); const list = Array.isArray(val) ? val : this.value.split(",");
// 然后将数组转为对象数组 // 然后将数组转为对象数组
this.fileList = list.map(item => { this.fileList = list.map((item) => {
if (typeof item === "string") { if (typeof item === "string") {
item = { name: item, url: item }; item = { name: item, url: item };
} }
...@@ -101,8 +123,8 @@ export default { ...@@ -101,8 +123,8 @@ export default {
} }
}, },
deep: true, deep: true,
immediate: true immediate: true,
} },
}, },
computed: { computed: {
// 是否显示提示 // 是否显示提示
...@@ -117,7 +139,9 @@ export default { ...@@ -117,7 +139,9 @@ export default {
if (this.fileType) { if (this.fileType) {
let fileExtension = ""; let fileExtension = "";
if (file.name.lastIndexOf(".") > -1) { if (file.name.lastIndexOf(".") > -1) {
fileExtension = file.name.slice(file.name.lastIndexOf(".") + 1).toLowerCase(); fileExtension = file.name
.slice(file.name.lastIndexOf(".") + 1)
.toLowerCase();
} }
const isTypeOk = this.fileType.some((type) => { const isTypeOk = this.fileType.some((type) => {
if (file.type.indexOf(type) > -1) return true; if (file.type.indexOf(type) > -1) return true;
...@@ -125,7 +149,9 @@ export default { ...@@ -125,7 +149,9 @@ export default {
return false; return false;
}); });
if (!isTypeOk) { if (!isTypeOk) {
this.$modal.msgError(`文件格式不正确, 请上传${this.fileType.join("/")}格式文件!`); this.$modal.msgError(
`文件格式不正确, 请上传${this.fileType.join("/")}格式文件!`
);
return false; return false;
} }
} }
...@@ -148,7 +174,7 @@ export default { ...@@ -148,7 +174,7 @@ export default {
// 上传失败 // 上传失败
handleUploadError(err) { handleUploadError(err) {
this.$modal.msgError("上传图片失败,请重试"); this.$modal.msgError("上传图片失败,请重试");
this.$modal.closeLoading() this.$modal.closeLoading();
}, },
// 上传成功回调 // 上传成功回调
handleUploadSuccess(res) { handleUploadSuccess(res) {
...@@ -182,9 +208,9 @@ export default { ...@@ -182,9 +208,9 @@ export default {
for (let i in list) { for (let i in list) {
strs += list[i].url + separator; strs += list[i].url + separator;
} }
return strs != '' ? strs.substr(0, strs.length - 1) : ''; return strs != "" ? strs.substr(0, strs.length - 1) : "";
} },
} },
}; };
</script> </script>
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
<span class="el-upload-list__item-preview" @click="handlePictureCardPreview(item)"> <span class="el-upload-list__item-preview" @click="handlePictureCardPreview(item)">
<i class="el-icon-zoom-in"></i> <i class="el-icon-zoom-in"></i>
</span> </span>
<span class="el-upload-list__item-delete" @click="handleRemove(item)"> <span class="el-upload-list__item-delete" @click="handleRemove(item)" v-if ="isShowEditButton">
<i class="el-icon-delete"></i> <i class="el-icon-delete"></i>
</span> </span>
</span> </span>
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
</ul> </ul>
<el-upload <el-upload
v-if ="isShowEditButton"
multiple multiple
:action="uploadImgUrl" :action="uploadImgUrl"
list-type="picture-card" list-type="picture-card"
...@@ -94,6 +95,11 @@ export default { ...@@ -94,6 +95,11 @@ export default {
isShowTip: { isShowTip: {
type: Boolean, type: Boolean,
default: true default: true
},
//是否显示编辑按钮
isShowEditButton:{
type: Boolean,
default: true
} }
}, },
data() { data() {
......
...@@ -4507,7 +4507,160 @@ ...@@ -4507,7 +4507,160 @@
"身份证认证状态": "Identity card authentication status", "身份证认证状态": "Identity card authentication status",
"角标字段": "Subscript field", "角标字段": "Subscript field",
"不清楚请留空,已设勿改": "Unclear, please leave blank. It has been set to remain unchanged", "不清楚请留空,已设勿改": "Unclear, please leave blank. It has been set to remain unchanged",
"退仓/已混箱品名":"Returned/mixed Box", "退仓/已混箱品名": "Returned/mixed Box",
"请输入会员编号": "Please input Member ID",
"会员名称": "Member nickname",
"请输入会员名称": "Please input Member nickname",
"会员电话": "Member Phone NO.",
"请输入会员电话": "Please input Member Phone NO.",
"礼品名称": "gift name",
"请输入礼品名称": "Please input gift name",
"请输入数字": "Please input number",
"兑换积分": "Redeem Points",
"领取方式": "Collection method",
"兑换网点": "Exchange outlet",
"请选择兑换网点": "Please select an exchange outlet",
"剩余数量": "Remaining Quantity",
"礼品ID": "Gift ID",
"允许兑换次数": "Allow redemption times",
"已兑换次数": "Redemption times",
"剩余次数": "Remaining times",
"添加礼品": "Add Gift",
"查看礼品": "View gifts",
"中文礼品名称": "Chinese gift name",
"英文礼品名称": "English gift name",
"中文礼品图片": "Chinese Gift picture",
"英文礼品图片": "English gift picture",
"活动时间": "Activity Time ",
"兑换": "Exchange",
"中文备注": "Chinese Remarks",
"英文备注": "English Remarks",
"长度在 0 到 500 个字符": "Length 0 to 500 characters",
"请选择延期时间": "Please select an extension time",
"延期成功": "Successful extension",
"否关闭当前礼品?": "Do you close the current gift?",
"是否启用当前礼品?": "Do you want to enable current gifts",
"启用成功": "Enabled successfully",
"关闭成功": "Closed successfully",
"是否确认删除此礼品": "Do you want to delete this gift? ",
"请选择领取方式": "Please select the collection method",
"编辑礼品": "Edit Gifts",
"新增礼品": "New Gift ",
"请输入剩余数量": "Please enter remaining quantity",
"请选择网点": "Please select a network",
"请输入兑换积分": "Please enter redemption points",
"长度在 0 到 50 个字符": "Length 0 to 50 characters",
"请输入英文礼品名称": "Please enter English gift name",
"请输入中文礼品名称": "Please enter Chinese gift name",
"请先添加准备兑换礼品的会员": "Please add a member who is ready to redeem the gift",
"添加会员": "Add Member",
"礼品选择": "Gift Selection",
"礼品积分": "Gift Points",
"当前积分": "Current Score",
"本次兑换积分": "Redeem points this time",
"兑换后剩余积分": "Remaining points after redemption",
"请选择快递公司": "Please select a Courier company",
"请输入本次兑换积分": "Please enter this redemption points",
"兑换数量": "Redemption Quantity",
"请输入兑换数量": "Please enter the amount of redemption",
"兑换方式": "Method of Exchange",
"兑换入口": "Exchange entry",
"收件人姓名": "Recipient's name",
"请输入收件人姓名": "Please enter recipient name",
"收件人电话": "Recipient phone number",
"请输入收件人电话": "Please enter recipient phone number ",
"收件人地址": "Recipient Address",
"请输入收件人地址": "Please enter recipient address",
"兑换人": "Changer",
"请输入兑换人": "Please enter the changer ",
"兑换时间": "Redemption Time",
"选择兑换时间": "Select the exchange time",
"兑换积分大于当前总积分,请重新输入兑换数量": "The redemption points are greater than the current total points, please re-enter the redemption amount",
"兑换失败,请填写必要的信息": "Redemption failed, please fill in the necessary information",
"请输入会员名称/会员编号/手机号": "Please enter member name/Member ID/mobile number",
"兑换成功": "Successful exchange ",
"是否确认删除此数据": "Do you want to delete this data",
"快递日期": "Delivery Date",
"选择快递日期": "Select delivery date ",
"请输入整数或保留小数点后两位": "Please enter an integer number or keep two decimal places",
"快递寄出人": "Courier",
"请输入快递寄出人": "Please enter an Courier",
"请先选择会员再进行操作": "Please select a member before proceeding",
"累计最高积分": "Cumulative maximum points:",
"指标类型": "pointer type",
"中文封面图": "Chinese cover picture",
"英文封面图": "English cover picture",
"首单": "first order",
"积分规则": "integration rule",
"积分": "integral",
"活动有效期": "Activity validity period",
"积分有效期": "Point validity period",
"是否推送": "Push or not",
"展示平台": "display platform",
"英文规则说明": "English rule description",
"中文规则说明": "Chinese rule description",
"注:此说明用于展示给会员查看积分原因,请规范填写": "Note: This description is used to show the reason for members to view the points, please fill in the standard",
"请选择活动有效期": "Please select an activity validity period",
"请选择注册平台": "Please select the registration platform",
"请选择指标类型": "Please select the indicator type",
"请输入积分有效天数": "Please enter the number of days the credits are valid",
"请输入整数": "Please enter an integer",
"请输入中文规则说明": "Please enter the rule description in Chinese",
"请输入英文规则说明": "Please enter English rule description",
"请输入积分规则": "Please enter the scoring rules",
"请选择是否推送": "Please select whether to push",
"保存并启用": "Save and Enable",
"订单入口": "Order Entry",
"是否确认重置此礼品规则表单": "Do you want to reset this gift rule form?",
"注册平台": "Registration platform",
"等级名称": "User level name",
"是否确认启用此礼品规则": "Do you confirm to enable this gift rule?",
"是否确认复制礼品规则": "Do you want to copy gift rules?",
"是否确认关闭此礼品规则": "Do you want to confirm to turn off this gift rule?",
"单次积分": "Single integration",
"规则说明": "Specification of rules",
"最高积分": "Maximum points ",
"会员注册时间": "Member Registration Time",
"已兑换积分": "Redeemed points",
"已失效积分": "Expired integral",
"请输入关键词查找": "Please enter keyword search",
"以上数据格式有问题": "There is a problem with the above data format",
"积分记录ID": "Integral record ID",
"封面图片": "cover picture",
"分值": "Score",
"类别": "Category",
"积分来源": "Integral source",
"操作积分时间": "Operation integration time",
"导入失败:": "Import failure:",
"此操作积分可能存在到期积分, 撤销后积分将进行扣除,是否继续?": "This operation point may have expired points, points will be deducted after cancellation, do you want to continue?",
"是否继续核销回退?": "Do you continue to write off the rollback?",
"规则标题": "Rule Title",
"请输入会员昵称": "Please enter a member nickname",
"请输入礼品ID": "Please enter the gift ID",
"新增兑换": "New exchange",
"兑换信息导入": "Exchange Information Import",
"订单ID": "order ID",
"请选择是否分享": "Please choose whether to share ",
"是否分享": "Whether to share ",
"活动链接": "Activity Link ",
"英文活动内容": "English Activities ",
"中文活动内容": "Chinese Content",
"请输入查找": "Please enter to find ",
"删除规则": "Delete Rules ",
"积分范围": "Integral Range ",
"兑换记录ID": "Exchange Record ID",
"核销回退": "Write-off rollback ",
"请输入礼品积分": "Please enter Gift points ",
"请输入当前积分": "Please enter current credits ",
"请选择礼品": "Please select a Gift ",
"中文活动内容不能为空": "Chinese activity content cannot be empty ",
"英文活动内容不能为空": "English activity content cannot be empty ",
"开始积分应大于上一次最终积分": "Starting points should be greater than the last final points ",
"开始积分应小于本次最终积分": "The starting score should be less than the final score ",
"本次最终积分应大于本次开始积分": "The final score should be greater than the initial score ",
"本次最终积分应小于下一次开始积分": "This final score should be less than the next starting score ",
"确认兑换": "Confirm conversion",
"操作积分": "Operation integral",
"基本":"Base", "基本":"Base",
"发货信息": "Shipping Information", "发货信息": "Shipping Information",
"设置": "Setting", "设置": "Setting",
...@@ -4537,3 +4690,4 @@ ...@@ -4537,3 +4690,4 @@
"财务资料": "Finance Information", "财务资料": "Finance Information",
"特殊设置": "Special setting" "特殊设置": "Special setting"
} }
This diff is collapsed.
import axios from 'axios' import axios from "axios";
import { Notification, MessageBox, Message } from 'element-ui' import { Notification, MessageBox, Message } from "element-ui";
import store from '@/store' import store from "@/store";
import { getToken } from '@/utils/auth' import { getToken } from "@/utils/auth";
import errorCode from '@/utils/errorCode' import errorCode from "@/utils/errorCode";
import Cookies from "js-cookie"; import Cookies from "js-cookie";
import {getTenantEnable} from "@/utils/ruoyi"; import { getTenantEnable } from "@/utils/ruoyi";
import { getLocale } from '@/utils/db'; import { getLocale } from "@/utils/db";
import i18n from "@/i18n"; import i18n from "@/i18n";
// 是否显示重新登录 // 是否显示重新登录
export let isRelogin = { show: false }; export let isRelogin = { show: false };
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' axios.defaults.headers["Content-Type"] = "application/json;charset=utf-8";
// 创建axios实例 // 创建axios实例
const service = axios.create({ const service = axios.create({
// axios中请求配置有baseURL选项,表示请求URL公共部分 // axios中请求配置有baseURL选项,表示请求URL公共部分
baseURL: (localStorage.VUE_APP_BASE_API || process.env.VUE_APP_BASE_API) + '/admin-api/', // 此处的 /admin-api/ 地址,原因是后端的基础路径为 /admin-api/ baseURL:
(localStorage.VUE_APP_BASE_API || process.env.VUE_APP_BASE_API) +
"/admin-api/", // 此处的 /admin-api/ 地址,原因是后端的基础路径为 /admin-api/
// 超时 // 超时
timeout: 1000 * 30 timeout: 1000 * 30,
}) });
// 如果是生产环境则打印提示 // 如果是生产环境则打印提示
if (process.env.NODE_ENV === 'development' && service.defaults.baseURL === 'https://api2.groupage.cn/admin-api/') { if (
console.log('%c请注意,当前为生产环境请谨慎操作!!', 'background-color: red; font-size: 3em; color:yellow'); process.env.NODE_ENV === "development" &&
console.log('%c接口地址:' + service.defaults.baseURL, 'background-color: black; font-size: 1.5em; color:yellow !important'); service.defaults.baseURL === "https://api2.groupage.cn/admin-api/"
) {
console.log(
"%c请注意,当前为生产环境请谨慎操作!!",
"background-color: red; font-size: 3em; color:yellow"
);
console.log(
"%c接口地址:" + service.defaults.baseURL,
"background-color: black; font-size: 1.5em; color:yellow !important"
);
} }
// request拦截器 // request拦截器
service.interceptors.request.use(config => { service.interceptors.request.use(
config.headers['locale'] = getLocale() (config) => {
config.headers["locale"] = getLocale();
// 是否需要设置 token // 是否需要设置 token
const isToken = (config.headers || {}).isToken === false const isToken = (config.headers || {}).isToken === false;
if (getToken() && !isToken) { if (getToken() && !isToken) {
config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 config.headers["Authorization"] = "Bearer " + getToken(); // 让每个请求携带自定义token 请根据实际情况自行修改
} }
// 设置租户 // 设置租户
if (getTenantEnable()) { if (getTenantEnable()) {
const tenantId = Cookies.get('tenantId'); const tenantId = Cookies.get("tenantId");
if (tenantId) { if (tenantId) {
config.headers['tenant-id'] = tenantId; config.headers["tenant-id"] = tenantId;
} }
} }
// get请求映射params参数 // get请求映射params参数
if (config.method === 'get' && config.params) { if (config.method === "get" && config.params) {
let url = config.url + '?'; let url = config.url + "?";
for (const propName of Object.keys(config.params)) { for (const propName of Object.keys(config.params)) {
const value = config.params[propName]; const value = config.params[propName];
var part = encodeURIComponent(propName) + "="; var part = encodeURIComponent(propName) + "=";
if (value !== null && typeof(value) !== "undefined") { if (value !== null && typeof value !== "undefined") {
if (typeof value === 'object') { if (typeof value === "object") {
for (const key of Object.keys(value)) { for (const key of Object.keys(value)) {
let params = propName + '[' + key + ']'; let params = propName + "[" + key + "]";
var subPart = encodeURIComponent(params) + "="; var subPart = encodeURIComponent(params) + "=";
url += subPart + encodeURIComponent(value[key]) + "&"; url += subPart + encodeURIComponent(value[key]) + "&";
} }
...@@ -63,105 +75,112 @@ service.interceptors.request.use(config => { ...@@ -63,105 +75,112 @@ service.interceptors.request.use(config => {
config.params = {}; config.params = {};
config.url = url; config.url = url;
} }
return config return config;
}, error => { },
console.log(error) (error) => {
Promise.reject(error) console.log(error);
}) Promise.reject(error);
}
);
// 响应拦截器 // 响应拦截器
service.interceptors.response.use(res => { service.interceptors.response.use(
(res) => {
// 未设置状态码则默认成功状态 // 未设置状态码则默认成功状态
const code = res.data.code || 200; const code = res.data.code || 200;
// 获取错误信息 // 获取错误信息
const msg = errorCode[code] || res.data.msg || errorCode['default'] const msg = errorCode[code] || res.data.msg || errorCode["default"];
if (code === 401) { if (code === 401) {
if (!isRelogin.show) { if (!isRelogin.show) {
isRelogin.show = true; isRelogin.show = true;
MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { MessageBox.confirm(
confirmButtonText: '重新登录', "登录状态已过期,您可以继续留在该页面,或者重新登录",
cancelButtonText: '取消', "系统提示",
type: 'warning' {
} confirmButtonText: "重新登录",
).then(() => { cancelButtonText: "取消",
type: "warning",
}
)
.then(() => {
isRelogin.show = false; isRelogin.show = false;
store.dispatch('LogOut').then(() => { store.dispatch("LogOut").then(() => {
location.href = '/'; location.href = "/";
});
}) })
}).catch(() => { .catch(() => {
isRelogin.show = false; isRelogin.show = false;
}); });
} }
return Promise.reject('无效的会话,或者会话已过期,请重新登录。') return Promise.reject("无效的会话,或者会话已过期,请重新登录。");
} else if (code === 500) { } else if (code === 500) {
Message({ Message({
dangerouslyUseHTMLString: true, dangerouslyUseHTMLString: true,
message: msg, message: msg,
type: 'error' type: "error",
}) });
return Promise.reject(new Error(msg)) return Promise.reject(new Error(msg));
} else if (code === 901) { } else if (code === 901) {
Message({ Message({
type: 'error', type: "error",
duration: 0, duration: 0,
dangerouslyUseHTMLString: true, dangerouslyUseHTMLString: true,
message: '<div>演示模式,无法进行写操作</div>' message:
+ '<div> &nbsp; </div>' "<div>演示模式,无法进行写操作</div>" +
+ '<div>参考 https://doc.iocoder.cn/ 教程</div>' "<div> &nbsp; </div>" +
+ '<div> &nbsp; </div>' "<div>参考 https://doc.iocoder.cn/ 教程</div>" +
+ '<div>5 分钟搭建本地环境</div>', "<div> &nbsp; </div>" +
}) "<div>5 分钟搭建本地环境</div>",
return Promise.reject(new Error(msg)) });
return Promise.reject(new Error(msg));
} else if (code === 555) { } else if (code === 555) {
// 额外情况 // 额外情况
return Promise.reject(res.data) return Promise.reject(res.data);
} else if (code === 566) { } else if (code === 566) {
// 额外情况 // 额外情况
return Promise.reject(res.data) return Promise.reject(res.data);
} else if (code === 666) { } else if (code === 666) {
// 额外情况 // 额外情况
return Promise.reject(res.data) return Promise.reject(res.data);
} else if (code !== 200) { } else if (code !== 200) {
// 如果内容很长则用alert提示,不然可能显示不全,自动隐藏也会导致看不完整就消失了 // 如果内容很长则用alert提示,不然可能显示不全,自动隐藏也会导致看不完整就消失了
if(msg.length > 300){ if (msg.length > 300) {
MessageBox.alert(msg, i18n.t('错误提示'), i18n.t('确定')) MessageBox.alert(msg, i18n.t("错误提示"), i18n.t("确定"));
}else{ } else {
Notification.error({ Notification.error({
title: msg title: msg,
}) });
} }
return Promise.reject(msg || 'error') return Promise.reject(msg || "error");
} else { } else {
return res.data return res.data;
} }
}, },
error => { (error) => {
console.log('err' + error) console.log("err" + error);
let { message } = error; let { message } = error;
if (message === "Network Error") { if (message === "Network Error") {
message = "后端接口连接异常"; message = "后端接口连接异常";
} } else if (message.includes("timeout")) {
else if (message.includes("timeout")) {
message = "系统接口请求超时"; message = "系统接口请求超时";
} } else if (message.includes("Request failed with status code")) {
else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常"; message = "系统接口" + message.substr(message.length - 3) + "异常";
} }
Message({ Message({
message: message, message: message,
type: 'error', type: "error",
duration: 5 * 1000 duration: 5 * 1000,
}) });
return Promise.reject(error) return Promise.reject(error);
} }
) );
export function getBaseHeader() { export function getBaseHeader() {
return { return {
'Authorization': "Bearer " + getToken(), Authorization: "Bearer " + getToken(),
'tenant-id': Cookies.get('tenantId'), "tenant-id": Cookies.get("tenantId"),
} };
} }
export default service export default service;
...@@ -601,7 +601,7 @@ export default { ...@@ -601,7 +601,7 @@ export default {
regError, regError,
editForm, editForm,
updateError, updateError,
//lanbm 2024-05-23 异常登记对话框 //异常登记对话框
unloadingError, unloadingError,
}, },
created() { created() {
...@@ -615,7 +615,7 @@ export default { ...@@ -615,7 +615,7 @@ export default {
const { data } = res; const { data } = res;
this.allUsers = data.list ?? []; this.allUsers = data.list ?? [];
}); });
//lanbm 2024-05-16 add //add
/* 不用此方式 /* 不用此方式
getCurrencyList().then((res) => { getCurrencyList().then((res) => {
this.currencyList = res.data ?? []; this.currencyList = res.data ?? [];
......
<template> <template>
<div class="app-container"> <div class="app-container">
<!-- 搜索工作栏 -->
<el-form <el-form
:model="queryParams" :model="queryParams"
ref="queryForm" ref="queryForm"
...@@ -15,7 +14,8 @@ ...@@ -15,7 +14,8 @@
:placeholder="$t('请输入客户编号')" :placeholder="$t('请输入客户编号')"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')"/> onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')"
/>
</el-form-item> </el-form-item>
<el-form-item :label="$t('客户名称')" prop="name"> <el-form-item :label="$t('客户名称')" prop="name">
<el-input <el-input
...@@ -136,13 +136,11 @@ ...@@ -136,13 +136,11 @@
range-separator="-" range-separator="-"
:start-placeholder="$t('开始日期')" :start-placeholder="$t('开始日期')"
:end-placeholder="$t('结束日期')" :end-placeholder="$t('结束日期')"
/> />
</el-form-item> </el-form-item>
<el-form-item :label="$t('信用等级')" prop="department"> <el-form-item :label="$t('信用等级')" prop="department">
<el-select multiple clearable v-model="queryParams.creditLevel"> <el-select multiple clearable v-model="queryParams.creditLevel">
<el-option <el-option
v-for="(item, index) in creditList" v-for="(item, index) in creditList"
:label="isChinese ? item.nameZh : item.nameEn" :label="isChinese ? item.nameZh : item.nameEn"
:key="index" :key="index"
...@@ -161,6 +159,36 @@ ...@@ -161,6 +159,36 @@
@change="handleQuery" @change="handleQuery"
></dict-selector> ></dict-selector>
</el-form-item> </el-form-item>
<el-form-item :label="$t('会员电话')" prop="department">
<el-col :span="11">
<area-code-selector style="width: 100%;" v-model="queryParams.memberAreaCode" />
</el-col>
<el-col class="line" :span="2"></el-col>
<el-col :span="11">
<el-input maxlength="11"
width="100%"
class="ml-10 w-200"
clearable
v-model.number="queryParams.memberMobile"
:placeholder="$t('请输入会员电话')"/>
</el-col>
</el-form-item>
<el-form-item :label="$t('会员编号')" prop="number">
<el-input
v-model.trim="queryParams.memberCode"
:placeholder="$t('请输入会员编号')"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item :label="$t('会员名称')" prop="name">
<el-input
v-model.trim="queryParams.memberName"
:placeholder="$t('请输入会员名称')"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{ <el-button type="primary" icon="el-icon-search" @click="handleQuery">{{
$t("搜索") $t("搜索")
...@@ -268,6 +296,18 @@ ...@@ -268,6 +296,18 @@
>{{ $t("新增潜在客户") }}</el-button >{{ $t("新增潜在客户") }}</el-button
> >
</el-col> </el-col>
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleMergeCus"
>{{ $t("合并客户") }}</el-button
>
</el-col>
<right-toolbar <right-toolbar
:showSearch.sync="showSearch" :showSearch.sync="showSearch"
@queryTable="getList" @queryTable="getList"
...@@ -1035,6 +1075,8 @@ import AddPotentialCustom from "@/views/ecw/customer/addPotentialCustom.vue"; ...@@ -1035,6 +1075,8 @@ import AddPotentialCustom from "@/views/ecw/customer/addPotentialCustom.vue";
import Contacts from "@/views/ecw/customer/components/contacts.vue"; import Contacts from "@/views/ecw/customer/components/contacts.vue";
import { getUserProfile } from "@/api/system/user"; import { getUserProfile } from "@/api/system/user";
import AreaCodeSelector from "@/components/AreaCodeSelector/index.vue";
export default { export default {
name: "EcwCustomerIndex", name: "EcwCustomerIndex",
components: { components: {
...@@ -1045,6 +1087,7 @@ export default { ...@@ -1045,6 +1087,7 @@ export default {
CustomerFollowList, CustomerFollowList,
customerComplaints, customerComplaints,
transferCustomer, transferCustomer,
AreaCodeSelector
}, },
data() { data() {
return { return {
...@@ -1056,7 +1099,7 @@ export default { ...@@ -1056,7 +1099,7 @@ export default {
// 导出遮罩层 // 导出遮罩层
exportLoading: false, exportLoading: false,
// 显示搜索条件 // 显示搜索条件
showSearch: true, showSearch: false,
// 总条数 // 总条数
total: 0, total: 0,
// 客户列表 // 客户列表
...@@ -1080,6 +1123,10 @@ export default { ...@@ -1080,6 +1123,10 @@ export default {
creditLevel: null, creditLevel: null,
country: null, country: null,
resourceType: null, resourceType: null,
memberCode: null,
memberName: null,
memberMobile: null,
memberAreaCode: null
}, },
// 表单参数 // 表单参数
form: {}, form: {},
...@@ -1220,6 +1267,9 @@ export default { ...@@ -1220,6 +1267,9 @@ export default {
this.getList(); this.getList();
}, },
methods: { methods: {
handleMergeCus() {
//合并客户
},
recovery(row) { recovery(row) {
this.$confirm(this.$t("是否要回收当前{name}", row), "提示", { this.$confirm(this.$t("是否要回收当前{name}", row), "提示", {
confirmButtonText: "确定", confirmButtonText: "确定",
...@@ -1470,6 +1520,10 @@ export default { ...@@ -1470,6 +1520,10 @@ export default {
department: null, department: null,
creditLevel: null, creditLevel: null,
country: null, country: null,
memberCode: null,
memberName: null,
memberMobile: null,
memberAreaCode: null
}; };
this.handleQuery(); this.handleQuery();
}, },
......
...@@ -28,6 +28,36 @@ ...@@ -28,6 +28,36 @@
<el-form-item :label="$t('市场获客')" prop="department"> <el-form-item :label="$t('市场获客')" prop="department">
<dict-selector clearable :type="DICT_TYPE.ECW_CUSTOMER_RESOURCE_TYPE" v-model="queryParams.marketType" formatter="number" @change="handleQuery"></dict-selector> <dict-selector clearable :type="DICT_TYPE.ECW_CUSTOMER_RESOURCE_TYPE" v-model="queryParams.marketType" formatter="number" @change="handleQuery"></dict-selector>
</el-form-item> </el-form-item>
<el-form-item :label="$t('会员电话')" prop="department">
<el-col :span="11">
<area-code-selector style="width: 100%;" v-model="queryParams.memberAreaCode" />
</el-col>
<el-col class="line" :span="2"></el-col>
<el-col :span="11">
<el-input maxlength="11"
width="100%"
class="ml-10 w-200"
clearable
v-model.number="queryParams.memberMobile"
:placeholder="$t('请输入会员电话')"/>
</el-col>
</el-form-item>
<el-form-item :label="$t('会员编号')" prop="number">
<el-input
v-model.trim="queryParams.memberCode"
:placeholder="$t('请输入会员编号')"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item :label="$t('会员名称')" prop="name">
<el-input
v-model.trim="queryParams.memberName"
:placeholder="$t('请输入会员名称')"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{$t('搜索')}}</el-button> <el-button type="primary" icon="el-icon-search" @click="handleQuery">{{$t('搜索')}}</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">{{$t('重置')}}</el-button> <el-button icon="el-icon-refresh" @click="resetQuery">{{$t('重置')}}</el-button>
...@@ -35,6 +65,13 @@ ...@@ -35,6 +65,13 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-row :gutter="10" class="mb8">
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<!-- 列表 --> <!-- 列表 -->
<el-table ref="multipleTable" v-loading="loading" :data="list" @selection-change="handleSelectionChange"> <el-table ref="multipleTable" v-loading="loading" :data="list" @selection-change="handleSelectionChange">
<el-table-column <el-table-column
...@@ -43,7 +80,6 @@ ...@@ -43,7 +80,6 @@
</el-table-column> </el-table-column>
<el-table-column :label="$t('客户名称')" align="center" prop="name" > <el-table-column :label="$t('客户名称')" align="center" prop="name" >
<template v-slot="scope"> <template v-slot="scope">
<span>{{ $l(scope.row,'name') }}</span> <span>{{ $l(scope.row,'name') }}</span>
</template> </template>
</el-table-column> </el-table-column>
...@@ -99,9 +135,13 @@ import { getDictDatas, DICT_TYPE } from '@/utils/dict'; ...@@ -99,9 +135,13 @@ import { getDictDatas, DICT_TYPE } from '@/utils/dict';
import {listServiceUser} from "@/api/system/user"; import {listServiceUser} from "@/api/system/user";
import {exportCustomerComplaintExcel} from "@/api/ecw/customerComplaint"; import {exportCustomerComplaintExcel} from "@/api/ecw/customerComplaint";
import {indirectCustomerExportExcel} from "@/api/ecw/customer"; import {indirectCustomerExportExcel} from "@/api/ecw/customer";
import AreaCodeSelector from "@/components/AreaCodeSelector/index.vue";
export default { export default {
name: "EcwCustomerIndirectcustomer", name: "EcwCustomerIndirectcustomer",
components: {
AreaCodeSelector
},
activated() { activated() {
this.getList() this.getList()
}, },
...@@ -114,7 +154,7 @@ export default { ...@@ -114,7 +154,7 @@ export default {
loading: true, loading: true,
// 导出遮罩层 // 导出遮罩层
// 显示搜索条件 // 显示搜索条件
showSearch: true, showSearch: false,
// 总条数 // 总条数
total: 0, total: 0,
// 客户列表 // 客户列表
...@@ -131,7 +171,11 @@ export default { ...@@ -131,7 +171,11 @@ export default {
name: null, name: null,
source: null, source: null,
customerService: null, customerService: null,
marketType:null marketType:null,
memberCode: null,
memberName: null,
memberMobile: null,
memberAreaCode: null
}, },
// 网点 // 网点
nodeList: [], nodeList: [],
...@@ -203,6 +247,10 @@ export default { ...@@ -203,6 +247,10 @@ export default {
name: null, name: null,
source: null, source: null,
customerService: null, customerService: null,
memberCode: null,
memberName: null,
memberMobile: null,
memberAreaCode: null
} }
this.handleQuery(); this.handleQuery();
}, },
......
<template>
<div class="app-container">
<el-card style="margin-bottom: 10px"> </el-card>
<el-card style="margin-bottom: 10px"> </el-card>
</div>
</template>
\ No newline at end of file
...@@ -57,6 +57,36 @@ ...@@ -57,6 +57,36 @@
<el-form-item :label="$t('市场获客')" prop="department"> <el-form-item :label="$t('市场获客')" prop="department">
<dict-selector multiple clearable :type="DICT_TYPE.ECW_CUSTOMER_RESOURCE_TYPE" v-model="queryParams.marketType" formatter="number" @change="handleQuery"></dict-selector> <dict-selector multiple clearable :type="DICT_TYPE.ECW_CUSTOMER_RESOURCE_TYPE" v-model="queryParams.marketType" formatter="number" @change="handleQuery"></dict-selector>
</el-form-item> </el-form-item>
<el-form-item :label="$t('会员电话')" prop="department">
<el-col :span="11">
<area-code-selector style="width: 100%;" v-model="queryParams.memberAreaCode" />
</el-col>
<el-col class="line" :span="2"></el-col>
<el-col :span="11">
<el-input maxlength="11"
width="100%"
class="ml-10 w-200"
clearable
v-model.number="queryParams.memberMobile"
:placeholder="$t('请输入会员电话')"/>
</el-col>
</el-form-item>
<el-form-item :label="$t('会员编号')" prop="number">
<el-input
v-model.trim="queryParams.memberCode"
:placeholder="$t('请输入会员编号')"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item :label="$t('会员名称')" prop="name">
<el-input
v-model.trim="queryParams.memberName"
:placeholder="$t('请输入会员名称')"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{$t('搜索')}}</el-button> <el-button type="primary" icon="el-icon-search" @click="handleQuery">{{$t('搜索')}}</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">{{$t('重置')}}</el-button> <el-button icon="el-icon-refresh" @click="resetQuery">{{$t('重置')}}</el-button>
...@@ -373,7 +403,7 @@ import {getCountryListAll} from "@/api/ecw/country"; ...@@ -373,7 +403,7 @@ import {getCountryListAll} from "@/api/ecw/country";
import {getCreditPage} from "@/api/customer/credit"; import {getCreditPage} from "@/api/customer/credit";
import transferCustomer from "@/views/ecw/customer/transferCustomer.vue"; import transferCustomer from "@/views/ecw/customer/transferCustomer.vue";
import Contacts from "@/views/ecw/customer/components/contacts.vue"; import Contacts from "@/views/ecw/customer/components/contacts.vue";
import AreaCodeSelector from "@/components/AreaCodeSelector/index.vue";
export default { export default {
...@@ -391,7 +421,8 @@ export default { ...@@ -391,7 +421,8 @@ export default {
}, },
components: { components: {
Contacts, Contacts,
transferCustomer transferCustomer,
AreaCodeSelector
}, },
data() { data() {
return { return {
...@@ -400,7 +431,7 @@ export default { ...@@ -400,7 +431,7 @@ export default {
// 导出遮罩层 // 导出遮罩层
exportLoading: false, exportLoading: false,
// 显示搜索条件 // 显示搜索条件
showSearch: true, showSearch: false,
// 总条数 // 总条数
total: 0, total: 0,
// 客户列表 // 客户列表
...@@ -425,6 +456,10 @@ export default { ...@@ -425,6 +456,10 @@ export default {
creditLevel:null, creditLevel:null,
country:null, country:null,
marketType:null, marketType:null,
memberCode: null,
memberName: null,
memberMobile: null,
memberAreaCode: null
}, },
// 表单参数 // 表单参数
form: {}, form: {},
...@@ -563,6 +598,10 @@ export default { ...@@ -563,6 +598,10 @@ export default {
department: null, department: null,
creditLevel:null, creditLevel:null,
country:null, country:null,
memberCode: null,
memberName: null,
memberMobile: null,
memberAreaCode: null
} }
this.handleQuery(); this.handleQuery();
}, },
......
...@@ -58,6 +58,36 @@ ...@@ -58,6 +58,36 @@
<el-form-item :label="$t('市场获客')" prop="department"> <el-form-item :label="$t('市场获客')" prop="department">
<dict-selector clearable :type="DICT_TYPE.ECW_CUSTOMER_RESOURCE_TYPE" v-model="queryParams.marketType" formatter="number"></dict-selector> <dict-selector clearable :type="DICT_TYPE.ECW_CUSTOMER_RESOURCE_TYPE" v-model="queryParams.marketType" formatter="number"></dict-selector>
</el-form-item> </el-form-item>
<el-form-item :label="$t('会员电话')" prop="department">
<el-col :span="11">
<area-code-selector style="width: 100%;" v-model="queryParams.memberAreaCode" />
</el-col>
<el-col class="line" :span="2"></el-col>
<el-col :span="11">
<el-input maxlength="11"
width="100%"
class="ml-10 w-200"
clearable
v-model.number="queryParams.memberMobile"
:placeholder="$t('请输入会员电话')"/>
</el-col>
</el-form-item>
<el-form-item :label="$t('会员编号')" prop="number">
<el-input
v-model.trim="queryParams.memberCode"
:placeholder="$t('请输入会员编号')"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item :label="$t('会员名称')" prop="name">
<el-input
v-model.trim="queryParams.memberName"
:placeholder="$t('请输入会员名称')"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{$t('搜索')}}</el-button> <el-button type="primary" icon="el-icon-search" @click="handleQuery">{{$t('搜索')}}</el-button>
<el-button icon="el-icon-refresh" @click="resetQuery">{{$t('重置')}}</el-button> <el-button icon="el-icon-refresh" @click="resetQuery">{{$t('重置')}}</el-button>
...@@ -180,6 +210,7 @@ import {getCreditPage} from "@/api/customer/credit"; ...@@ -180,6 +210,7 @@ import {getCreditPage} from "@/api/customer/credit";
import transferCustomer from "@/views/ecw/customer/transferCustomer"; import transferCustomer from "@/views/ecw/customer/transferCustomer";
import Template from "@/views/cms/template/index.vue"; import Template from "@/views/cms/template/index.vue";
import Contacts from "@/views/ecw/customer/components/contacts.vue"; import Contacts from "@/views/ecw/customer/components/contacts.vue";
import AreaCodeSelector from "@/components/AreaCodeSelector/index.vue";
export default { export default {
name: "EcwCustomertobeassignedIndex", name: "EcwCustomertobeassignedIndex",
activated() { activated() {
...@@ -189,7 +220,8 @@ export default { ...@@ -189,7 +220,8 @@ export default {
Contacts, Contacts,
Template, Template,
upload, upload,
transferCustomer transferCustomer,
AreaCodeSelector
}, },
data() { data() {
return { return {
...@@ -201,7 +233,7 @@ export default { ...@@ -201,7 +233,7 @@ export default {
// 导出遮罩层 // 导出遮罩层
exportLoading: false, exportLoading: false,
// 显示搜索条件 // 显示搜索条件
showSearch: true, showSearch: false,
// 总条数 // 总条数
total: 0, total: 0,
// 客户列表 // 客户列表
...@@ -226,6 +258,10 @@ export default { ...@@ -226,6 +258,10 @@ export default {
creditLevel:null, creditLevel:null,
country:null, country:null,
marketType:null, marketType:null,
memberCode: null,
memberName: null,
memberMobile: null,
memberAreaCode: null
}, },
// 表单参数 // 表单参数
form: {}, form: {},
...@@ -357,6 +393,10 @@ export default { ...@@ -357,6 +393,10 @@ export default {
department: null, department: null,
creditLevel:null, creditLevel:null,
country:null, country:null,
memberCode: null,
memberName: null,
memberMobile: null,
memberAreaCode: null
} }
this.handleQuery(); this.handleQuery();
}, },
......
<template>
<el-dialog
:title="$t('选择会员')"
:visible.sync="dialogVisible"
width="80%"
:before-close="dialogBeforeClose"
>
<div class="app-container">
<el-form
:model="queryParams"
ref="queryForm"
size="small"
v-show="showSearch"
:inline="true"
label-width="120px"
>
<el-form-item :label="$t('当前积分')">
<el-row :gutter="10">
<el-col :span="8">
<dict-selector
clearable
:type="DICT_TYPE.QUANTITATIVE_RELATION_SYMBOL"
v-model="queryParams.holdScoreOperate"
@change="handleQuery"
>
</dict-selector>
</el-col>
<el-col :span="16">
<el-input
v-model.trim="queryParams.holdScore"
:placeholder="$t('请输入数字')"
clearable
@keyup.enter.native="handleQuery"
onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')"
/>
</el-col>
</el-row>
</el-form-item>
<el-form-item :label="$t('关键词')">
<el-input
style="width: 300px"
v-model.trim="queryParams.key"
:placeholder="$t('请输入会员名称/会员编号/手机号')"
clearable
@keyup.enter.native="handleQuery"
onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')"
/>
</el-form-item>
<el-form-item :label="$t('国家')">
<el-select
v-model="queryParams.country"
:placeholder="$t('请选择国家')"
clearable
@change="handleGetCityList($event)"
size="small"
>
<el-option
v-for="nodeItem in countryList"
:key="nodeItem.id"
:label="isChinese ? nodeItem.titleZh : nodeItem.titleEn"
:value="nodeItem.id"
/>
</el-select>
</el-form-item>
<el-form-item :label="$t('城市')">
<el-select
v-model="queryParams.city"
:placeholder="$t('请选择城市')"
clearable
size="small"
>
<el-option
v-for="nodeItem in cityList"
:key="nodeItem.id"
:label="isChinese ? nodeItem.titleZh : nodeItem.titleEn"
:value="nodeItem.id"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
>{{ $t("搜索") }}</el-button
>
<el-button icon="el-icon-refresh" @click="resetQuery">{{
$t("重置")
}}</el-button>
</el-form-item>
</el-form>
<el-row class="mb8">
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="handleQueryPagination"
></right-toolbar>
</el-row>
<el-table
ref="multipleTable"
v-loading="loading"
@selection-change="handleSelectionChange"
:data="memberList"
>
<el-table-column type="selection" width="55" :selectable="selectable">
</el-table-column>
<el-table-column
:label="$t('会员名称')"
align="center"
:prop="isChinese ? 'memberNameZh' : 'memberNameEn'"
></el-table-column>
<el-table-column
width="140"
:label="$t('会员编号')"
align="center"
prop="id"
></el-table-column>
<el-table-column
width="140"
:label="$t('手机号')"
align="center"
prop="mobile"
></el-table-column>
<el-table-column
width="140"
align="center"
:label="$t('国家')"
:prop="isChinese ? 'countryNameZh' : 'countryNameEn'"
></el-table-column>
<el-table-column
:label="$t('城市')"
align="center"
:prop="isChinese ? 'cityNameZh' : 'cityNameEn'"
></el-table-column>
<el-table-column
:label="$t('当前积分')"
align="center"
prop="holdScore"
></el-table-column>
</el-table>
<!-- //分页列表 -->
<span v-show="selectedMember.memberList.length > 0"
>{{ $t("已选择:") }} {{ selectedMember.memberName }} {{ $t("") }}
<span style="color: red"> {{ selectedMember.memberList.length }} </span>
{{ $t("") }}</span
>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
@pagination="handleQueryPagination"
/>
</div>
<div slot="footer">
<el-button @click="dialogBeforeClose">取 消</el-button>
<el-button type="primary" @click="transferSelectMember">确 定</el-button>
</div>
</el-dialog>
</template>
<script>
import { getDictDatas, DICT_TYPE } from "@/utils/dict";
import {
getCityList,
getTradeCountryList,
getMemberList,
} from "@/api/ecw/giftManagement";
import { color } from "echarts/lib/export";
export default {
name: "chooseMember",
props: {
dialogVisible: {
type: Boolean,
default: false,
},
memberSelectList: {
type: Array,
default: () => [],
},
},
watch: {
dialogVisible(val) {
if (val == true) {
this.handleQuery();
}
},
memberSelectList(val) {
this.selectedMember.memberList = val;
},
},
data() {
return {
selectedMember: { memberList: [], memberName: "" },
countryList: [],
cityList: [],
total: 0,
loading: true,
memberList: [],
// 显示搜索条件
showSearch: true,
queryParams: {
country: null,
city: null,
endTime: "",
holdScore: null,
holdScoreOperate: null,
key: "",
pageNo: 1,
pageSize: 10,
startTime: "",
usedScore: null,
usedScoreOperate: null,
},
};
},
computed: {
isChinese() {
return this.$i18n.locale === "zh_CN";
},
},
created() {
this.handleQuery();
this.getCountryList();
},
activated() {
this.handleQuery();
},
methods: {
selectable(row, index) {
if (this.memberSelectList.length > 0) {
return this.memberSelectList.some((item) => {
return item.id != row.id;
});
} else {
return true;
}
},
handleSelectionChange(val) {
this.selectedMember.memberList = val;
let arraryMemberName = [];
if (val) {
this.selectedMember.memberList.forEach((element) => {
if (this.isChinese) {
arraryMemberName.push(element.memberNameZh);
} else {
arraryMemberName.push(element.memberNameEn);
}
});
}
this.selectedMember.memberName = arraryMemberName.join("");
},
transferSelectMember() {
this.dialogBeforeClose();
this.$emit("transferSelectMemberInfo", this.selectedMember.memberList);
},
dialogBeforeClose() {
this.loading = true;
this.queryParams = {
country: null,
city: null,
endTime: null,
holdScore: null,
holdScoreOperate: null,
key: null,
pageNo: 1,
pageSize: 10,
startTime: null,
usedScore: null,
usedScoreOperate: null,
};
// this.dialogVisible = false;
this.$emit("update:dialogVisible", false);
},
getCountryList() {
getTradeCountryList().then((res) => {
this.countryList = res.data;
});
},
handleGetCityList(id) {
if (id) {
let params = {
id: id,
};
getCityList(params).then((res) => {
this.cityList = res.data;
});
} else {
this.cityList = [];
}
},
handleQuery() {
this.queryParams.pageNo = 1;
let params = { ...this.queryParams };
getMemberList(params).then((res) => {
this.loading = false;
this.memberList = res.data.list;
this.total = res.data.total;
});
},
handleQueryPagination() {
let params = { ...this.queryParams };
getMemberList(params).then((res) => {
this.loading = false;
this.memberList = res.data.list;
this.total = res.data.total;
});
},
resetQuery() {
this.loading = true;
this.queryParams = {
country: null,
city: null,
endTime: null,
holdScore: null,
holdScoreOperate: null,
key: null,
pageNo: 1,
pageSize: 10,
startTime: null,
usedScore: null,
usedScoreOperate: null,
};
this.handleQuery();
},
},
};
</script>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
<template>
<div class="app-container">
<el-row class="mb8">
<el-button
type="success"
size="mini"
icon="el-icon-plus"
@click="handleNewScoreRule"
>{{ $t("添加规则") }}</el-button
>
<el-button
type="success"
size="mini"
icon="el-icon-delete"
@click="handleDelScoreRule"
>{{ $t("删除规则") }}</el-button
>
</el-row>
<el-table
ref="multipleTable"
v-loading="loading"
@selection-change="handleSelectionChange"
:data="memberLevelList"
>
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column
width="140"
:label="$t('序号')"
align="center"
prop="id"
></el-table-column>
<el-table-column
:label="$t('等级名称')"
align="center"
prop="name"
></el-table-column>
<el-table-column
width="140"
:label="$t('图标')"
align="center"
prop="mobile"
>
<template slot-scope="scope">
<el-image :src="scope.row.icon" style="width: 50px; height: 50px">{{
$t("")
}}</el-image>
</template>
</el-table-column>
<el-table-column :label="$t('积分范围')" align="center">
<template slot-scope="scope">
{{ scope.row.lowerCount }}-{{ scope.row.upperCount }}
</template>
</el-table-column>
<el-table-column :label="$t('操作')" align="center">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
>{{ $t("修改") }}</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>{{ $t("删除") }}</el-button
>
</template>
</el-table-column>
</el-table>
<!-- //分页列表 -->
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
@pagination="handleQueryPagination"
/>
<el-dialog
:title="$t('添加规则')"
:visible.sync="dialogVisible"
width="30%"
:before-close="handleClose"
>
<el-form
:model="ruleForm"
ref="ruleForm"
label-width="100px"
class="demo-ruleForm"
>
<el-form-item :label="$t('等级名称')">
<el-input v-model="ruleForm.name"></el-input>
</el-form-item>
<el-form-item :label="$t('积分范围')">
<el-col :span="11">
<el-form-item>
<el-input v-model="ruleForm.lowerCount"></el-input>
</el-form-item>
</el-col>
<el-col class="line" :span="2">{{ $t("至") }}</el-col>
<el-col :span="11">
<el-form-item>
<el-input v-model="ruleForm.upperCount"></el-input>
</el-form-item>
</el-col>
</el-form-item>
<el-form-item :label="$t('上传图标')">
<image-upload v-model="ruleForm.icon" />
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">{{ $t("取 消") }}</el-button>
<el-button type="primary" @click="handelAddNewMemberLevel">{{
$t("确定")
}}</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { getDictDatas, DICT_TYPE } from "@/utils/dict";
import {
getMemberLevelList,
addNewMemberLevel,
delMemberLevel,
editMemberLevel,
} from "@/api/ecw/memberManagement";
import ImageUpload from "@/components/ImageUpload";
export default {
name: "integralRecord",
components: {
ImageUpload,
},
data() {
return {
dialogVisible: false,
selectList: [],
ruleForm: {
icon: "",
lowerCount: "",
name: "",
upperCount: "",
},
total: 0,
loading: true,
memberLevelList: [],
queryParams: {
pageNo: 1,
pageSize: 10,
},
};
},
computed: {
isChinese() {
return this.$i18n.locale === "zh_CN";
},
},
created() {
this.handleQuery();
},
activated() {
this.handleQuery();
},
methods: {
handleUpdate(row) {
this.ruleForm = { ...row };
this.dialogVisible = true;
},
handleDelete(row) {
let ids = [row.id];
delMemberLevel(ids).then((res) => {
this.$message.success(this.$t("删除成功"));
this.handleClose();
this.handleQuery();
});
},
handelAddNewMemberLevel() {
if (this.ruleForm.id) {
editMemberLevel(this.ruleForm).then((res) => {
this.$message.success(this.$t("更新成功"));
this.handleClose();
this.handleQuery();
});
} else {
let params = { ...this.ruleForm };
addNewMemberLevel(params).then((res) => {
this.$message.success(this.$t("保存成功"));
this.handleClose();
this.handleQuery();
});
}
},
handleSelectionChange(ids) {
this.selectList = ids;
},
handleClose() {
this.dialogVisible = false;
this.selectList = [];
this.ruleForm = {
icon: "",
lowerCount: "",
name: "",
upperCount: "",
};
},
handleDelScoreRule() {
if (this.selectList.length > 0) {
let ids = this.selectList.map((item) => {
return item.id;
});
delMemberLevel(ids).then((res) => {
this.$message.success(this.$t("删除成功"));
this.handleClose();
this.handleQuery();
});
} else {
this.$message.warning(this.$t("请先选择要删除的会员等级"));
}
},
handleNewScoreRule() {
this.dialogVisible = true;
},
handleQuery() {
this.queryParams.pageNo = 1;
let params = { ...this.queryParams };
getMemberLevelList(params).then((res) => {
this.loading = false;
this.memberLevelList = res.data.list;
this.total = res.data.total;
});
},
handleQueryPagination() {
let params = { ...this.queryParams };
getMemberLevelList(params).then((res) => {
this.loading = false;
this.memberLevelList = res.data.list;
this.total = res.data.total;
});
},
},
};
</script>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -952,10 +952,10 @@ export default { ...@@ -952,10 +952,10 @@ export default {
isAllProduct: 0, isAllProduct: 0,
}); });
if (this.form.needOrderInquiry == 0) {
//不是单询价才校验价格参数 lanbm 2024-06-17
// 阶梯价 // 阶梯价
if (this.form.stepPrice) { if (this.form.stepPrice) {
// 单询不校验
if (this.form.needOrderInquiry == 0) {
let isValid = true; let isValid = true;
for (let stepPrice of this.$refs.stepPrice) { for (let stepPrice of this.$refs.stepPrice) {
if (!stepPrice.validate()) { if (!stepPrice.validate()) {
...@@ -964,6 +964,7 @@ export default { ...@@ -964,6 +964,7 @@ export default {
} }
} }
if (!isValid) return; if (!isValid) return;
}
// 全包价 // 全包价
if (this.form.priceType == 1) { if (this.form.priceType == 1) {
...@@ -981,9 +982,16 @@ export default { ...@@ -981,9 +982,16 @@ export default {
); );
delete data.fullPriceStepList; delete data.fullPriceStepList;
} }
// 删除非阶梯价 包装费字段
delete data.clearancePricePackagingList
delete data.freightPricePackagingList
delete data.fullPricePackagingList
} }
//海运非阶梯价校验 //海运非阶梯价校验
else { else {
// 单询不校验
if (this.form.needOrderInquiry == 0) {
// 有多个组件则表示清关费 + 运费 // 有多个组件则表示清关费 + 运费
if (this.$refs.seaPrice?.length) { if (this.$refs.seaPrice?.length) {
let isValid = true; let isValid = true;
...@@ -999,6 +1007,7 @@ export default { ...@@ -999,6 +1007,7 @@ export default {
else if (this.$refs.seaPrice && !this.$refs.seaPrice.validate()) { else if (this.$refs.seaPrice && !this.$refs.seaPrice.validate()) {
return; return;
} }
}
// 格式化 // 格式化
if (this.form.priceType === 1) { if (this.form.priceType === 1) {
...@@ -1041,8 +1050,6 @@ export default { ...@@ -1041,8 +1050,6 @@ export default {
} }
} }
}
// 修改单条路线 // 修改单条路线
if (this.$route.query.action == "update") { if (this.$route.query.action == "update") {
this.loading = true; this.loading = true;
......
This diff is collapsed.
This diff is collapsed.
...@@ -574,7 +574,7 @@ export default { ...@@ -574,7 +574,7 @@ export default {
$route(to) { $route(to) {
//lanbm 2024-05-06 解决重新进入参数不刷新的问题 //lanbm 2024-05-06 解决重新进入参数不刷新的问题
//this.$route.name == "客户分析" 用name做逻辑判断,有时候菜单名称会变化 //this.$route.name == "客户分析" 用name做逻辑判断,有时候菜单名称会变化
//"/report/customer_analysis" lanbm 2024-05-07 调整为根据path做逻辑判断 //"/report/customer_analysis" 调整为根据path做逻辑判断
if (this.$route.path == "/report/customer_analysis") { if (this.$route.path == "/report/customer_analysis") {
this.doLoadData(); this.doLoadData();
} }
......
...@@ -389,4 +389,3 @@ export default { ...@@ -389,4 +389,3 @@ 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