123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629 |
- <template>
- <view class="pages">
- <form @submit="formSubmit" @reset="formReset">
- <view class="form-item-type nomal-top">
- <view class="form-item">
- <view class="form-item-til">类目</view>
- <view class="form-item-con">
- <input type="text" disabled placeholder="商品类目" v-model="params.type" value="" />
- </view>
- </view>
- <!-- <view class="form-item arrow">
- <view class="form-item-til">地理位置</view>
- <view class="form-item-con" @click="chooseaddr">
- <input type="text" placeholder="请选择地理位置" v-model="params.myposition" value="" />
- </view>
- </view> -->
- </view>
- <view class="form-item-type">
- <view class="form-item">
- <view class="form-item-til">标题</view>
- <view class="form-item-con">
- <input type="text" placeholder="请输入发布产品标题" v-model="params.title" value="" />
- </view>
- </view>
- <view class="form-item">
- <view class="form-item-til">品牌</view>
- <view class="form-item-con">
- <input type="text" placeholder="请输入品牌" v-model="params.brand" value="" />
- </view>
- </view>
- <view class="form-item">
- <view class="form-item-til">零售价</view>
- <view class="form-item-con">
- <input type="text" placeholder="请输入零售价" v-model="params.price" value="" />
- </view>
- </view>
- <view class="form-item">
- <view class="form-item-til">供应商</view>
- <view class="form-item-con">
- <input type="text" disabled placeholder="" v-model="params.supplier" value="" />
- </view>
- </view>
- <view class="form-item arrow" @click="openplaceoforigin">
- <view class="form-item-til">生产地</view>
- <view class="form-item-con">
- <input type="text" disabled="disabled" placeholder="" v-model="params.placeoforigin" value="" />
- </view>
- </view>
- <view class="form-item arrow" @click="openspecifications">
- <view class="form-item-til">规格</view>
- <view class="form-item-con">
- <text v-for="(item,index) in params.specifications">{{item}},</text>
- <!-- <input type="text" placeholder="" v-model="params.specifications" value="" /> -->
- </view>
- </view>
- <view class="form-item">
- <view class="form-item-til">保质期</view>
- <view class="form-item-con">
- <input type="text" placeholder="请输入保质期" v-model="params.shelflife" value="" />
- </view>
- </view>
- <view class="form-item">
- <view class="form-item-til">生产日期</view>
- <view class="form-item-con">
- <picker mode="date" :value="params.date" :start="startDate" :end="endDate" @change="bindDateChange">
- <view class="uni-input">{{params.date}}</view>
- </picker>
- <!-- <input type="text" placeholder="请输入生产日期" v-model="params.productiondate" value="" /> -->
- </view>
- </view>
- <view class="form-item">
- <view class="form-item-til">包装</view>
- <view class="form-item-con">
- <input type="text" placeholder="请输入包装" v-model="params.packaging" value="" />
- </view>
- </view>
- <view class="form-item">
- <view class="form-item-til">标签</view>
- <view class="form-item-con">
- <input type="text" placeholder="请输入标签,用逗号隔开" v-model="params.productlabel" value="" />
- </view>
- </view>
- </view>
- <view class="form-item upfile">
- <view class="form-item-til">图片视频</view>
- <view class="form-item-con">
- <view class="form-item-chooseIMGs-wrap">
- <image v-for="(item,index) in params.media" :key="index" :src="item" class="choosedIMG" ></image>
- </view>
- <view class="chooseIMG-btn">
- <image class="chooseIMG-btn-img" @click="chooseimg" src="/static/img/icon-upload.png"></image>
- </view>
- </view>
- </view>
- </form>
- <view class="bottom-btn-wrap">
- <button class="bottom-btn" @click="publish" type="primary">发布</button>
- </view>
- <!-- 页面显示结束 下面是隐藏内容 -->
- <!-- 供应商开始 -->
- <!-- <view class="supplier-page fix-content translate" :class="{ 'open': supplieropen }" >
- <view class="search-wrap search-left-color">
- <view class="search">
- <view class="searchTxt">
- <uni-search-bar placeholder="搜索供应商关键词" @confirm="searchsupplier" @input="searchsupplier" ></uni-search-bar>
- </view>
- </view>
- </view>
- <view class="simplepage-wrap">
- <mescroll-body ref="mescrollRef0" @init="mescrollInit" @down="downCallback" @up="upCallback" :down="downOption" :up="upOption">
- <view>
- <view v-for="(item,index) in supplierlist" :key="index" @click="supplierclick(item)" class="simplepage-item">{{item}}</view>
- </view>
- </mescroll-body>
- </view>
- </view> -->
- <!-- 供应商结束 -->
- <!-- 产地开始 -->
- <view class="placeoforigin-page fix-content translate" :class="{ 'open': placeoforiginopen }" >
- <view class="search-wrap search-left-color">
- <view class="search">
- <view class="searchTxt">
- <uni-search-bar placeholder="搜索产地关键词" @confirm="searchplace" @input="searchplace" ></uni-search-bar>
- </view>
- </view>
- </view>
- <!-- 搜索 结束 -->
- <scroll-view class="simplepage-wrap" scroll-y="true">
- <view v-for="(item,index) in placeoforiginlist" :key="index" @click="placeoforiginclick(item.detailAddress)" class="simplepage-item">{{item.detailAddress}}</view>
- </scroll-view>
- </view>
- <!-- 产地结束 -->
- <!-- 规格开始 -->
- <view class="specifications-page fix-content translate" :class="{ 'open': specificationsopen }" >
- <view class="specifications-wrap wrap">
- <checkbox-group @change="checkboxChange">
- <label v-for="(item,index) in specificationslist" :key="index" class="checkbox-style" >
- <checkbox :value="item.value" :checked="item.checked" />{{item.name}}
- </label>
- </checkbox-group>
- <view class="pecifications-btn-wrap">
- <button type="default" class="big-btn big-btn-hollow" @click="resetcheckbox">重置</button>
- <button type="default" class="big-btn primary" @click="specificationsclick">确定</button>
- </view>
- </view>
- </view>
- <!-- 规格结束 -->
- </view>
- </template>
- <script>
- // 引入mescroll-mixins.js
- import MescrollMixin from "@/components/mescroll-uni/mescroll-mixins.js";
- // 引入mescroll-body组件 (如已在main.js注册全局组件,则省略此步骤)
- import MescrollBody from "@/components/mescroll-uni/mescroll-body.vue"; // 注意.vue后缀不能省
-
- import uniSearchBar from '@/components/uni-search-bar/uni-search-bar.vue';
- import { bus } from '../../utils/bus.js';
- export default {
- mixins: [MescrollMixin], // 使用mixin
- components: {
- MescrollBody,
- uniSearchBar,
-
-
- },
- data() {
- const currentDate = this.getDate({
- format: true
- })
- return {
- mescroll: null, // mescroll实例对象 (此行可删,mixins已默认)
- // 下拉刷新的配置(可选, 绝大部分情况无需配置)
- downOption: {
- // ...
- },
- // 上拉加载的配置(可选, 绝大部分情况无需配置)
- upOption: {
- page: {
- size: 10 // 每页数据的数量,默认10
- },
- noMoreSize: 5, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
- empty: {
- tip: '暂无相关数据'
- }
- },
- params: {
- token: '',
- type:'',
- myposition:'',
- title:'',
- brand:'',
- price:'',
- supplier:'默认的供应商',//供应商
- placeoforigin:'',//产地
- specifications:[],//规格
- shelflife:'',//保质期
- date: currentDate,//生产日期 // productiondate:'',//生产日期
- packaging:'',//包装
- productlabel:'',//标签
- media:[],//图片视频
- },
- //表单检查结果
- checkStatus:false,
- //供应商
- supplieropen:false,
- supplierlist:[],
- // 产地
- placeoforiginopen:false,
- placeoforiginlist:[],
- places:[],//临时暂存
- // 规格
- specificationsopen:false,
- specificationslist:[
- {value: '500g/提(250g/盒*2)',name: '500g/提(250g/盒*2)',checked: false},
- {value: '10g/罐',name: '10g/罐',checked: false},
- {value: '30g/盒',name: '30g/盒',checked: false},
- {value: '150g/盒',name: '150g/盒',checked: false},
- {value: '30g/盒(1.5g*20瓶)',name: '30g/盒(1.5g*20瓶)',checked: false},
- ],
- backtyep:1,
- }
- },
- onShow() {
- uni.hideTabBar();
- let serf = this;
- //检查登录,获取token
- // let loginRes = this.checkLogin('/pages/publish/publish', '2');
- // if (!loginRes) {
- // return false;
- // }
- // serf.params.token = loginRes[0];
- },
- onHide() {
- uni.showTabBar()
- },
- onLoad(option) {
- let self = this;
- if(Object.keys(bus.data).length>0){
- console.log('bus.data',bus.data)
- this.params.type = bus.data.name;
- // console.log(this.params.type);
- };
- // console.log(option);
- // this.params.type = option.type;
-
- uni.getStorage({
- key:'token',
- success: function (res) {
- self.params.token = res.data;
- // console.log(res.data);
- }
- });
- uni.getStorage({
- key:'tokenhead',
- success: function (res) {
- self.params.tokenhead = res.data;
- // console.log(res.data);
- }
- });
-
- //供应商详情
- let thetoken = this.params.tokenhead+this.params.token;
- this.$api.http.get(this.config.apiBaseurl+'/company/cp/detail',{header: {Authorization:thetoken},params:{compId:72}}).then(res =>{
- console.log('res',JSON.parse(JSON.stringify(res)));
- this.placeoforiginlist = res.data.data.origines;
- this.places = res.data.data.origines;
- this.params.supplier= res.data.data.compName;
- }).catch( err => {
- console.log(err)
- });
-
- },
- computed: {
- startDate() {
- return this.getDate('start');
- },
- endDate() {
- return this.getDate('end');
- }
- },
- methods: {
- getDate(type) {
- const date = new Date();
- let year = date.getFullYear();
- let month = date.getMonth() + 1;
- let day = date.getDate();
-
- if (type === 'start') {
- year = year - 60;
- } else if (type === 'end') {
- year = year + 2;
- }
- month = month > 9 ? month : '0' + month;;
- day = day > 9 ? day : '0' + day;
- return `${year}-${month}-${day}`;
- },
- bindDateChange: function(e) {
- this.params.date = e.target.value
- // console.log(this.params.date);
- },
- /*mescroll组件初始化的回调,可获取到mescroll对象 (此处可删,mixins已默认)*/
- mescrollInit(mescroll) {
- this.mescroll = mescroll;
- },
- downCallback(){
- this.mescroll.resetUpScroll(); // 重置列表为第一页 (自动执行 page.num=1, 再触发upCallback方法 )
- },
- /*上拉加载的回调*/
- upCallback(page) {
- let pageNum = page.num; // 页码, 默认从1开始
- let pageSize = page.size; // 页长, 默认每页10条
- this.params = Object.assign(this.params,{page:pageNum,rows:pageSize});
- this.$api.http.post(this.config.apiBaseurl+'hotel/reserve/data',this.params,{
- header: {
- Accept:'application/json',
- Authorization: 'Bearer '+ this.params.token, //注意Bearer后面有一空格
- }
- }).then(data => {
- if(data.data.code=='1001'){
- // uni.redirectTo({
- // url:'/pages/login/login?backpage=/pages/index/index'+'&backtype='+2,
- // });
- };
- console.log(data);
- // 接口返回的当前页数据列表 (数组)
- let curPageData = data.data.rows;
- console.log('curPageData',curPageData);
- // 接口返回的当前页数据长度 (如列表有26个数据,当前页返回8个,则curPageLen=8)
- let curPageLen = curPageData.length;
- // 接口返回的总页数 (如列表有26个数据,每页10条,共3页; 则totalPage=3)
- // let totalPage = data.xxx;
- // 接口返回的总数据量(如列表有26个数据,每页10条,共3页; 则totalSize=26)
- let totalSize = data.data.total;
- // 接口返回的是否有下一页 (true/false)
- // let hasNext = data.xxx;
-
- //设置列表数据
- if(page.num == 1) this.dataList = []; //如果是第一页需手动置空列表
- this.dataList = this.dataList.concat(curPageData); //追加新数据
-
- //方法二(推荐): 后台接口有返回列表的总数据量 totalSize
- this.mescroll.endBySize(curPageLen, totalSize);
-
- // setTimeout(()=>{
- // this.mescroll.endSuccess(curPageLen)
- // },20)
-
- }).catch(err => {
- this.mescroll.endErr()
- console.log(err)
-
- });
- },
- //选择图片
- chooseimg() {
- let _self = this;
- uni.chooseImage({
- count: 3,
- sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
- sourceType: ['album', 'camera'], //从相册选择
- success: function(res) {
- const tempFilePaths = res.tempFilePaths;
- _self.image = tempFilePaths[0];
- console.log("tempFilePaths[0]", tempFilePaths[0]) //能够打印出选中的图片
- _self.iconcheck = 1; //点击后图片更改状态由0变成1
- console.log('111', JSON.stringify(res.tempFilePaths));
- _self.params.media = res.tempFilePaths;
- console.log(_self.params.media);
-
- // 预览图片
- // uni.previewImage({
- // urls: res.tempFilePaths,
- // longPressActions: {
- // // itemList: [],
- // success: function(data) {
- // console.log('选中了第' + (data.tapIndex + 1) + '个按钮,第' + (data.index + 1) + '张图片');
- // },
- // fail: function(err) {
- // console.log(err.errMsg);
- // }
- // }
- // });
-
- },
- error: function(e) {
- console.log(e);
- }
- });
- },
- //发布
- publish() {
- this.checkStatus = this.check_form();
- if(this.checkStatus){
- let _self = this;
- //上传图片
- // uni.uploadFile({
- // url: _self.httpUrl + '', // 后端api接口
- // filePath: _self.image, // uni.chooseImage函数调用后获取的本地文件路劲
- // name: 'EmployeeImage', //后端通过'file'获取上传的文件对象(字段)
- // formData: {
- // // openid:_self.openid, //剩下的字段
- // },
- // header: {
- // "Content-Type": "multipart/form-data"
- // },
- // success: (res) => {
- // console.log(res)
- // if (res.statusCode == 200) {
- // uni.showToast({
- // icon: 'success',
- // title: "添加成功...",
- // })
- // }
- // setTimeout(() => {
- // uni.navigateTo({
- // url: ''
- // })
- // }, 2000)
- // },
- // error(error) {
- // uni.showToast({
- // title: "添加失败...",
- // })
- // }
- // });
- uni.showLoading({
- title: '请稍等'
- });
- setTimeout(function () {
- uni.hideLoading();
- }, 2000);
- // setTimeout(()=>{
- // uni.showToast({
- // icon:'success',
- // title:`发布成功,请等待审核!`,
- // duration: 2000
- // });
- // },2000);
-
- setTimeout(() => {
- uni.redirectTo({
- url:'/pages/publish/publishsuccess/publishsuccess'
- })
- }, 2000);
- }
- },
- //表单验证
- check_form() {
- console.log('this.params',this.params);
- if(this.params.type.length <= 0) {
- uni.showToast({icon:'none',title:`请填写类别!`,duration: 2000});
- return false;
- }
- // if(this.params.myposition.length <= 0) {
- // console.log(this.params.myposition);
- // uni.showToast({icon:'none',title:`请填写地理位置!`,duration: 2000});
- // return false;
- // }
- if(this.params.title.length <= 0) {
- uni.showToast({icon:'none',title:`请填写标题!`,duration: 2000});
- return false;
- }
- if(this.params.brand.length <= 0) {
- uni.showToast({icon:'none',title:`请填写品牌!`,duration: 2000});
- return false;
- }
- if(this.params.price.length <= 0) {
- uni.showToast({icon:'none',title:`请填写零售价!`,duration: 2000});
- return false;
- }
- if(this.params.supplier.length <= 0) {
- uni.showToast({icon:'none',title:`请填写供应商!`,duration: 2000});
- return false;
- }
- if(this.params.placeoforigin.length <= 0) {
- uni.showToast({icon:'none',title:`请填写生产地!`,duration: 2000});
- return false;
- }
- if(this.params.specifications.length <= 0) {
- uni.showToast({icon:'none',title:`请填写规格!`,duration: 2000});
- return false;
- }
- if(this.params.shelflife.length <= 0) {
- uni.showToast({icon:'none',title:`请填写保质期!`,duration: 2000});
- return false;
- }
- if(this.params.date.length <= 0) {
- uni.showToast({icon:'none',title:`请填写生产日期!`,duration: 2000});
- return false;
- }
- if(this.params.packaging.length <= 0) {
- uni.showToast({icon:'none',title:`请填写包装!`,duration: 2000});
- return false;
- }
- if(this.params.productlabel.length <= 0) {
- uni.showToast({icon:'none',title:`请填写标签!`,duration: 2000});
- return false;
- }
- if(this.params.media.length <= 0) {
- uni.showToast({icon:'none',title:`请上传图片!`,duration: 2000});
- return false;
- }
- return true;
- },
- //选择供应商
- // supplierclick(name){
- // this.params.supplier = name;
- // this.supplieropen = false;
- // this.showback();
- // },
- //打开供应商弹出框
- // opensupplier(){
- // this.supplieropen = true;
- // this.hideback();
- // },
- // 搜索供应商
- // searchsupplier(e){
- // console.log(e);
- // },
- //选择生产地
- placeoforiginclick(name){
- this.params.placeoforigin = name;
- this.placeoforiginopen = false;
- this.showback();
- },
- //打开生产地弹出框
- openplaceoforigin(){
- this.placeoforiginopen = true;
- this.hideback();
- },
- //选择规格
- specificationsclick(e){
- // this.params.specifications = name;
- this.specificationsopen = false;
- this.showback();
- },
- //打开规格弹出框
- openspecifications(){
- this.specificationsopen = true;
- this.hideback();
- },
- // 规格checkbox
- checkboxChange: function (e) {
- var items = this.specificationslist,
- values = e.detail.value;
- for (var i = 0, lenI = items.length; i < lenI; ++i) {
- const item = items[i]
- if(values.includes(item.value)){
- this.$set(item,'checked',true)
- }else{
- this.$set(item,'checked',false)
- }
- }
- this.params.specifications = e.detail.value;
- console.log(this.params.specifications);
- },
- resetcheckbox(){
- var items = this.specificationslist;
- for (var i = 0, lenI = items.length; i < lenI; ++i) {
- const item = items[i];
- this.$set(item,'checked',false)
- }
- this.params.specifications = [];
- // console.log(this.params.specifications);
- },
- //隐藏返回按钮
- hideback(){
- // let backbtn = document.getElementsByClassName('uni-page-head-hd')[0];
- // backbtn.style.display = 'none';
- this.backtyep = 2;
- console.log(this.backtyep)
- },
- // 显示返回按钮
- showback(){
- // let backbtn = document.getElementsByClassName('uni-page-head-hd')[0];
- // backbtn.style.display = 'block';
- this.backtyep = 1;
- console.log(this.backtyep)
- },
- // 导航返回按钮
- onBackPress(e){
- console.log(this.backtyep)
- if(this.backtyep == 2){
- this.placeoforiginopen = false;
- this.backtyep = 1;
- return true;
- };
- },
- // 选择位置
- chooseaddr(){
- let self = this;
- uni.chooseLocation({
- success: function (res) {
- self.params.myposition = res.address;
- console.log('位置名称:' + res.name);
- console.log('详细地址:' + res.address);
- console.log('纬度:' + res.latitude);
- console.log('经度:' + res.longitude);
- }
- });
- },
- // 搜索产地
- searchplace(e){
- if(e.value){
- let place = this.placeoforiginlist.filter(function (value) {
- console.log(value.detailAddress);
- return value.detailAddress.includes(e.value);
- });
- console.log('place',place);
- this.placeoforiginlist = place;
- }else{
- this.placeoforiginlist = this.places;
- }
- }
-
-
- }
- }
- </script>
- <style >
- @import url("./publish.css");
- </style>
|