From a72add8a584fc017da11b6f6e05a749ad7f2f4f7 Mon Sep 17 00:00:00 2001 From: xuxueyang <xuxy@fengyuntec.com> Date: 星期一, 08 七月 2024 17:35:34 +0800 Subject: [PATCH] 1 --- sub_pages/supplier/flower-manage/flower-add.vue | 1414 +++++++++++++++++++++++++++++----------------------------- 1 files changed, 711 insertions(+), 703 deletions(-) diff --git a/sub_pages/supplier/flower-manage/flower-add.vue b/sub_pages/supplier/flower-manage/flower-add.vue index b976ee1..64540da 100644 --- a/sub_pages/supplier/flower-manage/flower-add.vue +++ b/sub_pages/supplier/flower-manage/flower-add.vue @@ -1,704 +1,712 @@ -<template> - <view class="container-page" style="padding: 0rpx;"> - <view> - <view class="form-item"> - <view class="label required">商品分类</view> - <!-- <view class="m-l-a m-r-0 flex " :class="[!dto.category?'desc-gray':'']" @click="()=>{ - // show_select_category=true - $refs.picker_category.showPicker() - }"> - <view>{{dto.categoryStr||dto.category || '请选择'}}</view> - <u-icon class="m-l-a" name="arrow-right"></u-icon> - </view> --> - <view class="m-l-a m-r-0 flex " :class="[!dto['category']?'desc-gray':'']"> - <!-- <uni-data-picker ref="picker_category" @change="(e)=>{PickCategory(dto,e)}" placeholder="" - @search="updateSearch" :filter="true" :localdata="columns_categorys_picker"> - {{dto.categoryStr||dto.category || '请选择'}} - </uni-data-picker> --> - <tree-filter ref="picker_category" @change="(e)=>{PickCategory(dto,e)}" placeholder="" - @search="updateSearch" :filter="true" :localdata="columns_categorys_picker" - selectConfirmTitle=""> - <view class="flex"> - <view>{{dto.categoryStr||dto.category || '请选择'}}</view> - <u-icon class="m-l-a" name="arrow-right"></u-icon> - </view> - - </tree-filter> - </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.name" placeholder="请选择分类" disabled - 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.unit" placeholder="请选择分类" disabled - 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.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="请选择分类" disabled - style="margin-top: 16px;text-align: right;"></input> - </view> - </view> - <view class="line-gray-big"></view> - - <!-- :style="{'background-image':dto.cover&&`url('${dto.cover}')`||''}" --> - <view class="form-item bottom-border-no"> - <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('cover')"> - - </view> - </view> - </view> - <view class="flex p20" style="padding-top: 0rpx;padding-bottom: 10rpx" v-if="dto.cover"> - <view class="m-t-12 m-r-10 "> - <image class="banner-img" :src="dto.cover" @click.stop="previewImg(dto.cover)"> - - </image> - <view class="t-red text-center" @click.stop="dto.cover=''">删除</view> - </view> - </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"> - <!-- :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="m-l-a m-r-0 flex"> - <input v-model="dto.price" placeholder="请输入数字" type="digit" - style="margin-top: 16px;text-align: right;"></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> - </view> - </view> - - <view class="line-gray-big"></view> - - <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(!dto.category){ - $message.showToast('请先选择分类') - }else{ - if(dto.params&&dto.params.length==0){ - $message.showToast('暂无参数可以设置') - }else{ - $refs.popup_param.open() - } - - } - }"> - <view>{{ paramstr || '去设置'}}</view> - <u-icon class="m-l-a" name="arrow-right"></u-icon> - </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="()=>{ - 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="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')"> - - </view> - - </view> - </view> - <view v-if="dto.video"> - <video :src="dto.video" style="display: block;margin: 0 auto;"></video> - </view> - - <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"> - 修改 - </view> - </view> - <!-- - - <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_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> - <!-- <dying318picker :picker-list="columns_categorys" ref="picker_category" @confirm="confirmPickerCategory"> - </dying318picker> --> - </view> -</template> - -<script> - import environments from '@/environments' - import dying318picker from '@/components/dying318-picker/Picker.vue' - import treeFilter from '@/components/tree-filter/tree-filter.vue' - - - import { - mapState - } from 'vuex' - - export default { - - data() { - return { - id: '', - dto: { - id: '', - category: '', - name: '', - unit: '', - color: '', - cover: '', - bannerList: [], //str[] - video: '', - level: '', //FLOWER_LEVEL - price: 0.00, - stock: 0, - params: [], //id,value - }, - show_select_category: false, - show_select_level: false, - columns_categorys: [], - columns_categorys_picker: [], - columns_categorys_dict: {}, - columns_categorys_search: '', - columns_levels: [], - // columns_params: [], //弹窗选择具体的值 - // cancel: { - // color: '#999', - // }, - // confirm: { - // color: '#20613D', - // }, - // column: [ - // {flex: 1}, - // {flex: 1}, - // {flex: 3}, - // ] - } - }, - - async onLoad(options) { - //tree - this.$http.request('get', '/api/flower/category/tree', {}).then(res => { - var data = res.data - this.columns_categorys = data || [] - // console.log('columns_categorys', this.columns_categorys) - //递归mao - this.mapCategoryTree(this.columns_categorys_picker, this.columns_categorys) - // console.log('columns_categorys_picker', this.columns_categorys_picker) - // this.columns_categorys = [data || []] - // this.columns_categorys[0].unshift({ - // label: '全部', - // value: '', - // children: [] - // }) - - }) - - this.$http.request('get', '/api/code/value', { - params: { - type: 'FLOWER_LEVEL' - } - }).then(res => { - var data = res.data - this.columns_levels = [data || []] - this.columns_levels[0].unshift({ - label: '全部', - value: '' - }) - - }) - if (options.id) { - this.id = options.id - uni.setNavigationBarTitle({ - title: '商品详情' - }) - this.getDetail() - } else { - if (options.copyId) { - this.id = options.copyId - await this.getDetail() - this.id = '' - delete this.dto.id - uni.setNavigationBarTitle({ - title: '复制商品并新增' - }) - } else { - uni.setNavigationBarTitle({ - title: '商品新增' - }) - } - - - } - - }, - - methods: { - async updateSearch(search) { - this.columns_categorys_search = search || '' - this.columns_categorys_picker = [] - this.mapCategoryTree(this.columns_categorys_picker, this.columns_categorys) - console.log('change updateSearch', search, this.columns_categorys_picker) - this.$refs.picker_category.selectedClear() - }, - async PickCategory(item, e) { - console.log('PickCategory', item, e) - if (e.detail.value) { - var currentnode = this.columns_categorys_dict['@' + e.detail.value[e.detail.value.length - 1] - .value] - 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 - //递归获取category的其他数据,用来做map? - this.$message.showLoading() - await this.refresh_category() - this.$message.hideLoading() - }).catch(e1 => { - console.log('this.$refs.picker_category', this.$refs.picker_category) - this.$refs.picker_category.onchange(tmpe.detail.value) - }) - } else { - 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 - //递归获取category的其他数据,用来做map? - this.$message.showLoading() - await this.refresh_category() - this.$message.hideLoading() - } - } - }, - mapCategoryTree(node, arr) { - var has = true - if (arr) { - var hasTrue = false - if (!this.columns_categorys_search) { - hasTrue = true - } - for (var item of arr) { - has = true - if (this.columns_categorys_search) { - has = false - } - var tmp = { - ...item, - name: item.name, - text: item.name, - label: item.name, - value: item.id, - children: undefined - } - if (item.name == this.columns_categorys_search) { - has = true - hasTrue = true - } - this.columns_categorys_dict['@' + item.id] = item - if (item.children && item.children.length > 0) { - tmp.children = [] - var childrenhas = this.mapCategoryTree(tmp.children, item.children) - if (childrenhas) { - has = true - hasTrue = true - } - } else { - tmp.children = undefined - } - - if (has) { - console.log('has ', tmp, hasTrue, has) - node.push(tmp) - } else { - - } - if (!has && hasTrue) { - //说明是这个节点有的,需要判断是否需要删除 - if (!tmp.children || tmp.children.length == 0) { - - } else { - console.log('has ', tmp, hasTrue, has) - node.push(tmp) - } - } - // if (hasTrue || has) { - // node.push(tmp) - - // } else { - // console.log('not has ', tmp) - // } - - } - } - return hasTrue - }, - async confirmPickerCategory(picker) { - console.log('confirmPickerCategory', picker) - var id = picker.value - var name = picker.label - if (id !== this.dto.category) { - if (this.dto.category) { - await this.$message.confirm('修改分类将清空商品参数,确定修改吗') - } - this.dto.categoryStr = name - this.dto.category = id - // name: '', - // unit: '', - // color: '', - //递归获取category的其他数据,用来做map? - this.$message.showLoading() - await this.refresh_category() - this.$message.hideLoading() - } - }, - closeParamPop() { - this.$refs.popup_param.close() - }, - - 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() { - this.$message.showLoading() - const { - code, - data - } = await this.$http.request('get', "/api/supplier/flower/list/view?id=" + this.id, {}) - if (code == 0) { - this.dto = { - ...data, - - } - // if (this.dto.applicationDate) { - // 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() - - }, - async submit() { - // if (!this.dto.applicationType) { - // this.$message.showToast('未选择类型') - // return - // } - // if (!this.dto.applicationTitle) { - // this.$message.showToast('未填写申请主题') - // return - // } - // if (!this.dto.auditPersonId) { - // this.$message.showToast('未选择审批人') - // return - // } - // await this.$message.confirm(`是否确定提交申请${this.auditPersonName?(",审批人为:"+this.auditPersonName):""}`) - - // this.$message.showToast('1') - // return - var dto = { - ...this.dto, - // applicationDate: this.$util.toDate(new Date()), - // applicantId: this.currentInfo.id - } - this.$message.showLoading() - const re = await this.$http.request('post', `/api/supplier/flower/list/${this.id?'edit':'new'}`, { - data: dto - }) - this.$message.hideLoading() - if (re.code == 2000 || re.code == 0) { - this.$message.showToast('操作成功') - //需要标记加一下 - // this.$store.dispatch('sign_add', 'application'); - - 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 - 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) - }) - } - } - }) - } - }, - - }, - computed: { - ...mapState(['currentInfo']), - paramstr() { - if (this.dto && this.dto.params) { - var strs = [] - for (var i of this.dto.params) { - if (i.value) { - strs.push(i.value) - } - } - return strs.join(',') - } - return '' - } - }, - components: { - dying318picker, - treeFilter - } - } -</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 { - width: 300rpx; - line-height: 60px; - - } - - .flex { - line-height: 60px; - - .flex1 { - flex: 1; - text-align: center; - color: var(--selfblue) - } - - - } - - } - - .form-item.bottom-border-no { - border-bottom: none; - } - - .container-page { - padding: 40rpx; - background-color: #FFFFFF; - // min-height: calc(100vh - 80rpx); - min-height: 100vh; - } - - .style { - width: fit-content; - margin: 0 auto; - line-height: 64rpx; - border-radius: 8rpx; - padding-left: 20rpx; - padding-right: 20rpx; - // padding-top: 5rpx; - // padding-bottom: 5rpx; - border: 2rpx solid var(--selfblue); - background-color: var(--selfbluebg); - min-width: 100rpx; - } - - - .style-1 { - border: 1px solid rgb(122, 187, 255); - border: 1px solid #409EFF; - color: #409EFF; - background-color: rgb(240, 247, 255); - } - - .style-2 { - border: 1px solid rgb(255, 184, 78); - border: 1px solid #FE9044; - color: #FE9044; - background-color: rgb(255, 247, 235); - } - - .style-3 { - border: 1px solid #19be6b; - color: #19be6b; - background-color: rgb(231, 244, 238); - } - - .style-4 { - border: 1px solid #F56c6c; - color: #F56c6c; - background-color: rgb(254, 243, 243); - } +<template> + <view class="container-page" style="padding: 0rpx;"> + <view> + <view class="form-item"> + <view class="label required">商品分类</view> + <!-- <view class="m-l-a m-r-0 flex " :class="[!dto.category?'desc-gray':'']" @click="()=>{ + // show_select_category=true + $refs.picker_category.showPicker() + }"> + <view>{{dto.categoryStr||dto.category || '请选择'}}</view> + <u-icon class="m-l-a" name="arrow-right"></u-icon> + </view> --> + <view class="m-l-a m-r-0 flex " :class="[!dto['category']?'desc-gray':'']"> + <!-- <uni-data-picker ref="picker_category" @change="(e)=>{PickCategory(dto,e)}" placeholder="" + @search="updateSearch" :filter="true" :localdata="columns_categorys_picker"> + {{dto.categoryStr||dto.category || '请选择'}} + </uni-data-picker> --> + <tree-filter ref="picker_category" @change="(e)=>{PickCategory(dto,e)}" placeholder="" + @search="updateSearch" :filter="true" :localdata="columns_categorys_picker" + selectConfirmTitle=""> + <view class="flex"> + <view>{{dto.categoryStr||dto.category || '请选择'}}</view> + <u-icon class="m-l-a" name="arrow-right"></u-icon> + </view> + + </tree-filter> + </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.name" placeholder="请选择分类" disabled + 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.unit" placeholder="请选择分类" disabled + 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.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="请选择分类" disabled + style="margin-top: 16px;text-align: right;"></input> + </view> + </view> + <view class="line-gray-big"></view> + + <!-- :style="{'background-image':dto.cover&&`url('${dto.cover}')`||''}" --> + <view class="form-item bottom-border-no"> + <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('cover')"> + + </view> + </view> + </view> + <view class="flex p20" style="padding-top: 0rpx;padding-bottom: 10rpx" v-if="dto.cover"> + <view class="m-t-12 m-r-10 "> + <image class="banner-img" :src="dto.cover" @click.stop="previewImg(dto.cover)"> + + </image> + <view class="t-red text-center" @click.stop="dto.cover=''">删除</view> + </view> + </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"> + <!-- :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="m-l-a m-r-0 flex"> + <input v-model="dto.price" placeholder="请输入数字" type="digit" + style="margin-top: 16px;text-align: right;"></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> + </view> + </view> + + <view class="line-gray-big"></view> + + <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(!dto.category){ + $message.showToast('请先选择分类') + }else{ + if(dto.params&&dto.params.length==0){ + $message.showToast('暂无参数可以设置') + }else{ + $refs.popup_param.open() + } + + } + }"> + <view>{{ paramstr || '去设置'}}</view> + <u-icon class="m-l-a" name="arrow-right"></u-icon> + </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="()=>{ + 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="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')"> + + </view> + + </view> + </view> + <view v-if="dto.video"> + <video :src="dto.video" style="display: block;margin: 0 auto;"></video> + </view> + + <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"> + 修改 + </view> + </view> + <!-- + + <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_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> + <!-- <dying318picker :picker-list="columns_categorys" ref="picker_category" @confirm="confirmPickerCategory"> + </dying318picker> --> + </view> +</template> + +<script> + import environments from '@/environments' + import dying318picker from '@/components/dying318-picker/Picker.vue' + import treeFilter from '@/components/tree-filter/tree-filter.vue' + + + import { + mapState + } from 'vuex' + + export default { + + data() { + return { + id: '', + dto: { + id: '', + category: '', + name: '', + unit: '', + color: '', + cover: '', + bannerList: [], //str[] + video: '', + level: '', //FLOWER_LEVEL + price: 0.00, + stock: 0, + params: [], //id,value + }, + show_select_category: false, + show_select_level: false, + columns_categorys: [], + columns_categorys_picker: [], + columns_categorys_dict: {}, + columns_categorys_search: '', + columns_levels: [], + // columns_params: [], //弹窗选择具体的值 + // cancel: { + // color: '#999', + // }, + // confirm: { + // color: '#20613D', + // }, + // column: [ + // {flex: 1}, + // {flex: 1}, + // {flex: 3}, + // ] + } + }, + + async onLoad(options) { + //tree + this.$http.request('get', '/api/flower/category/tree', {}).then(res => { + var data = res.data + this.columns_categorys = data || [] + // console.log('columns_categorys', this.columns_categorys) + //递归mao + this.mapCategoryTree(this.columns_categorys_picker, this.columns_categorys) + // console.log('columns_categorys_picker', this.columns_categorys_picker) + // this.columns_categorys = [data || []] + // this.columns_categorys[0].unshift({ + // label: '全部', + // value: '', + // children: [] + // }) + + }) + + this.$http.request('get', '/api/code/value', { + params: { + type: 'FLOWER_LEVEL' + } + }).then(res => { + var data = res.data + this.columns_levels = [data || []] + this.columns_levels[0].unshift({ + label: '全部', + value: '' + }) + + }) + if (options.id) { + this.id = options.id + uni.setNavigationBarTitle({ + title: '商品详情' + }) + this.getDetail() + } else { + if (options.copyId) { + this.id = options.copyId + await this.getDetail() + this.id = '' + delete this.dto.id + uni.setNavigationBarTitle({ + title: '复制商品并新增' + }) + } else { + uni.setNavigationBarTitle({ + title: '商品新增' + }) + } + + + } + + }, + + methods: { + async updateSearch(search) { + this.columns_categorys_search = search || '' + this.columns_categorys_picker = [] + this.mapCategoryTree(this.columns_categorys_picker, this.columns_categorys) + console.log('change updateSearch', search, this.columns_categorys_picker) + this.$refs.picker_category.selectedClear() + }, + async PickCategory(item, e) { + console.log('PickCategory', item, e) + if (e.detail.value) { + var currentnode = this.columns_categorys_dict['@' + e.detail.value[e.detail.value.length - 1] + .value] + 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 + //递归获取category的其他数据,用来做map? + this.$message.showLoading() + await this.refresh_category() + this.$message.hideLoading() + }).catch(e1 => { + console.log('this.$refs.picker_category', this.$refs.picker_category) + this.$refs.picker_category.onchange(tmpe.detail.value) + }) + } else { + 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 + //递归获取category的其他数据,用来做map? + this.$message.showLoading() + await this.refresh_category() + this.$message.hideLoading() + } + } + }, + mapCategoryTree(node, arr) { + var has = true + if (arr) { + var hasTrue = false + if (!this.columns_categorys_search) { + hasTrue = true + } + for (var item of arr) { + has = true + if (this.columns_categorys_search) { + has = false + } + var tmp = { + ...item, + name: item.name, + text: item.name, + label: item.name, + value: item.id, + children: undefined + } + if (this.columns_categorys_search) { + if (this.columns_categorys_search.indexOf(item.name) >= 0 || + item.name.indexOf(this.columns_categorys_search) >= 0 + ) { + has = true + hasTrue = true + } + } + // if (item.name == this.columns_categorys_search) { + // has = true + // hasTrue = true + // } + this.columns_categorys_dict['@' + item.id] = item + if (item.children && item.children.length > 0) { + tmp.children = [] + var childrenhas = this.mapCategoryTree(tmp.children, item.children) + if (childrenhas) { + has = true + hasTrue = true + } + } else { + tmp.children = undefined + } + + if (has) { + console.log('has ', tmp, hasTrue, has) + node.push(tmp) + } else { + + } + if (!has && hasTrue) { + //说明是这个节点有的,需要判断是否需要删除 + if (!tmp.children || tmp.children.length == 0) { + + } else { + console.log('has ', tmp, hasTrue, has) + node.push(tmp) + } + } + // if (hasTrue || has) { + // node.push(tmp) + + // } else { + // console.log('not has ', tmp) + // } + + } + } + return hasTrue + }, + async confirmPickerCategory(picker) { + console.log('confirmPickerCategory', picker) + var id = picker.value + var name = picker.label + if (id !== this.dto.category) { + if (this.dto.category) { + await this.$message.confirm('修改分类将清空商品参数,确定修改吗') + } + this.dto.categoryStr = name + this.dto.category = id + // name: '', + // unit: '', + // color: '', + //递归获取category的其他数据,用来做map? + this.$message.showLoading() + await this.refresh_category() + this.$message.hideLoading() + } + }, + closeParamPop() { + this.$refs.popup_param.close() + }, + + 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() { + this.$message.showLoading() + const { + code, + data + } = await this.$http.request('get', "/api/supplier/flower/list/view?id=" + this.id, {}) + if (code == 0) { + this.dto = { + ...data, + + } + // if (this.dto.applicationDate) { + // 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() + + }, + async submit() { + // if (!this.dto.applicationType) { + // this.$message.showToast('未选择类型') + // return + // } + // if (!this.dto.applicationTitle) { + // this.$message.showToast('未填写申请主题') + // return + // } + // if (!this.dto.auditPersonId) { + // this.$message.showToast('未选择审批人') + // return + // } + // await this.$message.confirm(`是否确定提交申请${this.auditPersonName?(",审批人为:"+this.auditPersonName):""}`) + + // this.$message.showToast('1') + // return + var dto = { + ...this.dto, + // applicationDate: this.$util.toDate(new Date()), + // applicantId: this.currentInfo.id + } + this.$message.showLoading() + const re = await this.$http.request('post', `/api/supplier/flower/list/${this.id?'edit':'new'}`, { + data: dto + }) + this.$message.hideLoading() + if (re.code == 2000 || re.code == 0) { + this.$message.showToast('操作成功') + //需要标记加一下 + // this.$store.dispatch('sign_add', 'application'); + + 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 + 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) + }) + } + } + }) + } + }, + + }, + computed: { + ...mapState(['currentInfo']), + paramstr() { + if (this.dto && this.dto.params) { + var strs = [] + for (var i of this.dto.params) { + if (i.value) { + strs.push(i.value) + } + } + return strs.join(',') + } + return '' + } + }, + components: { + dying318picker, + treeFilter + } + } +</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 { + width: 300rpx; + line-height: 60px; + + } + + .flex { + line-height: 60px; + + .flex1 { + flex: 1; + text-align: center; + color: var(--selfblue) + } + + + } + + } + + .form-item.bottom-border-no { + border-bottom: none; + } + + .container-page { + padding: 40rpx; + background-color: #FFFFFF; + // min-height: calc(100vh - 80rpx); + min-height: 100vh; + } + + .style { + width: fit-content; + margin: 0 auto; + line-height: 64rpx; + border-radius: 8rpx; + padding-left: 20rpx; + padding-right: 20rpx; + // padding-top: 5rpx; + // padding-bottom: 5rpx; + border: 2rpx solid var(--selfblue); + background-color: var(--selfbluebg); + min-width: 100rpx; + } + + + .style-1 { + border: 1px solid rgb(122, 187, 255); + border: 1px solid #409EFF; + color: #409EFF; + background-color: rgb(240, 247, 255); + } + + .style-2 { + border: 1px solid rgb(255, 184, 78); + border: 1px solid #FE9044; + color: #FE9044; + background-color: rgb(255, 247, 235); + } + + .style-3 { + border: 1px solid #19be6b; + color: #19be6b; + background-color: rgb(231, 244, 238); + } + + .style-4 { + border: 1px solid #F56c6c; + color: #F56c6c; + background-color: rgb(254, 243, 243); + } </style> \ No newline at end of file -- Gitblit v1.9.3