Commit 9ac4eb73 by chenxin

fix: zitidian

parent 9063d236
......@@ -95,13 +95,19 @@ let setting = {
getPickupDetails: '/pickup/get-pickup-details',
delPickup: {
url: '/pickup/del-pickup',
useFormData: true,
method: 'post',
},
insertPickupStore: { // 新增或修改自提点
insertPickupStore: { // 新增自提点
url: '/pickup/insert-pickup-store',
method: 'post',
headers: { 'Content-Type': 'application/json' }
},
updatePickupStore: { // 更新单个或多个自提点
url: '/pickup/update-pickup-setting',
method: 'post',
headers: { 'Content-Type': 'application/json' }
},
};
realGift = getFetch(realGift, welfarePrefix);
setting = getFetch(setting, welfarePrefix);
......@@ -109,3 +115,4 @@ setting = getFetch(setting, welfarePrefix);
export default { ...realGift, ...setting };
export const getGiftLoginUser = config.api + commonPrefix + '/user/get-login-user'; // 获取商户名称
export const exportPickupStoreExcel = config.api + welfarePrefix + '/export-pickup-store-excel'; // 导出自提点
\ No newline at end of file
......@@ -227,13 +227,12 @@ export default {
this.ruleForm[v] = info[v];
}
});
console.log(this.ruleForm);
// 库存使用类型(0:占用,1:动态 , 2占用+动态)
this.stockType = info.stockUseType == 2 ? [ 0, 1 ] : [ info.stockUseType ] ;
this.dateTime = [ info.beginDate, info.endDate ];
this.couponList = res.result.couponList || [];
if (info.operAuthType == 2) {
this.ruleForm1.operAuth = info.operAuth.split(',');
this.ruleForm.operAuth = info.operAuth.split(',');
}
}).finally(() => {
this.loading = false;
......@@ -253,6 +252,9 @@ export default {
params.stockUseType = this.stockType.length == 2 ? 2 : this.stockType[0];
params.beginDate = formatDateTimeByType(this.dateTime[0], 'yyyy-MM-dd');
params.endDate = formatDateTimeByType(this.dateTime[1], 'yyyy-MM-dd');
if (params.operAuthType == 2) {
params.operAuth = params.operAuth.join(',');
}
this.loading = true;
addPackages(params).then(res => {
this.loading = false;
......
......@@ -149,19 +149,19 @@ export default {
getInfo() {
this.loading = true;
getAddressDetails().then(res => {
const info = res.result || {};
Object.keys(this.ruleForm).map(key => {
const info = res.result || {};
if (key in res.result) {
this.ruleForm[key] = info[key];
}
if(info.tel) {
const tel = info.tel.join(',');
this.tel1 = tel[0];
this.tel2 = tel[1];
this.tel3 = tel[2];
}
this.cityIds = [ info.provinceId, info.cityId, info.countyId ];
});
if(info.tel) {
const tel = info.tel.join(',');
this.tel1 = tel[0];
this.tel2 = tel[1];
this.tel3 = tel[2];
}
this.cityIds = [ info.provinceId, info.cityId, info.countyId ];
this.loading = false;
}).catch(() => {
this.loading = false;
......
......@@ -5,11 +5,11 @@
<p>开启表示买家可选择自提时间,商户需按约定时间备货完成</p>
</el-form-item>
<template v-if="ruleForm.chooseTimeFlag">
<el-form-item label="日期类型">
<el-form-item label="日期类型" required>
<el-radio v-model="ruleForm.dateType" :label="1">动态日期</el-radio>
<el-radio v-model="ruleForm.dateType" :label="2">固定日期</el-radio>
</el-form-item>
<el-form-item label="商品备货设置" v-if="ruleForm.dateType == 1">
<el-form-item label="商品备货设置" v-if="ruleForm.dateType == 1" prop="dynamicType">
<div class="mb5">
<el-radio v-model="ruleForm.dynamicType" :label="1">下单当天</el-radio>
<el-input-number class="w100 mr5" v-model="ruleForm.dynamicH" :min="1" :max="24" :controls="false" :precision="0"></el-input-number>小时,
......@@ -20,23 +20,17 @@
<el-input-number class="w100 mr5" v-model="ruleForm.dynamicD" :max="1000" :controls="false" :precision="0"></el-input-number>天后,买家可提货
</div>
</el-form-item>
<el-form-item label="提货有效期" v-if="ruleForm.dateType == 1">
<div class="mb5">
备货完成<el-input-number class="w100 mr5 ml5" v-model="ruleForm.dynamicStop" :min="2" :controls="false" :precision="0"></el-input-number>天后,停止自提
</div>
<div>
<el-radio v-model="ruleForm.dynamicType" :label="2">下单&emsp;&emsp;</el-radio>
<el-input-number class="w100 mr5" v-model="ruleForm.dynamicD" :controls="false"></el-input-number>天后,买家可提货
</div>
<el-form-item label="提货有效期" v-if="ruleForm.dateType == 1" prop="dynamicStop">
备货完成<el-input-number class="w100 mr5 ml5" v-model="ruleForm.dynamicStop" :min="2" :controls="false" :precision="0"></el-input-number>天后,停止自提
</el-form-item>
<el-form-item label="日期范围" v-if="ruleForm.dateType == 2">
<el-form-item label="日期范围" v-if="ruleForm.dateType == 2" prop="fixedTime">
<div class="mb10" v-for="(v, i) in ruleForm.fixedTime" :key="i" >
<el-date-picker v-model="v.dataRange" :picker-options="pickerOptionsEnd" is-range format="yy-MM-dd" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change="value => limitDataSelect(i, value)"> </el-date-picker>
<el-button v-if="i" type="text" @click="deleteTime(v)" class="delete-btn ml10">删除</el-button>
</div>
<el-button type="text" @click="addTime" :disabled="ruleForm.fixedTime.length >= 5"> <i class="el-icon-plus"></i>添加时间</el-button>
</el-form-item>
<el-form-item label="超期发货单处理">
<el-form-item label="超期发货单处理" required>
<div>
<el-radio v-model="ruleForm.timeoutDealType" :label="1">到期自动完成核销</el-radio>
</div>
......@@ -78,6 +72,9 @@ export default {
let selectTime = new Date(val[0]).valueOf();
let selectTimeEnd = new Date(val[1]).valueOf();
const vTime = this.ruleForm.fixedTime;
if(vTime.length == 1) {
return;
}
if (index !== 0) {
// 不是第一个
// // 和前面的时间比较
......
<template>
<el-dialog title="批量设置" :visible.sync="dialogVisible" width="700px" @close="close">
<el-form :model="ruleForm" ref="ruleForm" :rules="rules" label-width="160px">
<form-content :rule-form.sync="ruleForm"></form-content>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="close">取消</el-button>
<el-button type="primary" @click="handleSubmit()">确认</el-button>
</div>
</el-dialog>
</template>
<script>
import { isEmpty } from '@/utils/index';
import fetch from '@/api/gift.js';
const { updatePickupStore } = fetch;
import formContent from './pickup-form-content';
export default {
name: 'PickupUpdateDialog',
components: {
formContent
},
props: {
dialogVisible: {
type: Boolean,
default() {
return {};
}
},
ids: {
// 批量删除的ids
type: Array,
default: () => []
}
},
data() {
const validDynamicType = (rule, value, callback) => {
const { dynamicType, dynamicH, dynamicM, dynamicD } = this.ruleForm;
if (dynamicType == 1) {
if(isEmpty(dynamicH) || isEmpty(dynamicM)) {
callback(new Error('填写不完整'));
return;
}
} else {
if(isEmpty(dynamicD)) {
callback(new Error('填写不完整'));
return;
}
}
callback();
};
const validTime = (rule, value, callback) => {
const { fixedTime } = this.ruleForm;
if(fixedTime.length == 0) {
callback(new Error('请配置固定日期范围'));
return;
}
let flag = false;
fixedTime.forEach(v => {
if(!(v.dataRange && v.dataRange.length && v.dataRange[0] && v.dataRange[1])) {
flag = true;
}
});
if(flag) {
callback(new Error('请配置固定日期范围'));
return;
}
callback();
};
return {
ruleForm: {
type: 1,
chooseTimeFlag: 1,
dateType: 1, // 日期类型 1、动态日期 2、固定日期
fixedTime: [ { dataRange: '' } ], // 固定日期
// 动态日期start
dynamicType: 1, // 动态日期-类型
dynamicH: '', // 动态日期-小时
dynamicM: '', // 动态日期-分钟
dynamicD: '', // 动态日期-天
dynamicStop: '', // 停止自提
// 动态日期end
storeWidgetId: '', // 门店id
timeoutDealType: 1, // 超期处理方式:1自动完成核销 2自动关闭发货单
},
rules: {
storeWidgetId: { required: true, message: '请选择门店', trigger: 'change' },
dynamicType: { required: true, validator: validDynamicType, trigger: 'blur' },
dynamicStop: { required: true, message: '请填写提货有效期', trigger: 'change' },
fixedTime: { required: true, validator: validTime, trigger: 'change' },
},
};
},
methods: {
close() {
this.$emit('update:dialogVisible', false);
this.$refs.ruleForm.resetFields();
},
handleSubmit() {
if(this.loading) {
return;
}
this.$refs.ruleForm.validate((valid) => {
if (!valid) {
PublicMethods.jumpToFormError(); // eslint-disable-line
return;
} else {
// 组装数据
const { chooseTimeFlag, dateType, storeWidgetId, timeoutDealType, dynamicType, dynamicH, dynamicM, dynamicD, dynamicStop, fixedTime } = this.ruleForm;
let params = {
chooseTimeFlag, dateType, storeWidgetId, timeoutDealType
};
if(chooseTimeFlag) {
// pickupDateInfo: 动态日期 {"setType":1,"time":45,"validite":2};固定日期 json数组[{"endTime":1587168000000,"startTime":1587168000000}]
if(params.dateType == 1) {
// 动态日期
params.pickupDateInfo = {
setType: dynamicType,
time: dynamicType == 1 ? dynamicH * 60 + dynamicM : dynamicD * 24 * 60, // 转换为分钟
validite: dynamicStop
};
} else {
// 固定日期
params.pickupDateInfo = fixedTime.map(v => {
return { startTime: new Date(v.dataRange[0]).getTime(), endTime: new Date(v.dataRange[0]).getTime() };
});
}
params.pickupDateInfo = JSON.stringify(params.pickupDateInfo);
}
params.ids = this.ids.join(',');
this.loading = true;
updatePickupStore(params).then(res => {
this.loading = false;
this.$tips({ message: '修改成功', type: 'success' });
this.close();
this.$emit('mutiUpdate');
}).catch(() => {
this.loading = false;
});
}
});
}
}
};
</script>
\ No newline at end of file
......@@ -5,9 +5,34 @@
<el-form-item label="自提点类型">
<el-radio v-model="ruleForm.type" :label="1">从门店中选择</el-radio>
</el-form-item>
<el-form-item label="门店选择器">
??
<el-form-item v-if="isAdd" prop="storeWidgetId" label="门店选择器">
<dm-store-select :selector-id="ruleForm.storeWidgetId" @save="saveStore"></dm-store-select>
</el-form-item>
<template v-else>
<el-form-item label="自提点名称" required>
<el-input v-model="info.name" class="w600" type="text" disabled> </el-input>
</el-form-item>
<el-form-item label="联系电话" required>
<el-input v-model="info.phone" class="w600" type="text" disabled> </el-input>
</el-form-item>
<el-form-item label="自提点地址" required>
<el-input v-model="info.address" class="w600" type="text" disabled> </el-input>
</el-form-item>
<el-form-item label="自提点图片" required>
<img style="width: 150px; height: 150px" :src="info.imageUrl" draggable="false" />
</el-form-item>
<el-form-item label="营业时间">
<div v-for="(item, index) in info.businessHour" :key="index" class="time-list">
<el-select v-model="item.weekdayShow" multiple placeholder="请选择" disabled class="mr10">
<el-option :label="item" :value="item" :key="item" v-for="item in ['周一', '周二', '周三','周四','周五','周六','周日']"></el-option>
</el-select>
<el-time-select placeholder="起始时间" v-model="item.openTime" disabled style="width:170px" class="mr10"></el-time-select>
<span style="font-size:14px;margin-right:10px;"></span>
<el-time-select placeholder="起始时间" v-model="item.closeTime" disabled style="width:170px"></el-time-select>
</div>
</el-form-item>
</template>
<h3 class="pt20 pb20">自提点信息</h3>
<form-content :rule-form.sync="ruleForm"></form-content>
<el-form-item class="mt20">
......@@ -18,8 +43,10 @@
</template>
<script>
import fetch from '@/api/gift.js';
const { insertPickupStore, getPickupDetails } = fetch;
const { insertPickupStore, getPickupDetails, updatePickupStore } = fetch;
import formContent from './module/pickup-form-content';
import { getSeconds } from '@/utils/common';
import { isEmpty } from '@/utils/index';
export default {
name: 'PickupForm',
......@@ -27,9 +54,43 @@ export default {
formContent
},
data() {
const validDynamicType = (rule, value, callback) => {
const { dynamicType, dynamicH, dynamicM, dynamicD } = this.ruleForm;
if (dynamicType == 1) {
if(isEmpty(dynamicH) || isEmpty(dynamicM)) {
callback(new Error('填写不完整'));
return;
}
} else {
if(isEmpty(dynamicD)) {
callback(new Error('填写不完整'));
return;
}
}
callback();
};
const validTime = (rule, value, callback) => {
const { fixedTime } = this.ruleForm;
if(fixedTime.length == 0) {
callback(new Error('请配置固定日期范围'));
return;
}
let flag = false;
fixedTime.forEach(v => {
if(!(v.dataRange && v.dataRange.length && v.dataRangep[0] && v.dataRange[1])) {
flag = true;
}
});
if(flag) {
callback(new Error('请配置固定日期范围'));
return;
}
callback();
};
return {
loading: false,
integralMallPickUpPointId: '', // 主键
pickupId: this.$route.query.id, // 主键
ruleForm: {
type: 1,
chooseTimeFlag: 1,
......@@ -45,24 +106,90 @@ export default {
storeWidgetId: '', // 门店id
timeoutDealType: 1, // 超期处理方式:1自动完成核销 2自动关闭发货单
},
rules: {},
rules: {
storeWidgetId: { required: true, message: '请选择门店', trigger: 'change' },
dynamicType: { required: true, validator: validDynamicType, trigger: 'blur' },
dynamicStop: { required: true, message: '请填写提货有效期', trigger: 'change' },
fixedTime: { required: true, validator: validTime, trigger: 'change' },
},
info: {
businessHour: []
},
isAdd: this.$route.meta.type === 'add',
isEdit: this.$route.meta.type === 'edit',
};
},
mounted() {
if(!this.isAdd) {
this.getInfo();
}
},
created() {
this.$emit('updateBread', [ { breadName: '福利中心' }, { breadName: '通用设置', breadPath: '/card-package/list' }, { breadName: '自提点设置', breadPath: '/setting/pickup-list' }, { breadName: this.isAdd ? '新建自提点' : '编辑自提点', breadPath: '' } ]);
this.integralMallPickUpPointId = this.$route.query.integralMallPickUpPointId;
},
methods: {
getInfo() {
this.loading = true;
getPickupDetails().then(() => {
getPickupDetails({ pickupId: this.pickupId }).then(res => {
this.loading = false;
const info = res.result || {};
let businessHour = info.businessHour ? JSON.parse(info.businessHour) : [];
for (let item of businessHour) {
item.weekdayShow = item.weekdayShow.split('、');
item.openTime = getSeconds(item.openTime);
item.closeTime = getSeconds(item.closeTime);
}
info.businessHour = businessHour;
this.info = info;
// 表单的
Object.keys(this.ruleForm).map(key => {
if (key in res.result) {
this.ruleForm[key] = info[key];
}
});
if(info.chooseTimeFlag) {
const pickupDateInfo = JSON.parse(info.pickupDateInfo);
// 其他的
if(info.dateType == 1) {
// 动态日期
this.dynamicType = pickupDateInfo.setType;
this.dynamicStop = pickupDateInfo.validite;
if(pickupDateInfo.setType == 1) {
this.dynamicH = parseInt(pickupDateInfo.time / 60);
this.dynamicM = pickupDateInfo.time % 60;
} else {
this.dynamicD = pickupDateInfo.time / 60 / 24;
}
} else {
// 固定日期
this.ruleForm.fixedTime = pickupDateInfo.map(v => {
return { dataRange: [ v.startTime, v.endTime ] };
});
}
}
}).catch(() => {
this.loading = false;
});
},
saveStore(storeWidgetId) {
this.ruleForm.storeWidgetId = storeWidgetId;
this.$refs.ruleForm.validateField('storeWidgetId');
},
async submit(params) {
this.loading = true;
try {
if(this.isAdd) {
await insertPickupStore(params);
} else {
await updatePickupStore(params);
}
this.loading = false;
this.$router.push('/setting/pickup-list');
this.$tips({ message: `${this.isAdd ? '新建' : '编辑'}成功`, type: 'success' });
} catch (error) {
this.loading = false;
}
},
handleSubmit() {
if(this.loading) {
return;
......@@ -77,34 +204,35 @@ export default {
let params = {
chooseTimeFlag, dateType, storeWidgetId, timeoutDealType
};
// pickupDateInfo: 动态日期 {"setType":1,"time":45,"validite":2};固定日期 json数组[{"endTime":1587168000000,"startTime":1587168000000}]
if(params.dateType == 1) {
// 动态日期
params.pickupDateInfo = {
setType: dynamicType,
time: dynamicType == 1 ? dynamicH * 60 + dynamicM : dynamicD * 24 * 60, // 转换为分钟
validite: dynamicStop
};
} else {
// 固定日期
params.pickupDateInfo = fixedTime.map(v => {
return { startTime: new Date(v[0]).getTime(), endTime: new Date(v[0]).getTime() };
});
if(chooseTimeFlag) {
// pickupDateInfo: 动态日期 {"setType":1,"time":45,"validite":2};固定日期 json数组[{"endTime":1587168000000,"startTime":1587168000000}]
if(params.dateType == 1) {
// 动态日期
params.pickupDateInfo = {
setType: dynamicType,
time: dynamicType == 1 ? dynamicH * 60 + dynamicM : dynamicD * 24 * 60, // 转换为分钟
validite: dynamicStop
};
} else {
// 固定日期
params.pickupDateInfo = fixedTime.map(v => {
return { startTime: new Date(v.dataRange[0]).getTime(), endTime: new Date(v.dataRange[0]).getTime() };
});
}
params.pickupDateInfo = JSON.stringify(params.pickupDateInfo);
}
if(this.isEdit) {
params.integralMallPickUpPointId = this.integralMallPickUpPointId;
params.ids = this.pickupId;
}
this.loading = true;
insertPickupStore(params).then(res => {
this.loading = false;
this.$router.push('/setting/pickup-list');
this.$tips({ message: `${this.isAdd ? '新建' : '编辑'}成功`, type: 'success' });
}).catch(() => {
this.loading = false;
});
this.submit(params);
}
});
}
},
};
</script>
\ No newline at end of file
</script>
<style scoped>
.w600 {
width: 600px;
}
</style>
\ No newline at end of file
......@@ -6,7 +6,7 @@
<el-option :disabled="!selectList.length" :value="0">批量设置</el-option>
<el-option :disabled="!selectList.length" :value="1">批量删除</el-option>
</el-select>
<el-button type="default">导出自提点</el-button>
<el-button type="default" @click="exportExcel">导出自提点</el-button>
<el-button type="primary" @click="$router.push('/setting/pickup-add')">新建自提点</el-button>
</div>
<el-table tooltip-effect="dark" :data="tableList" style="width:100%" @selection-change="(list) => { selectList = list; }">
......@@ -16,13 +16,12 @@
<el-table-column label="联系电话" prop="phone" min-width="140px;"> </el-table-column>
<el-table-column label="自提时间可选" min-width="120px;">
<template slot-scope="scope">
<p v-if="scope.row.openChooseTime === 0" class="address-type">不可选</p>
<p v-if="scope.row.openChooseTime === 1" class="address-type">可选</p>
{{ scope.row.chooseTimeFlag ? '可选' : '不可选' }}
</template>
</el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button type="text" @click="$router.push(`setting/pickup-edit?id=${scope.row.pickupId}`)">编辑</el-button>
<el-button type="text" @click="$router.push(`/setting/pickup-edit?id=${scope.row.pickupId}`)">编辑</el-button>
<dm-delete @confirm="del(scope.row.pickupId)" tips="确认删除?">
<el-button type="text">删除</el-button>
</dm-delete>
......@@ -32,15 +31,18 @@
<div class="clearfix">
<dm-pagination class="fr mb0" v-if="tableList.length" background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="listParams.currentPage" :page-sizes="[20, 40, 60, 80]" :page-size="listParams.pageSize" layout="total, sizes, prev, pager, next" :total="total"></dm-pagination>
</div>
<pickup-update-dialog :dialog-visible.sync="dialogVisible" :ids="selectList.map(v => v.ids)" @mutiUpdate="mutiUpdate"></pickup-update-dialog>
</div>
</template>
<script>
import { page } from '@/mixins/table.js';
import fetch from '@/api/gift.js';
import fetch, { exportPickupStoreExcel } from '@/api/gift.js';
import pickupUpdateDialog from './module/pickup-update-dialog';
const { pickupList, delPickup } = fetch;
export default {
name: 'PickupList',
components: { pickupUpdateDialog },
mixins: [ page ],
data() {
return {
......@@ -58,6 +60,7 @@ export default {
list: [ { timeRange: [] } ] // 初始数据
},
selectList: [],
dialogVisible: false,
};
},
created() {
......@@ -67,9 +70,18 @@ export default {
this.getTableList();
},
methods: {
exportExcel() {
console.log(exportPickupStoreExcel + `?dataUrl=/welfare/setting/pickup-list&name=${this.listParams.name}`);
// window.location = exportPickupStoreExcel + `?dataUrl=/welfare/setting/pickup-list&areaId=${this.currentAreaId}&name=${this.listParams.name}`;
},
mutiUpdate() {
this.selectList = [];
this.getTableList();
},
mutiOption(val) {
if(val == 0) {
// 批量设置
this.dialogVisible = true;
}
if(val == 1) {
// 批量删除
......
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