From d1bb68d9f9054bbf87cd84956d3240c71d8e370c Mon Sep 17 00:00:00 2001 From: xuxy <1059738716@qq.com> Date: 星期二, 25 六月 2024 16:55:44 +0800 Subject: [PATCH] update 商品管理和花农的 --- pages/farmer/flower-manage/flower-add.vue | 306 ++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 220 insertions(+), 86 deletions(-) diff --git a/pages/farmer/flower-manage/flower-add.vue b/pages/farmer/flower-manage/flower-add.vue index 421428e..0fe2353 100644 --- a/pages/farmer/flower-manage/flower-add.vue +++ b/pages/farmer/flower-manage/flower-add.vue @@ -1,12 +1,10 @@ <template> - <view class="container-page"> + <view class="container-page" style="padding: 0rpx;"> <view> <view class="form-item"> - <view class="label required">商品分类</view> + <view class="label required">商品分类todo</view> <view class="m-l-a m-r-0 flex " :class="[!dto.category?'desc-gray':'']" @click="()=>{ - if(!id){ - show_select_category=true - } + show_select_category=true }"> <view>{{dto.categoryStr||dto.category || '请选择'}}</view> <u-icon class="m-l-a" name="arrow-right"></u-icon> @@ -14,59 +12,75 @@ </view> <view class="form-item before-line"> + <view class="label required">商品名称</view> + <view class="m-l-a m-r-0 flex"> + <input v-model="dto.name" placeholder="请输入商品名称" style="margin-top: 16px;text-align: right;"></input> + + </view> + </view> + <view class="form-item before-line"> <view class="label required">商品单位</view> <view class="m-l-a m-r-0 flex"> - <input v-model="dto.applicationTitle" placeholder="请输入店铺名称" - style="margin-top: 16px;text-align: right;"></input> + <input v-model="dto.unit" placeholder="请输入商品单位" style="margin-top: 16px;text-align: right;"></input> </view> </view> <view class="form-item before-line"> <view class="label required">商品颜色</view> - <view class="m-l-a m-r-0 flex " :class="[!dto.applicationType?'desc-gray':'']" @click="()=>{ - if(!id){ - show_select_type=true - } + <!-- <view class="m-l-a m-r-0 flex " :class="[!dto.color?'desc-gray':'']" @click="()=>{ + show_select_color=true }"> <view>{{dto.applicationTypeStr||dto.applicationType || '请选择'}}</view> <u-icon class="m-l-a" name="arrow-right"></u-icon> + </view> --> + <view class="m-l-a m-r-0 flex"> + <input v-model="dto.color" placeholder="请输入商品颜色" + style="margin-top: 16px;text-align: right;"></input> </view> - </view> <view class="line-gray-big"></view> <view class="form-item"> - <view class="label required">列表封面图(130*120px)</view> + <view class="label required" style="width: 400rpx;">列表封面图(130*120px)</view> <view class="m-l-a m-r-0 flex"> - <view class="component-button-upload" @click="uploadIcon('icon')" - :style="{'background-image':dto.icon&&`url('${dto.icon}')`||''}"> + <view class="component-button-upload" @click="uploadIcon('cover')" + :style="{'background-image':dto.icon&&`url('${dto.cover}')`||''}"> </view> </view> </view> - <view class="form-item before-line"> - <view class="label required">商品轮播图(300*160px)</view> + <view class="form-item before-line bottom-border-no"> + <view class="label required" style="width: 400rpx;">商品轮播图(300*160px)</view> <view class="m-l-a m-r-0 flex"> - <view class="component-button-upload" @click="uploadIcon('icon')" - :style="{'background-image':dto.icon&&`url('${dto.icon}')`||''}"> + <!-- :style="{'background-image':dto.icon&&`url('${dto.icon}')`||''}" --> + <view class="component-button-upload" @click="uploadIcon('bannerList')"> </view> + </view> + </view> + <view class="flex p20" style="padding-top: 0rpx;padding-bottom: 10rpx" + v-if="dto.bannerList&&dto.bannerList.length>0"> + <view class="m-t-12 m-r-10 " v-for="(tBanner,index) of dto.bannerList" :key="index"> + <image class="banner-img" :src="tBanner" @click.stop="previewImg(tBanner)"> + + </image> + <view class="t-red text-center" @click.stop="deleteBanner(index)">删除</view> </view> </view> <view class="line-gray-big"></view> <view class="form-item before-line"> - <view class="label required">售价</view> + <view class="label required">售价(元)</view> <view class="m-l-a m-r-0 flex"> - <input v-model="dto.applicationTitle" placeholder="请输入数字" type="digit" + <input v-model="dto.price" placeholder="请输入数字" type="digit" style="margin-top: 16px;text-align: right;"></input> </view> </view> - <view class="form-item before-line"> + <view class="form-item "> <view class="label required">库存</view> <view class="m-l-a m-r-0 flex"> - <input v-model="dto.applicationTitle" placeholder="请输入数字" type="number" + <input v-model="dto.stock" placeholder="请输入数字" type="number" style="margin-top: 16px;text-align: right;"></input> </view> </view> @@ -76,11 +90,18 @@ <view class="form-item "> <view class="label required">商品参数详情</view> <view class="m-l-a m-r-0 flex " :class="[!dto.applicationType?'desc-gray':'']" @click="()=>{ - if(!id){ - show_select_type=true + if(!dto.category){ + $message.showToast('请先选择分类') + }else{ + if(dto.params&&dto.params.length==0){ + $message.showToast('暂无参数可以设置') + }else{ + $refs.popup_param.open() + } + } }"> - <view>{{dto.applicationTypeStr||dto.applicationType || '去设置'}}</view> + <view>{{ '去设置'}}</view> <u-icon class="m-l-a" name="arrow-right"></u-icon> </view> @@ -88,12 +109,10 @@ <view class="line-gray-big"></view> <view class="form-item before-line"> <view class="label required">商品等级</view> - <view class="m-l-a m-r-0 flex " :class="[!dto.applicationType?'desc-gray':'']" @click="()=>{ - if(!id){ - show_select_type=true - } + <view class="m-l-a m-r-0 flex " :class="[!dto.level?'desc-gray':'']" @click="()=>{ + show_select_level=true }"> - <view>{{dto.applicationTypeStr||dto.applicationType || '请选择'}}</view> + <view>{{dto.levelStr||dto.level || '请选择'}}</view> <u-icon class="m-l-a" name="arrow-right"></u-icon> </view> @@ -103,16 +122,21 @@ <view class="form-item before-line"> <view class="label required">商品视频</view> <view class="m-l-a m-r-0 flex"> - <view class="component-button-upload m-r-15" @click="uploadIcon('icon')" - :style="{'background-image':dto.icon&&`url('${dto.icon}')`||''}"> + <!-- :style="{'background-image':dto.icon&&`url('${dto.icon}')`||''}" --> + <view class="component-button-upload m-r-15" @click="uploadIcon('video')"> </view> </view> </view> + <view v-if="dto.video"> + <video :src="dto.video" style="display: block;margin: 0 auto;"></video> + </view> - - <view class="button-green-1 m-t-20 button-fixed-bottom before-line" @click="submit" v-if="!dto.id"> + <view style="min-height: 200rpx;"> + + </view> + <view class="button-green-1 m-t-20 button-fixed-bottom " @click="submit" v-if="!dto.id"> 提交审核 </view> <view class="button-green-1 m-t-20 button-fixed-bottom before-line" @click="submit" v-if="dto.id"> @@ -121,12 +145,33 @@ </view> - <u-picker @confirm="select_category" keyName="label" @cancel="show_select_category=false" :show="show_select_category" - :columns="columns_types"></u-picker> + <u-picker @confirm="select_category" keyName="name" @cancel="show_select_category=false" + :show="show_select_category" :columns="columns_categorys"></u-picker> - <u-picker @confirm="select_user" keyName="label" @cancel="show_select_user=false" :show="show_select_user" - :columns="userListCols"></u-picker> + <u-picker @confirm="select_level" keyName="label" @cancel="show_select_level=false" :show="show_select_level" + :columns="columns_levels"></u-picker> + + <uni-popup ref="popup_param" type="top"> + <view class="component-popup_input" v-if="dto.params"> + <view class="text-center m-b-40" style="font-size: 48rpx;font-weight: 600;">商品参数设置</view> + <!-- 输入框--> + <view v-for="(item,i) in dto.params" :key="i" class="m-b-20"> + <view class="title topic-font" style="font-size: 36rpx;font-weight: 600;">{{item.name}}</view> + <view class="m-t-12"> + <u-radio-group v-model="item.value" placement="row"> + <u-radio + :customStyle="{'margin-bottom': '16rpx','margin-right': '24rpx','font-size':'28rpx'}" + v-for="(each, j) in item.values" :key="j" :label="each" :name="each"> + </u-radio> + </u-radio-group> + </view> + </view> + + <!-- 提交按钮 --> + <view class="button-green" @click="closeParamPop">返回</view> + </view> + </uni-popup> </view> </template> @@ -158,15 +203,18 @@ params: [], //id,value }, show_select_category: false, - show_select_user: false, + show_select_level: false, columns_categorys: [], - columns_levels:[], - + columns_levels: [], + // columns_params: [], //弹窗选择具体的值 } }, async onLoad(options) { if (options.id) { this.id = options.id + uni.setNavigationBarTitle({ + title: '商品详情' + }) this.getDetail() } else { if (options.copyId) { @@ -174,25 +222,28 @@ await this.getDetail() this.id = '' delete this.dto.id + uni.setNavigationBarTitle({ + title: '复制商品并新增' + }) + } else { + uni.setNavigationBarTitle({ + title: '商品新增' + }) } - + //tree - this.$http.request('get', '/api/flower/category/tree', { - params: { - typeCode: 'FLOWER_LEVEL' - } - }).then(res => { + this.$http.request('get', '/api/flower/category/tree', {}).then(res => { var data = res.data this.columns_categorys = [data || []] this.columns_categorys[0].unshift({ label: '全部', value: '', - children:[] + children: [] }) }) - - this.$http.request('get', '/api/dict/value', { + + this.$http.request('get', '/api/code/value', { params: { typeCode: 'FLOWER_LEVEL' } @@ -210,17 +261,48 @@ }, methods: { - - - select_category(e) { - this.show_select_category = false - this.dto.categoryStr = e.value[0].label - this.dto.category = e.value[0].value + closeParamPop() { + this.$refs.popup_param.close() }, - select_user(e) { - this.show_select_user = false - this.dto.auditPersonStr = e.value[0].label - this.dto.auditPersonId = e.value[0].value + + async select_category(e) { + if (e.value[0].id !== this.dto.category) { + if (this.dto.category) { + await this.$message.confirm('修改分类将清空商品参数,确定修改吗') + } + console.log('select_category', e) + this.show_select_category = false + this.dto.categoryStr = e.value[0].name + this.dto.category = e.value[0].id + this.$message.showLoading() + await this.refresh_category() + this.$message.hideLoading() + } else { + + } + + }, + async refresh_category() { + // this.columns_params = [] + this.dto.params = [] + //获取分类参数 + if (this.dto.category) { + const res = await this.$http.request('get', '/api/supplier/flower/params', { + params: { + categoryId: this.dto.category + } + }) + if (res.code == 0) { + // this.columns_params = res.data || [] + this.dto.params = res.data || [] + } + } + + }, + select_level(e) { + this.show_select_level = false + this.dto.levelStr = e.value[0].label + this.dto.level = e.value[0].value }, async getDetail() { @@ -238,7 +320,12 @@ // this.dto.applicationDate = this.$util.toDate(new Date(this.dto.applicationDate)) // } // // console.log('this.dto', this.dto) - + if (!this.dto.bannerList) { + this.dto.bannerList = [] + } + // if (this.dto.category) { + // await this.refresh_category() + // } } this.$message.hideLoading() @@ -279,34 +366,72 @@ this.backpage() } }, - + async deleteBanner(index) { + await this.$message.confirm('是否确认删除此图片') + // this.dto.bannerList = + this.dto.bannerList.splice(index, 1) + }, uploadIcon(key) { + console.log('that dto key', key) const that = this - uni.chooseImage({ - count: 1, // 最多可以选择的图片张数,默认9 - sizeType: ['original', 'compressed'], //original 原图,compressed 压缩图,默认二者都有 - sourceType: ['camera', 'album'], //album 从相册选图,camera 使用相机,默认二者都有。如需直接开相机或直接选相册,请只使用一个选项 - success: function({ - errMsg, - tempFiles - }) { - if (errMsg === 'chooseImage:ok') { - // console.log(tempFiles[0]) - that.$message.showLoading() - that.$http.upload(tempFiles[0].path).then(async res => { - var pic = res.data && res.data.length > 0 && res.data[ - 0] - .url || '' - that.$message.hideLoading() - that.dto[key] = pic || '' - that.$forceUpdate() - }).catch(res => { - that.$message.hideLoading() + if (key == 'video') { + uni.chooseVideo({ + sourceType: ['camera', 'album'], + success: function(res) { + if (res.tempFilePath) { + console.log('res.tempFilePath', res.tempFilePath) + that.$message.showLoading() + that.$http.upload(res.tempFilePath).then(async res => { + console.log('res1', res) + var pic = res.data && res.data.length > 0 && res.data[ + 0] + .url || '' + that.$message.hideLoading() + that.dto[key] = pic || '' - }) + that.$forceUpdate() + console.log('that dto', that.dto) + }).catch(res => { + that.$message.hideLoading() + console.error(res) + }) + } } - } - }) + }); + } else { + + uni.chooseImage({ + count: 1, // 最多可以选择的图片张数,默认9 + sizeType: ['compressed'], //original 原图,compressed 压缩图,默认二者都有 + sourceType: ['camera', 'album'], //album 从相册选图,camera 使用相机,默认二者都有。如需直接开相机或直接选相册,请只使用一个选项 + success: function({ + errMsg, + tempFiles + }) { + if (errMsg === 'chooseImage:ok') { + // console.log(tempFiles[0]) + that.$message.showLoading() + that.$http.upload(tempFiles[0].path).then(async res => { + console.log('res1', res) + var pic = res.data && res.data.length > 0 && res.data[ + 0] + .url || '' + that.$message.hideLoading() + if (key == 'bannerList') { + that.dto[key].push(pic) + } else { + that.dto[key] = pic || '' + } + + that.$forceUpdate() + }).catch(res => { + that.$message.hideLoading() + console.error(res) + }) + } + } + }) + } }, }, @@ -320,10 +445,18 @@ </script> <style lang="scss" scoped> + .banner-img { + width: 96rpx; + height: 96rpx; + border-radius: 4rpx; + border: 2rpx dashed #CECECE; + } + .form-item { // padding: 40rpx; border-bottom: 1px solid #F3F3F3; display: flex; + padding: 20rpx; // height: 100px; .label { @@ -343,6 +476,7 @@ } + } .form-item.bottom-border-no { -- Gitblit v1.9.3