shish 3 tahun lalu
induk
melakukan
9f852cc7a2

+ 69 - 0
hdApp/src/admin/ljh/applyResult.vue

@@ -0,0 +1,69 @@
+<template>
+	<appResult title="注册成功">
+    <view class="dec"></view>
+    <view v-if="fromCg == 1">
+      <button class="admin-button-com blue big" @click="beginCg()" >开始买花</button>
+    </view>
+    <view v-else>
+      <button class="admin-button-com blue big" v-if="scene==''" @click="goBack()" >返回</button>
+      <button class="admin-button-com blue big" v-else @click="beginCg()" >开始买花</button>
+    </view>
+	</appResult>
+</template>
+<script>
+import appResult from '@/components/app-result'
+export default {
+	name: "ApplyResult",
+	components:{
+		appResult
+    },
+    data(){
+      return {
+        scene:'',
+        fromCg:0
+      }
+    },
+    onUnload() {
+    },
+    onLoad () {
+
+      //供货商打开小程序分享给客户,客户需要采购进来
+      let ghsCgOption = uni.getStorageSync('ghsCgOption')
+      if(ghsCgOption.fromCg){
+        this.fromCg = ghsCgOption.fromCg
+      }
+
+      //供货商打开太阳码分享给客户,客户需要采购进来
+      let scene = uni.getStorageSync('ghsCgScene')
+      if(scene){
+        this.scene = scene
+      }
+
+    },
+    methods:{
+      beginCg(){
+        if(this.fromCg == 1){
+          let ghsCgOption = uni.getStorageSync('ghsCgOption')
+          this.$util.pageTo({url: "/pagesPurchase/ghsProduct", query:ghsCgOption, type:2})
+        }else{
+          this.$util.pageTo({url: "/pagesPurchase/ghsProduct",query: {scene:this.scene},type:2})
+        }
+      },
+      goBack() {
+        uni.navigateBack()
+      }
+    }
+};
+</script>
+<style lang="scss" scoped>
+    .dec {
+     color: #666666;   
+     font-size: 28upx;
+     font-weight: 400;
+     margin-bottom: 30upx;
+    }
+	.admin-button-com {
+		margin-bottom: 20upx;
+		width: 100%;
+	}
+</style>

+ 67 - 0
hdApp/src/admin/ljh/components/buy-foot.vue

@@ -0,0 +1,67 @@
+<template>
+	<div class="app-footer">
+        <div class="btn-left">
+            <div class="btn-wrap" @click="suggest()">
+                <i class="iconfont icondianpu"></i>
+                <div class="btn-text">联系客服</div>
+            </div>
+        </div>
+        <div class="btn-right">
+            <button class="button-com red" @click="buy()">报名</button>
+        </div>
+    </div>
+</template>
+<script>
+export default {
+    name: 'buy-foot',
+    props:{
+        isShare:{
+			type:Boolean,
+			default: false
+		}
+    },
+	methods: {
+		buy() {
+			this.$emit('buy')
+		},
+        suggest(){
+            let that = this
+            that.$util.confirmModal({content:'请添加客服微信反馈',okText:'复制微信'},() => {
+                uni.setClipboardData({
+                data: '15280215347',
+                success: function() {
+                    that.$msg("复制成功");
+                }
+                })
+            })
+        },
+        goBack() {
+            uni.navigateBack();
+        }
+	}
+}
+</script>
+<style lang="scss" scoped>
+.app-footer {
+    @include disFlex(center, space-between);
+    .btn-left {
+        @include disFlex(center, space-evenly);
+        width: 36%;
+        .iconfont {
+            font-size: 44upx;
+        }
+        .btn-text {
+            font-size: 24upx;
+        }
+    }
+    .btn-right {
+        width: 62%;
+        @include disFlex(center, center);
+        .button-com {
+            width: calc(90% - 30upx);
+            font-size: 32upx;
+            font-weight: 400;
+        }
+    }
+}
+</style>

+ 211 - 0
hdApp/src/admin/ljh/components/sel-popup.vue

