调整企业基础信息数据格式增加商品权证管理发型模块

This commit is contained in:
唐明明
2021-09-06 17:28:06 +08:00
parent 291c97eabc
commit f472df0cfa
17 changed files with 3242 additions and 1043 deletions

View File

@@ -48,13 +48,15 @@
</view>
</view>
<view class="mian">
<view class="mian-title">适用权证</view>
<view class="mian-goods">
<view class="item" v-for="(item, index) in details.goods" :key="index">
<view class="item-title nowrap">{{item.name}}</view>
<view class="item-price nowrap">{{item.price}}</view>
<block v-if="details.goods.length > 0">
<view class="mian-title">适用权证</view>
<view class="mian-goods">
<view class="item" v-for="(item, index) in details.goods" :key="index">
<view class="item-title nowrap">{{item.name}}</view>
<view class="item-price nowrap">{{item.price}}</view>
</view>
</view>
</view>
</block>
<view class="mian-title">使用说明</view>
<view class="mian-text">
<text>{{details.description || '-'}}</text>
@@ -83,7 +85,7 @@
};
},
onShow() {
magCouponsInfo(16).then(res => {
magCouponsInfo(this.$Route.query.couponId).then(res => {
this.isLoding = false
this.details = res
})

View File

@@ -6,25 +6,33 @@
<view class="item" :class="{'show': listType == '2'}" @click="onTabs('2')">代金券</view>
<view class="item" :class="{'show': listType == '3'}" @click="onTabs('3')">提货券</view>
</view>
<view class="coupons">
<view class="coupons-flex" v-for="(item, index) in coupons" :key="index">
<view class="item cover">
<image class="cover-img" :src="item.cover" mode="aspectFill" />
</view>
<view class="item mian">
<view class="title nowrap">{{item.title}}</view>
<view class="time nowrap">{{item.start_at}}{{item.end_at}}</view>
<view class="tags nowrap">
<text>{{item.status.text}}</text>
<text>{{item.type.text}}</text>
<text>{{item.channel.text}}</text>
<block v-if="coupons.length > 0">
<view class="coupons">
<view class="coupons-flex" v-for="(item, index) in coupons" :key="index" @click="$Router.push({name: 'magDetails', params: {couponId: item.coupon_id}})">
<view class="item cover">
<image class="cover-img" :src="item.cover" mode="aspectFill" />
</view>
<view class="item mian">
<view class="title nowrap">{{item.title}}</view>
<view class="time nowrap">{{item.start_at}}{{item.end_at}}</view>
<view class="tags nowrap">
<text>{{item.status.text}}</text>
<text>{{item.type.text}}</text>
<text>{{item.channel.text}}</text>
</view>
</view>
<view class="arrowright">
<uni-icons type="arrowright" size="16" color="#999"></uni-icons>
</view>
</view>
<view class="arrowright">
<uni-icons type="arrowright" size="16" color="#999"></uni-icons>
</view>
</view>
</view>
</block>
<block v-else>
<view class="list-null">
<image class="icon" src="@/static/icons/approve-icon.png" mode="widthFix"></image>
<view class="sub-title">暂无相关优惠券</view>
</view>
</block>
</view>
</template>
@@ -44,6 +52,7 @@
methods:{
// 选择类型
onTabs(value){
if(value == this.listType) return
this.listType = value
this.getCoupons()
},
@@ -91,6 +100,23 @@
}
}
}
// 空提示
.list-null{
width: 100vw;
height: 100vh;
padding-bottom: 20vh;
box-sizing: border-box;
background: white;
text-align: center;
@extend .vertical;
.sub-title{
color: $text-gray;
font-size: $title-size-m;
}
.icon{
width: 288rpx;
}
}
// 订单管理
.coupons{
padding-top: 90rpx;

View File

@@ -76,7 +76,7 @@
if(val.isSelect) selectArr.push(val.goods_sku_id)
}
this.selectGoods = selectArr
if(selectArr.length == this.goods.length) this.allSelect = true
if(selectArr.length == this.goods.length && this.goods.length != 0) this.allSelect = true
else this.allSelect = false
},
// 添加设置产品

View File

@@ -40,14 +40,20 @@
</template>
<script>
export default {
data() {
return {};
},
onNavigationBarButtonTap() {
this.$Router.push({name: 'addEmployees'})
}
};
import { employees } from '@/apis/interfaces/employees'
export default {
data() {
return {};
},
onShow(){
employees().then(res => {
console.log(res)
})
},
onNavigationBarButtonTap() {
this.$Router.push({name: 'addEmployees'})
}
};
</script>
<style lang="scss" scoped>

