Commit 3bef55dc by chenxin

fix: 通用配置

parent 062d60f5
......@@ -63,9 +63,35 @@ let realGift = {
useFormData: true,
}, // 虚拟礼品卡密卡号上传
};
realGift = getFetch(realGift, welfarePrefix);
export default { ...realGift };
// 通用配置
let setting = {
updateConfig: {
url: '/config/update-config',
method: 'post',
headers: { 'Content-Type': 'application/json' }
},
getConfigDetail: '/config/get-config-detail',
getAddressList: '/address/get-address-list',
getAddressDetails: 'address/get-address-details',
delAddress: '/address/del-address',
insertOrUpdateAddress: { // 新增或修改退货地址
url: '/address/insert-or-update-address',
method: 'post',
headers: { 'Content-Type': 'application/json' }
},
pickupList: '/pickup/get-pickup-list',
getPickupDetails: '/pickup/get-pickup-details',
delPickup: '/pickup/del-pickup',
insertPickupStore: { // 新增或修改自提点
url: '/pickup/insert-pickup-store',
method: 'post',
headers: { 'Content-Type': 'application/json' }
},
};
realGift = getFetch(realGift, welfarePrefix);
setting = getFetch(setting, welfarePrefix);
export default { ...realGift, ...setting };
export const getGiftLoginUser = config.api + commonPrefix + '/user/get-login-user'; // 获取商户名称
This source diff could not be displayed because it is too large. You can view the blob instead.
import Layout from '@/components/layout/layout';
export default [
{
path: '/gift-manage', // 库存记录
component: Layout,
redirect: '/gift-manage/stock-record',
children: [
{
path: 'stock-record',
component: () => import('@/views/gift-manage/stock-record.vue'),
},
// {
// path: 'virtual-gift-detail',
// component: () => import('@/views/gift-manage/virtual-gift-detail.vue'),
// }
],
},
// ****通用配置开始****
{
path: '/setting',
component: Layout,
redirect: '/setting/sales-return-setting',
children: [
{
path: 'sales-return-setting', // 退货单设置
component: () => import('@/views/gift-manage/sales-return-setting.vue'),
},
{
path: 'address-lib-list', // 地址库管理
component: () => import('@/views/gift-manage/address-lib-list.vue'),
},
{
path: 'address-lib-add', // 新建地址库
component: () => import('@/views/gift-manage/address-lib-form.vue'),
meta: {
type: 'add',
path: '/settinge/address-lib-list'
}
},
{
path: 'address-lib-edit', // 编辑地址库
component: () => import('@/views/gift-manage/address-lib-form.vue'),
meta: {
type: 'edit',
path: '/settinge/address-lib-list'
}
},
{
path: 'pickup-list', // 自提点管理列表
component: () => import('@/views/gift-manage/pickup-list.vue'),
},
{
path: 'pickup-add', // 新建自提点
component: () => import('@/views/gift-manage/pickup-form.vue'),
meta: {
type: 'add',
path: '/settinge/pickup-list'
}
},
{
path: 'pickup-edit', // 编辑自提点
component: () => import('@/views/gift-manage/pickup-form.vue'),
meta: {
type: 'edit',
path: '/settinge/pickup-list'
}
},
],
},
// ****通用配置结束****
];
\ No newline at end of file
......@@ -4,14 +4,14 @@ import cardPackage from './card-package';
import realGift from './real-gift';
import Layout from '@/components/layout/layout';
import virtualGift from './virtual-gift';
import stockRecord from './stock-record';
import giftOther from './gift-other';
export const asyncRoutes = [
...gicCard,
...cardPackage,
...realGift,
...virtualGift,
...stockRecord,
...giftOther,
];
......
import Layout from '@/components/layout/layout';
export default [
{
path: '/gift-manage',
component: Layout,
redirect: '/gift-manage/stock-record',
children: [
{
path: 'stock-record',
component: () => import('@/views/gift-manage/stock-record.vue'),
},
// {
// path: 'virtual-gift-detail',
// component: () => import('@/views/gift-manage/virtual-gift-detail.vue'),
// }
],
},
];
\ No newline at end of file
......@@ -176,4 +176,52 @@ export const toLog = (appCode, id, name, ecuId) => {
// second >= 10 ? (second = second) : (second = '0' + second); //判断小于10的秒的情况
// return year + '-' + month + '-' + date + ' ' + hour + ':' + minute + ':' + second;
// };
\ No newline at end of file
// };
//
/**
* 时间戳转换成时分秒
* @param {String} time 时间
* @returns {String}
*/
export const getSeconds = (time) => {
if (!isNaN(time)) time = Number(time);
let now = new Date(time);
let hour = now.getHours();
hour >= 10 && (hour = '0' + hour); // 判断小于10的时的情况
let minute = now.getMinutes();
minute >= 10 && (minute = '0' + minute); // 判断小于10的分的情况
let second = now.getSeconds();
second >= 10 && (second = '0' + second); // 判断小于10的秒的情况
return hour + ':' + minute + ':' + second;
};
/**
* 时间戳转换成时分08:10
* @param {String} time 时间
* @returns {String}
*/
export const getHours = (time) => {
if (!isNaN(time)) time = Number(time);
let now = new Date(time);
let hour = now.getHours();
hour >= 10 && (hour = '0' + hour); // 判断小于10的时的情况
let minute = now.getMinutes();
minute >= 10 && (minute = '0' + minute); // 判断小于10的分的情况
return hour + ':' + minute;
};
/**
* 时间戳转换成时分8:10
* @param {String} time 时间
* @returns {String}
*/
export const getHours2 = (time) => {
if (!isNaN(time)) time = Number(time);
let now = new Date(time);
let hour = now.getHours();
// hour >= 10 ? (hour = hour) : (hour = '0' + hour); //判断小于10的时的情况
let minute = now.getMinutes();
// minute >= 10 ? (minute = minute) : (minute = '0' + minute); //判断小于10的分的情况
return hour + ':' + minute;
};
\ No newline at end of file
......@@ -29,7 +29,6 @@
<el-form-item>
<el-button type="primary" v-if="isAdd" @click="addForm">确认新建</el-button>
<el-button type="primary" :disabled="ruleForm.packageStock == info.packageStock" v-else @click="editForm">保存</el-button>
<el-button @click="$router.go(-1)">返回</el-button>
</el-form-item>
<el-form-item v-if="!isAdd" class="is-required">
<el-tooltip content="若添加的卡券为固定有效期,仅允许添加和有效期限时间重合的卡券" placement="bottom" slot="label" open-delay="200">
......
......@@ -50,7 +50,7 @@
<template slot-scope="scope">
{{ scope.row.useCouponSize }}/{{ scope.row.totalCouponSize }}
<el-tooltip content="存在已过期或已删除的卡券" placement="top" open-delay="200" v-if="scope.row.totalCouponSize > scope.row.useCouponSize">
<i class="el-icon-warning ml5"></i>
<i class="el-icon-warning ml5 danger-color cursor"></i>
</el-tooltip>
</template>
</el-table-column>
......
......@@ -157,7 +157,6 @@
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm" v-if="!isInfo">保存</el-button>
<el-button @click="$router.go(-1)">返回</el-button>
</el-form-item>
</el-form>
......
......@@ -135,7 +135,6 @@ export default {
this.formatterTimeFunc('giveBeginTime', 'giveEndTime', 'yyyy-MM-dd', 'dateTime');
this.formatterTimeFunc('receiveBeginTime', 'receiveEndTime', 'yyyy-MM-dd', 'dateTime2');
let params = { ...this.listParams, memberCardId: this.currentAreaId };
// TODO: search
giveLogList(params).then(res => {
this.loading = false;
const data = res.result;
......
<template>
<div class="p20">
<el-form ref="ruleForm" :model="ruleForm" label-width="120px" :rules="rules" style="width:600px;">
<el-form-item prop="type" label="地址类型">
<el-radio-group v-model="ruleForm.type">
<el-radio :label="1">退货地址</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item prop="defaultFlag" label="是否默认">
<el-switch :active-value="1" :inactive-value="0" v-model="ruleForm.defaultFlag"></el-switch>
</el-form-item>
<el-form-item prop="contact" label="联系人">
<el-input v-model="ruleForm.contact" :maxlength="20" show-word-limit></el-input>
</el-form-item>
<el-form-item prop="phone" label="手机号">
<dm-input-phone style="width:100%;" v-model="ruleForm.phone" show-word-limit></dm-input-phone>
</el-form-item>
<el-form-item prop="tel" label="电话">
<el-input v-model="tel1" :maxlength="20" style="width:120px;" placeholder="请填写区号"></el-input><span class="ml5 mr5 gray02">-</span>
<el-input v-model="tel2" :maxlength="20" style="width:120px;" placeholder="请填写座机号"></el-input><span class="ml5 mr5 gray02">-</span>
<el-input v-model="tel3" :maxlength="20" style="width:120px;" placeholder="请填写分机号"></el-input>
</el-form-item>
<el-form-item prop="cityIds" label="所在地区">
<el-cascader v-model="cityIds" style="width:100%;" :options="cityList"></el-cascader>
</el-form-item>
<el-form-item prop="address" label="详细地址">
<el-input type="textarea" placeholder="请不要重复填写省市区" v-model="ruleForm.address" :maxlength="50" show-word-limit></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm()">{{ addressId ? '保存' : '确认新建' }}</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script>
import api from '@/api/gift.js';
import cityList from '@/assets/city.json';
import { isEmpty } from '@/utils/index';
const { getAddressDetails, insertOrUpdateAddress } = api;
export default {
data() {
let phoneValidator = (rule, value, callback) => {
let reg = /^1[34578]\d{9}$/;
if (value !== '') {
if (!reg.test(value)) {
callback(new Error('手机号码不符合规则'));
} else {
callback();
}
} else {
callback();
}
};
let cityValidator = (rule, value, callback) => {
if(this.cityIds.length == 0) {
callback(new Error('请填写省市区'));
return;
}
callback();
};
let telValidator = (rule, value, callback) => {
const { tel1, tel2, tel3 } = this;
const arr = [ tel1, tel2, tel3 ];
if(arr.filter(v => isEmpty(v)).length == 3) {
// 可以都不填
callback();
return;
}
if(arr.some(v => isEmpty(v))) {
callback(new Error('电话填写不完整'));
return;
}
if(arr.some(v => !/^[0-9]*$/.test(v))) {
callback(new Error('请输入数字'));
return;
}
callback();
};
return {
loading: false,
addressId: this.$route.query.id,
ruleForm: {
type: 1,
defaultFlag: 0,
contact: '',
phone: '',
address: ''
},
rules: {
contact: [ { required: true, message: '联系人不能为空', trigger: 'blur' } ],
phone: [ { validator: phoneValidator, trigger: 'blur' } ],
cityIds: [ { required: true, validator: cityValidator, trigger: 'change' } ],
address: [ { required: true, message: '详细地址不能为空', trigger: 'blur' } ],
tel: [ { validator: telValidator, trigger: 'blur' } ],
},
tel1: '',
tel2: '',
tel3: '',
cityIds: [],
cityList
};
},
mounted() {
if(this.addressId) {
this.getInfo();
}
},
created() {
this.$emit('updateBread', [ { breadName: '福利中心' }, { breadName: '通用设置' }, { breadName: '地址库管理', breadPath: '/setting/address-lib-list' }, { breadName: (this.addressId ? '编辑' : '新建') + '地址库' } ]);
},
methods: {
submitForm() {
this.$refs.ruleForm.validate((valid) => {
if (!valid) {
return;
} else {
if (this.ruleForm.phone === '' && this.tel1 == '') {
this.$message.error('手机号码和电话至少填写一个');
return;
}
this.loading = true;
const { type, defaultFlag, contact, phone, address } = this.ruleForm;
let params = {
type,
defaultFlag,
contact,
phone,
address,
provinceId: this.cityIds[0],
cityId: this.cityIds[1],
countyId: this.cityIds[2],
tel: this.tel1 ? `${this.tel1},${this.tel2},${this.tel3}` : ''
};
if(this.addressId) {
params.addressId = this.addressId;
}
insertOrUpdateAddress(params).then(res => {
this.loading = false;
this.$tips({ message: '操作成功', type: 'success' });
this.$router.push('/setting/address-lib-list');
}).catch(() => {
this.loading = false;
});
}
});
},
getInfo() {
this.loading = true;
getAddressDetails().then(res => {
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 ];
});
this.loading = false;
}).catch(() => {
this.loading = false;
});
},
}
};
</script>
<template>
<div class="p20" v-loading="loading">
<div class="pb20 clearfix flex-center">
<el-button type="primary" class="mlAuto" @click="$router.push('/setting/address-lib-add')">新建地址</el-button>
</div>
<el-table tooltip-effect="dark" :data="tableList" style="width:100%">
<el-table-column prop="contact" label="联系人"> </el-table-column>
<el-table-column prop="phone" label="联系方式"> </el-table-column>
<el-table-column prop="address" label="地址"> </el-table-column>
<el-table-column label="地址类型">
<template slot-scope="scope">
<el-tag v-if="scope.row.defaultFlag" class="mr5">默认</el-tag>
{{ scope.row.type == 1 ? '退款地址' : '--' }}
</template>
</el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button type="text" @click="$router.push(`/setting/address-lib-add?id=${scope.row.addressId}`)">编辑</el-button>
<dm-delete @confirm="del(scope.row)" tips="确认删除?">
<el-button type="text">删除</el-button>
</dm-delete>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
import { page } from '@/mixins/table.js';
import fetch from '@/api/gift.js';
const { getAddressList, delAddress } = fetch;
export default {
name: 'AddressLibList',
mixins: [ page ],
data() {
return {
loading: false,
listParams: {
currentPage: 1,
pageSize: 20,
},
total: 0,
tableList: [],
dialogVisible: false,
addressId: '',
};
},
created() {
this.$emit('updateBread', [ { breadName: '福利中心' }, { breadName: '通用设置' }, { breadName: '地址库管理' } ]);
},
mounted() {
this.getTableList();
},
methods: {
del({ addressId }) {
this.loading = true;
delAddress({ addressId: addressId })
.then(res => {
this.loading = false;
this.$tips({ type: 'success', message: '删除成功' });
this.getTableList();
})
.finally(() => {
this.loading = false;
});
},
getTableList() {
if(this.loading) {
return;
}
this.loading = true;
getAddressList().then(res => {
this.loading = false;
this.tableList = res.result || []; // 无分页
}).finally(() => {
this.loading = false;
});
},
},
};
</script>
<template>
<el-dialog :title="`${addressId ? '编辑' : '新建'}地址`" :visible.sync="dialogVisible" width="600px" @close="close">
<el-form ref="ruleForm" :model="ruleForm" label-width="120px" :rules="rules" class="pr10">
<el-form-item prop="type" label="地址类型">
<el-radio-group v-model="ruleForm.type">
<el-radio :label="1">退货地址</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item prop="defaultFlag" label="是否默认">
<el-switch :active-value="1" :inactive-value="0" v-model="ruleForm.defaultFlag"></el-switch>
</el-form-item>
<el-form-item prop="contact" label="联系人">
<el-input v-model="ruleForm.contact" :maxlength="20" show-word-limit></el-input>
</el-form-item>
<el-form-item prop="phone" label="手机号">
<dm-input-phone style="width:100%;" v-model="ruleForm.phone" show-word-limit></dm-input-phone>
</el-form-item>
<el-form-item prop="tel" label="电话">
<el-input v-model="tel1" :maxlength="20" style="width:120px;" placeholder="请填写区号"></el-input><span class="ml5 mr5 gray02">-</span>
<el-input v-model="tel2" :maxlength="20" style="width:120px;" placeholder="请填写座机号"></el-input><span class="ml5 mr5 gray02">-</span>
<el-input v-model="tel3" :maxlength="20" style="width:120px;" placeholder="请填写分机号"></el-input>
</el-form-item>
<el-form-item prop="cityIds" label="所在地区">
<el-cascader v-model="cityIds" style="width:100%;" :options="cityList"></el-cascader>
</el-form-item>
<el-form-item prop="address" label="详细地址">
<el-input type="textarea" placeholder="请不要重复填写省市区" v-model="ruleForm.address" :maxlength="50" show-word-limit></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="close">取消</el-button>
<el-button type="primary" @click="submitForm()">{{ addressId ? '保存' : '确认新建' }}</el-button>
</div>
</el-dialog>
</template>
<script>
import api from '@/api/gift.js';
import cityList from '@/assets/city.json';
import { isEmpty } from '@/utils/index';
const { getAddressDetails, insertOrUpdateAddress } = api;
const defaultForm = {
type: 1,
defaultFlag: 0,
contact: '',
phone: '',
address: ''
};
export default {
props: {
dialogVisible: {
type: Boolean,
default() {
return {};
}
},
addressId: {
type: String,
default: ''
}
},
data() {
let phoneValidator = (rule, value, callback) => {
let reg = /^1[34578]\d{9}$/;
if (value !== '') {
if (!reg.test(value)) {
callback(new Error('手机号码不符合规则'));
} else {
callback();
}
} else {
callback();
}
};
let cityValidator = (rule, value, callback) => {
if(this.cityIds.length == 0) {
callback(new Error('请填写省市区'));
return;
}
callback();
};
let telValidator = (rule, value, callback) => {
const { tel1, tel2, tel3 } = this;
const arr = [ tel1, tel2, tel3 ];
if(arr.filter(v => isEmpty(v)).length == 3) {
// 可以都不填
callback();
return;
}
if(arr.some(v => isEmpty(v))) {
callback(new Error('电话填写不完整'));
return;
}
if(arr.some(v => !/^[0-9]*$/.test(v))) {
callback(new Error('请输入数字'));
return;
}
callback();
};
return {
loading: false,
ruleForm: {
...defaultForm
},
rules: {
contact: [ { required: true, message: '联系人不能为空', trigger: 'blur' } ],
phone: [ { validator: phoneValidator, trigger: 'blur' } ],
cityIds: [ { required: true, validator: cityValidator, trigger: 'change' } ],
address: [ { required: true, message: '详细地址不能为空', trigger: 'blur' } ],
tel: [ { validator: telValidator, trigger: 'blur' } ],
},
tel1: '',
tel2: '',
tel3: '',
cityIds: [],
cityList
};
},
methods: {
close() {
this.$emit('update:dialogVisible', false);
this.$emit('update:dialogVisible', false);
this.ruleForm = { ...defaultForm };
this.tel1 = '';
this.tel2 = '';
this.tel3 = '';
this.cityIds = [];
},
submitForm() {
this.$refs.ruleForm.validate((valid) => {
if (!valid) {
return;
} else {
if (this.ruleForm.phone === '' && this.tel1 == '') {
this.$message.error('手机号码和电话至少填写一个');
return;
}
this.loading = true;
const { type, defaultFlag, contact, phone, address } = this.ruleForm;
let params = {
type,
defaultFlag,
contact,
phone,
address,
provinceId: this.cityIds[0],
cityId: this.cityIds[1],
countyId: this.cityIds[2],
tel: this.tel1 ? `${this.tel1},${this.tel2},${this.tel3}` : ''
};
if(this.addressId) {
params.addressId = this.addressId;
}
insertOrUpdateAddress(params).then(res => {
this.loading = false;
this.$tips({ message: '操作成功', type: 'success' });
this.close();
this.$emit('refresh');
}).catch(() => {
this.loading = false;
});
}
});
},
getInfo() {
this.loading = true;
getAddressDetails().then(res => {
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 ];
});
this.loading = false;
}).catch(() => {
this.loading = false;
});
},
},
watch: {
dialogVisible(val) {
if(val && this.addressId) {
this.getInfo();
}
}
}
};
</script>
<template>
<div>
<div class="form-content">
<el-form :model="form" ref="form" :rules="rules" label-width="140px" class="demo-ruleForm" label-position="right" v-loading="loading">
<div class="form-section">
<h3>自提点信息</h3>
<el-form-item label="自提点类型" required>
<template>
<el-radio v-model="form.type" :label="1">从门店中选择</el-radio>
</template>
</el-form-item>
<div v-if="integralMallPickUpPointId">
<el-form-item label="自提点名称">
<template>
<el-input v-model="form.name" class="w-600" type="text" disabled></el-input>
</template>
</el-form-item>
<el-form-item label="电话">
<template>
<el-input v-model="form.phone" class="w-600" type="text" disabled></el-input>
</template>
</el-form-item>
<el-form-item label="自提点地址">
<template>
<el-input v-model="form.address" class="w-600" type="text" disabled></el-input>
</template>
</el-form-item>
<el-form-item label="自提点图片">
<div v-for="(item, index) in form.pickupUrl" :key="index" class="img-list">
<img :src="item" alt />
</div>
</el-form-item>
<el-form-item label="营业时间">
<div v-for="(item, index) in form.businessTimeList" :key="index" class="time-list">
<el-select v-model="item.weekdayShow" multiple placeholder="请选择" disabled class="mr10">
<el-option :label="周一" :value="周一"></el-option>
<el-option :label="周二" :value="周二"></el-option>
<el-option :label="周三" :value="周三"></el-option>
<el-option :label="周四" :value="周四"></el-option>
<el-option :label="周五" :value="周五"></el-option>
<el-option :label="周六" :value="周六"></el-option>
<el-option :label="周日" :value="周日"></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>
</div>
<el-form-item v-else>
<template slot="label">
<el-tooltip open-delay="200" class="item" effect="dark" content="不筛选则默认所有门店" placement="top">
<span class="undeline-dash">门店选择</span>
</el-tooltip>
</template>
<div class="store-select-box">
门店选择器
</div>
</el-form-item>
</div>
<div class="form-section">
<h3>自提点设置</h3>
<el-form-item label="买家可选自提时间" style="margin-bottom:10px;">
<el-switch v-model="form.openChooseTime"></el-switch>
</el-form-item>
<p class="warm-tip">开关开启,则买家需选择自提时间,商户需按约定时间备货完成,反之则默认买家付款后即可在任意时间提货</p>
<el-form-item label="商户备货设置" required v-if="form.openChooseTime">
<template>
<div class="radio-item">
<el-radio v-model="form.radio" :label="1" @change="handleChange" style="margin-right:10px;">下单当天</el-radio>
<el-form-item style="display:inline-block;margin-left:0px" prop="timeHours">
<el-input type="text" v-model="form.timeHours" style="width:140px;" :disabled="form.radio === 2"></el-input>
</el-form-item>
<span>小时</span>
<el-form-item style="display:inline-block;margin-left:0px" prop="timeMinuter">
<el-input type="text" v-model="form.timeMinuter" style="width:140px;" :disabled="form.radio === 2"></el-input>
</el-form-item>
<span>分钟后,买家可提货</span>
</div>
<div class="radio-item" style="margin-bottom:0px;">
<el-radio v-model="form.radio" :label="2" @change="handleChange" style="margin-right:10px;">下单</el-radio>
<el-form-item style="display:inline-block;margin-left:0px" prop="timeDay">
<el-input type="text" v-model="form.timeDay" style="width:120px;" :disabled="form.radio === 1"></el-input>
</el-form-item>
<span>天后,买家可提货</span>
</div>
</template>
</el-form-item>
<el-form-item label="买家自提时段" required v-if="form.openChooseTime"></el-form-item>
<div style="margin-top:-45px;" v-if="form.openChooseTime">
<el-form-item v-for="(v, i) in form.timeRangeList" :key="i" :prop="'timeRangeList.' + i + '.timeRange'" :rules="[{ validator: validateTime, trigger: 'change' }]" class="form-item">
<el-time-picker :clearable="clearableBtn" class="w-280" format="HH:mm" is-range v-model="v.timeRange" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" placeholder="选择时间范围" @change="value => limitTimeSelect(i, value)" @focus="value => blurLimitTimeSelect(i, value)"></el-time-picker>
<el-button v-if="i" type="text" @click="deleteTime(i)" class="delete-btn">删除</el-button>
<span v-if="!i" class="time-tip">请使用24小时制输入时间,格式如11:00至14:30</span>
</el-form-item>
<p>
<el-button type="text" class="add-time" @click="addTime"> <i class="el-icon-plus"></i>添加时间段 </el-button>
</p>
</div>
<el-form-item style="margin-top:30px;font-size:0">
<dm-perm-button type="primary" :disabled="$itemPerm($itemCode.GICIntegralUpdatePickUpPoint)" @click="handleSubmit('form')" v-if="integralMallPickUpPointId">保存</dm-perm-button>
<dm-perm-button type="primary" :disabled="$itemPerm($itemCode.GICIntegralAddPickUpPoint)" @click="handleSubmit('form')" v-else>确认新建</dm-perm-button>
</el-form-item>
</div>
</el-form>
</div>
</div>
</template>
<script>
import fetch from '@/api/gift.js';
const { insertPickupStore, getPickupDetails } = fetch;
import { getSeconds, getHours } from '../../utils/common.js';
export default {
components: {},
data() {
let timeHoursValidator = (rule, value, callback) => {
// var reg = /^[1-9]\d*$/;
let reg = /^\+?(0|[1-9][0-9]*)$/;
if (this.form.radio === 2) {
if (!value) {
callback();
}
} else if (this.form.radio === 1) {
if (!value) {
callback(new Error('请输入时间'));
}
}
if (!reg.test(Number(value))) {
callback(new Error('请输入0-23之间的整数'));
} else if (Number(value) > 23) {
callback(new Error('请输入0-23之间的整数'));
} else {
callback();
}
};
let timeMinuterValidator = (rule, value, callback) => {
// var reg = /^[1-9]\d*$/;
let reg = /^\+?(0|[1-9][0-9]*)$/;
if (this.form.radio === 2) {
if (!value) {
callback();
}
} else if (this.form.radio === 1) {
if (!value) {
callback(new Error('请输入时间'));
}
}
if (!reg.test(Number(value))) {
callback(new Error('请输入0-59之间的整数'));
} else if (Number(value) > 59) {
callback(new Error('请输入0-59之间的整数'));
} else {
callback();
}
};
let timeDayValidator = (rule, value, callback) => {
let reg = /^[1-9]\d*$/;
// var reg = /^\+?(0|[1-9][0-9]*)$/;
if (this.form.radio === 1) {
if (!value) {
callback();
}
} else if (this.form.radio === 2) {
if (!value) {
callback(new Error('请输入时间'));
}
}
if (!reg.test(Number(value))) {
callback(new Error('请输入1-90之间的整数'));
} else if (Number(value) > 90) {
callback(new Error('请输入1-90之间的整数'));
} else {
callback();
}
};
let validateTime = (rule, value, callback) => {
if (!value) {
return callback(new Error('请输入时间'));
} else {
callback();
}
};
return {
getSeconds: getSeconds,
getHours: getHours,
form: {
type: 1,
openChooseTime: true,
name: '',
phone: '',
address: '',
pickupUrl: [],
businessTimeList: [],
radio: 1,
timeHours: '',
timeMinuter: '',
timeDay: '',
timeRangeList: [ { timeRange: '' } ]
},
rules: {
timeHours: [ { validator: timeHoursValidator, trigger: 'blur' } ],
timeMinuter: [ { validator: timeMinuterValidator, trigger: 'blur' } ],
timeDay: [ { validator: timeDayValidator, trigger: 'blur' } ]
// orderTimeHours: [{ required: true, message: '请输入时间', trigger: 'blur' }, { validator: orderTimeHoursValidator, trigger: 'blur' }]
},
validateTime,
integralMallPickUpPointId: '',
// 门店选择器
projectName: 'integral-mall',
rebackFlag: false,
selectPeopleObj: '',
storewidgetId: '',
loading: false,
submitLoading: false
};
},
created() {
this.$emit('updateBread', [ { breadName: '福利中心' }, { breadName: 'GIC卡券包', breadPath: '/card-package/list' }, { breadName: this.isAdd ? '新建自提点' : '编辑自提点', breadPath: '' } ]);
this.integralMallPickUpPointId = this.$route.query.integralMallPickUpPointId;
},
methods: {
getMess() {
let params = {
id: this.integralMallPickUpPointId
};
this.loading = true;
insertPickupStore(params).then(res => {
let resResult = res.result;
this.form.type = resResult.type;
this.form.name = resResult.name;
this.form.phone = resResult.phone;
this.form.address = resResult.address;
this.form.pickupUrl = resResult.pickupUrl ? JSON.parse(resResult.pickupUrl) : [];
let businessHour = resResult.businessHour ? JSON.parse(resResult.businessHour) : [];
for (let item of businessHour) {
item.weekdayShow = item.weekdayShow.split('、');
item.openTime = this.getSeconds(item.openTime);
item.closeTime = this.getSeconds(item.closeTime);
}
this.form.businessTimeList = businessHour;
this.form.openChooseTime = resResult.openChooseTime === 1 ? true : false;
let goodsSetting = resResult.goodsSetting ? JSON.parse(resResult.goodsSetting) : { setType: 1, time: '' };
this.form.radio = goodsSetting.setType;
if (goodsSetting.setType === 1) {
// time的单位是分钟
this.form.timeHours = goodsSetting.time / 60 < 1 ? '' : parseInt(goodsSetting.time / 60);
this.form.timeMinuter = goodsSetting.time % 60 === 0 ? '' : goodsSetting.time % 60;
} else {
this.form.timeDay = '';
}
if (goodsSetting.setType === 2) {
// time的单位是天
this.form.timeDay = goodsSetting.time;
this.form.timeHours = '';
this.form.timeMinuter = '';
}
if (resResult.openChooseTime === 0) {
this.form.timeRangeList[0].timeRange = '';
} else {
this.form.timeRangeList = [];
let pickupTime = JSON.parse(resResult.pickupTime);
for (let item of pickupTime) {
let currentYear = new Date().getFullYear();
let currentMonth = new Date().getMonth() + 1;
let currentDate = new Date().getDate();
let time1 = new Date(new Date(currentYear + '-' + currentMonth + '-' + currentDate + ' ' + item.split('-')[0] + ':00').valueOf());
let time2 = new Date(new Date(currentYear + '-' + currentMonth + '-' + currentDate + ' ' + item.split('-')[1] + ':00').valueOf());
this.form.timeRangeList.push({ timeRange: [ time1, time2 ] });
}
}
})
.catch(error => {
this.loading = false;
});
},
// 添加时间段
addTime() {
if (this.form.timeRangeList.length >= 5) {
this.$message.error('最多五个时间段');
return false;
}
if (this.form.timeRangeList[this.form.timeRangeList.length - 1].timeRange) {
// 上一个时间存在添加
let time1 = new Date((new Date(this.form.timeRangeList[this.form.timeRangeList.length - 1].timeRange[1]).getTime() + 1000 * 60 * 1).valueOf());
let time2 = new Date((new Date(this.form.timeRangeList[this.form.timeRangeList.length - 1].timeRange[1]).getTime() + 1000 * 60 * 2).valueOf());
this.form.timeRangeList.push({ timeRange: [ time1, time2 ] });
} else {
this.form.timeRangeList.push({ timeRange: null });
}
},
// 删除时间段
deleteTime(index) {
this.form.timeRangeList.splice(index, 1);
},
// 时间限制
limitTimeSelect(index, val) {
if (val) {
let selectTime = new Date(val[0]).valueOf();
let selectTimeEnd = new Date(val[1]).valueOf();
if (selectTime === selectTimeEnd) {
this.$message.error('时间不可重叠!');
this.form.timeRangeList[index].timeRange = null;
}
if (index !== 0) {
// 不是第一个
// // 和前面的时间比较
for (let i = index - 1; i >= 0; i--) {
if (this.form.timeRangeList[i].timeRange) {
let selectTimePrev = new Date(this.form.timeRangeList[i].timeRange[1]).valueOf();
// 和前前一个的存在的结束时间比较
if (selectTime < selectTimePrev) {
this.$message.error('时间不可重叠!');
this.form.timeRangeList[index].timeRange = null;
}
}
}
// 和后面的时间比较
for (let j = index + 1; j < this.form.timeRangeList.length; j++) {
if (this.form.timeRangeList[j].timeRange) {
let selectTimeAfter = new Date(this.form.timeRangeList[j].timeRange[0]).valueOf();
// 和后一个的存在的开始时间比较
if (selectTime > selectTimeAfter || selectTimeEnd > selectTimeAfter) {
this.$message.error('时间不可重叠!');
this.form.timeRangeList[index].timeRange = null;
}
}
}
} else {
// 和后面的时间比较
for (let j = index + 1; j < this.form.timeRangeList.length; j++) {
if (this.form.timeRangeList[j].timeRange) {
let selectTimeAfter = new Date(this.form.timeRangeList[j].timeRange[0]).valueOf();
// 和后一个的存在的开始时间比较
if (selectTime > selectTimeAfter || selectTimeEnd > selectTimeAfter) {
this.$message.error('时间不可重叠!');
this.form.timeRangeList[index].timeRange = null;
}
}
}
}
}
},
blurLimitTimeSelect(index, val) {
let selectTime = new Date(val[0]).valueOf();
let selectTimeEnd = new Date(val[1]).valueOf();
if (selectTime === selectTimeEnd) {
this.$message.error('时间不可重叠!');
this.form.timeRangeList[index].timeRange = null;
}
},
handleChange() {
this.$refs['form'].clearValidate();
if (this.form.radio === 1) {
this.form.timeDay = '';
} else if (this.form.radio === 2) {
this.form.timeHours = '';
this.form.timeMinuter = '';
}
},
getPeopleId() {
return;
// let params = {
// authSearchParam: this.selectPeopleObj.dataResource.searchJson ? this.selectPeopleObj.dataResource.searchJson : '',
// writeBackParam: JSON.stringify(this.selectPeopleObj.condtionsList),
// searchParam: this.selectPeopleObj.abbrInfo
// };
// getPickupDetails(params).
// request
// .post('/api-integral-mall/pickup/get-store', params)
// .then(res => {
// if (res.data.code === '0000') {
// this.storewidgetId = res.data.result;
// } else {
// this.$message.error(res.data.message);
// }
// })
// .catch(error => {
// this.$message.error({
// duration: 1000,
// message: error.message
// });
// });
},
handleSubmit(form) {
if(this.submitLoading) return;
this.$refs[form].validate(valid => {
if (valid) {
let goodsSetting = { setType: 1, time: '' };
let pickupTime = [];
if (this.form.openChooseTime) {
goodsSetting = {
setType: this.form.radio,
time: this.form.radio === 1 ? this.form.timeHours * 60 + Number(this.form.timeMinuter) : this.form.timeDay
};
for (let item of this.form.timeRangeList) {
if (item.timeRange) {
pickupTime.push(this.getHours(item.timeRange[0]) + '-' + this.getHours(item.timeRange[1]));
}
}
} else {
goodsSetting = { setType: 1, time: '' };
pickupTime = [];
}
let params = {};
if (!this.integralMallPickUpPointId) {
if (!this.selectPeopleObj) {
this.$message.error('请选择门店');
return false;
}
}
if (this.integralMallPickUpPointId) {
// 编辑
params = {
id: this.integralMallPickUpPointId,
openChooseTime: this.form.openChooseTime ? 1 : 0,
goodsSetting: JSON.stringify(goodsSetting),
pickupTime: JSON.stringify(pickupTime)
};
} else {
// this.getPeopleId();
// return;
params = {
storewidgetId: this.storewidgetId,
shopId: this.shopId,
type: this.form.type,
openChooseTime: this.form.openChooseTime ? 1 : 0,
goodsSetting: JSON.stringify(goodsSetting),
pickupTime: JSON.stringify(pickupTime)
};
}
this.submitLoading = true;
this.loading = true;
getPickupDetails(params)
.then(res => {
if (res.data.code === '0000') {
this.$router.push('/setting/pickup-list');
}
});
} else {
return false;
}
});
}
},
};
</script>
<style scoped>
.w-600 {
width: 600px;
}
.form-section {
margin-bottom: 20px;
padding: 30px 20px;
}
.form-section h3 {
color: #303133;
font-weight: 500;
font-size: 14px;
margin-bottom: 20px;
}
.warm-tip {
color: #909399;
font-size: 12px;
margin-bottom: 20px;
}
.radio-item {
margin-bottom: 20px;
}
.add-time {
color: #606266;
margin-left: 140px;
}
.delete-btn {
display: none;
color: #909399;
margin-left: 7px;
}
.delete-btn:hover {
color: #2f54ed;
}
.form-item:hover .delete-btn {
display: inline-block;
}
.add-time .el-icon-plus {
margin-right: 5px;
}
.time-tip {
color: #909399;
font-size: 12px;
margin-left: 7px;
}
.fixed-btn {
width: 100%;
height: 56px;
line-height: 56px;
position: fixed;
bottom: 0px;
left: 200px;
background: #fff;
border-top: 1px solid #e4e7ed;
text-align: center;
margin-left: -100px;
z-index: 2;
}
.img-list {
display: inline-block;
margin-right: 10px;
vertical-align: top;
}
.img-list img {
width: 110px;
height: 110px;
border-radius: 4px;
border: 1px solid #e4e7ed;
}
.time-list {
font-size: 0;
margin-bottom: 22px;
}
</style>
<template>
<div class="p20" v-loading="loading">
<div class="pb20 clearfix flex-center">
<el-input prefix-icon="el-icon-search" v-model="listParams.name" @change="refresh" class="w400 mrAuto" clearable placeholder="请输入自提点名称进行搜索"></el-input>
<el-select class="more-select mr10" @change="mutiOption" placeholder="批量操作">
<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="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; }">
<el-table-column type="selection" width="55"> </el-table-column>
<el-table-column label="自提点名称" prop="name" min-width="180px;"> </el-table-column>
<el-table-column label="自提点地址" prop="address" min-width="180px;"> </el-table-column>
<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>
</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>
<dm-delete @confirm="del(scope.row.pickupId)" tips="确认删除?">
<el-button type="text">删除</el-button>
</dm-delete>
</template>
</el-table-column>
</el-table>
<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>
</div>
</template>
<script>
import { page } from '@/mixins/table.js';
import fetch from '@/api/gift.js';
const { pickupList, delPickup } = fetch;
export default {
name: 'PickupList',
mixins: [ page ],
data() {
return {
loading: false,
listParams: {
name: '',
currentPage: 1,
pageSize: 20,
},
total: 0,
tableList: [],
pickedForm: {
dialogVisible: false,
selectIdList: [], // 复选框选中的数据的id
list: [ { timeRange: [] } ] // 初始数据
},
selectList: [],
};
},
created() {
this.$emit('updateBread', [ { breadName: '福利中心' }, { breadName: '通用设置' }, { breadName: '地址库管理' } ]);
},
mounted() {
this.getTableList();
},
methods: {
mutiOption(val) {
if(val == 0) {
// 批量设置
}
if(val == 1) {
// 批量删除
this.del(this.selectList.map(v => v.pickupId).join(','));
}
},
del(pickupIds) {
this.loading = true;
delPickup({ pickupIds: pickupIds })
.then(res => {
this.loading = false;
this.$tips({ type: 'success', message: '操作成功' });
this.getTableList();
})
.finally(() => {
this.loading = false;
});
},
getTableList() {
if(this.loading) {
return;
}
this.loading = true;
pickupList().then(res => {
this.loading = false;
const data = res.result;
this.tableList = data.result || [];
this.total = data.totalCount;
// 删除至最后一页没数据的情况,页码-1
if (this.tableList.length === 0 && this.listParams.currentPage !== 1) {
this.listParams.currentPage -= 1;
this.getTableList();
}
}).finally(() => {
this.loading = false;
});
},
},
};
</script>
<template>
<div class="p20" v-loading="loading">
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="150px" style="min-height:400px;">
<el-form-item label="收货自动加库存" prop="backStockFlag">
<el-switch :active-value="1" :inactive-value="0" v-model="ruleForm.backStockFlag"></el-switch>
<div class="gray03 fz12">开启自动加库存后,在退货单同意收货后,福利中心可占库存将会增加</div>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm">保存</el-button>
<span class="ml10 gray02" v-if="ruleForm.updateTime">最近修改:{{formatDateTimeByType(ruleForm.updateTime, 'yyyy-MM-dd HH:mm:ss')}}</span>
</el-form-item>
</el-form>
</div>
</template>
<script>
import { formatDateTimeByType } from '@/utils/index';
import api from '@/api/gift';
const { updateConfig, getConfigDetail } = api;
export default {
name: 'SalesReturnSetting',
data() {
return {
loading: false,
ruleForm: {
configId: '',
backStockFlag: 0, // 是否收货自动加库存 0否1是
createTime: '',
updateTime: ''
},
rules: {},
};
},
created() {
this.$emit('updateBread', [ { breadName: '福利中心' }, { breadName: '通用设置' }, { breadName: '退货单设置' } ]);
},
mounted() {
this.getDetail();
},
methods: {
formatDateTimeByType,
submitForm() {
if (this.loading) {
return;
}
this.loading = true;
updateConfig({
configId: this.ruleForm.configId, // 新建不需要传
backStockFlag: this.ruleForm.backStockFlag
}).then(res => {
this.loading = false;
this.getDetail();
this.$tips({ message: '保存成功', type: 'success' });
}).finally(() => {
this.loading = false;
});
},
// 获取配置详情
getDetail() {
getConfigDetail().then(res => {
this.ruleForm = { ...this.ruleForm, ...res.result };
});
}
},
};
</script>
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