177 lines
4.3 KiB
Vue
177 lines
4.3 KiB
Vue
|
|
<template>
|
|||
|
|
<view class="main">
|
|||
|
|
<view class="list">
|
|||
|
|
<view class="list-item">
|
|||
|
|
<text class="label">分类排序:</text>
|
|||
|
|
<uni-number-box :min="0" :value="infor.thisSort" @change="numberChange"></uni-number-box>
|
|||
|
|
</view>
|
|||
|
|
<view class="list-item">
|
|||
|
|
<text class="label">分类名称:</text>
|
|||
|
|
<input type="text" placeholder="请输入分类名称" v-model="infor.name" class="input"/>
|
|||
|
|
</view>
|
|||
|
|
<view class="list-item">
|
|||
|
|
<text class="label">分类状态:</text>
|
|||
|
|
<picker mode="selector" range-key="name" class="flex-grow" @change="bindPickerChange" :value="pickerIndex" :range="pickerArr">
|
|||
|
|
<view class="uni-input">{{pickerArr[pickerIndex].name}}</view>
|
|||
|
|
</picker>
|
|||
|
|
</view>
|
|||
|
|
<view class="list-item bor-no cell">
|
|||
|
|
<text class="name">分类描述:</text>
|
|||
|
|
<textarea type="text" placeholder="请输入您的分类描述(100字以内)" :maxlength="100" v-model="infor.details" class="flex-grow textarea"/>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<view class="grid flex flex-between" @click="uploadImg()">
|
|||
|
|
<text>分类图片:</text>
|
|||
|
|
<view class="flex flex-center box">
|
|||
|
|
<text class="iconfont font60" v-if="!classImg"></text>
|
|||
|
|
<image :src="classImg" mode="" class="image" v-else></image>
|
|||
|
|
<!-- <text class="iconfont color-red del" v-if="classImg" @tap.stop="onDel()"></text> -->
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<button type="primary" class="bg-base btn" :loading="loading" :disabled="loading" @click="commit()">确定</button>
|
|||
|
|
|
|||
|
|
<avatar @upload="myUpload" ref="avatar"></avatar>
|
|||
|
|
</view>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script>
|
|||
|
|
import url from "@/common/http/url.js"
|
|||
|
|
import upload from "@/common/http/upload.js"
|
|||
|
|
import avatar from "@/components/yq-avatar/yq-avatar.vue";
|
|||
|
|
import uniNumberBox from "@/components/uni-number-box/uni-number-box.vue"
|
|||
|
|
export default{
|
|||
|
|
components: { avatar, uniNumberBox },
|
|||
|
|
data(){
|
|||
|
|
return {
|
|||
|
|
loading: false,
|
|||
|
|
isEdit: false,
|
|||
|
|
classImg: "",
|
|||
|
|
infor: {},
|
|||
|
|
pickerArr: [
|
|||
|
|
{name: "正常", value: 1},
|
|||
|
|
{name: "隐藏", value: 2}
|
|||
|
|
],
|
|||
|
|
pickerIndex: 0,
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
onLoad(opt){
|
|||
|
|
if (opt.isEdit) {
|
|||
|
|
this.isEdit = true
|
|||
|
|
uni.setNavigationBarTitle({
|
|||
|
|
title: "编辑分类"
|
|||
|
|
})
|
|||
|
|
let detail = uni.getStorageSync("classDetail")
|
|||
|
|
uni.removeStorageSync("classDetail")
|
|||
|
|
this.infor = detail
|
|||
|
|
console.log(this.infor)
|
|||
|
|
delete this.infor.resourcesList
|
|||
|
|
this.pickerIndex = detail.status - 1
|
|||
|
|
this.classImg = detail.mainImage
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
methods: {
|
|||
|
|
commit(){
|
|||
|
|
this.loading = true
|
|||
|
|
let path = url.store.addCategory
|
|||
|
|
if (this.isEdit) path = url.store.updateCategory
|
|||
|
|
this.$http("POST", path, this.infor).then(res=>{
|
|||
|
|
this.$msg(res.data)
|
|||
|
|
this.$navigateBack(1, 500)
|
|||
|
|
}).catch(()=>{
|
|||
|
|
this.loading = false
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
uploadImg(){
|
|||
|
|
upload.showAvatarModal(this, 500, 500)
|
|||
|
|
},
|
|||
|
|
myUpload(rsp){
|
|||
|
|
this.classImg = rsp.path
|
|||
|
|
upload.getOssSignature(rsp.path, 12, 1).then(data=>{
|
|||
|
|
upload.uploadImageOss(data).then(list=>{
|
|||
|
|
this.infor.mainImage = JSON.stringify({
|
|||
|
|
resourceTemporaryUUID: list[0].resourceTemporaryUUID
|
|||
|
|
})
|
|||
|
|
})
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
bindPickerChange(e){
|
|||
|
|
this.infor.status = this.pickerArr[e.detail.value].value
|
|||
|
|
},
|
|||
|
|
numberChange(e){
|
|||
|
|
this.infor.thisSort = e
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style scoped lang="scss">
|
|||
|
|
.main{
|
|||
|
|
padding: 20rpx;
|
|||
|
|
.list{
|
|||
|
|
border-radius: 10rpx;
|
|||
|
|
background-color: white;
|
|||
|
|
padding: 0 30rpx;
|
|||
|
|
margin-bottom: 10rpx;
|
|||
|
|
&-item{
|
|||
|
|
display: flex;
|
|||
|
|
align-items: center;
|
|||
|
|
height: 120rpx;
|
|||
|
|
border-bottom: 2rpx solid #f5f3f7;
|
|||
|
|
color: #555;
|
|||
|
|
font-size: 36rpx;
|
|||
|
|
.input{
|
|||
|
|
font-size: 36rpx;
|
|||
|
|
}
|
|||
|
|
.icon{
|
|||
|
|
font-size: 44rpx;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
.cell{
|
|||
|
|
height: auto;
|
|||
|
|
flex-direction: column;
|
|||
|
|
align-items: flex-start;
|
|||
|
|
padding: 30rpx 0;
|
|||
|
|
.textarea{
|
|||
|
|
height: 200rpx;
|
|||
|
|
width: 100%;
|
|||
|
|
margin-top: 20rpx;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.grid{
|
|||
|
|
padding: 20rpx 30rpx;
|
|||
|
|
font-size: 36rpx;
|
|||
|
|
color: #555;
|
|||
|
|
background-color: white;
|
|||
|
|
border-radius: 10rpx;
|
|||
|
|
margin-bottom: 10rpx;
|
|||
|
|
.box{
|
|||
|
|
width: 250rpx;
|
|||
|
|
height: 250rpx;
|
|||
|
|
border: 2rpx solid #EEEEEE;
|
|||
|
|
border-radius: 14rpx;
|
|||
|
|
position: relative;
|
|||
|
|
.img{
|
|||
|
|
width: 187rpx;
|
|||
|
|
height: 187rpx;
|
|||
|
|
}
|
|||
|
|
.image{
|
|||
|
|
width: 100%;
|
|||
|
|
height: 100%;
|
|||
|
|
}
|
|||
|
|
.del{
|
|||
|
|
position: absolute;
|
|||
|
|
top: -20rpx;
|
|||
|
|
right: -20rpx;
|
|||
|
|
font-size: 40rpx;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
.btn{
|
|||
|
|
margin: 50rpx 0;
|
|||
|
|
border-radius: 50rpx;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</style>
|