View File

@@ -1,19 +1,274 @@
<template>
<view>
添加权证
</view>
</template>
<script>
export default {
data() {
<template>
<view class="content">
<!-- 商品图片 -->
<view class="form-block">
<view class="form-upd">
<view class="form-title">商品轮播图<text>首图为产品封面</text></view>
<view class="form-imgs">
<view class="item" v-for="(item, index) in cover" :key="index">
<image class="item-cover" src="@/static/dev/good_cover_00.jpg" mode="aspectFill"></image>
</view>
<view class="item item-add">
<image class="item-cover" src="@/static/icons/add-icon.png" mode="aspectFill"></image>
</view>
</view>
</view>
</view>
<!-- 商品基本信息 -->
<view class="form-block">
<view class="form-box inputs-flex">
<label class="form-label">标题</label>
<input type="text" v-model="name" placeholder="输入商品标题"/>
</view>
<view class="form-box inputs-flex">
<label class="form-label">商品描述</label>
<input type="text" v-model="description" placeholder="输入商品描述"/>
</view>
<view class="form-box picker-flex">
<label class="form-label">产品详情</label>
<view class="picker-text">
<uni-icons class="picker-icon" type="arrowright" color="#999"></uni-icons>
</view>
</view>
</view>
<!-- 商品价格 -->
<view class="form-block">
<view class="form-box inputs-flex input-unit">
<label class="form-label">划线价</label>
<input type="digit" v-model="original_price" placeholder="0.00"/>
<text class="units">/</text>
</view>
<view class="form-box inputs-flex input-unit">
<label class="form-label">市场价格</label>
<input type="digit" v-model="skus_cost" placeholder="0.00"/>
<text class="units">/</text>
</view>
<view class="form-box inputs-flex input-unit">
<label class="form-label">销售价格</label>
<input type="digit" v-model="skus_price" placeholder="0.00"/>
<text class="units">/</text>
</view>
<view class="form-box inputs-flex input-unit">
<label class="form-label">资产</label>
<input type="digit" v-model="skus_assets" placeholder="0.00"/>
<text class="units">/</text>
</view>
<view class="form-box inputs-flex input-unit">
<label class="form-label">分销佣金</label>
<input type="digit" v-model="skus_charge" placeholder="0.00"/>
<text class="units">/</text>
</view>
</view>
<!-- 商品详情介绍 -->
<view class="form-block">
<view class="form-box inputs-flex">
<label class="form-label">易货起购数量</label>
<input type="number" v-model="skus_number" placeholder="输入易货起购数量"/>
</view>
<view class="form-box inputs-flex">
<label class="form-label">商品库存</label>
<input type="number" v-model="skus_stock" placeholder="输入商品库存"/>
</view>
</view>
<!-- 售后服务 -->
<view class="form-block">
<view class="form-box picker-flex">
<label class="form-label">分类</label>
<picker mode="selector">
<view class="picker-text">
请选择分类
<uni-icons class="picker-icon" type="arrowright" color="#999"></uni-icons>
</view>
</picker>
</view>
<view class="form-box picker-flex">
<label class="form-label">支付方式</label>
<picker mode="selector">
<view class="picker-text">
请选择支付方式
<uni-icons class="picker-icon" type="arrowright" color="#999"></uni-icons>
</view>
</picker>
</view>
<view class="form-box picker-flex">
<label class="form-label">允许售后</label>
<picker mode="selector">
<view class="picker-text">
<uni-icons class="picker-icon" type="arrowright" color="#999"></uni-icons>
</view>
</picker>
</view>
<view class="form-box picker-flex">
<label class="form-label">可选服务</label>
<view class="picker-text">
<uni-icons class="picker-icon" type="arrowright" color="#999"></uni-icons>
</view>
</view>
</view>
<!-- 安全区 -->
<view class="ios-bottom"></view>
<!-- footer -->
<view class="footer">
<button class="footer-btn" type="default">发布</button>
<view class="ios-bottom"></view>
</view>
</view>
</template>
<script>
import { managesGoodsCreate } from '@/apis/interfaces/goods'
import { uploads } from '@/apis/interfaces/uploading'
export default {
data() {
return {
};
cover : [],
name : '',
description : '',
original_price : '',
skus_cost : '',
skus_price : '',
skus_assets : '',
skus_charge : '',
skus_number : '',
skus_stock : ''
};
},
methods: {
}
}
</script>
<style lang="scss" scoped>
.content{
padding-bottom: 150rpx;
}
// 表单
.form-block{
background: white;
margin-top: $margin - 10;
.form-box{
position: relative;
padding-left: 240rpx;
padding-right: $padding;
font-size: $title-size-lg;
min-height: 80rpx;
&::after{
position: absolute;
bottom: 0;
left: $margin;
right: 0;
height: 1rpx;
content: " ";
background: $border-color;
}
&:last-child::after{
display: none;
}
.form-label{
position: absolute;
left: $margin;
line-height: 80rpx;
top: 0;
width: calc(240rpx - #{$margin});
}
}
.inputs-flex{
input{
height: 80rpx;
line-height: 80rpx;
}
}
.input-unit{
padding-right: 200rpx;
.units{
position: absolute;
right: 0;
top: 0;
line-height: 80rpx;
height: 80rpx;
width: 200rpx;
padding-right: $padding;
text-align: right;
box-sizing: border-box;
}
}
.picker-flex{
.picker-text{
position: relative;
line-height: 80rpx;
min-height: 80rpx;
padding-right: 80rpx;
@extend .nowrap;
.picker-icon{
right: 0;
position: absolute;
}
}
}
.form-upd{
.form-title{
font-size: $title-size-lg;
line-height: 80rpx;
padding: 0 $padding;
text{
font-size: 80%;
color: $text-gray;
}
}
.form-imgs{
margin-top: -($margin/3);
padding: 0 20rpx 20rpx;
display: flex;
flex-wrap: wrap;
.item{
width: calc(20% - 14rpx);
padding-top: calc(20% - 14rpx);
margin: 7rpx;
position: relative;
.item-cover{
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
}
.item-add{
border: dashed 2rpx $border-color;
box-sizing: border-box;
.item-cover{
top: calc(15% - 2rpx);
left: calc(15% - 2rpx);
width: 70%;
height: 70%;
}
}
}
}
}
</script>
<style lang="scss">
</style>
// 发布
.footer{
background: white;
position: fixed;
bottom: 0;
left: 0;
right: 0;
padding: 20rpx $padding;
box-shadow: 0 0 4rpx 4rpx rgba($color: #000000, $alpha: .02);
z-index: 99;
.footer-btn{
border: none;
border-radius: 0;
background: $text-price;
height: 90rpx;
line-height: 90rpx;
font-weight: bold;
font-size: $title-size;
color: white;
&::after{
border: none;
}
}
}
</style>

View File

@@ -1,22 +1,113 @@
<template>
<view>
权证管理
</view>
</template>
<template>
<view class="content">
<!-- 分类 -->
<view class="tabs">
<view class="item" :class="{'show': status == '1'}" @click="onTabs('1')">已上架</view>
<view class="item" :class="{'show': status == '3'}" @click="onTabs('3')">已下架</view>
<view class="item" :class="{'show': status == '0'}" @click="onTabs('0')">审核中</view>
<view class="item" :class="{'show': status == '2'}" @click="onTabs('2')">已驳回</view>
</view>
<!-- 优选商品 -->
<goodsList :list="goods" priceType="CNY" :status='status' toast="暂无产品权证">
<template v-slot:statistics="goods">
<view>库存{{goods.value.stock}}</view>
</template>
<template v-slot:footer="goods">
<view class="footer-btns">
<button class="button-item" size="mini">销毁</button>
<button class="button-item" size="mini">下架</button>
</view>
</template>
</goodsList>
</view>
</template>
<script>
export default {
data() {
import { managesGoodsIndex } from '@/apis/interfaces/goods'
import goodsList from '@/components/goods-list/goods-list'
export default {
components: {
goodsList
},
data() {
return {
};
status : 1,
goods : [],
pages : {}
};
},
onShow() {
this.getList()
},
methods: {
// tabs
onTabs(value){
if(value == this.status) return
this.status = value
this.getList()
},
// 权证列表
getList(){
managesGoodsIndex({
status: this.status
}).then(res => {
this.goods = res.data
this.pages = res.page
console.log(res)
})
}
},
mounted() {
onNavigationBarButtonTap() {
this.$Router.push({name: 'GoodsMagAdd'})
}
}
</script>
<style lang="scss" scoped>
.content{
padding-top: 90rpx;
}
// tabs
.tabs{
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 99;
display: flex;
justify-content: space-around;
background: white;
padding: 15rpx 0;
font-size: $title-size-lg;
color: $text-gray;
.item{
height: 60rpx;
line-height: 60rpx;
&.show{
color: $text-price;
border-bottom: solid 4rpx $text-price;
}
}
}
</script>
<style lang="scss">
// 按钮组
.footer-btns{
display: flex;
justify-content: space-between;
padding-top: $padding/2;
margin-left: -10rpx;
margin-right: -10rpx;
.button-item[size='mini']{
padding: 0;
margin: 0 10rpx;
height: 60rpx;
line-height: 60rpx;
border-radius: 0;
width: calc(50% - 20rpx);
background: $border-color-lg;
color: $text-gray;
&::after{
border: none;
}
}
}
</style>

View File

@@ -33,12 +33,19 @@
<view class="module-imgs">
<view
class="item"
v-for="(item, index) in module.content.image.showpath"
v-for="(item, index) in module.content.image"
:key="index"
@click="openImg(module.content.image.showpath, index)"
@longpress="removeImg('imgs', moduleIndex, index)"
>
<image class="cover" :src="item" mode="aspectFill"></image>
<image
class="cover"
:src="item.showpath"
mode="aspectFill"
@click="openImg(module.content.image, index, 'imgs')"
@longpress="removeImg('imgs', moduleIndex, index)"
/>
<view class="item-input">
<input type="text" v-model="item.title" placeholder="输入标题" />
</view>
</view>
<view class="item" @click="updImgs(moduleIndex)">
<view class="item-upd cover">
@@ -56,18 +63,21 @@
</view>
<view class="module-videos">
<view class="item">
<image
class="cover"
v-if="module.content.video_image.showpath != ''"
:src="module.content.video_image.showpath"
mode="aspectFill"
@click="openImg([module.content.video_image.showpath], 0)"
@longpress="removeImg('videoCover', moduleIndex, '')"
/>
<view class="item-upd" @click="updImg('videoCover', moduleIndex)" v-else>
<uni-icons type="plus" size="20" color="#999"/>
<view>上传视频封面</view>
</view>
<block v-if="module.content.video_image.showpath != ''">
<image
class="cover"
:src="module.content.video_image.showpath"
mode="aspectFill"
@click="openImg([module.content.video_image.showpath], 0, 'videos')"
@longpress="removeImg('videoCover', moduleIndex, '')"
/>
</block>
<block v-else>
<view class="item-upd" @click="updImg('videoCover', moduleIndex)">
<uni-icons type="plus" size="20" color="#999"/>
<view>上传视频封面</view>
</view>
</block>
</view>
<view class="item">
<video
@@ -106,6 +116,8 @@
},
created() {
Promise.all([basicsInfo('GET', {}), basicsConfig()]).then(res => {
console.log(res)
let info = res[0]
this.logo = info.base.cover
this.description = info.base.description
@@ -114,18 +126,19 @@
this.modulesType = res[1]
}).catch(err => {
uni.showToast({
title: err,
title: err.message,
icon : 'none'
})
})
},
methods:{
// 图片预览
openImg(paths, index){
console.log(paths)
console.log(index)
openImg(paths, index, type){
if(type === 'imgs'){
paths = paths.map(val => {
return val.showpath
})
}
uni.previewImage({
urls : paths,
current : index,
@@ -140,8 +153,7 @@
modulesObj.content.video_image.path = ''
}
if(type === 'imgs'){
modulesObj.content.image.showpath.splice(index, 1)
modulesObj.content.image.path.splice(index, 1)
modulesObj.content.image.splice(index, 1)
}
if(type === 'video'){
modulesObj.content.video_url.showpath = ''
@@ -224,11 +236,16 @@
}
})
uploads(path).then(pathRes => {
let modulesObj = this.modules[index]
modulesObj.content.image.showpath = [...modulesObj.content.image.showpath, ...pathRes.url]
modulesObj.content.image.path = [...modulesObj.content.image.path, ...pathRes.path]
let modulesObj = this.modules[index],
paths = []
for(let i in pathRes.path){
paths.push({
showpath: pathRes.url[i],
path : pathRes.path[i],
title : ''
})
}
modulesObj.content.image = [...modulesObj.content.image, ...paths]
this.$set(this.modules, index, modulesObj)
}).catch(err => {
uni.showToast({
@@ -257,10 +274,11 @@
break
case 2:
content = {
image: {
showpath: [],
path : []
}
image: [{
showpath: '',
path : '',
title : ''
}]
}
break
case 3:
@@ -442,6 +460,21 @@
top: 0;
left: 0;
}
.item-input{
position: absolute;
bottom: 0;
left: 0;
right: 0;
background: rgba($color: #000000, $alpha: .7);
input{
height: 50rpx;
line-height: 50rpx;
font-size: 28rpx;
text-align: center;
z-index: 4;
color: white;
}
}
.item-upd{
@extend .vertical;
text-align: center;