Files
LSM_OIL_SITE/packageIntegral/productList/index.vue
2024-04-16 17:16:00 +08:00

599 lines
12 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<view class="container">
<cu-custom class="main-totextbar bg-main-oil" :isBack="true" bgColor="bg-main-oil">
<block slot="backText">返回</block>
<block slot="content">商品列表</block>
</cu-custom>
<view class="options-frame">
<view v-for="item,index in optionsList" :key="index" :class="index == currentIndex ? 'active':''"
@click="selectOptions(index)">{{item.text}}<text>({{item.count}})</text></view>
</view>
<view class="search">
<uni-easyinput prefixIcon="search" borderColor="#DCDFE6" v-model="paramter.params.productName"
placeholder="请输入商品名称" @confirm="search" @clear="search" />
</view>
<scroll-view v-if="dataList.length" class="list" :scroll-y="true" @scrolltolower="lower">
<view class="item" v-for="item,index in dataList" :key="index">
<view class="header">
<view class="identifying" :style="{background:identifying[item.productStatus].background,
opacity:identifying[item.productStatus].opacity}">{{item.productStatus =='1'?'已上架':'未上架'}}</view>
</view>
<view class="introduce">
<image :src="item.url"></image>
<view>{{item.productName}}</view>
<view>规格默认</view>
<view>库存{{item.totalStock}}</view>
</view>
<view class="examine" @click="examineDetail(item)"
:style="{background:statusEnum[item.auditStatus].color}">{{statusEnum[item.auditStatus].value}}
</view>
<view class="footer">
<view class="button" @click="orderDelete(item)">删除</view>
<view class="button" @click="toEditOrder(item)">编辑</view>
<view class="button" @click="upDownFrame(item)">{{item.productStatus =='1'?'下架':'上架'}}</view>
</view>
</view>
<view style="height: 30rpx; background: #fff;"></view>
</scroll-view>
<view v-else class="empty">
<image src="https://publicxingyou.oss-cn-hangzhou.aliyuncs.com/mp-oil/yunsite-empty.png"></image>
<view>还没有订单哦~</view>
</view>
<uni-popup ref="detail">
<view class="determine-detail">
<view class="title">审核详情</view>
<uni-icons @click="$refs.detail.close()" color="#666666" type="closeempty" size="28"></uni-icons>
<view class="item" v-for="(item,index) in examineDetailList" :key="index">
<view>
<view class="header">审核时间</view>
<view>{{item.createTime}}</view>
</view>
<view class="status">
<view class="header">审核结果</view>
<view>{{statusEnum[item.auditStatus].value}}</view>
</view>
<view>
<view class="header">反馈详情</view>
<view>{{item.remark}}</view>
</view>
</view>
<view class="buttons">
<view @click="$refs.detail.close()">关闭</view>
</view>
</view>
</uni-popup>
<uni-popup ref="delete">
<view class="determine-frame">
<view class="title">是否删除该商品</view>
<view class="buttons">
<view @click="$refs.delete.close()">取消</view>
<view @click="deleteIntegral">确认</view>
</view>
</view>
</uni-popup>
<uni-popup ref="popup">
<view class="determine-frame">
<view class="title">是否{{productData.productStatus =='1'?'下架':'上架'}}该商品</view>
<view class="buttons">
<view @click="$refs.popup.close()">取消</view>
<view @click="submitProduct">确认</view>
</view>
</view>
</uni-popup>
</view>
</template>
<script>
import serve from '@/api/packageIntegral/productList.js'
export default {
options: {
styleIsolation: 'shared'
},
data() {
return {
currentIndex: 0,
code: '',
controlWindows: {
code: false
},
paramter: {
currentPage: 1,
pagesize: 20,
params: {},
},
dataList: [],
optionsList: [{
text: '全部',
count: 0,
value: ''
}, {
text: '已上架',
count: 0,
value: ''
}, {
text: '未上架',
count: 0,
value: ''
}, {
text: '待审核',
count: 0,
value: ''
}],
identifying: {
1: {
background: '#F83D3D',
opacity: 1,
value: "已上架"
},
2: {
background: '#F83D3D',
opacity: 0.5,
value: "待上架"
}
},
statusEnum: {
1: {
color: '#8D38FC',
value: "待审核"
},
2: {
color: '#FCB438',
value: "已审核"
},
3: {
color: '#F83D3D',
value: "已驳回"
},
},
examineDetailList: [],
productData: {}
}
},
onLoad() {
this.productByPage()
this.getTopInfo()
},
methods: {
selectOptions(index) {
this.currentIndex = index
this.paramter.currentPage = 1
if (index == 0) {
this.paramter.params = {}
} else if (index == 1) {
this.paramter.params = {}
this.paramter.params.productStatus = 1
} else if (index == 2) {
this.paramter.params = {}
this.paramter.params.productStatus = 2
} else if (index == 3) {
this.paramter.params = {}
this.paramter.params.auditStatus = 1
}
this.productByPage()
},
handler(json) {
json = json.replace(/'/g, '"')
let res = JSON.parse(json)
let values = Object.values(res)
let text = values.reduce((prev, item, index) => {
let _text = `${index == 0 ? '' :','}${item}`
return prev += _text
}, '')
return text
},
// toDetails(item) {
// uni.navigateTo({
// url: `../orderDetails/index?orderId=${item.id}`
// })
// },
getTopInfo() {
serve.getTopInfo(this.paramter).then(res => {
if (res.code === 20000) {
this.optionsList[0].count = res.data.count
this.optionsList[1].count = res.data.availableCount
this.optionsList[2].count = res.data.noAvailableCount
this.optionsList[3].count = res.data.auditCount
}
})
},
search() {
this.paramter.currentPage = 1
this.productByPage()
this.getTopInfo()
},
productByPage() {
serve.productByPage(this.paramter).then(res => {
if (res.code === 20000) {
if (!res.data.list.length&&this.paramter.currentPage!=1) {
uni.showToast({
title: '没有更多订单啦~',
icon: 'none'
})
return
}
if (this.paramter.currentPage == 1) {
this.dataList = []
}
this.dataList = this.dataList.concat(res.data.list)
}
})
},
lower() {
this.paramter.currentPage += 1
this.productByPage()
},
examineDetail(item) {
serve.productAuditHistory({
id: item.id
}).then(res => {
this.examineDetailList = res.data
})
this.$refs.detail.open('center')
},
orderDelete(item) {
this.$refs.delete.open('center')
this.deleteData = item
},
deleteIntegral(){
serve.deleteProductById({id:this.deleteData.id}).then(res=>{
uni.showToast({
title: res.msg,
icon: 'none'
})
this.$refs.delete.close()
this.search()
})
},
toEditOrder(item) {
uni.navigateTo({
url: `../productUpdate/index?id=${item.id}`
})
},
upDownFrame(item) {
this.productData = item
this.$refs.popup.open('center')
},
submitProduct() {
let data = {}
data.id = this.productData.id
if (this.productData.productStatus == 1) {
data.productStatus = 2
} else if (this.productData.productStatus == 2) {
data.productStatus = 1
}
serve.productStatus(data).then(res => {
uni.showToast({
title: res.msg,
icon: 'none'
})
if (res.code !== 20000) return
this.$refs.popup.close()
this.productByPage()
this.getTopInfo()
})
},
confirm() {
this.controlWindows.code = false
}
}
}
</script>
<style lang="scss" scoped>
/deep/ .uni-easyinput__content {
background: #F7F7F7 !important;
}
.container {
height: 100vh;
display: flex;
flex-direction: column;
background: #fff;
>.search {
margin: 50rpx auto 0;
width: 689rpx;
height: 74rpx;
background: #FFF;
}
>.options-frame {
display: flex;
justify-content: space-between;
margin-top: 43rpx;
padding: 0 31rpx;
>view {
width: 144rpx;
height: 66rpx;
font-size: 25rpx;
line-height: 66rpx;
text-align: center;
color: #000000;
background: #F7F7F7;
>text {
color: #F83D3D;
}
&.active {
color: #FFF;
background: #F83D3D;
>text {
color: #fff;
}
}
}
}
>.list {
margin-top: 35rpx;
flex: 1;
overflow-y: hidden;
.item {
position: relative;
margin-top: 20rpx;
background: #fff;
// min-height: 106rpx;
// border-bottom: 12rpx solid #F1F2F7;
&:nth-of-type(1) {
margin-top: 0
}
.header {
// padding: 26rpx 23rpx 0;
height: 60rpx;
// line-height: 83rpx;
width: 100%;
font-size: 30rpx;
color: #666;
border-top: 1rpx solid #D7D7D7;
.identifying {
width: 120rpx;
height: 60rpx;
line-height: 60rpx;
// background-color: #F83D3D;
color: #FFF;
text-align: center;
border-bottom-right-radius: 30rpx;
}
}
.introduce {
position: relative;
padding: 24rpx 29rpx 31rpx 268rpx;
min-height: 220rpx;
>image {
position: absolute;
top: 13rpx;
left: 34rpx;
width: 220rpx;
height: 220rpx;
// border: 1px solid #333;
}
>view {
&:nth-of-type(1) {
font-size: 28rpx;
color: #000;
}
&:nth-of-type(2),
&:nth-of-type(3) {
margin-top: 11rpx;
font-size: 24rpx;
color: #999;
}
&:nth-of-type(3) {
margin-top: 18rpx;
}
&:nth-of-type(4) {
margin-top: 11rpx;
font-size: 28rpx;
color: #F83D3D;
}
}
}
.examine {
width: 120rpx;
height: 45rpx;
color: #FFF;
text-align: center;
line-height: 45rpx;
position: absolute;
right: 50rpx;
top: 180rpx;
}
>.footer {
position: relative;
height: 58rpx;
line-height: 58rpx;
padding: 0 34rpx 40rpx;
font-size: 32rpx;
color: #000;
font-weight: 550;
.button {
position: absolute;
top: 0;
width: 128rpx;
height: 58rpx;
line-height: 58rpx;
text-align: center;
font-size: 28rpx;
color: #999;
background: #FFF;
border: 1px solid #999;
border-radius: 10rpx;
}
>.button {
&:nth-of-type(1) {
right: 360rpx;
}
&:nth-of-type(2) {
right: 200rpx;
}
&:nth-of-type(3) {
right: 40rpx;
}
}
}
}
}
.determine-detail {
padding: 30rpx 0;
width: 681rpx;
background: #FFFFFF;
border-radius: 15rpx;
position: relative;
>.title {
text-align: center;
font-size: 38rpx;
color: #000;
margin-bottom: 20rpx;
}
>uni-icons {
position: absolute;
top: 30rpx;
right: 30rpx;
}
>.item {
display: flex;
justify-content: space-evenly;
overflow-y: hidden;
font-size: 22rpx;
color: #666;
padding: 10rpx;
view {
width: 240rpx;
line-height: 46rpx;
}
>.status {
width: 160rpx;
>view {
width: 160rpx;
}
}
.header {
font-size: 32rpx;
color: #000;
}
}
>.buttons {
display: flex;
justify-content: space-evenly;
margin-top: 50rpx;
>view {
width: 550rpx;
height: 76rpx;
text-align: center;
line-height: 76rpx;
border-radius: 10rpx;
font-size: 28rpx;
background: #FE0505;
color: #fff;
}
}
}
.determine-frame {
padding-top: 85rpx;
width: 681rpx;
height: 340rpx;
background: #FFFFFF;
border-radius: 15rpx;
>.title {
text-align: center;
font-size: 38rpx;
color: #000;
}
>.buttons {
display: flex;
justify-content: space-evenly;
margin-top: 80rpx;
>view {
width: 250rpx;
height: 76rpx;
text-align: center;
line-height: 76rpx;
border-radius: 10rpx;
font-size: 28rpx;
&:nth-of-type(1) {
background: #FFFFFF;
border: 1rpx solid #B6B6B6;
color: #333;
}
&:nth-of-type(2) {
background: #FE0505;
color: #fff;
}
}
}
}
>.empty {
margin: 218rpx auto 0;
>image {
width: 473rpx;
height: 404rpx;
}
>view {
margin-top: 45rpx;
text-align: center;
font-size: 28rpx;
color: #999;
}
}
}
</style>