Commit 6cb0f3d1 by chenyu

update: update

parent a4cf4adb
<template>
<div>
<el-dialog title="宝宝信息" custom-class="customer-dailog" :visible.sync="visible"
:close-on-click-modal="false" @close="cancel" width="636px">
<el-dialog
title="宝宝信息"
custom-class="customer-dailog"
:visible.sync="visible"
:close-on-click-modal="false"
@close="cancel"
width="636px"
>
<el-tabs v-model="activeName">
<el-tab-pane v-for="(item,index) in fieldsList" :key="index"
:label="item.sonFields[0].fieldValue" :name="`${index}`"></el-tab-pane>
<el-tab-pane
v-for="(item,index) in fieldsList"
:key="index"
:label="item.sonFields[0].fieldValue"
:name="`${index}`"
/>
</el-tabs>
<el-form v-if="fieldsList[activeName]" ref="form" :model="fieldsList[activeName].form"
label-width="122px" :inline="true" :disabled="true">
<el-form
v-if="fieldsList[activeName]"
ref="form"
:model="fieldsList[activeName].form"
label-width="122px"
:inline="true"
:disabled="true"
>
<el-form-item label="宝宝名称:" prop="name">
<el-input type="text" maxlength="10" show-word-limit placeholder="请输姓名"
v-model="fieldsList[activeName].form.name" style="width: 160px;"></el-input>
<el-input
type="text"
maxlength="10"
show-word-limit
placeholder="请输姓名"
v-model="fieldsList[activeName].form.name"
style="width: 160px;"
/>
</el-form-item>
<el-form-item label="宝宝生日:" prop="birthDay">
<el-date-picker style="width: 160px;" v-model="fieldsList[activeName].form.birthDay"
type="date"></el-date-picker>
<el-date-picker
style="width: 160px;"
v-model="fieldsList[activeName].form.birthDay"
type="date"
/>
</el-form-item>
<el-form-item label="宝宝性别:" prop="sex">
<el-select v-model="fieldsList[activeName].form.sex" style="width: 160px;">
<el-option label="男" :value="1"></el-option>
<el-option label="女" :value="2"></el-option>
<el-option label="男" :value="1" />
<el-option label="女" :value="2" />
</el-select>
</el-form-item>
<el-form-item label="宝宝身高(cm):" prop="height">
<el-input v-model="fieldsList[activeName].form.height" type="text" show-word-limit
style="width: 160px;">
</el-input>
<el-input
v-model="fieldsList[activeName].form.height"
type="text"
show-word-limit
style="width: 160px;"
/>
</el-form-item>
<el-form-item label="宝宝体重(kg):" prop="weight">
<el-input v-model="fieldsList[activeName].form.weight" type="text" show-word-limit
style="width: 160px;">
</el-input>
<el-input
v-model="fieldsList[activeName].form.weight"
type="text"
show-word-limit
style="width: 160px;"
/>
</el-form-item>
<el-form-item label="鞋码(码):" prop="shoeSize">
<el-input v-model="fieldsList[activeName].form.shoeSize" type="text" show-word-limit
style="width: 160px;">
</el-input>
<el-input
v-model="fieldsList[activeName].form.shoeSize"
type="text"
show-word-limit
style="width: 160px;"
/>
</el-form-item>
</el-form>
</el-dialog>
......@@ -43,39 +77,39 @@
</template>
<script>
export default {
name: "babyinfoDialog",
name: 'BabyinfoDialog',
props: {
dialogVisible: {
type: Boolean,
default: false
default: false,
},
childFieldsList: {
type: Array,
default: () => {
return [];
}
},
},
},
data() {
data () {
return {
visible: false,
fieldsList: [],
activeName: '0'
activeName: '0',
};
},
},
watch: {
dialogVisible(n, o) {
dialogVisible (n, o) {
this.visible = n;
if (n) {
const filterObj = {
'宝宝名称': 'name',
'宝宝性别': 'sex',
'宝宝生日': 'birthDay',
宝宝名称: 'name',
宝宝性别: 'sex',
宝宝生日: 'birthDay',
'宝宝身高(cm)': 'height',
'宝宝体重(kg)': 'weight',
'鞋码(码)': 'shoeSize',
};
let fieldList = this.childFieldsList.map(el => {
const fieldList = this.childFieldsList.map(el => {
el.form = {
name: '',
sex: '',
......@@ -84,15 +118,15 @@ export default {
weight: '',
shoeSize: '',
};
el.sonFields.map(field => el.form[ filterObj[ field.fieldName ] ] = field.fieldValue);
el.sonFields.map(field => (el.form[filterObj[field.fieldName]] = field.fieldValue));
return el;
});
this.fieldsList = JSON.parse(JSON.stringify(fieldList));
}
}
},
},
methods: {
cancel() {
cancel () {
this.$emit('update:dialogVisible', false);
},
},
......@@ -121,4 +155,4 @@ export default {
padding-right: 0;
}
}
</style>
\ No newline at end of file
</style>
......@@ -2,11 +2,13 @@
<div class="batch-list">
<template v-if="dataList.length > 0">
<div v-for="(item, index) in dataList" :key="index" class="batch-item">
<p class="batch-item-name">{{item.name}}</p>
<p class="batch-item-name">
{{ item.name }}
</p>
<div class="batch-item-progress">
<el-progress
:percentage="item.taskCount == 0 ? 100 : (+((item.finishCount*100/item.taskCount).toFixed(2)))">
</el-progress>
:percentage="item.taskCount == 0 ? 100 : (+((item.finishCount*100/item.taskCount).toFixed(2)))"
/>
</div>
</div>
</template>
......@@ -18,20 +20,20 @@
<script>
export default {
name: "batchList",
name: 'BatchList',
props: {
dataList: {
type: Array,
default() {
default () {
return [];
}
}
},
},
},
data() {
data () {
return {};
},
watch: {},
methods: {},
watch: {}
};
......@@ -56,4 +58,4 @@ export default {
}
</style>
<style lang="less">
</style>
\ No newline at end of file
</style>
<template>
<div>
<el-dialog title="批量修改等级" custom-class="customer-dailog" :visible.sync="visible"
:close-on-click-modal="false" @close="cancel" width="600px">
<div class="checkedCustomers">当前选中<span class="num">
<el-dialog
title="批量修改等级"
custom-class="customer-dailog"
:visible.sync="visible"
:close-on-click-modal="false"
@close="cancel"
width="600px"
>
<div class="checkedCustomers">
当前选中<span class="num">
{{ selectObj.selectAll?selectObj.totalCount:selectObj.multipleList.length }} </span>位客户
</div>
<el-form ref="form" :model="form" :rules="rules" label-width="133px">
<el-form
ref="form"
:model="form"
:rules="rules"
label-width="133px"
>
<el-form-item v-if="showEditClique" label="等级类型:" prop="gradeType">
<el-radio v-model="form.isClique" :label="1" @change="form.gradeId = ''">集团等级</el-radio>
<el-radio v-model="form.isClique" :label="0" @change="form.gradeId = ''">商户等级</el-radio>
<el-radio v-model="form.isClique" :label="1" @change="form.gradeId = ''">
集团等级
</el-radio>
<el-radio v-model="form.isClique" :label="0" @change="form.gradeId = ''">
商户等级
</el-radio>
</el-form-item>
<el-form-item label="调整后等级:" prop="gradeId">
<el-select v-model="form.gradeId" placeholder="请选择" style="width: 400px;">
<el-option v-for="item in gradeList" :key="item.id" :label="item.name" :value="item.id">
</el-option>
<el-option
v-for="item in gradeList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="原因备注:" prop="remark">
<el-input type="text" maxlength="20" show-word-limit v-model="form.remark"
placeholder="请输入内容" style="width: 400px;"></el-input>
<el-input
type="text"
maxlength="20"
show-word-limit
v-model="form.remark"
placeholder="请输入内容"
style="width: 400px;"
/>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
......@@ -29,30 +55,30 @@
</div>
</template>
<script>
import { doFetch } from "../../axios/api";
import url from "../../axios/url";
import { mapState } from "vuex";
import { checkFalse, checkStatus, checkSuccess } from "../../../../static/js/checkStatus";
import { doFetch } from '../../axios/api';
import url from '../../axios/url';
import { mapState } from 'vuex';
import { checkFalse, checkStatus, checkSuccess } from '../../../../static/js/checkStatus';
export default {
name: "gradeDailog",
name: 'GradeDailog',
props: {
dialogVisible: {
type: Boolean,
default: false
default: false,
},
gradeList: {
type: Array,
default: () => {
return [];
}
},
},
ajaxObj: {
type: Object,
default: () => {
return {
pageName: ''
pageName: '',
};
}
},
},
selectObj: {
type: Object,
......@@ -61,66 +87,66 @@ export default {
visible: false,
totalCount: 0,
selectAll: false,
multipleList: []
multipleList: [],
};
}
},
},
},
data() {
data () {
return {
form: {
gradeId: "",
remark: "",
isClique: 0
gradeId: '',
remark: '',
isClique: 0,
},
rules: {
gradeId: [ { required: true, message: "请选择等级", trigger: "change" } ],
gradeId: [{ required: true, message: '请选择等级', trigger: 'change' }],
remark: [
{ required: true, message: "请输入原因备注", trigger: "change" }
]
{ required: true, message: '请输入原因备注', trigger: 'change' },
],
},
btnLoading: false,
};
},
computed: {
...mapState([ "showEditClique" ])
...mapState(['showEditClique']),
},
watch: {
dialogVisible(n, o) {
watch: {
dialogVisible (n, o) {
this.visible = n;
if (n) {
if (this.showEditClique) {
this.form.isClique = 1;
}
}
}
},
},
methods: {
cancel() {
this.$refs[ 'form' ].resetFields();
cancel () {
this.$refs.form.resetFields();
this.$emit('update:dialogVisible', false);
},
submit() {
this.$refs[ 'form' ].validate(valid => {
submit () {
this.$refs.form.validate(valid => {
if (valid) {
const { selectAll, multipleList } = this.selectObj;
const { memberSearchStr, pageSize, phoneNameCard, pageName } = this.ajaxObj;
this.btnLoading = true;
let memberIdsArr = [];
const memberIdsArr = [];
multipleList.forEach(item => {
memberIdsArr.push(item.memberId);
});
doFetch(url.updateGrade, Object.assign({}, this.form, {
memberIds: selectAll == true ? "-1" : memberIdsArr.join(","),
memberIds: selectAll == true ? '-1' : memberIdsArr.join(','),
isCurrent: selectAll == true ? 2 : multipleList.length == pageSize ? 1 : 0,
memberSearchParamStr: selectAll == true ? (memberSearchStr ? memberSearchStr : "-1") : "",
memberSearchParamStr: selectAll == true ? (memberSearchStr || '-1') : '',
phoneNameCard: phoneNameCard,
pageName: pageName
pageName: pageName,
}))
.then(res => {
if (res.data.errorCode === 0) {
checkSuccess();
this.$refs[ 'form' ].resetFields();
this.$refs.form.resetFields();
this.$emit('update:dialogVisible', false);
this.$emit('refresh');
} else {
......@@ -129,7 +155,7 @@ export default {
})
.catch(err => {
checkStatus(err);
}).finally(_ => this.btnLoading = false);
}).finally(_ => (this.btnLoading = false));
} else {
return false;
}
......@@ -171,4 +197,4 @@ export default {
.customer-dailog .el-dialog__body {
padding-bottom: 0;
}
</style>
\ No newline at end of file
</style>
<template>
<div>
<el-dialog title="修改等级" custom-class="customer-dailog" :visible.sync="visible"
:close-on-click-modal="false" @close="cancel" width="600px">
<el-form ref="form" :model="form" :rules="rules" label-width="133px">
<el-dialog
title="修改等级"
custom-class="customer-dailog"
:visible.sync="visible"
:close-on-click-modal="false"
@close="cancel"
width="600px"
>
<el-form
ref="form"
:model="form"
:rules="rules"
label-width="133px"
>
<el-form-item label="调整后等级:" prop="gradeId">
<el-select v-model="form.gradeId" placeholder="请选择" style="width: 386px;">
<el-option v-for="item in gradeList" :key="item.id" :label="item.name" :value="item.id">
</el-option>
<el-option
v-for="item in gradeList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="原因备注:" prop="remark">
<el-input type="text" maxlength="20" show-word-limit v-model="form.remark"
placeholder="请输入内容" style="width: 386px;"></el-input>
<el-input
type="text"
maxlength="20"
show-word-limit
v-model="form.remark"
placeholder="请输入内容"
style="width: 386px;"
/>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
......@@ -22,62 +43,65 @@
</div>
</template>
<script>
import { doFetch } from "../../axios/api";
import url from "../../axios/url";
import { checkFalse, checkStatus, checkSuccess } from "../../../../static/js/checkStatus";
import { doFetch } from '../../axios/api';
import url from '../../axios/url';
import { checkFalse, checkStatus, checkSuccess } from '../../../../static/js/checkStatus';
export default {
name: "customergradeDialog",
name: 'CustomergradeDialog',
props: {
dialogVisible: {
type: Boolean,
default: false
default: false,
},
gradeId: {
type: String,
default: ''
default: '',
},
gradeList: {
type: Array,
default: () => {
return [];
}
},
},
memberId: {
type: String,
default: '',
},
memberId: ''
},
data() {
data () {
return {
visible: false,
form: {
memberId: '',
gradeId: "",
remark: ""
gradeId: '',
remark: '',
},
rules: {
gradeId: [
{ required: true, message: "请选择修改后等级", trigger: "change" }
{ required: true, message: '请选择修改后等级', trigger: 'change' },
],
remark: [
{ required: true, message: "请输入原因备注", trigger: "change" }
{ required: true, message: '请输入原因备注', trigger: 'change' },
],
},
btnLoading: false,
};
},
watch: {
dialogVisible(n, o) {
watch: {
dialogVisible (n, o) {
this.visible = false;
if (n) {
this.form = { ...this.form, gradeId: this.gradeId, memberId: this.memberId };
}
}
},
},
methods: {
cancel() {
this.$refs[ 'form' ].resetFields();
cancel () {
this.$refs.form.resetFields();
this.$emit('update:dialogVisible', false);
},
submit() {
this.$refs[ 'form' ].validate(valid => {
submit () {
this.$refs.form.validate(valid => {
if (valid) {
this.btnLoading = true;
doFetch(url.memberGrade, Object.assign({}, this.form))
......@@ -86,7 +110,7 @@ export default {
setTimeout(() => {
this.btnLoading = false;
checkSuccess();
this.$refs[ 'form' ].resetFields();
this.$refs.form.resetFields();
this.$emit('update:dialogVisible', false);
this.$emit('refresh');
}, 2000);
......@@ -118,4 +142,4 @@ export default {
.customer-dailog .el-dialog__body {
padding-bottom: 0;
}
</style>
\ No newline at end of file
</style>
<template>
<div>
<el-dialog title="编辑手工标签" custom-class="customer-dailog label-dailog" :visible.sync="visible"
:close-on-click-modal="false" @close="cancel" width="600px">
<el-dialog
title="编辑手工标签"
custom-class="customer-dailog label-dailog"
:visible.sync="visible"
:close-on-click-modal="false"
@close="cancel"
width="600px"
>
<el-tabs v-model="activeName">
<template v-for="tab in tabsList">
<el-tab-pane :label="tab.label" :name="tab.name" :key="tab"
v-if="!(tab.name==='weimo'&&!weimobTagFlag)">
<el-tab-pane
:label="tab.label"
:name="tab.name"
:key="tab"
v-if="!(tab.name==='weimo'&&!weimobTagFlag)"
>
<ul class="tags-list" v-if="tab.name==='clerk'&&tagsList.length">
<li v-for="(item,index) in tagsList" :key="index" class="tag-item-new">
<div class="tag-group-name" v-if="item.subTags && item.subTags.length">
{{ item.tagsName }}</div>
{{ item.tagsName }}
</div>
<div class="tag-style">
<el-checkbox-group v-model="item.checkBox"
v-if="item.tagsName && item.subTags && item.subTags.length">
<el-checkbox v-for="(list, idx) in item.subTags" :key="idx"
:label="list.tagsName" @change="changeCheck(item)"></el-checkbox>
<el-checkbox-group
v-model="item.checkBox"
v-if="item.tagsName && item.subTags && item.subTags.length"
>
<el-checkbox
v-for="(list, idx) in item.subTags"
:key="idx"
:label="list.tagsName"
@change="changeCheck(item)"
/>
</el-checkbox-group>
</div>
</li>
......@@ -22,12 +39,19 @@
<ul class="tags-list" v-if="tab.name==='other'&&tagsList.length">
<li v-for="(item,index) in otherTagsList" :key="index" class="tag-item-new">
<div class="tag-group-name" v-if="item.subTags && item.subTags.length">
{{ item.tagsName }}</div>
{{ item.tagsName }}
</div>
<div class="tag-style">
<el-checkbox-group v-model="item.checkBox"
v-if="item.tagsName && item.subTags && item.subTags.length">
<el-checkbox v-for="(list, idx) in item.subTags" :key="idx"
:label="list.tagsName" @change="changeCheck(item)"></el-checkbox>
<el-checkbox-group
v-model="item.checkBox"
v-if="item.tagsName && item.subTags && item.subTags.length"
>
<el-checkbox
v-for="(list, idx) in item.subTags"
:key="idx"
:label="list.tagsName"
@change="changeCheck(item)"
/>
</el-checkbox-group>
</div>
</li>
......@@ -35,12 +59,19 @@
<ul class="tags-list" v-if="tab.name==='weimo'&&tagsList.length">
<li v-for="(item,index) in weimobTagsList" :key="index" class="tag-item-new">
<div class="tag-group-name" v-if="item.subTags && item.subTags.length">
{{ item.tagsName }}</div>
{{ item.tagsName }}
</div>
<div class="tag-style">
<el-checkbox-group v-model="item.checkBox"
v-if="item.tagsName && item.subTags && item.subTags.length">
<el-checkbox v-for="(list, idx) in item.subTags" :key="idx"
:label="list.tagsName" @change="changeCheck(item)"></el-checkbox>
<el-checkbox-group
v-model="item.checkBox"
v-if="item.tagsName && item.subTags && item.subTags.length"
>
<el-checkbox
v-for="(list, idx) in item.subTags"
:key="idx"
:label="list.tagsName"
@change="changeCheck(item)"
/>
</el-checkbox-group>
</div>
</li>
......@@ -56,20 +87,23 @@
</div>
</template>
<script>
import { doFetch } from "../../axios/api";
import url from "../../axios/url";
import { mapState } from "vuex";
import { checkFalse, checkStatus, checkSuccess } from "../../../../static/js/checkStatus";
import { doFetch } from '../../axios/api';
import url from '../../axios/url';
import { mapState } from 'vuex';
import { checkFalse, checkStatus, checkSuccess } from '../../../../static/js/checkStatus';
export default {
name: "customergradeDialog",
name: 'CustomergradeDialog',
props: {
dialogVisible: {
type: Boolean,
default: false
default: false,
},
memberId: {
type: String,
default: '',
},
memberId: ''
},
data() {
data () {
return {
visible: false,
tabsList: [
......@@ -86,23 +120,23 @@ export default {
};
},
computed: {
...mapState([ "showEditClique" ])
},
created() {
this.getTagList();
...mapState(['showEditClique']),
},
watch: {
dialogVisible(n, o) {
dialogVisible (n, o) {
this.visible = false;
}
},
},
created () {
this.getTagList();
},
methods: {
cancel() {
cancel () {
this.$emit('update:dialogVisible', false);
},
getTagList() {
getTagList () {
doFetch(url.clerkTags, {
memberId: this.memberId
memberId: this.memberId,
})
.then(res => {
if (res.data.errorCode === 0) {
......@@ -110,7 +144,7 @@ export default {
tagsList = [],
otherTagsList = [],
weimobTagsList = [],
weimobTagFlag = false
weimobTagFlag = false,
} = res.data.result;
this.tagsList = this.formatTagsList(tagsList);
this.otherTagsList = this.formatTagsList(otherTagsList);
......@@ -124,15 +158,15 @@ export default {
checkStatus(err);
});
},
formatTagsList(tempList) {
let curTagsList = [];
formatTagsList (tempList) {
const curTagsList = [];
if (!tempList.length) return curTagsList;
let paranttag = tempList.filter(item => {
const paranttag = tempList.filter(item => {
return item.parentTagsId == null;
});
paranttag.forEach(item => {
let subTags = [];
let checkBox = [];
const subTags = [];
const checkBox = [];
tempList.forEach(list => {
if (item.tagsId == list.parentTagsId) {
subTags.push(list);
......@@ -146,17 +180,17 @@ export default {
return curTagsList;
},
// 切换选中
changeCheck(item) {
changeCheck (item) {
let count = 0;
this.$nextTick(_ => {
// 站位
});
for (let i = 0; i < item.checkBox.length; i++) {
let val = item.checkBox[ i ];
const val = item.checkBox[i];
for (let j = 0; j < item.subTags.length; j++) {
if (val == item.subTags[ j ].tagsName) {
item.subTags[ j ].isCheck = 1;
if (val == item.subTags[j].tagsName) {
item.subTags[j].isCheck = 1;
count++;
}
}
......@@ -166,10 +200,10 @@ export default {
item.isCheck = 1;
}
},
submit() {
submit () {
this.btnLoading = true;
let tagIds = [];
let arr = [
const tagIds = [];
const arr = [
...this.tagsList,
...this.otherTagsList,
...this.weimobTagsList,
......@@ -184,15 +218,15 @@ export default {
});
let curtagIds = null;
if (tagIds.length > 0) {
curtagIds = tagIds.join(",");
curtagIds = tagIds.join(',');
}
if (!curtagIds) {
this.$message.warning("至少选择一个手工标签!");
this.$message.warning('至少选择一个手工标签!');
return;
}
doFetch(url.updateClerkTags, {
memberId: this.memberId,
tagIds: curtagIds
tagIds: curtagIds,
})
.then(res => {
if (res.data.errorCode === 0) {
......@@ -208,9 +242,9 @@ export default {
})
.catch(err => {
checkStatus(err);
}).finally(_ => this.btnLoading = false);
}).finally(_ => (this.btnLoading = false));
},
}
},
};
</script>
......@@ -260,4 +294,4 @@ export default {
}
}
}
</style>
\ No newline at end of file
</style>
<template>
<div>
<el-dialog title="修改服务门店" custom-class="customer-dailog" :visible.sync="visible"
:close-on-click-modal="false" @close="cancel" width="600px">
<el-form ref="form" :model="form" :rules="rules" label-width="133px">
<el-dialog
title="修改服务门店"
custom-class="customer-dailog"
:visible.sync="visible"
:close-on-click-modal="false"
@close="cancel"
width="600px"
>
<el-form
ref="form"
:model="form"
:rules="rules"
label-width="133px"
>
<el-form-item label="服务门店:" prop="mainStoreId">
<el-select style="width: 386px" v-model="form.mainStoreId" filterable remote
reserve-keyword placeholder="请输入门店名称/门店code" @change="getClerckList"
:remote-method="getMainStoreCodeName" :loading="loading">
<el-option v-for="item in mainstoreList" :key="item.storeId" :label="item.storeName"
:value="item.storeId" />
<el-select
style="width: 386px"
v-model="form.mainStoreId"
filterable
remote
reserve-keyword
placeholder="请输入门店名称/门店code"
@change="getClerckList"
:remote-method="getMainStoreCodeName"
:loading="loading"
>
<el-option
v-for="item in mainstoreList"
:key="item.storeId"
:label="item.storeName"
:value="item.storeId"
/>
</el-select>
</el-form-item>
<el-form-item label="专属导购:" prop="mainClerkId">
<el-select v-model="form.mainClerkId" style="width: 386px"
popper-class="clerk-option-wrap">
<el-option v-for="item in clerkOptions" :key="item.clerkId" :value="item.clerkId"
:label="item.clerkName">
<p class="clerk-name">{{item.clerkName}}</p>
<p class="clerk-code">{{item.clerkCode}}</p>
<el-select
v-model="form.mainClerkId"
style="width: 386px"
popper-class="clerk-option-wrap"
>
<el-option
v-for="item in clerkOptions"
:key="item.clerkId"
:value="item.clerkId"
:label="item.clerkName"
>
<p class="clerk-name">
{{ item.clerkName }}
</p>
<p class="clerk-code">
{{ item.clerkCode }}
</p>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="原因备注:" prop="remark">
<el-input type="text" maxlength="20" show-word-limit v-model="form.remark"
placeholder="请输入内容" style="width: 386px;"></el-input>
<el-input
type="text"
maxlength="20"
show-word-limit
v-model="form.remark"
placeholder="请输入内容"
style="width: 386px;"
/>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
......@@ -34,25 +74,25 @@
</div>
</template>
<script>
import { doFetch, doFetchqs, doFetchGet } from "../../axios/api";
import url from "../../axios/url";
import { mapState } from "vuex";
import { checkFalse, checkStatus, checkSuccess } from "../../../../static/js/checkStatus";
import { doFetch, doFetchqs, doFetchGet } from '../../axios/api';
import url from '../../axios/url';
import { mapState } from 'vuex';
import { checkFalse, checkStatus, checkSuccess } from '../../../../static/js/checkStatus';
export default {
name: "customermainstoreDialog",
name: 'CustomermainstoreDialog',
props: {
dialogVisible: {
type: Boolean,
default: false
default: false,
},
obj: {
type: Object,
default: () => {
return {};
}
}
},
},
},
data() {
data () {
return {
visible: false,
form: {
......@@ -60,17 +100,17 @@ export default {
mainStoreId: '',
mainClerkId: '',
remark: '',
optType: 1 // 1服务门店,2协管门店
optType: 1, // 1服务门店,2协管门店
},
rules: {
mainStoreId: [
{ required: true, message: "请选择服务门店", trigger: "change" }
{ required: true, message: '请选择服务门店', trigger: 'change' },
],
mainClerkId: [
{ required: true, message: "请选择专属导购", trigger: "change" }
{ required: true, message: '请选择专属导购', trigger: 'change' },
],
remark: [
{ required: true, message: "请输入原因备注", trigger: "change" }
{ required: true, message: '请输入原因备注', trigger: 'change' },
],
},
mainstoreList: [], // 服务门店列表
......@@ -80,10 +120,10 @@ export default {
};
},
computed: {
...mapState([ "showEditClique" ])
...mapState(['showEditClique']),
},
watch: {
dialogVisible(n, o) {
dialogVisible (n, o) {
this.visible = n;
if (n) {
const { memberId, mainStoreName, mainStoreId, mainClerkId, clerkInStore } = this.obj;
......@@ -94,19 +134,19 @@ export default {
}
// this.$nextTick(_=>this.$refs['form'].clearValidate())
}
}
},
},
methods: {
cancel() {
this.$refs[ 'form' ].resetFields();
cancel () {
this.$refs.form.resetFields();
this.$emit('update:dialogVisible', false);
},
// 服务门店列表
getMainStoreCodeName(val) {
getMainStoreCodeName (val) {
this.loading = true;
doFetchqs(url.storeCodeName, {
searchParam: val,
flag: 1
flag: 1,
})
.then(res => {
if (res.data.errorCode === 0) {
......@@ -117,23 +157,23 @@ export default {
})
.catch(err => {
checkStatus(err);
}).finally(_ => this.loading = false);
}).finally(_ => (this.loading = false));
},
// 专属导购列表
getClerckList(v, type) {
getClerckList (v, type) {
if (!type) this.form.mainClerkId = '';
this.clerkOptions = [];
doFetchGet(url.getClerkList, {
storeId: v,
requestProject: "member"
requestProject: 'member',
}).then(res => {
const { errorCode, message, result = [] } = res.data || {};
if (errorCode != 0) return this.$message.error(message);
this.clerkOptions = result;
});
},
submit() {
this.$refs[ 'form' ].validate(valid => {
submit () {
this.$refs.form.validate(valid => {
if (valid) {
this.btnLoading = true;
doFetch(url.updateMemberStore, Object.assign({}, this.form))
......@@ -142,7 +182,7 @@ export default {
setTimeout(() => {
this.btnLoading = false;
checkSuccess();
this.$refs[ 'form' ].resetFields();
this.$refs.form.resetFields();
this.$emit('update:dialogVisible', false);
this.$emit('refresh');
}, 4500);
......@@ -193,4 +233,4 @@ export default {
line-height: 17px;
}
}
</style>
\ No newline at end of file
</style>
<template>
<div>
<el-dialog title="修改协管门店" custom-class="customer-dailog" :visible.sync="visible"
:close-on-click-modal="false" @close="cancel" width="600px">
<el-form ref="form" :model="form" :rules="rules" label-width="133px">
<el-dialog
title="修改协管门店"
custom-class="customer-dailog"
:visible.sync="visible"
:close-on-click-modal="false"
@close="cancel"
width="600px"
>
<el-form
ref="form"
:model="form"
:rules="rules"
label-width="133px"
>
<el-form-item label="协管门店:" prop="fromSubStoreIds">
<el-select v-model="form.storeIds" filterable remote multiple
class="fromSubStoreIds-select" style="width:384px;" :remote-method="getSubStoreList"
placeholder="请输入请输入门店名称/门店code" v-select-loadmore="getOnlineStore"
@visible-change="(flag) => flag ? getSubStoreList() : ''">
<el-option v-for="item in subStoreList" :key="item.storeId" :label="item.storeName"
:value="item.storeId"></el-option>
<el-select
v-model="form.storeIds"
filterable
remote
multiple
class="fromSubStoreIds-select"
style="width:384px;"
:remote-method="getSubStoreList"
placeholder="请输入请输入门店名称/门店code"
v-select-loadmore="getOnlineStore"
@visible-change="(flag) => flag ? getSubStoreList() : ''"
>
<el-option
v-for="item in subStoreList"
:key="item.storeId"
:label="item.storeName"
:value="item.storeId"
/>
<el-option class="loadmore-loading" v-if="loading">
<i class="loading-icon" v-loading="true"></i> 加载中...
<i class="loading-icon" v-loading="true" /> 加载中...
</el-option>
</el-select>
</el-form-item>
<el-form-item label="原因备注:" prop="remark">
<el-input type="text" maxlength="20" show-word-limit v-model="form.remark"
placeholder="请输入内容" style="width: 386px;"></el-input>
<el-input
type="text"
maxlength="20"
show-word-limit
v-model="form.remark"
placeholder="请输入内容"
style="width: 386px;"
/>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
......@@ -28,25 +57,25 @@
</div>
</template>
<script>
import { doFetchqs, doFetch } from "../../axios/api";
import url from "../../axios/url";
import { mapState } from "vuex";
import { checkFalse, checkStatus, checkSuccess } from "../../../../static/js/checkStatus";
import { doFetchqs, doFetch } from '../../axios/api';
import url from '../../axios/url';
import { mapState } from 'vuex';
import { checkFalse, checkStatus, checkSuccess } from '../../../../static/js/checkStatus';
export default {
name: "customermainstoreDialog",
name: 'CustomermainstoreDialog',
props: {
dialogVisible: {
type: Boolean,
default: false
default: false,
},
obj: {
type: Object,
default: () => {
return {};
}
}
},
},
},
data() {
data () {
return {
visible: false,
form: {
......@@ -54,14 +83,14 @@ export default {
subStoreIdsBak: '', // 修改前的协管门店id
storeIds: [],
remark: '',
optType: 2 // 1服务门店,2协管门店
optType: 2, // 1服务门店,2协管门店
},
rules: {
subStoreId: [
{ required: true, message: "请选择协管门店", trigger: "change" }
{ required: true, message: '请选择协管门店', trigger: 'change' },
],
remark: [
{ required: true, message: "请输入原因备注", trigger: "change" }
{ required: true, message: '请输入原因备注', trigger: 'change' },
],
},
pageParam: {
......@@ -69,39 +98,39 @@ export default {
searchName: '',
currentPage: 1,
pageSize: 20,
totalPage: 1
totalPage: 1,
},
subStoreList: [], // 协管门店列表
btnLoading: false,
};
},
computed: {
...mapState([ "showEditClique" ])
...mapState(['showEditClique']),
},
watch: {
dialogVisible(n, o) {
dialogVisible (n, o) {
this.visible = n;
if (n) {
const { shopNames, memberId } = this.obj;
let storeIds = shopNames.map(item => item.storeId);
const storeIds = shopNames.map(item => item.storeId);
this.subStoreList = [].concat(shopNames);
this.form = Object.assign({}, this.form, { memberId, storeIds, subStoreIdsBak: storeIds.join(',') });
}
}
},
},
methods: {
cancel() {
this.$refs[ 'form' ].resetFields();
cancel () {
this.$refs.form.resetFields();
this.$emit('update:dialogVisible', false);
},
getOnlineStore() {
getOnlineStore () {
const { searchName, currentPage, loading, totalPage } = this.pageParam;
if (loading || currentPage >= totalPage) return;
this.pageParam.loading = true;
doFetchqs(url.getOnlineStore, {
currentPage: currentPage + 1,
pageSize: 20,
searchName: searchName
searchName: searchName,
}).then(res => {
const { errorCode, message, result } = res.data || {};
if (errorCode == 0) {
......@@ -111,16 +140,16 @@ export default {
} else {
checkFalse(message);
}
}).finally(() => this.pageParam.loading = false);
}).finally(() => (this.pageParam.loading = false));
},
getSubStoreList(query) {
getSubStoreList (query) {
this.pageParam.searchName = query;
this.pageParam.currentPage = 0;
this.subStoreList = [];
this.getOnlineStore();
},
submit() {
this.$refs[ 'form' ].validate(valid => {
submit () {
this.$refs.form.validate(valid => {
if (valid) {
this.btnLoading = true;
doFetch(url.updateMemberStore, Object.assign({}, this.form, { storeIds: this.form.storeIds.join(',') }))
......@@ -129,7 +158,7 @@ export default {
setTimeout(() => {
this.btnLoading = false;
checkSuccess();
this.$refs[ 'form' ].resetFields();
this.$refs.form.resetFields();
this.$emit('update:dialogVisible', false);
this.$emit('refresh');
}, 4500);
......@@ -161,4 +190,4 @@ export default {
.customer-dailog .el-dialog__body {
padding-bottom: 0;
}
</style>
\ No newline at end of file
</style>
<template>
<div>
<el-dialog title="批量调整积分" custom-class="customer-dailog" :visible.sync="visible"
:close-on-click-modal="false" @close="cancel" width="600px">
<div class="checkedCustomers">当前选中<span class="num">
<el-dialog
title="批量调整积分"
custom-class="customer-dailog"
:visible.sync="visible"
:close-on-click-modal="false"
@close="cancel"
width="600px"
>
<div class="checkedCustomers">
当前选中<span class="num">
{{ selectObj.selectAll?selectObj.totalCount:selectObj.multipleList.length }} </span>位客户
</div>
<el-form ref="form" :model="form" :rules="rules" label-width="133px">
<el-form
ref="form"
:model="form"
:rules="rules"
label-width="133px"
>
<el-form-item label="调整积分:" prop="editType">
<el-radio-group v-model="form.editType">
<el-radio :label=1>增加积分</el-radio>
<el-radio :label=2>扣除积分</el-radio>
<el-radio :label="1">
增加积分
</el-radio>
<el-radio :label="2">
扣除积分
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="调整额度:" prop="accumulatPoints">
<el-input-number v-model="form.accumulatPoints" style="width: 115px;"
controls-position="right" :min="1" :max="999999"></el-input-number>
<el-input-number
v-model="form.accumulatPoints"
style="width: 115px;"
controls-position="right"
:min="1"
:max="999999"
/>
</el-form-item>
<el-form-item label="原始成本主体:" prop="settlementStoreId"
v-if="integralFlag == 'gic' && form.editType == 1">
<el-select prop="settlementStoreId" style="width: 400px;" v-model="form.settlementStoreId"
filterable remote reserve-keyword placeholder="请输入门店名称/门店code"
:remote-method="getStoreCodeName" :loading="loading">
<el-option v-for="item in storeList" :key="item.storeId" :label="item.storeName"
:value="item.storeId"></el-option>
<el-form-item
label="原始成本主体:"
prop="settlementStoreId"
v-if="integralFlag == 'gic' && form.editType == 1"
>
<el-select
prop="settlementStoreId"
style="width: 400px;"
v-model="form.settlementStoreId"
filterable
remote
reserve-keyword
placeholder="请输入门店名称/门店code"
:remote-method="getStoreCodeName"
:loading="loading"
>
<el-option
v-for="item in storeList"
:key="item.storeId"
:label="item.storeName"
:value="item.storeId"
/>
</el-select>
<p class="sub-tip">注:除输入选择具体门店外,还可输入总部,记总部名下</p>
<p class="sub-tip">
注:除输入选择具体门店外,还可输入总部,记总部名下
</p>
</el-form-item>
<el-form-item label="原因备注:" prop="remark">
<el-input type="text" maxlength="20" show-word-limit v-model="form.remark"
placeholder="请输入内容" style="width: 400px;"></el-input>
<el-input
type="text"
maxlength="20"
show-word-limit
v-model="form.remark"
placeholder="请输入内容"
style="width: 400px;"
/>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
......@@ -39,23 +83,23 @@
</div>
</template>
<script>
import { doFetch, doFetchqs } from "../../axios/api";
import url from "../../axios/url";
import { checkFalse, checkStatus, checkSuccess } from "../../../../static/js/checkStatus";
import { doFetch, doFetchqs } from '../../axios/api';
import url from '../../axios/url';
import { checkFalse, checkStatus, checkSuccess } from '../../../../static/js/checkStatus';
export default {
name: "integralDailog",
name: 'IntegralDailog',
props: {
dialogVisible: {
type: Boolean,
default: false
default: false,
},
ajaxObj: {
type: Object,
default: () => {
return {
pageName: ''
pageName: '',
};
}
},
},
selectObj: {
type: Object,
......@@ -63,58 +107,58 @@ export default {
return {
totalCount: 0,
selectAll: false,
multipleList: []
multipleList: [],
};
}
},
},
integralFlag: {
type: String,
default: ''
default: '',
},
},
data() {
data () {
return {
visible: false,
form: {
editType: 1,
accumulatPoints: 0,
remark: "",
settlementStoreId: ""
remark: '',
settlementStoreId: '',
},
rules: {
editType: [
{ required: true, message: "请选择调整方式", trigger: "change" }
{ required: true, message: '请选择调整方式', trigger: 'change' },
],
accumulatPoints: [
{ required: true, message: "请选择调整额度", trigger: "change" }
{ required: true, message: '请选择调整额度', trigger: 'change' },
],
remark: [
{ required: true, message: "请输入原因备注", trigger: "change" }
{ required: true, message: '请输入原因备注', trigger: 'change' },
],
settlementStoreId: [
{ required: true, message: "请填写原始成本主体", trigger: "change" }
]
{ required: true, message: '请填写原始成本主体', trigger: 'change' },
],
},
btnLoading: false,
loading: false,
storeList: []
storeList: [],
};
},
watch: {
dialogVisible(n, o) {
dialogVisible (n, o) {
this.visible = n;
}
},
},
methods: {
cancel() {
this.$refs[ 'form' ].resetFields();
cancel () {
this.$refs.form.resetFields();
this.$emit('update:dialogVisible', false);
},
getStoreCodeName(val) {
getStoreCodeName (val) {
this.loading = true;
doFetchqs(url.storeCodeName, {
searchParam: val,
flag: 1
flag: 1,
})
.then(res => {
if (res.data.errorCode === 0) {
......@@ -125,29 +169,29 @@ export default {
})
.catch(err => {
checkStatus(err);
}).finally(_ => this.loading = false);
}).finally(_ => (this.loading = false));
},
submit() {
this.$refs[ 'form' ].validate(valid => {
submit () {
this.$refs.form.validate(valid => {
if (valid) {
const { selectAll, multipleList } = this.selectObj;
const { memberSearchStr, pageSize, phoneNameCard, pageName } = this.ajaxObj;
this.btnLoading = true;
let memberIdsArr = [];
const memberIdsArr = [];
multipleList.forEach(item => {
memberIdsArr.push(item.memberId);
});
doFetch(url.updateIntegrals, Object.assign({}, this.form, {
memberIds: selectAll == true ? "-1" : memberIdsArr.join(","),
memberIds: selectAll == true ? '-1' : memberIdsArr.join(','),
isCurrent: selectAll == true ? 2 : multipleList.length == pageSize ? 1 : 0,
memberSearchParamStr: selectAll == true ? (memberSearchStr ? memberSearchStr : "-1") : "",
memberSearchParamStr: selectAll == true ? (memberSearchStr || '-1') : '',
phoneNameCard: phoneNameCard,
pageName: pageName
pageName: pageName,
}))
.then(res => {
if (res.data.errorCode === 0) {
checkSuccess('');
this.$refs[ 'form' ].resetFields();
this.$refs.form.resetFields();
this.$emit('update:dialogVisible', false);
this.$emit('refresh');
} else {
......@@ -156,13 +200,13 @@ export default {
})
.catch(err => {
checkStatus(err);
}).finally(_ => this.btnLoading = false);
}).finally(_ => (this.btnLoading = false));
} else {
return false;
}
});
},
}
},
};
</script>
......@@ -187,4 +231,4 @@ export default {
line-height: 17px;
}
}
</style>
\ No newline at end of file
</style>
<template>
<div>
<el-dialog title="批量修改服务门店" custom-class="customer-dailog" :visible.sync="visible"
:close-on-click-modal="false" @close="cancel" width="600px">
<div class="checkedCustomers">当前选中<span class="num">
<el-dialog
title="批量修改服务门店"
custom-class="customer-dailog"
:visible.sync="visible"
:close-on-click-modal="false"
@close="cancel"
width="600px"
>
<div class="checkedCustomers">
当前选中<span class="num">
{{ selectObj.selectAll?selectObj.totalCount:selectObj.multipleList.length }} </span>位客户
</div>
<el-form ref="form" :model="form" :rules="rules" label-width="133px">
<el-form
ref="form"
:model="form"
:rules="rules"
label-width="133px"
>
<el-form-item label="服务门店:" prop="mainStoreId">
<el-select style="width: 382px" v-model="form.mainStoreId" filterable remote
reserve-keyword placeholder="请输入门店名称/门店code" :remote-method="getMainStoreCodeName"
:loading="loading">
<el-option v-for="item in mainstoreList" :key="item.storeId" :label="item.storeName"
:value="item.storeId" />
<el-select
style="width: 382px"
v-model="form.mainStoreId"
filterable
remote
reserve-keyword
placeholder="请输入门店名称/门店code"
:remote-method="getMainStoreCodeName"
:loading="loading"
>
<el-option
v-for="item in mainstoreList"
:key="item.storeId"
:label="item.storeName"
:value="item.storeId"
/>
</el-select>
</el-form-item>
<el-form-item label="原因备注:" prop="remark">
<el-input type="text" maxlength="20" show-word-limit v-model="form.remark"
placeholder="请输入内容" style="width: 382px;"></el-input>
<el-input
type="text"
maxlength="20"
show-word-limit
v-model="form.remark"
placeholder="请输入内容"
style="width: 382px;"
/>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
......@@ -27,24 +56,24 @@
</div>
</template>
<script>
import { doFetch, doFetchqs } from "../../axios/api";
import url from "../../axios/url";
import { mapState } from "vuex";
import { checkFalse, checkStatus, checkSuccess } from "../../../../static/js/checkStatus";
import { doFetch, doFetchqs } from '../../axios/api';
import url from '../../axios/url';
import { mapState } from 'vuex';
import { checkFalse, checkStatus, checkSuccess } from '../../../../static/js/checkStatus';
export default {
name: "mainstoreDailog",
name: 'MainstoreDailog',
props: {
dialogVisible: {
type: Boolean,
default: false
default: false,
},
ajaxObj: {
type: Object,
default: () => {
return {
pageName: ''
pageName: '',
};
}
},
},
selectObj: {
type: Object,
......@@ -52,27 +81,27 @@ export default {
return {
totalCount: 0,
selectAll: false,
multipleList: []
multipleList: [],
};
}
},
},
},
data() {
data () {
return {
visible: false,
form: {
remark: "",
remark: '',
optType: 1, // 1服务门店(主门店),2协管门店
mainOptType: 4, //服务门店类型 1替换为最新协管的门店 2替换为最新协管的自营门店 3 替换为最新协管的自营/联营门店 4自定义主门店
mainStoreId: ""
mainOptType: 4, // 服务门店类型 1替换为最新协管的门店 2替换为最新协管的自营门店 3 替换为最新协管的自营/联营门店 4自定义主门店
mainStoreId: '',
},
rules: {
mainStoreId: [
{ required: true, message: "请选择服务门店", trigger: "change" }
{ required: true, message: '请选择服务门店', trigger: 'change' },
],
remark: [
{ required: true, message: "请输入原因备注", trigger: "change" }
]
{ required: true, message: '请输入原因备注', trigger: 'change' },
],
},
mainstoreList: [],
loading: false,
......@@ -80,23 +109,23 @@ export default {
};
},
computed: {
...mapState([ "showEditClique" ])
...mapState(['showEditClique']),
},
watch: {
dialogVisible(n, o) {
dialogVisible (n, o) {
this.visible = n;
}
},
},
methods: {
cancel() {
this.$refs[ 'form' ].resetFields();
cancel () {
this.$refs.form.resetFields();
this.$emit('update:dialogVisible', false);
},
getMainStoreCodeName(val) {
getMainStoreCodeName (val) {
this.loading = true;
doFetchqs(url.storeCodeName, {
searchParam: val,
flag: 1
flag: 1,
})
.then(res => {
if (res.data.errorCode === 0) {
......@@ -107,29 +136,29 @@ export default {
})
.catch(err => {
checkStatus(err);
}).finally(_ => this.loading = false);
}).finally(_ => (this.loading = false));
},
submit() {
this.$refs[ 'form' ].validate(valid => {
submit () {
this.$refs.form.validate(valid => {
if (valid) {
const { selectAll, multipleList } = this.selectObj;
const { memberSearchStr, pageSize, phoneNameCard, pageName } = this.ajaxObj;
this.btnLoading = true;
let memberIdsArr = [];
const memberIdsArr = [];
multipleList.forEach(item => {
memberIdsArr.push(item.memberId);
});
doFetch(url.updateStore, Object.assign({}, this.form, {
memberIds: selectAll == true ? "-1" : memberIdsArr.join(","),
memberIds: selectAll == true ? '-1' : memberIdsArr.join(','),
isCurrent: selectAll == true ? 2 : multipleList.length == pageSize ? 1 : 0,
memberSearchParamStr: selectAll == true ? (memberSearchStr ? memberSearchStr : "-1") : "",
memberSearchParamStr: selectAll == true ? (memberSearchStr || '-1') : '',
phoneNameCard: phoneNameCard,
pageName: pageName
pageName: pageName,
}))
.then(res => {
if (res.data.errorCode === 0) {
checkSuccess();
this.$refs[ 'form' ].resetFields();
this.$refs.form.resetFields();
this.$emit('update:dialogVisible', false);
this.$emit('refresh');
} else {
......@@ -138,13 +167,13 @@ export default {
})
.catch(err => {
checkStatus(err);
}).finally(_ => this.btnLoading = false);
}).finally(_ => (this.btnLoading = false));
} else {
return false;
}
});
},
}
},
};
</script>
......
<template>
<div>
<el-dialog title="批量修改协管门店" custom-class="customer-dailog" :visible.sync="visible"
:close-on-click-modal="false" @close="cancel" width="600px">
<div class="checkedCustomers">当前选中<span class="num">
<el-dialog
title="批量修改协管门店"
custom-class="customer-dailog"
:visible.sync="visible"
:close-on-click-modal="false"
@close="cancel"
width="600px"
>
<div class="checkedCustomers">
当前选中<span class="num">
{{ selectObj.selectAll?selectObj.totalCount:selectObj.multipleList.length }} </span>位客户
</div>
<el-form ref="form" :model="form" :rules="rules" label-width="133px">
<el-form
ref="form"
:model="form"
:rules="rules"
label-width="133px"
>
<el-form-item label="协管门店:" prop="fromSubStoreIds">
<el-form-item prop="subOptType" style="margin-bottom:12px;">
<el-radio-group v-model="form.subOptType">
<el-radio :label="1">增加</el-radio>
<el-radio :label="2">减少</el-radio>
<el-radio :label="1">
增加
</el-radio>
<el-radio :label="2">
减少
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item prop="fromSubStoreIds">
<el-select v-model="form.fromSubStoreIds" filterable remote multiple
class="fromSubStoreIds-select" style="width:384px;" :remote-method="getSubStoreList"
placeholder="请输入请输入门店名称/门店code" v-select-loadmore="getOnlineStore"
@visible-change="(flag) => flag ? getSubStoreList() : ''">
<el-option v-for="item in subStoreList" :key="item.storeId" :label="item.storeName"
:value="item.storeId"></el-option>
<el-select
v-model="form.fromSubStoreIds"
filterable
remote
multiple
class="fromSubStoreIds-select"
style="width:384px;"
:remote-method="getSubStoreList"
placeholder="请输入请输入门店名称/门店code"
v-select-loadmore="getOnlineStore"
@visible-change="(flag) => flag ? getSubStoreList() : ''"
>
<el-option
v-for="item in subStoreList"
:key="item.storeId"
:label="item.storeName"
:value="item.storeId"
/>
<el-option class="loadmore-loading" v-if="loading">
<i class="loading-icon" v-loading="true"></i> 加载中...
<i class="loading-icon" v-loading="true" /> 加载中...
</el-option>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item label="原因备注:" prop="remark">
<el-input type="text" maxlength="20" show-word-limit v-model="form.remark"
placeholder="请输入内容" style="width: 386px;"></el-input>
<el-input
type="text"
maxlength="20"
show-word-limit
v-model="form.remark"
placeholder="请输入内容"
style="width: 386px;"
/>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
......@@ -39,24 +73,24 @@
</div>
</template>
<script>
import { doFetch, doFetchqs } from "../../axios/api";
import url from "../../axios/url";
import { mapState } from "vuex";
import { checkFalse, checkStatus, checkSuccess } from "../../../../static/js/checkStatus";
import { doFetch, doFetchqs } from '../../axios/api';
import url from '../../axios/url';
import { mapState } from 'vuex';
import { checkFalse, checkStatus, checkSuccess } from '../../../../static/js/checkStatus';
export default {
name: "substoreDialog",
name: 'SubstoreDialog',
props: {
dialogVisible: {
type: Boolean,
default: false
default: false,
},
ajaxObj: {
type: Object,
default: () => {
return {
pageName: ''
pageName: '',
};
}
},
},
selectObj: {
type: Object,
......@@ -64,60 +98,60 @@ export default {
return {
totalCount: 0,
selectAll: false,
multipleList: []
multipleList: [],
};
}
},
},
},
data() {
data () {
return {
visible: false,
form: {
remark: "",
remark: '',
optType: 2, // 1服务门店(主门店),2协管门店
subOptType: 1, // 协管门店时必填 1增加,2删除
fromSubStoreIds: [], // 批量处理协管门店时使用,存放门店id,以","分割
},
rules: {
fromSubStoreIds: [
{ required: true, message: "请选择要操作的协管门店", trigger: "change" }
{ required: true, message: '请选择要操作的协管门店', trigger: 'change' },
],
remark: [
{ required: true, message: "请输入原因备注", trigger: "change" }
]
{ required: true, message: '请输入原因备注', trigger: 'change' },
],
},
pageParam: {
loading: false,
searchName: '',
currentPage: 1,
pageSize: 20,
totalPage: 1
totalPage: 1,
},
subStoreList: [],
btnLoading: false,
};
},
computed: {
...mapState([ "showEditClique" ])
...mapState(['showEditClique']),
},
watch: {
dialogVisible(n, o) {
dialogVisible (n, o) {
this.visible = n;
}
},
},
methods: {
cancel() {
this.$refs[ 'form' ].resetFields();
cancel () {
this.$refs.form.resetFields();
this.$emit('update:dialogVisible', false);
},
getOnlineStore() {
getOnlineStore () {
const { searchName, currentPage, loading, totalPage } = this.pageParam;
if (loading || currentPage >= totalPage) return;
this.pageParam.loading = true;
doFetchqs(url.getOnlineStore, {
currentPage: currentPage + 1,
pageSize: 20,
searchName: searchName
searchName: searchName,
}).then(res => {
const { errorCode, message, result } = res.data || {};
if (errorCode == 0) {
......@@ -127,36 +161,36 @@ export default {
} else {
checkFalse(message);
}
}).finally(() => this.pageParam.loading = false);
}).finally(() => (this.pageParam.loading = false));
},
getSubStoreList(query) {
getSubStoreList (query) {
this.pageParam.searchName = query;
this.pageParam.currentPage = 0;
this.subStoreList = [];
this.getOnlineStore();
},
submit() {
this.$refs[ 'form' ].validate(valid => {
submit () {
this.$refs.form.validate(valid => {
if (valid) {
const { selectAll, multipleList } = this.selectObj;
const { memberSearchStr, pageSize, phoneNameCard, pageName } = this.ajaxObj;
this.btnLoading = true;
let memberIdsArr = [];
const memberIdsArr = [];
multipleList.forEach(item => {
memberIdsArr.push(item.memberId);
});
doFetch(url.updateStore, Object.assign({}, this.form, {
fromSubStoreIds: this.form.fromSubStoreIds.join(","),
memberIds: selectAll == true ? "-1" : memberIdsArr.join(","),
fromSubStoreIds: this.form.fromSubStoreIds.join(','),
memberIds: selectAll == true ? '-1' : memberIdsArr.join(','),
isCurrent: selectAll == true ? 2 : multipleList.length == pageSize ? 1 : 0,
memberSearchParamStr: selectAll == true ? (memberSearchStr ? memberSearchStr : "-1") : "",
memberSearchParamStr: selectAll == true ? (memberSearchStr || '-1') : '',
phoneNameCard: phoneNameCard,
pageName: pageName
pageName: pageName,
}))
.then(res => {
if (res.data.errorCode === 0) {
checkSuccess();
this.$refs[ 'form' ].resetFields();
this.$refs.form.resetFields();
this.$emit('update:dialogVisible', false);
this.$emit('refresh');
} else {
......@@ -165,7 +199,7 @@ export default {
})
.catch(err => {
checkStatus(err);
}).finally(_ => this.btnLoading = false);
}).finally(_ => (this.btnLoading = false));
} else {
return false;
}
......@@ -207,4 +241,4 @@ export default {
.customer-dailog .el-dialog__body {
padding-bottom: 0;
}
</style>
\ No newline at end of file
</style>
<template>
<div>
<el-dialog title="设置显示字段" custom-class="table-colum-dailog" :visible.sync="visible"
@close="cancel" width="600px">
<div class="checkwtip mBottom10">请选择您想显示的列表字段,最多勾选8个选项,已经勾选了 <span
class="curcheck">{{ checkedFieldsCopy.length }}</span></div>
<el-checkbox-group v-model="checkedFieldsCopy" class="table-colum-wrap" :min="0" :max="8">
<el-checkbox v-for="(item, index) in memberFields" class="table-colum-item" :key="index"
:label="item.code" :disabled="item.code==='name'">{{item.name}}</el-checkbox>
<el-dialog
title="设置显示字段"
custom-class="table-colum-dailog"
:visible.sync="visible"
@close="cancel"
width="600px"
>
<div class="checkwtip mBottom10">
请选择您想显示的列表字段,最多勾选8个选项,已经勾选了 <span
class="curcheck"
>{{ checkedFieldsCopy.length }}</span>
</div>
<el-checkbox-group
v-model="checkedFieldsCopy"
class="table-colum-wrap"
:min="0"
:max="8"
>
<el-checkbox
v-for="(item, index) in memberFields"
class="table-colum-item"
:key="index"
:label="item.code"
:disabled="item.code==='name'"
>
{{ item.name }}
</el-checkbox>
</el-checkbox-group>
<span slot="footer" class="dialog-footer">
<el-button @click="cancel">取消</el-button>
......@@ -17,48 +37,46 @@
</template>
<script>
export default {
name: "tableColumDailog",
name: 'TableColumDailog',
props: {
checkedFields: {
type: Array,
default: () => {
return [];
}
},
},
memberFields: {
type: Array,
default: () => {
return [];
}
},
},
dialogVisible: {
type: Boolean,
default: false
default: false,
},
},
data() {
data () {
return {
visible: false,
checkedFieldsCopy: []
checkedFieldsCopy: [],
};
},
watch: {
dialogVisible(n, o) {
dialogVisible (n, o) {
this.visible = n;
if (!!n)
this.checkedFieldsCopy = [].concat(this.checkedFields);
}
if (n) { this.checkedFieldsCopy = [].concat(this.checkedFields); }
},
},
methods: {
submitFields() {
submitFields () {
this.$emit('update:dialogVisible', false);
this.$emit('submit', this.checkedFieldsCopy.join(","));
this.$emit('submit', this.checkedFieldsCopy.join(','));
},
cancel() {
cancel () {
this.checkedFieldsCopy = [].concat(this.checkedFields);
this.$emit('update:dialogVisible', false);
}
},
},
};
......@@ -85,4 +103,4 @@ export default {
.table-colum-dailog .el-checkbox:last-of-type {
margin-right: 30px;
}
</style>
\ No newline at end of file
</style>
export default function path(parantfile,file) {
return function(r) {
import('components/'+ parantfile + '/' + file + '.vue').then((module) => {
export default function path (parantfile, file) {
return function (r) {
import('@/components/' + parantfile + '/' + file + '.vue').then((module) => {
r(module);
})
}
});
};
}
export function fomatBirthday(val) {
if(val) {
let date = new Date(val);
let Y = date.getFullYear() + '-';
let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
let D = (date.getDate() < 10 ? '0'+ (date.getDate()): date.getDate());
return Y+M+D;
}else {
return ''
export function fomatBirthday (val) {
if (val) {
const date = new Date(val);
const Y = date.getFullYear() + '-';
const M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
const D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate());
return Y + M + D;
} else {
return '';
}
}
// 解析时间
export function dateformat(time, fmt) {
let o = {
"M+": time.getMonth() + 1, // 月份
"d+": time.getDate(), // 日
"h+": time.getHours(), // 小时
"m+": time.getMinutes(), // 分
"s+": time.getSeconds(), // 秒
"q+": Math.floor((time.getMonth() + 3) / 3), // 季度
S: time.getMilliseconds() // 毫秒
export function dateformat (time, fmt) {
const o = {
'M+': time.getMonth() + 1, // 月份
'd+': time.getDate(), // 日
'h+': time.getHours(), // 小时
'm+': time.getMinutes(), // 分
's+': time.getSeconds(), // 秒
'q+': Math.floor((time.getMonth() + 3) / 3), // 季度
S: time.getMilliseconds(), // 毫秒
};
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(
RegExp.$1,
(time.getFullYear() + "").substr(4 - RegExp.$1.length)
(time.getFullYear() + '').substr(4 - RegExp.$1.length),
);
}
for (let k in o) {
if (new RegExp("(" + k + ")").test(fmt)) {
for (const k in o) {
if (new RegExp('(' + k + ')').test(fmt)) {
fmt = fmt.replace(
RegExp.$1,
RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)
RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length),
);
}
}
return fmt;
}
export const __VERSION = "1.1";
export const __VERSION = '1.1';
/*获取url参数*/
/* 获取url参数 */
/**
* ?name=zhangsan&age=23
* @param {} name url 参数名
* getParamsByName(age) 23
*/
export function getParamsByName(attr) {
let ret = RegExp(`[?&]${attr}=([^&]*)`).exec(window.location.href);
export function getParamsByName (attr) {
const ret = RegExp(`[?&]${attr}=([^&]*)`).exec(window.location.href);
return ret && decodeURIComponent(ret[1].replace(/\+/g, ' '));
}
/**
* 人群筛选器 返回具体筛选条件的个数
* @param {}
* return 筛选条件的个数
*/
export function normalizePeople(jsonStr) {
export function normalizePeople (jsonStr) {
if (!jsonStr) {
return 0;
}
let ret = 0;
const jsonObj = JSON.parse(jsonStr);
if (jsonObj.list && jsonObj.list.length) {
// 如果是一个对象
// 如果是一个对象
jsonObj.list.forEach(ele => {
// 如果list在ele里面 表示里面包含list数组
if ('list' in ele) {
......@@ -45,18 +44,18 @@ export function normalizePeople(jsonStr) {
* @param { type } 要转换的格式
*/
export function formatLongTime(timeStr, type) {
export function formatLongTime (timeStr, type) {
if (!timeStr) {
return '--';
}
timeStr = '' + timeStr;
let regTest = /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/g;
const regTest = /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/g;
if (type == 1) {
return timeStr.replace(regTest, function(match, p, p1, p2, p3, p4, p5){
return timeStr.replace(regTest, function (match, p, p1, p2, p3, p4, p5) {
return [p, p1, p2].join('-') + ' ' + [p3, p4, p5].join(':');
});
} else {
return timeStr.replace(/^(\d{4})(\d{2})(\d{2})$/g, function(match, p, p1, p2){
return timeStr.replace(/^(\d{4})(\d{2})(\d{2})$/g, function (match, p, p1, p2) {
return [p, p1, p2].join('-');
});
}
......@@ -66,7 +65,7 @@ export function formatLongTime(timeStr, type) {
* 生日时间转换
* @param {}
*/
export function paddingBorth(str) {
export function paddingBorth (str) {
if (!str) {
return '--';
}
......@@ -75,12 +74,12 @@ export function paddingBorth(str) {
if (str.length == 3) {
str = 0 + str;
}
return str.replace(/^(\d{2})(\d{2})$/g, function(match, p , p1) {
return str.replace(/^(\d{2})(\d{2})$/g, function (match, p, p1) {
return [p, p1].join('-');
});
}
export function findAnyComponent(context, componentName, root = null) {
export function findAnyComponent (context, componentName, root = null) {
if (!root) {
root = context.$root;
}
......@@ -104,11 +103,11 @@ export function findAnyComponent(context, componentName, root = null) {
return children;
}
export function debounce(func, wait) {
export function debounce (func, wait) {
let timeout;
return function(...args) {
let that = this;
return function (...args) {
const that = this;
clearTimeout(timeout);
timeout = setTimeout(_ => {
func.apply(that, args);
......
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