@@ -0,0 +1,211 @@
+<template>
+  <div class="sel-popup">
+    <bottom-popup class="popup-wrap" :show="show" @close="close()">
+      <app-close @close="close()" />
+      <div class="tui-popup-box">
+        <div class="tui-product-box">
+          <img :src="imgNormal" class="tui-popup-img" />
+          <div class="tui-popup-price">
+            <div class="goods-tit app-bold">{{ info.name }}</div>
+            <div class="tui-amount tui-bold">¥{{ info.price?parseFloat(info.price):0 }}</div>
+            <text style="position:absolute;top:70upx;color:#333333;width:400upx;">剩{{info.stock ? parseFloat(info.stock) : 0 }}{{info.bigUnit}}</text>
+          </div>
+        </div>
+        <scroll-view scroll-y class="tui-popup-scroll">
+          <div class="tui-scrolldiv-box">
+            <div class="tui-number-box tui-bold tui-attr-title">
+              <div class="tui-attr-title">数量</div>
+              <number-box :max="maxStock" :min="1" :value="buyNum" @change="change"></number-box>
+            </div>
+          </div>
+        </scroll-view>
+        <div class="tui-popup-btn">
+          <button class="button-com red" @click="nextFn">下一步</button>
+        </div>
+      </div>
+    </bottom-popup>
+  </div>
+</template>
+<script>
+import BottomPopup from "@/components/plugin/bottom-popup";
+import NumberBox from "@/components/plugin/number-box";
+import AppClose from "@/components/module/app-close";
+export default {
+  name: "sel-popup",
+  components: {
+    BottomPopup,
+    NumberBox,
+    AppClose
+  },
+  props: {
+    info: {
+      type: Object,
+      default: () => {
+        return {};
+      }
+    },
+    buyNum: {
+      type: Number,
+      default: 1
+    },
+    show: {
+      type: Boolean,
+      default: true
+    }
+  },
+  data() {
+    return {
+      selIndex: 0
+    };
+  },
+  computed: {
+    imgNormal() {
+      return this.info.cover
+    },
+    maxStock() {
+      return 99999
+    }
+  },
+  methods: {
+    change(e) {
+      this.$emit("change", e);
+    },
+    close() {
+      this.$emit("close")
+    },
+    nextFn() {
+      if(Number(this.info.price) <= 0){
+        this.$msg('没有价格,暂时无法下单')
+        return false
+      }
+      if(Number(this.buyNum) > Number(this.info.stock)){
+        this.$msg('不足'+this.buyNum+this.info.bigUnit)
+        return false
+      }
+      this.$emit("nextFn",this.buyNum);
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+/deep/.popup-wrap {
+  .tui-popup-class {
+    border-top-left-radius: 24upx;
+    border-top-right-radius: 24upx;
+    // 适配iphoneX
+    padding-bottom: env(safe-area-inset-bottom);
+  }
+
+  .tui-popup-box {
+    position: relative;
+    padding: 30upx 30upx 100upx;
+  }
+
+  .tui-popup-btn {
+    width: 100%;
+    position: absolute;
+    left: 0;
+    bottom: 0;
+    padding: 14upx 0;
+    @include disFlex(center, center);
+    border-top: 1px solid $borderColor;
+    .button-com {
+      width: 80%;
+      font-size: 32upx;
+    }
+  }
+
+  .tui-product-box {
+    display: flex;
+    align-items: center;
+    font-size: 24upx;
+    padding-bottom: 30upx;
+  }
+
+  .tui-popup-img {
+    height: 200upx;
+    width: 200upx;
+    border-radius: 24upx;
+    display: block;
+  }
+
+  .tui-popup-price {
+    padding-left: 20upx;
+    padding-bottom: 8upx;
+    position:relative;
+    .goods-tit {
+      margin-bottom: 75upx;
+      font-size: 36upx;
+    }
+  }
+
+  .tui-amount {
+    color: #ff201f;
+    font-size: 34upx;
+  }
+
+  .tui-popup-scroll {
+    max-height: 380upx;
+    font-size: 26upx;
+  }
+
+  .tui-scrollview-box {
+    padding: 0 30upx 60upx 30upx;
+    box-sizing: border-box;
+  }
+
+  .tui-attr-title {
+    padding: 10upx 0;
+    color: #333;
+  }
+
+  .tui-attr-box {
+    font-size: 0;
+    padding: 20upx 0;
+  }
+
+  .tui-attr-item {
+    max-width: 100%;
+    min-width: 200upx;
+    height: 64upx;
+    display: -webkit-inline-flex;
+    display: inline-flex;
+    align-items: center;
+    justify-content: center;
+    background: #f7f7f7;
+    padding: 0 26upx;
+    box-sizing: border-box;
+    border-radius: 32upx;
+    margin-right: 20upx;
+    margin-bottom: 20upx;
+    font-size: 26upx;
+  }
+
+  .tui-attr-active {
+    background: #fcedea !important;
+    color: #e41f19;
+    font-weight: bold;
+    position: relative;
+  }
+
+  .tui-attr-active::after {
+    content: "";
+    position: absolute;
+    border: 1upx solid #e41f19;
+    width: 100%;
+    height: 100%;
+    border-radius: 40upx;
+    left: 0;
+    top: 0;
+  }
+
+  .tui-number-box {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    padding: 20upx 0 30upx 0;
+    box-sizing: border-box;
+  }
+}
+</style>

+ 365 - 0
hdApp/src/admin/ljh/confirm.vue

@@ -0,0 +1,365 @@
+<template>
+  <div class="app-content">
+    <form @submit="formSubmit">
+
+      <view class="module-com">
+          <tui-list-cell class="line-cell" :hover="false">
+              <div class="tui-title required">姓&nbsp;&nbsp;&nbsp;名</div>
+              <input v-model="form.adminName" type="text" placeholder-class="phcolor" placeholder-style="color:#CCCCCC" class="tui-input" name="adminName" placeholder="请填写真实姓名" />
+          </tui-list-cell>
+          <tui-list-cell class="line-cell" :hover="false">
+              <div class="tui-title required">手机号</div>
+              <input v-model="form.mobile" type="number" placeholder-class="phcolor" placeholder-style="color:#CCCCCC" class="tui-input" name="mobile" placeholder="请填写手机号" />
+          </tui-list-cell>
+          <tui-list-cell class="line-cell" :hover="false">
+              <div class="tui-title required">验证码</div>
+              <input v-model="form.authCode" type="number" style="width:330upx;" placeholder-class="phcolor" placeholder-style="color:#CCCCCC" class="tui-input" name="authCode" placeholder="请填写验证码" />
+              <button v-if="hasGet == false" class="admin-button-com blue middle" @click="requestAuthCode()">获取</button>
+              <button v-else class="admin-button-com default middle" >{{count}}</button>
+          </tui-list-cell>
+      </view>
+
+      <view class="module-com">
+        <tui-list-cell class="line-cell" :hover="false" >
+          <div class="tui-title">花店名称</div>
+          <input v-model="form.name" type="text" placeholder-class="phcolor" placeholder-style="color:#CCCCCC" class="tui-input" name="name" placeholder="请填写,没店请填您的昵称" />
+        </tui-list-cell>
+        <tui-list-cell class="line-cell" :hover="false" :arrow="true" @click="openAddres" >
+          <div class="tui-title">所在城市</div>
+          <div class="tui-input" v-if="form.province" >{{ form.province + '-' + form.city }}</div>
+          <div class="tui-placeholder" v-else >请选择</div>
+        </tui-list-cell>
+        <tui-list-cell class="line-cell" :hover="false" :arrow="true" @click="selRegionFn" >
+          <div class="tui-title">所在地址</div>
+          <div class="tui-input" v-if="form.address" >{{ form.address }}</div>
+          <div class="tui-placeholder" v-else >请填写</div>
+        </tui-list-cell>
+        <tui-list-cell class="line-cell" :hover="false" >
+          <div class="tui-title">楼号门牌</div>
+          <input v-model="form.floor" type="text" placeholder-class="phcolor" placeholder-style="color:#CCCCCC" class="tui-input" name="floor" placeholder="选填" />
+        </tui-list-cell>
+      </view>
+
+      <view class="module-com">
+        <view class="module-tit">
+          <span>本人正面照</span>
+          <span class="app-color-3">(必填)</span>
+        </view>
+        <view class="module-det">
+          <htz-image-upload :max="1" :compress="true" v-model="currentImgData" :headers="headers" :quality="80"
+           @uploadSuccess="imgUploadSuccess" @imgDelete="imgDeleteFn" :action="uploadImgUrl">
+          </htz-image-upload>
+        </view>
+      </view>
+
+      <view style="color:#999999;font-size:25upx;margin-top:30upx;margin-left:50upx;">
+        <radio-group @change="agreeItem">
+          <label>
+            <radio value="1" style="width:6upx;transform:scale(0.6)" checked />
+            <text style="margin-left:38upx;">领取免费商城</text>
+          </label>
+        </radio-group>
+      </view>
+      <div class="btn-wrap">
+        <button class="admin-button-com blue big" formType="submit" >提交</button>
+      </div>
+
+      <!-- 选择地区 -->
+      <app-area-sel :show.sync="showRegion" @change="changeAreaFn" :city="form.city" />
+      <!-- 省市联动 -->
+      <simple-address ref="simpleAddress" :pickerValueDefault="cityPickerValueDefault" @onConfirm="onCityConfirm" ></simple-address>
+
+    </form>
+  </div>
+</template>
+<script>
+import TuiListCell from "@/components/plugin/list-cell";
+import AppAreaSel from "@/components/app-area-sel";
+import SimpleAddress from "@/components/plugin/simple-address";
+import AppAvatarModule from "@/components/module/app-avatar";
+import AppUploader from "@/components/app-uploader";
+const form = require("@/utils/formValidation.js");
+import {applyLjh} from "@/api/ljh";
+import {getAuthCode} from "@/api/apply";
+import { replaceClientId } from '@/api/admin'
+import { mapGetters,mapActions } from "vuex"
+import htzImageUpload from '@/components/htz-image-upload/htz-image-upload.vue'
+import { APIHOST } from '@/config'
+import { getShopInfo} from "@/utils/auth";
+import { getDictionaries } from '@/api/mini'
+export default {
+  name: "confirm",
+  components: {
+    TuiListCell,
+    AppAreaSel,
+    SimpleAddress,
+    AppAvatarModule,
+    AppUploader,
+    htzImageUpload
+  },
+  data () {
+    return {
+      agree:0,
+      form: {
+        name: "",
+        mobile: "",
+        province: "",
+        city: "",
+        dist: "",
+        address: "",
+        adminName: '',
+        main: 1,
+        licenseNo: "",
+        license: "",
+        floor: "",
+        longitude: "",
+        latitude: "",
+        showAddress:"",
+        authCode:"",
+        cover:''
+      },
+      showRegion: false,
+      regionData: [],
+      cityPickerValueDefault: [0, 0],
+      adminName: "",
+      logo: '',
+      hasGet:false,
+      count:120,
+      INT:false,
+      headers:{token:''},
+      currentImgData: [],
+      uploadImgUrl:APIHOST+'/upload/save-file'
+    };
+  },
+	computed:{
+		...mapGetters(["getLoginInfo"])
+	},
+  onLoad () {
+    const token = uni.getStorageSync('token')
+    this.headers.token = token
+  },
+  onUnload(){
+    clearInterval(this.INT)
+  },
+  methods: {
+    ...mapActions(['setUserShopAll']),
+    agreeItem(e){
+        this.agree = e.target.value
+    },
+    requestAuthCode(){
+      let that = this
+      let mobile = this.form.mobile
+      if(this.$util.checkMobile(mobile) == false){
+        this.$msg('请输入正确手机号')
+        return
+      }
+      getAuthCode({mobile}).then(res=>{
+        if(res.code == 1){
+          that.hasGet = true
+          that.count = 120
+          that.INT = setInterval(function(){
+            if(that.count <= 0){
+              clearInterval(that.INT)
+              that.hasGet = false
+              that.count = 120
+              return
+            }
+            that.count--
+          },1000)
+        }
+      })
+    },
+    resultData (val) {
+      this.form.license = val.shortUrl
+    },
+    _resultData (val) {
+      this.form.logo = val.shortUrl
+    },
+    changeMain (val) {
+      this.form.main = val
+    },
+    bindInfo (val) {
+      this.form.adminName = val.name;
+      this.form.mobile = val.mobile
+    },
+    init () {
+
+    },
+    selRegionFn () {
+      if (!this.form.city) {
+        this.$msg("请先选择城市");
+        return false;
+      }
+      this.showRegion = true;
+    },
+    changeAreaFn (e) {
+      this.form.address = e.title;
+      this.form.showAddress = e.address;
+      this.form.latitude = e.location.lat;
+      this.form.longitude = e.location.lng;
+      this.form.dist = e.district
+    },
+    // 省市联动
+    openAddres () {
+      this.$refs.simpleAddress.open();
+    },
+    onCityConfirm (e) {
+      this.form.province = e.provinceName;
+      this.form.city = e.cityName;
+    },
+    imgUploadSuccess(res) {
+      var _res = JSON.parse(res.data)
+      if(_res.code == 1){
+        this.currentImgData.push(_res.data.smallUrl)
+        this.form.cover = _res.data.shortUrl
+      }
+    },
+    imgDeleteFn(res){
+      this.form.cover=''
+    },
+    formSubmit (e) {
+      let rules = [
+        { name: "name", rule: ["required"], msg: ["请填写花店名称"] },
+        { name: "city", rule: ["required"], msg: ["请选择城市"] },
+        { name: "address", rule: ["required"], msg: ["请填写地址"] },
+        { name: "adminName", rule: ["required"], msg: ["请填写姓名"] },
+        { name: "mobile", rule: ["required"], msg: ["请填写手机号"] }
+      ];
+      let formData = this.form;
+      let checkRes = form.validation(formData, rules)
+      if (!checkRes) {
+        if(this.$util.isEmpty(this.form.cover)){
+          this.$msg('请上传本人正面照')
+          return false
+        }
+        uni.showLoading({mask:true})
+        setTimeout(() => {
+          this.confirmFn()
+        })
+        uni.hideLoading()
+      } else {
+        this.$msg(checkRes);
+      }
+    },
+    confirmFn () {
+      uni.showLoading({mask:true})
+      let currentMiniOpenId = uni.getStorageSync('currentMiniOpenId')
+      let style = this.option.style || 0
+      let from = this.option.from || 0
+      let that = this
+      uni.showLoading({mask:true})
+      applyLjh({hdShopAdminId:this.option.hdShopAdminId,ghsShopAdminId:this.option.ghsShopAdminId,...this.form,style:style,from:from,miniOpenId:currentMiniOpenId}).then(subRes => {
+        uni.hideLoading()
+        let token = subRes.data.token || ''
+        uni.hideLoading()
+        if (that.$util.isEmpty(token)) {
+          that.$msg('出错了')
+          return false
+        }
+        //有几个地方涉及登陆,需要统一方法,请搜索关键词 uni_login
+        if(subRes.code == 1){
+          if (that.$util.isEmpty(subRes)) {
+            that.$msg('出错了')
+            return false
+          }
+          uni.setStorageSync('token', subRes.data.token)
+          uni.setStorageSync('shopId', subRes.data.admin.currentShopId)
+          getDictionaries({ token: subRes.data.token }).then(res => {
+            if (that.$util.isEmpty(res)) {
+              return false
+            }
+            that.$store.commit('setDictionariesInfo', { ...res.data.dict, ...res.data })
+            that.$store.commit('setMyShopInfo', { ...res.data.shop, ...res.data })
+          })
+          that.$store.commit('setLoginInfo', { ...subRes.data.admin, ...subRes.data })
+          getShopInfo(true).then(res => { 
+            uni.setNavigationBarTitle({ title: res.name }) 
+          })
+          that.setUserShopAll()
+          // #ifdef APP-PLUS
+          //保存安卓的clientId
+          let hasClientId = !that.$util.isEmpty(subRes.data.admin.clientId) ? subRes.data.admin.clientId : ''
+          const clientInfo = plus.push.getClientInfo()
+          let currentClientId = !that.$util.isEmpty(clientInfo.clientid) ? clientInfo.clientid : ''
+          if(hasClientId == '' || hasClientId != currentClientId){
+            replaceClientId({id:currentClientId})
+          }
+          // #endif
+        }
+        this.$util.pageTo({url: "/admin/ljh/applyResult", type:2})
+      });
+    }
+  }
+};
+</script>
+<style lang="scss" scoped>
+.module-com {
+  margin-bottom: 20upx;
+  background-color: #fff;
+  .module-tit {
+    padding: 20upx 18upx;
+    font-size: 28upx;
+    font-weight: 600;
+    border-bottom: 1upx solid $borderColor;
+  }
+  .module-det {
+    padding: 0 30upx;
+  }
+}
+// 公共
+.line-cell {
+  .tui-title {
+    width: 210upx;
+    color: $fontColor2;
+  }
+  .tui-input {
+    width: calc(100% - 210upx);
+    font-size: 28upx;
+  }
+  .tui-placeholder {
+    color: #ccc;
+  }
+  .phcolor {
+    color: #ccc;
+  }
+}
+.btn-wrap {
+  width: 90%;
+  margin:30upx auto;
+  .admin-button-com {
+    width: 100%;
+    margin: 0 auto;
+  }
+}
+// 验证码
+.code-wrap {
+  .tui-input {
+    width: calc(100% - 410upx);
+    font-size: 28upx;
+  }
+  .tui-code {
+    width: 200upx;
+    text-align: center;
+    border-left: 1upx solid $borderColor;
+    color: $mainColor;
+  }
+}
+// 推荐人
+.recommend-wrap {
+  padding: 30upx 45upx;
+  .recommend-tag {
+    font-size: 28upx;
+    color: $fontColor2;
+    margin-bottom: 24upx;
+  }
+  .recommend-det {
+    @include disFlex(center, flex-start);
+    .recommend-info {
+      margin-left: 20upx;
+      .app-size-32 {
+        margin-bottom: 4upx;
+      }
+    }
+  }
+}
+</style>

+ 184 - 0
hdApp/src/admin/ljh/confirmPay.vue

@@ -0,0 +1,184 @@
+<template>
+    <div class="app-content awaitPayYe awaitPayYe">
+    <div class="callback-wrap">
+      <div class="bg_01"></div>
+      <div class="callback-blo">
+        <block>
+          <div class="icon">
+            <i class="iconfont icondaizhifu"></i>
+          </div>
+        </block>
+        <view class="wait">待付款</view>
+        <block>
+          <div class="price">
+            <span>¥</span>
+            <span class="app-size-36 app-bold">{{ realPrice || '0.00'}}</span>
+          </div>
+          <div class="order-num app-color-3">订单号: {{ orderSn || ''}}</div>
+        </block>
+        <block>
+          <div class="call-one-btn">
+            <view>
+              <button class="button-com pay-wx" :class="[remainPayTime >0 ? 'green':'default']" :disabled="remainPayTime >0 ? false : true" @click="wxPayFn">微信支付</button>
+            </view>
+          </div>
+        </block>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+import { applyWxPay,getDetail } from "@/api/ljh";
+import { mapGetters } from "vuex";
+import wexinPay from "@/utils/pay/wxPay";
+import { postWxCode } from '@/api/mini'
+import { updateMiniOpenId } from '@/api/admin'
+export default {
+  name: "confirmPay",
+  components: {
+  },
+  data () {
+    return {
+      options: {},
+      type: '',
+      keyShow: false,
+      psdKey: '',
+      orderSn: '',
+      realPrice: '',
+      pageId: '',
+      remainPayTime:120,
+      hasDebtPay:0,
+      balance:0
+    };
+  },
+  onLoad (options) {
+    this.id = options.id
+  },
+  computed: {
+    ...mapGetters(["getLoginInfo", 'getDictionariesInfo']),
+  },
+  mounted () {
+  },
+  methods: {
+    init(){
+      getDetail({id:this.option.id}).then(res=>{
+        if(res.code == 1){
+          this.realPrice = res.data.realPrice ? parseFloat(res.data.realPrice) : ''
+          this.orderSn = res.data.orderSn
+        }
+      })
+    },
+    wxPayFn () {
+      let that = this
+      uni.showLoading({title: '加载中',mask:true})
+      applyWxPay({ orderSn: this.orderSn }).then(res => {
+        uni.hideLoading()
+        if(res.code == 1){
+          if(res.data.hasNoMiniOpenId && res.data.hasNoMiniOpenId == 1){
+              //没有miniOpenId,补miniOpenId
+              uni.login({
+                provider: 'weixin',
+                success: res => {
+                  uni.setStorageSync('code', res.code)
+                  postWxCode({ code: res.code }).then(subRes => {
+                    if(subRes.data.currentMiniOpenId){
+                      let currentMiniOpenId = subRes.data.currentMiniOpenId
+                      updateMiniOpenId({miniOpenId:currentMiniOpenId}).then(subRes=>{
+                        if(subRes.code == 1){
+                            that.$util.confirmModal({content:'网络开小差了,请继续',okText:'确认',singer:true},() => {
+                              that.wxPayFn()
+                            })
+                        }
+                      })
+                    }
+                  })
+                }
+              })
+          }else{
+            this.pageId = res.data.id
+            wexinPay(res.data, this.getSuccess, this.getError)
+          }
+        }
+      })
+    },
+    getSuccess () {
+      this.pageTo({ url: '/pagesPurchase/particulars?id=' + this.pageId, type: 2 })
+    },
+    getError () {
+    }
+  }
+};
+</script>
+<style lang="scss" scoped>
+.app-content {
+  .callback-wrap {
+    padding-top: 50upx;
+    background-repeat: no-repeat;
+    background-size: 100% auto;
+    position: relative;
+    .bg_01 {
+      position: absolute;
+      top: 0;
+      left: 0;
+      width: 100vw;
+      height: 290upx;
+      background: #3385ff;
+      border-radius: 0upx 0upx 83upx 83upx;
+      z-index: 1;
+    }
+    .callback-blo {
+      position: absolute;
+      z-index: 9;
+      left: 50%;
+      transform: translateX(-50%);
+      width: 90%;
+      margin: 0 auto;
+      padding: 70upx 0;
+      background-color: #fff;
+      box-shadow: 2upx 2upx 16upx 0upx rgba(181, 181, 181, 0.29);
+      border-radius: 10upx;
+      text-align: center;
+      .icon {
+        .iconfont {
+          font-size: 170upx;
+        }
+      }
+      .call-one-btn {
+        .button-com {
+          width: 80%;
+          padding-top: 32upx;
+          padding-bottom: 32upx;
+          font-size: 33upx;
+          margin-top: 50upx;
+        }
+      }
+    }
+  }
+}
+.awaitPayWx,
+.awaitPayYe {
+  .status-text {
+    margin-top: 22upx;
+    margin-bottom: 52upx;
+    color: #ffa92e;
+  }
+  .surplus {
+    margin-top: 22upx;
+    margin-bottom: 38upx;
+  }
+  .icon {
+    .iconfont {
+      color: #ffa92e;
+    }
+  }
+}
+.wait {
+  color: #ffa92e;
+  font-size: 40upx;
+  font-weight: 700;
+  margin: 20upx 0;
+}
+.balance{
+  margin-top:20upx;
+}
+</style>

+ 188 - 0
hdApp/src/admin/ljh/info.vue

@@ -0,0 +1,188 @@
+<template>
+  <view class="app-content">
+    <app-swiper :height="{type: 'number',val: 750}" :tagShow="true" :autoplay='false' :list="imgList" />
+    <view class="shop-intro">
+      <view class="app-price app-bold">
+        <text class="app-size-34" style="color:black;font-size:38upx;font-weight:bold;">第二十二届 中国花卉零售业交流会</text>
+      </view>
+      <view class="tui-pro-titbox">
+        <view class="tui-pro-title app-size-32" style="font-size:35upx;font-weight:bold;color:red;">
+          <text>门票 ¥790</text>
+        </view>
+        <button open-type="share" class="tui-share-btn tui-share-position" style="background-color:#EDEDED;">
+          <app-tag type="gray" tui-tag-class="tui-tag-share tui-size" shape="circleLeft" size="small" >
+            <view class="flex-center" style="padding:10upx 0;">
+              <i class="iconfont iconfenxiang"></i>
+              <text class="tui-share-text tui-gray">分享</text>
+            </view>
+          </app-tag>
+        </button>
+      </view>
+    </view>
+    <view class="module-wrap shop-detail">
+      <view class="module-tit app-size-30"></view>
+      <view class="module-det">
+        <view class="module-det-text">
+          <image :src="`${constant.imgUrl}/ljh/ap4.jpg`" mode="widthFix" style="width:100%"></image>
+          <view style="text-align:center;padding:26upx 0 26upx 0;font-size:26upx;">本页由 <text style="color:green;margin:0 10upx 0 10upx;">花掌柜®</text> 提供技术支持</view>
+        </view>
+      </view>
+    </view>
+    <buy-foot @buy="register" @goShop="goShopIndex()" />
+    <sel-popup :show="popupShow" :info="productInfo" :buyNum="buyNum" @change="changeNum" @close="hidePopup" @nextFn="nextFn" />
+    <app-share-mask :show="showShare" text="分享商品" @click="hideShare" />
+  </view>
+</template>
+<script>
+import AppImg from "@/components/app-img";
+import AppSwiper from "@/components/app-swiper";
+import AppTag from "@/components/module/app-tag.vue";
+import BuyFoot from "./components/buy-foot.vue";
+import SelPopup from "./components/sel-popup.vue";
+import AppShareMask from "@/components/module/app-share-mask";
+import { mapGetters } from "vuex";
+import productMins from "@/mixins/cgProduct";
+import { share } from "@/mixins";
+import { IMGHOST } from '@/config'
+export default {
+  name: "detail",
+  mixins: [productMins,share],
+  components: {
+    AppSwiper,
+    AppTag,
+    BuyFoot,
+    SelPopup,
+    AppImg,
+    AppShareMask
+  },
+  data() {
+    return {
+      productInfo: {},
+      imgList: [],
+      buyNum: 1,
+      popupShow: false,
+      loginShow: false,
+      showShare: false,
+      isShare:true,
+      pageType: "cg",
+      notOpenShop:true
+    };
+  },
+  computed: {
+    ...mapGetters({ shopUser: "getShopUser",loginInfo: "getLoginInfo" })
+  },
+	watch: {
+		loginInfo: {
+			deep: true,
+			handler: function(val) {
+				if(this.$util.isEmpty(val)){
+					this.notOpenShop = true
+				}else{
+					this.notOpenShop = false
+				}
+			},
+			immediate:true
+		}
+	},
+  onLoad(){
+    this.imgList = [{img:IMGHOST+'/ljh/1.jpg'},{img:IMGHOST+'/ljh/2.jpg'}]
+  },
+  methods: {
+    nextFn(num){
+    },
+    goShopIndex(){
+    },
+    init() {
+      let that = this
+			//扫码进来
+			if(this.option.scene){
+				const scene = decodeURIComponent(this.option.scene);
+				var sceneItem = scene.split("&");
+				var arr, name, value;
+				var sceneArray = new Array();
+				for (var i = 0, l = sceneItem.length; i < l; i++) {
+					arr = sceneItem[i].split("=");
+					name = arr[0];
+					value = arr[1];
+					sceneArray[name] = value;
+				}
+        let id = sceneArray.id ? sceneArray.id : 0
+        let shopId = sceneArray.sId ? sceneArray.sId : 0
+			}
+    },
+    changeNum(e) {
+      this.buyNum = e.value;
+    },
+    register() {
+        this.pageTo({url:'/admin/ljh/confirm',type:2})
+    },
+    hidePopup() {
+      this.popupShow = false;
+    },
+    hideShare() {
+      this.showShare = false;
+    }
+  }
+};
+</script>
+
+<style lang="scss" scoped>
+.app-content {
+  padding-bottom: 120upx;
+  // 公共模块
+  .module-wrap {
+    margin-top: 20upx;
+    background-color: #fff;
+    .module-tit {
+      padding: 14upx 24upx;
+    }
+    .module-det {
+      color: $fontColor2;
+    }
+  }
+  .shop-intro {
+    background: #fff;
+    padding: 30upx 0 10upx 30upx;
+    .tui-pro-titbox {
+      margin: 20upx 0 20upx;
+      @include disFlex(center, space-between);
+      .tui-pro-title {
+        width: 80%;
+        overflow: hidden;
+        text-overflow:ellipsis;
+        white-space: nowrap;
+      }
+      .tui-share-btn {
+        display: block;
+        background: none;
+        margin: 0;
+        padding: 0;
+        border-radius: 0;
+        .tui-share-text {
+          padding-left: 4upx;
+          color: $fontColor3;
+        }
+      }
+      .iconfenxiang {
+        font-size: 26upx;
+        color: $fontColor3;
+        margin-right: 6upx;
+      }
+    }
+  }
+  .shop-express {
+    display: -webkit-flex;
+    display: flex;
+    -webkit-justify-content: space-between;
+    justify-content: space-between;
+    background:white;
+    color:rgb(5, 116, 5);
+    padding:0 22upx 20upx 22upx;
+  }
+  .shop-desc {
+    .module-det {
+      line-height: 48upx;
+    }
+  }
+}
+</style>

+ 69 - 0
hdApp/src/admin/ljh/result.vue

@@ -0,0 +1,69 @@
+<template>
+	<appResult title="注册成功">
+    <view class="dec"></view>
+    <view v-if="fromCg == 1">
+      <button class="admin-button-com blue big" @click="beginCg()" >开始买花</button>
+    </view>
+    <view v-else>
+      <button class="admin-button-com blue big" v-if="scene==''" @click="goBack()" >返回</button>
+      <button class="admin-button-com blue big" v-else @click="beginCg()" >开始买花</button>
+    </view>
+	</appResult>
+</template>
+<script>
+import appResult from '@/components/app-result'
+export default {
+	name: "applyResult",
+	components:{
+		appResult
+    },
+    data(){
+      return {
+        scene:'',
+        fromCg:0
+      }
+    },
+    onUnload() {
+    },
+    onLoad () {
+
+      //供货商打开小程序分享给客户,客户需要采购进来
+      let ghsCgOption = uni.getStorageSync('ghsCgOption')
+      if(ghsCgOption.fromCg){
+        this.fromCg = ghsCgOption.fromCg
+      }
+
+      //供货商打开太阳码分享给客户,客户需要采购进来
+      let scene = uni.getStorageSync('ghsCgScene')
+      if(scene){
+        this.scene = scene
+      }
+
+    },
+    methods:{
+      beginCg(){
+        if(this.fromCg == 1){
+          let ghsCgOption = uni.getStorageSync('ghsCgOption')
+          this.$util.pageTo({url: "/pagesPurchase/ghsProduct", query:ghsCgOption, type:2})
+        }else{
+          this.$util.pageTo({url: "/pagesPurchase/ghsProduct",query: {scene:this.scene},type:2})
+        }
+      },
+      goBack() {
+        uni.navigateBack()
+      }
+    }
+};
+</script>
+<style lang="scss" scoped>
+    .dec {
+     color: #666666;   
+     font-size: 28upx;
+     font-weight: 400;
+     margin-bottom: 30upx;
+    }
+	.admin-button-com {
+		margin-bottom: 20upx;
+		width: 100%;
+	}
+</style>

+ 14 - 0
hdApp/src/api/ljh/index.js

@@ -0,0 +1,14 @@
+import https from '@/plugins/luch-request_0.0.7/request'
+
+//报名
+export const applyLjh = data => {
+    return https.post('/ljh/apply', data)
+}
+
+export const applyWxPay = async data => {
+	return https.post("/ljh/wx-pay", data);
+};
+
+export const getDetail = data => {
+	return https.get("/ljh/detail", data);
+};

+ 8 - 0
hdApp/src/pages.json

@@ -184,6 +184,14 @@
 				{ "path": "sel-goods", "style": { "navigationBarTitleText": "商品选择" } }
 			]
 		},
+		{
+			"root": "admin/ljh",
+			"pages": [
+				{"path":"info","style": { "navigationBarTitleText": "零交会"}},
+				{"path":"confirm","style": { "navigationBarTitleText": "请填写信息"}},
+				{"path":"confirmPay","style": { "navigationBarTitleText": "待支付"}}
+			]
+		},
 		{
 			"root": "admin/staff",
 			"pages": [