提交 31d17156 authored 作者: 王天霸's avatar 王天霸

Merge branch 'dev_hxz' into test

# Conflicts:
#	dist/static/img/dq.afccfc20.png
#	dist/static/img/fs.3060cc10.png
#	dist/static/img/my.8b7d6afc.png
#	dist/static/img/sp.eeab41d3.png
#	src/assets/image/website/clothesImgs.png
#	src/assets/image/website/electricalImgs.png
#	src/assets/image/website/foodImgs.png
#	src/assets/image/website/maternalImgs.png
#	src/assets/image/website/服饰.png
#	src/assets/image/website/母婴.png
#	src/assets/image/website/电器.png
#	src/assets/image/website/食品.png
#	src/views/entry/newyuncang.vue
#	src/views/system/asset/withdraw/index.vue
#	src/views/system/goods/add/components/goodsaftersale.vue
#	src/views/system/goods/add/components/goodsimg.vue
#	src/views/system/goods/add/components/goodsinfomation.vue
#	src/views/system/goods/add/components/goodsparameter.vue
#	src/views/system/goods/add/components/goodsspecifications.vue
#	src/views/system/goods/add/index.vue
......@@ -17,10 +17,26 @@ export function GetCategory(query) {
params: query
})
}
// 经营类目
export function NewGetCategory(query) {
return request({
url: '/system/goodsNew/businessList',
method: 'get',
params: query
})
}
// 查询运费模板
// export function GetFreight(query) {
// return request({
// url: '/system/goods/getFreight',
// method: 'get',
// params: query
// })
// }
export function GetFreight(query) {
return request({
url: '/system/goods/getFreight',
url: '/system/freightNew/getFreight',
method: 'get',
params: query
})
......@@ -41,10 +57,19 @@ export function Onsale(data) {
})
}
// 新增goods
// 新增goods - old
// export function addGoods(data) {
// return request({
// url: '/system/goods/add',
// method: 'post',
// data: data
// })
// }
// 新增商品
export function addGoods(data) {
return request({
url: '/system/goods/add',
url: '/system/goodsNew/addGoods',
method: 'post',
data: data
})
......@@ -70,7 +95,7 @@ export function delGoods(ids) {
//上传图片
export function UploadImg(data) {
return request({
url: '/system/goods/uploadImg',
url: '/system/goodsNew/uploadImage',
method: 'post',
data: data
})
......
This image diff could not be displayed because it is too large. You can view the blob instead.
This image diff could not be displayed because it is too large. You can view the blob instead.
This image diff could not be displayed because it is too large. You can view the blob instead.
This image diff could not be displayed because it is too large. You can view the blob instead.
This image diff could not be displayed because it is too large. You can view the blob instead.
This image diff could not be displayed because it is too large. You can view the blob instead.
......@@ -7,24 +7,23 @@ import { getToken } from '@/utils/auth'
NProgress.configure({ showSpinner: false })
const whiteList = ['/login','/platformlogin', '/auth-redirect', '/bind', '/register']
const whiteList = ['/login','/platformlogin', '/auth-redirect', '/bind', '/register','/newyuncang']
router.beforeEach((to, from, next) => {
//debugger
NProgress.start()
// console.log("getToken()",getToken())
if (getToken()) {
//
/* has token*/
if (to.path === '/login') {
return false
next({ path: '/' })
NProgress.done()
} else {
// console.log(3333)
if (store.getters.roles.length === 0) {
// console.log(4444)
// 判断当前用户是否已拉取完user_info信息
store.dispatch('GetInfo').then(res => {
// console.log("res",res.data.Role)
// return false
// 拉取user_info
const roles = res.data.Role
......@@ -53,15 +52,15 @@ router.beforeEach((to, from, next) => {
}
}
} else {
//debugger
// 没有token
if (whiteList.indexOf(to.path) !== -1) {
console.log("在免登录白名单,直接进入")
console.log("在免登录白名单,直接进入")
// 在免登录白名单,直接进入
next()
} else {
// console.log(999999)
next(`/login?redirect=${to.path}`) // 否则全部重定向到登录页
//next(`/login?redirect=${to.path}`) // 否则全部重定向到登录页
next(`/newyuncang?redirect=${to.path}`) // 否则全部重定向到登录页
NProgress.done()
}
}
......
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)
/* Layout */
......@@ -40,11 +41,22 @@ export const constantRoutes = [
}
]
},
{
path: '/setpsd',
component: (resolve) => require(['@/views/system/settings/setpsd'], resolve),
hidden: true
},
// {
// path: '/redirect',
// component: Layout,
// hidden: true,
// children: [
// {
// path: '/redirect/:path(.*)',
// component: (resolve) => require(['@/views/redirect'], resolve)
// }
// ]
// },
// {
// path: '/setpsd',
// component: (resolve) => require(['@/views/system/settings/setpsd'], resolve),
// hidden: true
// },
{
path: '/platformlogin',
component: (resolve) => require(['@/views/platformlogin'], resolve),
......@@ -65,6 +77,11 @@ export const constantRoutes = [
component: (resolve) => require(['@/views/error/401'], resolve),
hidden: true
},
{
path: '/newyuncang',
component: (resolve) => require(['@/views/entry/newyuncang'], resolve),
hidden: true
},
// 总体流程
{
path: '/process',
......
......@@ -20,6 +20,9 @@ const permission = {
return new Promise(resolve => {
// 向后端请求路由数据
getRouters().then(res => {
if(!res.data) {
res.data = [];
}
const accessedRoutes = filterAsyncRouter(res.data)
accessedRoutes.push({ path: '*', redirect: '/404', hidden: true })
commit('SET_ROUTES', accessedRoutes)
......@@ -40,7 +43,7 @@ function filterAsyncRouter(asyncRouterMap) {
route.component = Layout
}else{
route.component=LayoutChildren
}
}
} else {
route.component = loadView(route.component)
}
......
......@@ -24,13 +24,9 @@
@selection-change="handleSelectionChange">
<el-table-column label="商户ID" align="center" prop="id"/>
<el-table-column label="开户名" align="center" prop="bank_account_name"/>
<!-- <el-table-column label="城市名" align="center" prop="ProvinceCity"/>-->
<el-table-column label="银行名称" align="center" prop="bank_name"/>
<el-table-column label="开户行" align="center" prop="bank_branch_name"/>
<el-table-column label="账号" align="center" prop="bank_account_sn"/>
<!-- <el-table-column label="支付宝账户名称" align="center" prop="ZfbAccountName" />-->
<!-- <el-table-column label="支付宝账户" align="center" prop="ZfbAccount" />-->
<!-- <el-table-column label="类型" :formatter="btypa" align="center" prop="State"/>-->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
......@@ -49,36 +45,12 @@
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改商户银行卡对话框 -->
<!-- <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>-->
<!-- <el-form ref="form" :model="form" :rules="rules" label-width="80px">-->
<!-- <el-form-item label="类型">-->
<!-- <el-select @change="selectChanged" v-model="form.txType" placeholder="类型">-->
<!-- <el-option v-for="item in state" :key="item.value" :label="item.label"-->
<!-- :value="item.value"></el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- <div slot="footer" class="dialog-footer">-->
<!-- <el-button type="primary" @click="submitForm">确 定</el-button>-->
<!-- <el-button @click="cancel">取 消</el-button>-->
<!-- </div>-->
<!-- </el-dialog>-->
<el-dialog :visible.sync="bank" :title="banktitle">
<el-form ref="form" :model="form" :rules="rules" label-width="90px" size="small">
<!-- <el-row>-->
<!-- <el-col :span="16" :offset="3">-->
<!-- <el-form-item label="开户城市" prop="ProvinceCity">-->
<!-- <el-input v-model="form.ProvinceCity" placeholder="请输入城市名和商户提交时一致"/>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<el-row>
<el-col :span="16" :offset="3">
<el-form-item label="银行名称">
<el-select v-model="form.bankName" placeholder="状态" style="width: 100%">
<el-form-item label="银行名称" prop="bankName">
<el-select v-model="form.bankName" placeholder="请选择银行名称" style="width: 100%">
<el-option v-for="item in bankList" :key="item.value" :label="item.value"
:value="item.value"></el-option>
</el-select>
......@@ -117,21 +89,6 @@
</div>
</el-dialog>
<!-- <el-dialog :visible.sync="zfb" :title="banktitle">-->
<!-- <el-form ref="form" :model="form" :rules="rules2" label-width="80px">-->
<!-- <el-form-item label="支付宝账户名称" prop="ZfbAccountName">-->
<!-- <el-input v-model="form.ZfbAccountName" placeholder="请输入支付宝账户名称"/>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="支付宝账户" prop="ZfbAccount">-->
<!-- <el-input v-model="form.ZfbAccount" placeholder="请输入支付宝账户"/>-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- <div slot="footer" class="dialog-footer">-->
<!-- <el-button type="primary" @click="submitForm">确 定</el-button>-->
<!-- <el-button @click="cancel">取 消</el-button>-->
<!-- </div>-->
<!-- </el-dialog>-->
</el-card>
</div>
</template>
......@@ -183,18 +140,20 @@
},
// 表单校验
rules: {},
rules2: {
ZfbAccountName: [
{required: true, message: "支付宝账户名称不能为空", trigger: "blur"}
rules: {
bankName: [
{required: true, message: "银行名称不能为空", trigger: "change"}
],
ZfbAccount: [
{required: true, message: "支付宝账号不能为空", trigger: "blur"}
bank_branch_name: [
{required: true, message: "开户行不能为空", trigger: "blur"}
],
// zfb_account_name: [
// { required: true, message: "支付宝账户名称不能为空", trigger: "blur" }
// ],
}
bankAccountName: [
{required: true, message: "户名不能为空", trigger: "blur"}
],
BankAccountSn: [
{required: true, message: "账号不能为空", trigger: "blur"}
],
},
};
},
created() {
......
......@@ -25,7 +25,11 @@
<el-select v-model="form.bank_id" placeholder="选择到账银行卡" style="width:260px;">
<el-option v-for="item in banklist" :key="item.Id"
:label="item.bank_name ? item.bank_name : item.bank_account_name"
<<<<<<< HEAD
:value="item.id"></el-option>
=======
:value="item.id ? item.id : item.Id"></el-option>
>>>>>>> dev_hxz
</el-select>
</el-form-item>
<el-form-item label="提现金额" prop="amount">
......
<template>
<div class="goods-after-sale">
<el-form ref="goodsAfterSaleForm" :model="goodsAfterSaleForm" :rules="goodsAfterSaleRules" label-width="150px" size="small">
<el-form-item label="服务标签:" prop="stags">
<el-checkbox-group v-model="goodsAfterSaleForm.stags">
<el-checkbox v-for="item in tagOptions" :label="item.id" true-label :key="item.id" @change="serviceTagsChange(item.id)">{{item.tag}}</el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item label="邮费模板:" prop="freight_id">
<el-select v-model="goodsAfterSaleForm.freight_id" placeholder="请选择邮费模板" style="width:400px;">
<el-option v-for="item in freightOptions" :key="item.Id" :label="item.Name" :value="item.Id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="发货时效:" prop="delay_compensate">
<el-select v-model="goodsAfterSaleForm.delay_compensate" style="width:400px;" placeholder="请选择发货时效">
<el-option label="24小时" :value="24"></el-option>
<el-option label="48小时" :value="48"></el-option>
<el-option label="72小时" :value="72"></el-option>
</el-select>
</el-form-item>
<el-form-item label="售后时长:" prop="aftersale_time">
<el-select v-model="goodsAfterSaleForm.aftersale_time" style="width:400px;" placeholder="请选择售后时长">
<el-option label="7天" :value="7"></el-option>
<el-option label="15天" :value="15"></el-option>
<el-option label="30天" :value="30"></el-option>
</el-select>
</el-form-item>
<!-- <div style="width: 100%;height: 1000px;">我很高</div>-->
</el-form>
</div>
</template>
<script>
import { GetFreight } from '@/api/module/goods'
export default {
name: "goodsaftersale",
props: {
goodsaftersale: {
type: Object,
required: true
}
},
data() {
let checkStags = (rule, value, callback) => {
if (this.goodsAfterSaleForm.stags.length === 0) {
callback(new Error("请选择服务类型"));
} else {
callback();
}
};
return {
goodsAfterSaleForm: {
stags: [],
freight_id: 310,
delay_compensate: 24,
aftersale_time: 7
},
goodsAfterSaleRules: {
stags: [{required: true, validator: checkStags}],
freight_id: [{required: true, message: '请选择邮费模板', trigger: 'change'}],
delay_compensate: [{required: true, message: '请选择发货时效', trigger: 'change'}],
aftersale_time: [{required: true, message: '请选择售后时长', trigger: 'change'}]
},
tagOptions: [
{id: 2, tag: "假一赔十"},
{id: 3, tag: "7天退换"},
{id: 4, tag: "不可退还"},
{id: 5, tag: "厂家直供"},
{id: 6, tag: "售后无忧"}
],
freightOptions: []
} // return end
},
mounted() {
this.getFreightData();
},
methods: {
// 运费模板
getFreightData() {
// let query = { page: 1, limit: 50 };
GetFreight().then(res => {
if(res.data) {
this.freightOptions = res.data;
}else {
this.freightOptions = ''
}
});
},
// 服务标签,7天退换、不可退换互斥
serviceTagsChange(id) {
let index4 = this.goodsAfterSaleForm.stags.indexOf(4);
let index3 = this.goodsAfterSaleForm.stags.indexOf(3);
if(id == 3) {
if( index4 > -1) {
this.goodsAfterSaleForm.stags.splice(index4,1)
}
}
if(id == 4) {
if( index3 > -1) {
this.goodsAfterSaleForm.stags.splice(index3,1)
}
}
},
// 商品信息 子组件 form表单校验, 在父组件中被调用
validateGoodsAfterSaleForm () {
let flag = null
this.$refs['goodsAfterSaleForm'].validate(valid => {
if (valid) {
flag = true
} else {
flag = false
}
})
return flag
},
} // methods end
}
</script>
<style lang="scss" type="text/stylus" scoped>
.goods-after-sale {
padding: 15px 0px;
margin-top: 18px;
}
</style>
<template>
<div class="goods-img">
<el-form ref="goodsDeForm" :model="goodsDeForm" label-width="150px" size="small">
<el-form-item label="商品详情:" prop="description">
<span class="tip-span up-img-tip" style="display: block;line-height: 34px;">上传图片详情,用于商品详情页展示</span>
<el-upload
class="avatar-uploader2"
action="#"
name="file"
auto-upload
:show-file-list="false"
multiple
:file-list="goodsDetailsImgFileList"
><i class="el-icon-plus" />
</el-upload>
<input class="uploadImg" style="display: none;" type="file" ref="file" accept="image/*" @change="fileChange($event)" name="file" multiple id="file">
<quill-editor class="quill-editor-class" ref="myTextEditor" v-model="goodsDeForm.description" :options="editorOption" @change="onEditorChange" style="height:500px;margin-bottom:20px;"></quill-editor>
</el-form-item>
</el-form>
</div>
</template>
<script>
import {UploadImg} from '@/api/module/goods'
// 工具栏配置
const toolbarOptions = [ ['image'] ];
export default {
name: "Goodsimg",
props: {
imgdata: {
type: Object,
required: true
}
},
data() {
// let checkImg = (rule, value, callback) => {
// if (this.goodsDetailsImgFileList.length < 1) {
// callback(new Error("请上传商品详情的图片"));
// } else {
// callback();
// }
// };
return {
loading: false,
goodsDeForm: {
description: '',
},
// goodsDeRules: {
// description:[{required: true, message: '请上传商品详情图片', validator: checkImg}]
// },
goodsDetailsImgFileList: [],
editorOption: {
placeholder: '',
theme: 'snow', // or 'bubble'
modules: {
toolbar: {
container: toolbarOptions, // 工具栏
handlers: {
'image': function (value) {
if (value) {
// 触发input框选择图片文件
document.querySelector('#file').click()
} else {
this.quill.format('image', false);
}
}
}
}
}
},
index: 0,
indexall: 0,
};
},
components: {},
mounted() {
},
watch: {},
methods: {
// 通过原生 input上传 图片
fileChange() {
const list = this.$refs.file.files;
this.indexall = list.length
this.uploadImgs()
},
// 向后台 传输 base64的图片数据
uploadImgs() {
this.getBase64(this.$refs.file.files[this.index]).then((res) => {
let result = res.split(",");
this.Base64img = result[1];
let data = {"img_data": this.Base64img}
//debugger
// this.loading = true;
UploadImg(data).then(res => {
//debugger
if (res && res.code === 1) {
this.index++;
this.goodsDetailsImgFileList.push({'url': res.data.image_url});
this.$message({ message:'上传成功',type:'success'});
// 获取富文本组件实例
let quill = this.$refs.myTextEditor.quill;
let length = quill.getSelection().index;
// 插入图片 res.data.url为服务器返回的图片地址
quill.insertEmbed(length, 'image', res.data.image_url)
// 调整光标到最后
quill.setSelection(length + 1)
if(this.index < this.indexall){
this.uploadImgs()
}else{
this.index = 0
}
}else {
this.$message({ message:'上传失败,请重新上传',type:'error'});
}
this.loading = false;
})
});
},
//
onEditorChange({editor, html, text}) {
this.goodsDeForm.description = html;
},
onEditorBlur(){//失去焦点事件
},
// 商品详情 子组件 form表单校验, 在父组件中被调用
// validateGoodsDeImgForm() {
// let flag = null
// this.$refs['goodsDeForm'].validate(valid => {
// if (valid) {
// flag = true
// } else {
// flag = false
// }
// })
// return flag
// },
// -------------------------通用
// 图片转换为 base64
getBase64(file) {
return new Promise(function (resolve, reject) {
let reader = new FileReader();
let imgResult = "";
reader.readAsDataURL(file);
reader.onload = function () {
imgResult = reader.result;
};
reader.onerror = function (error) {
reject(error);
};
reader.onloadend = function () {
resolve(imgResult);
};
});
},
},
};
</script>
<style lang="scss" type="text/stylus" scoped>
.goods-img {
padding: 15px 0px;
margin-top: 18px;
}
.avatar-uploader2 {
display : none;
}
.quill-editor-class {
position: relative;
}
.up-img-tip {
position: absolute;
top: 0;
left: 60px;
}
/deep/.ql-toolbar.ql-snow {
border: none;
border-bottom: 1px solid #ccc;
padding: 5px 8px;
}
/deep/.ql-toolbar.ql-snow .ql-formats {
vertical-align : baseline;
margin: 0;
padding: 0 8px;
border: 1px solid #ccc;
border-radius: 3px;
}
/deep/.ql-toolbar.ql-snow .ql-formats:hover {
background-color : #00afff;
border-color: #00afff;
}
/* 一般提示性文字 */
.tip-span {
color: #909399;
font-size: 12px;
}
</style>
差异被折叠。
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论