From 32526e5bddb7b14328b2467cd18783f480b33f3b Mon Sep 17 00:00:00 2001 From: xuxueyang <xuxy@fengyuntec.com> Date: 星期六, 31 八月 2024 01:51:53 +0800 Subject: [PATCH] update合伙人 --- sub_pages/supplier/flower-manage/flower-add.vue | 296 +++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 246 insertions(+), 50 deletions(-) diff --git a/sub_pages/supplier/flower-manage/flower-add.vue b/sub_pages/supplier/flower-manage/flower-add.vue index a0d59fa..a7dca75 100644 --- a/sub_pages/supplier/flower-manage/flower-add.vue +++ b/sub_pages/supplier/flower-manage/flower-add.vue @@ -27,7 +27,7 @@ </view> </view> <view class="form-item before-line"> - <view class="label required">商品名称</view> + <view class="label">商品名称</view> <view class="m-l-a m-r-0 flex"> <input v-model="dto.name" placeholder="请选择分类" disabled style="margin-top: 16px;text-align: right;"></input> @@ -35,7 +35,7 @@ </view> </view> <view class="form-item before-line"> - <view class="label required">商品单位</view> + <view class="label">商品单位</view> <view class="m-l-a m-r-0 flex"> <input v-model="dto.unit" placeholder="请选择分类" disabled style="margin-top: 16px;text-align: right;"></input> @@ -44,7 +44,7 @@ </view> <view class="form-item before-line"> - <view class="label required">商品颜色</view> + <view class="label">商品颜色</view> <!-- <view class="m-l-a m-r-0 flex " :class="[!dto.color?'desc-gray':'']" @click="()=>{ show_select_color=true }"> @@ -77,7 +77,7 @@ </view> <view class="form-item before-line bottom-border-no"> - <view class="label required" style="width: 400rpx;">商品轮播图(300*160px)</view> + <view class="label " style="width: 400rpx;">商品轮播图(300*160px)</view> <view class="m-l-a m-r-0 flex"> <!-- :style="{'background-image':dto.icon&&`url('${dto.icon}')`||''}" --> <view class="component-button-upload" @click="uploadIcon('bannerList')"> @@ -95,20 +95,32 @@ </view> </view> <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.level?'desc-gray':'']" @click="()=>{ + if(dto.category){ + show_select_level=true + }else{ + $message.showToast('请选择分类') + } + }"> + <view>{{dto.levelStr||dto.level || '请选择'}}</view> + <u-icon class="m-l-a" name="arrow-right"></u-icon> + </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.price" placeholder="请输入数字" type="digit" - style="margin-top: 16px;text-align: right;"></input> + <input v-model="dto.price" placeholder="请输入数字" type="digit" class="text-right m-t-15"></input> </view> </view> <view class="form-item "> <view class="label required">库存</view> <view class="m-l-a m-r-0 flex"> - <input v-model="dto.stock" placeholder="请输入数字" type="number" - style="margin-top: 16px;text-align: right;"></input> + <input v-model="dto.stock" placeholder="请输入数字" type="number" class="text-right m-t-15"></input> </view> </view> @@ -116,7 +128,8 @@ <view class="form-item "> <view class="label required">商品参数详情</view> - <view class="m-l-a m-r-0 flex " :class="[!dto.applicationType?'desc-gray':'']" @click="()=>{ + <view class="m-l-a m-r-0 flex " style="flex-wrap: nowrap;" + :class="[!dto.applicationType?'desc-gray':'']" @click="()=>{ if(!dto.category){ $message.showToast('请先选择分类') }else{ @@ -134,20 +147,10 @@ </view> <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.level?'desc-gray':'']" @click="()=>{ - show_select_level=true - }"> - <view>{{dto.levelStr||dto.level || '请选择'}}</view> - <u-icon class="m-l-a" name="arrow-right"></u-icon> - </view> - - </view> <view class="form-item before-line"> - <view class="label required">商品视频</view> + <view class="label">商品视频</view> <view class="m-l-a m-r-0 flex"> <!-- :style="{'background-image':dto.icon&&`url('${dto.icon}')`||''}" --> <view class="component-button-upload m-r-15" @click="uploadIcon('video')"> @@ -157,8 +160,18 @@ </view> </view> <view v-if="dto.video"> - <video :src="dto.video" style="display: block;margin: 0 auto;"></video> + <video :src="dto.video" :auto-pause-if-navigate="true" style="display: block;margin: 0 auto;"></video> </view> + <view class="form-item bottom-border-no"> + <view class="label">商品描述</view> + <view class="m-l-a m-r-0 flex"> + + </view> + </view> + <view style="min-width: 500rpx;margin-left: 20rpx;margin-right: 20rpx;margin-top: 20rpx;"> + <u--textarea v-model="dto.description" autoHeight placeholder="请输入商品描述"></u--textarea> + </view> + <view style="min-height: 200rpx;"> @@ -186,8 +199,8 @@ <view v-for="(item,i) in dto.params" :key="i" class="m-t-20"> <view class="title topic-font" style="font-size: 40rpx;font-weight: 600;">{{item.name}}</view> <view class="m-t-12 flex value-items"> - <view class="value-item" @click="updateValue(item,each)" :class="[item.value===each?'cur':'']" - v-for="(each, j) in item.values" :key="j"> + <view class="value-item" @click="updateValue(item,each)" + :class="[item.value.indexOf(each)>=0?'cur':'']" v-for="(each, j) in item.values" :key="j"> {{each || '-'}} </view> </view> @@ -202,7 +215,7 @@ <script> import environments from '@/environments' - import dying318picker from '@/components/dying318-picker/Picker.vue' + // import dying318picker from '@/components/dying318-picker/Picker.vue' import treeFilter from '@/components/tree-filter/tree-filter.vue' @@ -225,10 +238,27 @@ bannerList: [], //str[] video: '', level: '', //FLOWER_LEVEL - price: 0.00, - stock: 0, + price: '', + stock: '', params: [], //id,value + description: '', }, + requireFields: [{ + name: '商品分类', + key: 'category' + }, { + name: '列表封面图', + key: 'cover' + }, { + name: '商品等级', + key: 'level' + }, { + name: '商品价格', + key: 'price' + }, { + name: '商品库存', + key: 'stock' + }], show_select_category: false, show_select_level: false, columns_categorys: [], @@ -236,6 +266,7 @@ columns_categorys_dict: {}, columns_categorys_search: '', columns_levels: [], + columns_levels_all: [], // columns_params: [], //弹窗选择具体的值 // cancel: { // color: '#999', @@ -275,11 +306,12 @@ } }).then(res => { var data = res.data + this.columns_levels_all = data || [] this.columns_levels = [data || []] - this.columns_levels[0].unshift({ - label: '全部', - value: '' - }) + // this.columns_levels[0].unshift({ + // label: '全部', + // value: '' + // }) }) if (options.id) { @@ -310,10 +342,19 @@ methods: { updateValue(item, value) { - item.value = value - this.$set(item, 'value', value) + + if (item.name == '优点' || item.name === '缺点') { + if (item.value.indexOf(value) < 0) { + item.value.push(value) + } else { + item.value.splice(item.value.indexOf(value), 1) + } + } else { + //单选 + item.value = [value] + } + this.$forceUpdate() - console.log('updateValue') }, async updateSearch(search) { this.columns_categorys_search = search || '' @@ -323,19 +364,58 @@ this.$refs.picker_category.selectedClear() }, async PickCategory(item, e) { - console.log('PickCategory', item, e) + console.log('PickCategory', item, e, this.columns_categorys_dict) if (e.detail.value) { var currentnode = this.columns_categorys_dict['@' + e.detail.value[e.detail.value.length - 1] .value] + let levelLimit = currentnode && currentnode.levelLimit || '' + if (!levelLimit) { + if (currentnode.parentId) { + var currentnodeParentNode = this.columns_categorys_dict['@' + currentnode.parentId] + if (currentnodeParentNode) { + levelLimit = currentnodeParentNode.levelLimit || '' + } + } + } + + let tmpe = e + + if (this.dto.category && this.dto.category !== currentnode.id) { this.$message.confirm('修改分类将清空商品参数,确定修改吗').then(async res => { // console.log('currentnode',currentnode,this.columns_categorys_dict,'@'+e.detail.value[e.detail.value.length - 1].value) this.dto.categoryStr = currentnode.name this.dto.category = currentnode.id + this.dto.name = currentnode.name this.dto.unit = currentnode.unit this.dto.color = currentnode.color + //设置等级 + // console.log('tmpe', currentnode) + if (levelLimit) { + + this.columns_levels = [] + var tarr = [] + var filterLevel = levelLimit.split(",") + for (var t of this.columns_levels_all) { + if (filterLevel.indexOf(t.value) >= 0) { + tarr.push(t) + } + } + this.columns_levels = [tarr] + //如果不包含等级需要清除 + if (this.dto.level) { + if (filterLevel.indexOf(this.dto.level) >= 0) { + + } else { + this.dto.level = '' + this.dto.levelStr = '' + } + } + } else { + this.columns_levels = [this.columns_levels_all] + } //递归获取category的其他数据,用来做map? this.$message.showLoading() await this.refresh_category() @@ -345,6 +425,31 @@ this.$refs.picker_category.onchange(tmpe.detail.value) }) } else { + //设置等级 + // console.log('tmpe', currentnode) + if (levelLimit) { + + this.columns_levels = [] + var tarr = [] + var filterLevel = levelLimit.split(",") + for (var t of this.columns_levels_all) { + if (filterLevel.indexOf(t.value) >= 0) { + tarr.push(t) + } + } + this.columns_levels = [tarr] + //如果不包含等级需要清除 + if (this.dto.level) { + if (filterLevel.indexOf(this.dto.level) >= 0) { + + } else { + this.dto.level = '' + this.dto.levelStr = '' + } + } + } else { + this.columns_levels = [this.columns_levels_all] + } this.dto.categoryStr = currentnode.name this.dto.category = currentnode.id this.dto.name = currentnode.name @@ -357,7 +462,7 @@ } } }, - mapCategoryTree(node, arr) { + mapCategoryTree(node, arr, parentCheckTrue = false) { var has = true if (arr) { var hasTrue = false @@ -368,6 +473,9 @@ has = true if (this.columns_categorys_search) { has = false + } + if (parentCheckTrue) { + has = true } var tmp = { ...item, @@ -391,18 +499,20 @@ // } this.columns_categorys_dict['@' + item.id] = item if (item.children && item.children.length > 0) { + //如果上级已经有了,下级都包含 tmp.children = [] - var childrenhas = this.mapCategoryTree(tmp.children, item.children) + var childrenhas = this.mapCategoryTree(tmp.children, item.children, has) if (childrenhas) { has = true hasTrue = true } + } else { tmp.children = undefined } if (has) { - console.log('has ', tmp, hasTrue, has) + // console.log('has ', tmp, hasTrue, has) node.push(tmp) } else { @@ -463,7 +573,16 @@ if (res.code == 0) { // this.columns_params = res.data || [] this.dto.params = res.data || [] + for (var k of this.dto.params) { + if (!k.value) { + k.value = [] + } else { + k.value = k.value.split(',') || [] + } + } + // console.log('init params',this.dto.params) } + } }, @@ -491,6 +610,16 @@ if (!this.dto.bannerList) { this.dto.bannerList = [] } + if (this.dto.params) { + for (var k of this.dto.params) { + if (!k.value) { + k.value = [] + } else { + k.value = k.value.split(',') || [] + } + } + } + // if (this.dto.category) { // await this.refresh_category() // } @@ -500,6 +629,55 @@ }, async submit() { + if (!this.dto.price) { + this.$message.showToast('商品价格未设置') + return + } + var tmp = parseFloat(this.dto.price) + if (isNaN(tmp) || parseFloat('' + tmp).toFixed(3) !== parseFloat('' + this.dto.price).toFixed(3)) { + this.$message.showToast('商品价格格式错误,精确到分') + console.log('a1', ('' + tmp)) + console.log('a1', ('' + this.dto.price)) + return + } + if ((tmp.toFixed(2) + '' + '0') !== ('' + tmp.toFixed(3))) { + this.$message.showToast('商品价格至多精确到分') + console.log('a1', (tmp.toFixed(2) + '' + '0')) + console.log('a1', tmp.toFixed(3)) + // console.log('tmp.toFixed(2)',tmp.toFixed(2),tmp.toFixed(3)) + return + } else { + this.dto.price = tmp.toFixed(2) + } + if (this.dto.price <= 0) { + this.$message.showToast('商品价格不能小于等于0') + return + } + tmp = parseInt(this.dto.stock) + if (isNaN(tmp) || ('' + tmp.toFixed(0)) !== ('' + this.dto.stock) || tmp <= 0) { + this.$message.showToast('商品库存格式错误,需要大于0') + return + } + + for (var field of this.requireFields) { + if (!this.dto[field.key]) { + this.$message.showToast(`${field.name}信息未填写`) + return + } + } + + if (this.dto.params.length < 1) { + this.$message.showToast('商品参数详情未设置') + return + } else { + for (var item of this.dto.params) { + if (item.value.length < 1) { + this.$message.showToast('存在商品参数详情未设置') + return + } + } + } + // if (!this.dto.applicationType) { // this.$message.showToast('未选择类型') // return @@ -516,10 +694,11 @@ // this.$message.showToast('1') // return - var dto = { - ...this.dto, - // applicationDate: this.$util.toDate(new Date()), - // applicantId: this.currentInfo.id + var dto = JSON.parse(JSON.stringify(this.dto)) + if (dto.params) { + for (var k of dto.params) { + k.value = k.value.join(",") + } } this.$message.showLoading() const re = await this.$http.request('post', `/api/supplier/flower/list/${this.id?'edit':'new'}`, { @@ -529,9 +708,15 @@ if (re.code == 2000 || re.code == 0) { this.$message.showToast('操作成功') //需要标记加一下 - // this.$store.dispatch('sign_add', 'application'); + this.$store.dispatch('sign_add', 'flower'); this.backpage() + } else { + console.log('error re', re) + if (re.code === 30000 && Array.isArray(re.msg)) { + this.$message.showToast('字段未填写完整') + + } } }, async deleteBanner(index) { @@ -542,10 +727,17 @@ uploadIcon(key) { console.log('that dto key', key) const that = this - if (key == 'video') { + if (key === 'video') { uni.chooseVideo({ + maxDuration: 30, sourceType: ['camera', 'album'], success: function(res) { + // console.log('res',res) + // size: 11082508 + if (res.size > 1024 * 1024 * 50) { + that.$message.confirm('视频最多支持50M大小,超出大小限制') + return + } if (res.tempFilePath) { console.log('res.tempFilePath', res.tempFilePath) that.$message.showLoading() @@ -572,12 +764,15 @@ count: 1, // 最多可以选择的图片张数,默认9 sizeType: ['compressed'], //original 原图,compressed 压缩图,默认二者都有 sourceType: ['camera', 'album'], //album 从相册选图,camera 使用相机,默认二者都有。如需直接开相机或直接选相册,请只使用一个选项 - success: function({ - errMsg, - tempFiles - }) { + success: function(res) { + let errMsg = res.errMsg + let tempFiles = res.tempFiles if (errMsg === 'chooseImage:ok') { // console.log(tempFiles[0]) + if (tempFiles[0].size > 1024 * 1024 * 5) { + that.$message.confirm('图片最多支持5M大小,超出大小限制') + return + } that.$message.showLoading() that.$http.upload(tempFiles[0].path).then(async res => { console.log('res1', res) @@ -610,7 +805,7 @@ var strs = [] for (var i of this.dto.params) { if (i.value) { - strs.push(i.value) + strs.push(i.value.join(",")) } } return strs.join(',') @@ -619,7 +814,7 @@ } }, components: { - dying318picker, + // dying318picker, treeFilter } } @@ -641,8 +836,9 @@ // height: 100px; .label { - width: 300rpx; + width: 240rpx; line-height: 60px; + min-width: 240rpx; } -- Gitblit v1.9.3