diff --git a/.eslintrc.js b/.eslintrc.js
index e0b044f..a2dc5d1 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -13,6 +13,7 @@ module.exports = {
         "Atomics": "readonly",
         "SharedArrayBuffer": "readonly",
         "uni": true,
+        "wx": true,
         "module": true
     },
     "parserOptions": {
diff --git a/src/components/uni-popup/popup.js b/src/components/uni-popup/popup.js
new file mode 100644
index 0000000..27beddf
--- /dev/null
+++ b/src/components/uni-popup/popup.js
@@ -0,0 +1,25 @@
+// import message from './message.js'
+// 定义 type 类型:弹出类型:top/bottom/center
+const config = {
+  // 顶部弹出
+  top: 'top',
+  // 底部弹出
+  bottom: 'bottom',
+  // 居中弹出
+  center: 'center',
+  // 消息提示
+  message: 'top',
+  // 对话框
+  dialog: 'center',
+  // 分享
+  share: 'bottom',
+}
+
+export default {
+  data() {
+    return {
+      config: config,
+    }
+  },
+  // mixins: [message],
+}
diff --git a/src/components/uni-popup/uni-popup-post.vue b/src/components/uni-popup/uni-popup-post.vue
new file mode 100644
index 0000000..7a8dcf5
--- /dev/null
+++ b/src/components/uni-popup/uni-popup-post.vue
@@ -0,0 +1,207 @@
+<template>
+  <view class="uni-popup-post">
+    <image
+      class="uni_post_img"
+      :src="postUrl"
+    />
+    <view
+      @tap="saveAndClose"
+      class="uni_post_button_box"
+    >
+      保存图片
+    </view>
+  </view>
+</template>
+
+<script>
+export default {
+  name: 'UniPopupPost',
+  props: {
+    postUrl: {
+      type: String,
+      default: 'https://api.glass.xiuyetang.com/adv_pic/428_0_7.png',
+    },
+  },
+  inject: ['popup'],
+  data() {
+    return {}
+  },
+  created() {
+    console.log('dada', this)
+  },
+  methods: {
+    // 保存图片并关闭窗口
+    saveAndClose() {
+      // 获取用户保存相册权限
+      const scope = 'scope.writePhotosAlbum'
+      const that = this
+      uni.getSetting({
+        success(res) {
+          console.log('获取用户保存相册权限', res)
+          if (!res.authSetting[scope]) {
+            uni.authorize({
+              scope,
+              success() {
+                console.log('获取用户保存相册权限---->', '授权成功')
+                // 保存到相册
+                uni.showLoading({
+                  title: '保存中',
+                })
+                that.saveImage()
+              },
+              fail() {
+                console.log('获取用户保存相册权限---->', '授权失败')
+                that.secondGetPhoteAuthor()
+              },
+            })
+          } else {
+            console.log('拥有授权权限')
+            // 保存到相册
+            uni.showLoading({
+              title: '保存中',
+            })
+            that.saveImage()
+          }
+
+          that.popup.close()
+        },
+        fail(res) {
+          console.log('授权失败------>', res)
+          uni.showToast({
+            title: '保存失败',
+            icon: 'none',
+            duration: 2000,
+          })
+        },
+      })
+    },
+    // 保存到相册
+    saveImage() {
+      const that = this
+      uni.getImageInfo({
+        src: that.postUrl,
+        success(res) {
+          console.log('图片读取是否可行', res)
+          uni.saveImageToPhotosAlbum({
+            filePath: res.path,
+            success() {
+              uni.showToast({
+                title: '已保存到相册',
+                icon: 'none',
+                duration: 2000,
+              })
+              uni.hideLoading()
+            },
+            fail(err) {
+              console.log('用户拒绝', err)
+              if (err.errMsg === 'saveImageToPhotosAlbum:fail auth deny') {
+                console.log('当用户拒绝,再次发起授权')
+                that.secondGetPhoteAuthor()
+              } else if (err.errMsg === 'saveImageToPhotosAlbum:fail cancel') {
+                uni.showToast({
+                  title: '已取消保存',
+                  icon: 'none',
+                  duration: 2000,
+                })
+                uni.hideLoading()
+              } else {
+                uni.showToast({
+                  title: '请截屏保存分享',
+                  icon: 'none',
+                  duration: 2000,
+                })
+                uni.hideLoading()
+              }
+            },
+          })
+        },
+        fail(res) {
+          console.log('授权失败----->', res)
+          uni.hideLoading()
+          uni.showToast({
+            title: '保存失败',
+            icon: 'none',
+            duration: 2000,
+          })
+        },
+      })
+    },
+    // 二次请求授权
+    secondGetPhoteAuthor() {
+      const that = this
+      uni.showModal({
+        title: '保存海报',
+        content: '需要您提供保存相册权限',
+        success: (res) => {
+          if (res.confirm) {
+            uni.openSetting({
+              success(settingdata) {
+                console.log('settingdata 二次弹窗获取', settingdata)
+                if (settingdata.authSetting['scope.writePhotosAlbum']) {
+                  console.log('二次弹窗获取---->', '获取 相册 权限成功,给出再次点击图片保存到相册的提示。')
+                  uni.showLoading({
+                    title: '保存中',
+                  })
+                  that.saveImage()
+                } else {
+                  uni.showToast({
+                    title: '保存失败',
+                    icon: 'none',
+                    duration: 2000,
+                  })
+                  console.log('二次弹窗获取', '获取 相册 权限失败,给出不给权限就无法正常使用的提示')
+                }
+              },
+            })
+          } else {
+            uni.showToast({
+              title: '保存失败',
+              icon: 'none',
+              duration: 2000,
+            })
+          }
+        },
+        fail(err) {
+          uni.showToast({
+            title: '保存失败',
+            icon: 'none',
+            duration: 2000,
+          })
+          console.log('再次失败', err)
+        },
+      })
+    },
+  },
+}
+</script>
+<style lang="scss" scoped>
+.uni-popup-post {
+  border-radius: 8px 8px 0px 0px;
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.uni_post_img {
+  width: 690rpx;
+  height: 466.667px;
+  margin-top: -180rpx;
+}
+
+.uni_post_button_box {
+  height: 112rpx;
+  line-height: 112rpx;
+  background-color: #ff6b4a;
+  border-radius: 4px;
+  width: 350px;
+  color: #fff;
+  text-align: center;
+  margin-top: 44rpx;
+  font-family: PingFangSC-Medium;
+  font-size: 14px;
+  color: #ffffff;
+  letter-spacing: -0.26px;
+  text-align: center;
+}
+</style>
diff --git a/src/components/uni-popup/uni-popup-share.vue b/src/components/uni-popup/uni-popup-share.vue
new file mode 100644
index 0000000..200d5b2
--- /dev/null
+++ b/src/components/uni-popup/uni-popup-share.vue
@@ -0,0 +1,185 @@
+<template>
+  <view class="uni-popup-share">
+    <!-- <view class="uni-share-title"><text class="uni-share-title-text">{{title}}</text></view> -->
+    <view class="uni-share-content">
+      <view class="uni-share-content-box">
+        <button
+          class="uni-share-content-item"
+          v-for="(item,index) in bottomData"
+          :key="index"
+          :open-type="item.name === 'friend' ? 'share': ''"
+          @click.stop="select(item,index)"
+        >
+          <image
+            class="uni-share-image"
+            :src="item.icon"
+            mode="aspectFill"
+          ></image>
+          <view class="uni-share-text">{{item.text}}</view>
+        </button>
+      </view>
+    </view>
+    <view
+      @tap="close"
+      class="uni-share-button-box"
+    >
+      取消
+    </view>
+  </view>
+</template>
+
+<script>
+export default {
+  name: 'UniPopupShare',
+  props: {
+    title: {
+      type: String,
+      default: '分享到',
+    },
+  },
+  inject: ['popup'],
+  data() {
+    return {
+      bottomData: [{
+        text: '推荐到好物圈',
+        icon: '/static/img/share/recommend.png',
+        name: 'recommend',
+      }, {
+        text: '转发给朋友/群',
+        icon: '/static/img/share/friend.png',
+        name: 'friend',
+      }, {
+        text: '生成海报',
+        icon: '/static/img/share/poster.png',
+        name: 'poster',
+      },
+      ],
+    }
+  },
+  created() {},
+  methods: {
+    /**
+       * 选择内容
+       */
+    select(item, index) {
+      this.$emit('select', {
+        item,
+        index,
+      }, () => {
+        this.popup.close()
+      })
+    },
+    /**
+       * 关闭窗口
+       */
+    close() {
+      this.popup.close()
+    },
+  },
+}
+</script>
+<style lang="scss" scoped>
+.uni-popup-share {
+  background-color: #fff;
+  border-radius: 8px 8px 0px 0px;
+}
+.uni-share-title {
+  /* #ifndef APP-NVUE */
+  display: flex;
+  /* #endif */
+  flex-direction: row;
+  align-items: center;
+  justify-content: center;
+  height: 40px;
+}
+.uni-share-title-text {
+  font-size: 14px;
+  color: #666;
+}
+.uni-share-content {
+  /* #ifndef APP-NVUE */
+  display: flex;
+  /* #endif */
+  flex-direction: row;
+  justify-content: center;
+  padding-top: 10px;
+}
+
+.uni-share-content-box {
+  /* #ifndef APP-NVUE */
+  display: flex;
+  /* #endif */
+
+  flex-direction: column;
+  justify-content: space-between;
+  width: 360px;
+}
+
+.uni-share-content-item {
+  /* #ifndef APP-NVUE */
+  display: flex;
+  /* #endif */
+  flex-direction: row;
+  flex-wrap: wrap;
+  padding: 10px 0;
+  align-items: center;
+  border-bottom: 1px solid #f2f2f2;
+
+  background-color: #fff;
+  font-family: PingFangSC-Regular;
+  font-size: 16px;
+  color: #333333;
+  letter-spacing: -0.3px;
+  margin: 0;
+  &::after {
+    border: 0;
+  }
+}
+
+.uni-share-content-item:active {
+  background-color: #f5f5f5;
+}
+
+.uni-share-image {
+  width: 84rpx;
+  height: 84rpx;
+  vertical-align: middle;
+  margin-left: 40rpx;
+}
+
+.uni-share-text {
+  font-family: PingFangSC-Regular;
+  font-size: 16px;
+  color: #3b4144;
+  margin-left: 20rpx;
+}
+// .share_button {
+//   border: none;
+// }
+
+.uni-share-button-box {
+  /* #ifndef APP-NVUE */
+  // display: flex;
+  /* #endif */
+  // flex-direction: row;
+  // padding: 10px 15px;
+  height: 100rpx;
+  font-family: PingFangSC-Regular;
+  font-size: 16px;
+  color: #333333;
+  letter-spacing: -0.3px;
+  text-align: center;
+  line-height: 100rpx;
+}
+
+.uni-share-button {
+  flex: 1;
+  border-radius: 50px;
+  color: #666;
+  font-size: 16px;
+}
+
+.uni-share-button::after {
+  border-radius: 50px;
+}
+</style>
diff --git a/src/components/uni-popup/uni-popup.vue b/src/components/uni-popup/uni-popup.vue
new file mode 100644
index 0000000..508fd04
--- /dev/null
+++ b/src/components/uni-popup/uni-popup.vue
@@ -0,0 +1,313 @@
+<template>
+  <view
+    v-if="showPopup"
+    class="uni-popup"
+    :class="[popupstyle]"
+    @touchmove.stop.prevent="clear"
+  >
+    <uni-transition
+      v-if="maskShow"
+      :mode-class="['fade']"
+      :styles="maskClass"
+      :duration="duration"
+      :show="showTrans"
+      @click="onTap"
+    />
+    <uni-transition
+      :mode-class="ani"
+      :styles="transClass"
+      :duration="duration"
+      :show="showTrans"
+      @click="onTap"
+    >
+      <view
+        class="uni-popup__wrapper-box"
+        @click.stop="clear"
+      >
+        <slot />
+      </view>
+    </uni-transition>
+  </view>
+</template>
+
+<script>
+import uniTransition from '../uni-transition/uni-transition.vue'
+import popup from './popup.js'
+/**
+   * PopUp 弹出层
+   * @description 弹出层组件,为了解决遮罩弹层的问题
+   * @tutorial https://ext.dcloud.net.cn/plugin?id=329
+   * @property {String} type = [top|center|bottom] 弹出方式
+   *   @value top 顶部弹出
+   *   @value center 中间弹出
+   *   @value bottom 底部弹出
+   *   @value message 消息提示
+   *   @value dialog 对话框
+   *   @value share 底部分享示例
+   * @property {Boolean} animation = [ture|false] 是否开启动画
+   * @property {Boolean} maskClick = [ture|false] 蒙版点击是否关闭弹窗
+   * @event {Function} change 打开关闭弹窗触发,e={show: false}
+   */
+
+export default {
+  name: 'UniPopup',
+  components: {
+    uniTransition,
+  },
+  props: {
+    // 开启动画
+    animation: {
+      type: Boolean,
+      default: true,
+    },
+    // 弹出层类型,可选值,top: 顶部弹出层;bottom:底部弹出层;center:全屏弹出层
+    // message: 消息提示 ; dialog : 对话框
+    type: {
+      type: String,
+      default: 'center',
+    },
+    // maskClick
+    maskClick: {
+      type: Boolean,
+      default: true,
+    },
+  },
+  provide() {
+    return {
+      popup: this,
+    }
+  },
+  mixins: [popup],
+  watch: {
+    /**
+       * 监听type类型
+       */
+    type: {
+      handler: function(newVal) {
+        this[this.config[newVal]]()
+      },
+      immediate: true,
+    },
+    /**
+       * 监听遮罩是否可点击
+       * @param {Object} val
+       */
+    maskClick(val) {
+      this.mkclick = val
+    },
+  },
+  data() {
+    return {
+      duration: 300,
+      ani: [],
+      showPopup: false,
+      showTrans: false,
+      maskClass: {
+        position: 'fixed',
+        bottom: 0,
+        top: 0,
+        left: 0,
+        right: 0,
+        backgroundColor: 'rgba(0, 0, 0, 0.4)',
+      },
+      transClass: {
+        position: 'fixed',
+        left: 0,
+        right: 0,
+      },
+      maskShow: true,
+      mkclick: true,
+      popupstyle: 'top',
+    }
+  },
+  created() {
+    this.mkclick = this.maskClick
+    if (this.animation) {
+      this.duration = 300
+    } else {
+      this.duration = 0
+    }
+  },
+  methods: {
+    clear(e) {
+      // TODO nvue 取消冒泡
+      e.stopPropagation()
+    },
+    open() {
+      this.showPopup = true
+      this.$nextTick(() => {
+        new Promise(resolve => {
+          clearTimeout(this.timer)
+          this.timer = setTimeout(() => {
+            this.showTrans = true
+            // fixed by mehaotian 兼容 app 端
+            this.$nextTick(() => {
+              resolve()
+            })
+          }, 50)
+        }).then(res => {
+          // 自定义打开事件
+          clearTimeout(this.msgtimer)
+          this.msgtimer = setTimeout(() => {
+            this.customOpen && this.customOpen()
+          }, 100)
+          this.$emit('change', {
+            show: true,
+            type: this.type,
+          })
+        })
+      })
+    },
+    close(type) {
+      this.showTrans = false
+      this.$nextTick(() => {
+        this.$emit('change', {
+          show: false,
+          type: this.type,
+        })
+        clearTimeout(this.timer)
+        // 自定义关闭事件
+        this.customOpen && this.customClose()
+        this.timer = setTimeout(() => {
+          this.showPopup = false
+        }, 300)
+      })
+    },
+    onTap() {
+      if (!this.mkclick) return
+      this.close()
+    },
+    /**
+       * 顶部弹出样式处理
+       */
+    top() {
+      this.popupstyle = 'top'
+      this.ani = ['slide-top']
+      this.transClass = {
+        position: 'fixed',
+        left: 0,
+        right: 0,
+      }
+    },
+    /**
+       * 底部弹出样式处理
+       */
+    bottom() {
+      this.popupstyle = 'bottom'
+      this.ani = ['slide-bottom']
+      this.transClass = {
+        position: 'fixed',
+        left: 0,
+        right: 0,
+        bottom: 0,
+      }
+    },
+    /**
+       * 中间弹出样式处理
+       */
+    center() {
+      this.popupstyle = 'center'
+      this.ani = ['zoom-out', 'fade']
+      this.transClass = {
+        position: 'fixed',
+        /* #ifndef APP-NVUE */
+        display: 'flex',
+        flexDirection: 'column',
+        /* #endif */
+        bottom: 0,
+        left: 0,
+        right: 0,
+        top: 0,
+        justifyContent: 'center',
+        alignItems: 'center',
+      }
+    },
+  },
+}
+</script>
+<style lang="scss" scoped>
+.uni-popup {
+  position: fixed;
+  /* #ifndef APP-NVUE */
+  z-index: 99;
+  /* #endif */
+}
+
+.uni-popup__mask {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  background-color: $uni-bg-color-mask;
+  opacity: 0;
+}
+
+.mask-ani {
+  transition-property: opacity;
+  transition-duration: 0.2s;
+}
+
+.uni-top-mask {
+  opacity: 1;
+}
+
+.uni-bottom-mask {
+  opacity: 1;
+}
+
+.uni-center-mask {
+  opacity: 1;
+}
+
+.uni-popup__wrapper {
+  /* #ifndef APP-NVUE */
+  display: block;
+  /* #endif */
+  position: absolute;
+}
+
+.top {
+  /* #ifdef H5 */
+  top: var(--window-top);
+  /* #endif */
+  /* #ifndef H5 */
+  top: 0;
+  /* #endif */
+}
+
+.bottom {
+  bottom: 0;
+}
+
+.uni-popup__wrapper-box {
+  /* #ifndef APP-NVUE */
+  display: block;
+  /* #endif */
+  position: relative;
+  /* iphonex 等安全区设置,底部安全区适配 */
+  /* #ifndef APP-NVUE */
+  padding-bottom: constant(safe-area-inset-bottom);
+  padding-bottom: env(safe-area-inset-bottom);
+  /* #endif */
+}
+
+.content-ani {
+  // transition: transform 0.3s;
+  transition-property: transform, opacity;
+  transition-duration: 0.2s;
+}
+
+.uni-top-content {
+  transform: translateY(0);
+}
+
+.uni-bottom-content {
+  transform: translateY(0);
+}
+
+.uni-center-content {
+  transform: scale(1);
+  opacity: 1;
+}
+</style>
diff --git a/src/pages/details/components/Introduce.vue b/src/pages/details/components/Introduce.vue
index 6529807..d99ef9c 100644
--- a/src/pages/details/components/Introduce.vue
+++ b/src/pages/details/components/Introduce.vue
@@ -120,12 +120,8 @@ export default {
     tag: Object,
   },
   created() {
-    console.log('lalal')
-    console.log('tag', this)
   },
   updated() {
-    console.log('lalal-2')
-    console.log('tag-2', this.tag)
   },
 }
 </script>
diff --git a/src/pages/details/details.vue b/src/pages/details/details.vue
index 726f27f..c983aff 100644
--- a/src/pages/details/details.vue
+++ b/src/pages/details/details.vue
@@ -31,7 +31,10 @@
       <!-- 产品名称 -->
       <view class="info_name">
         <text class="info_name_name">{{goodsInfo.name || '暂无'}}</text>
-        <view class="info_name_share">
+        <view
+          @tap="confirmShare"
+          class="info_name_share"
+        >
           <image src="/static/img/detail/share-icon.png"></image>
           <text>分享</text>
         </view>
@@ -164,19 +167,51 @@
         >立即购买</view>
       </view>
     </view>
+    <!-- 参数选择 -->
+    <!-- <BottomSheet
+      :isCart="isCart"
+      @addCart="addCart"
+      :pid="pid"
+      :goodInfo="goodInfo"
+      :isShowBottom="isShowBottom"
+      @closeBottom="closeBottom"
+    ></BottomSheet> -->
+    <!-- 分享 -->
+    <template>
+      <uni-popup
+        ref="popupShare"
+        type="share"
+      >
+        <uni-popup-share @select="selectShare"></uni-popup-share>
+      </uni-popup>
+    </template>
+    <!-- 分享海报 -->
+    <template>
+      <uni-popup
+        ref="uniPopupPost"
+        type="center"
+      >
+        <uni-popup-post :postUrl="postUrl"></uni-popup-post>
+      </uni-popup>
+    </template>
   </view>
 </template>
 
 <script>
 import store from '@/store'
-import Introduce from './components/Introduce' // 商品介绍基本信息
+import Introduce from './components/Introduce' // 商品介绍基本信息组件
 import AfterSails from './components/AfterSails' // 售后保障组件
-// import BottomSheet from '@/components/BottomSheet.vue'
+import uniPopupShare from '@/components/uni-popup/uni-popup-share.vue' // 分享组件
+import uniPopupPost from '@/components/uni-popup/uni-popup-post.vue' // 分享组件
+// import BottomSheet from '@/components/BottomSheet/BottomSheet.vue' // 参数选择组件
 
 export default {
   components: {
     Introduce,
     AfterSails,
+    // BottomSheet,
+    uniPopupShare,
+    uniPopupPost,
   },
   data () {
     return {
@@ -189,6 +224,7 @@ export default {
         '规格参数',
         '售后保障',
       ],
+      showPostImg: false, // 是否展示分享海报
     }
   },
   onLoad({ pid = this.pid, sk_id: skId }) {
@@ -230,6 +266,14 @@ export default {
     cartNumber() {
       return this.$store.state.details.cartNumber
     },
+    // 购物车数目
+    skuList() {
+      return this.$store.state.details.skuList
+    },
+    // 分享海报
+    postUrl() {
+      return this.$store.state.details.postUrl
+    },
   },
   methods: {
     // 获取产品详情
@@ -249,6 +293,103 @@ export default {
         this.item_current = e
       }
     },
+    // 打开分享界面
+    confirmShare() {
+      this.$refs.popupShare.open()
+    },
+    // 选择分享
+    selectShare(e, done) {
+      switch (e.item.name) {
+        // 分享到好物圈
+        case 'recommend':
+          this.shareRecommend()
+          break
+        // 分享到朋友圈
+        case 'friend':
+          break
+        // 生成海报
+        case 'poster':
+          uni.showLoading({
+            title: '生成图片中',
+          })
+          this.sharePost()
+          break
+        default:
+          break
+      }
+      done()
+    },
+    // 分享到好物圈
+    shareRecommend() {
+      if (wx.openBusinessView) {
+        wx.openBusinessView({
+          businessType: 'friendGoodsRecommend',
+          extraData: {
+            product: {
+              item_code: '58_68',
+              title: this.goodsInfo.name,
+              image_list: this.carousel,
+            },
+          },
+          success: function (res) {
+            uni.showToast({
+              title: '好物圈分享成功!',
+              icon: 'none',
+              duration: 2000,
+            })
+            // 向服务器报告这个事情
+            // TODO:::记录这个用户的推广过程。
+            console.log('好物圈分享成功!', res)
+          },
+          fail: function (res) {
+            console.log('好物圈分享失败!', res)
+          },
+        })
+      }
+    },
+    // 分享到朋友/圈
+    shareFriend() {
+      this.onShareAppMessage()
+    },
+    // 朋友圈设置页面
+    onShareAppMessage() {
+      let myName = this.$store.state.user.userInfo.nickName
+      if (myName === '' || myName.length < 1 || myName === '匿名用户' || typeof myName === 'undefined') {
+        myName = '【神秘人】'
+      } else {
+        myName = '【' + myName + '】'
+      }
+      const uid = uni.getStorageSync('uid')
+      return {
+        title: 'Hi,' + myName + '送你300元来试戴最新潮流眼镜!', // 默认是小程序的名称(可以写slogan等)
+        path: '/pages/index/detail/index?uid=' + uid + '&sid=0&pid=' + this.pid,
+        imageUrl: this.skuList[0].pic, // 不传入 imageUrl 则使用默认截图。显示图片长宽比是 5:4
+        success: function (res) {
+          if (res.errMsg === 'shareAppMessage:ok') {
+            console.log('分享成功!', res)
+          }
+        },
+        fail: function (res) {
+          if (res.errMsg === 'shareAppMessage:fail cancel') {
+            console.log('fail', '放弃分享')
+          } else if (res.errMsg === 'shareAppMessage:fail') {
+            console.log('fail', '分享失败')
+          }
+        },
+      }
+    },
+    // 生成海报
+    sharePost() {
+      const fromsid = this.$store.state.user.fromInfo.fromsid || 'undefined'
+
+      store.dispatch('details/post', {
+        pid: this.pid,
+        sid: fromsid === 'undefined' ? 0 : fromsid,
+      }).then((data) => {
+        uni.hideLoading()
+        this.$refs.uniPopupPost.open()
+      })
+    },
   },
 }
 </script>
@@ -293,6 +434,7 @@ export default {
       .info_pay_number {
         color: #999;
         font-size: 14px;
+        font-family: PingFangSC-Regular;
       }
     }
     // 产品名称
@@ -459,6 +601,10 @@ export default {
     justify-content: space-between;
     align-content: center;
     margin: 0;
+    /* iphonex 等安全区设置,底部安全区适配 */
+    /* #ifndef APP-NVUE */
+    padding-bottom: constant(safe-area-inset-bottom);
+    padding-bottom: env(safe-area-inset-bottom);
     .menu_1 {
       width: 20%;
       height: 100%;
diff --git a/src/static/img/share/friend.png b/src/static/img/share/friend.png
new file mode 100644
index 0000000000000000000000000000000000000000..ed64045fd46f9379e3b15109ab59e2a4c0460087
GIT binary patch
literal 6558
zcmV;P8DZv$P)<h;3K|Lk000e1NJLTq00341003491^@s6RaRm500001b5ch_0Itp)
z=>Py3SV=@dRCodHU2Ciz)pg!;uZ<r(OfV1gGA0mALI?(>w1I>WXiF=#goLL>5;Y*T
zqAG<3ic?Bkq((F#6GEYdyx<2Y;SpNmrc$d4h-lR$G$N1`D$;-vp_E4mHU``HUZ3gr
zt-ZcIYv#<ozSq}}sLGbl?6tr3t;b%oXU?3NbB|N{McXbFsJ4sOt#Df3^64dMq&_Ou
zo0q0RwG{FZsje5MG_pJT-BXp=r&L$#QdO@@1H4A6R}tz*0G|TysZ`B+qPpm_&u&Hd
zZEmvD3R{2WiUZQ-bSesT3TAZ*`o%UoW`z3LhJ{2$9cbhsyhV8qHV>vWcrewwJWySH
z-3!p}@U}w>i(>AcHjSK_()h<wuMeSsm90XXwii%EEd`CZ>JtiXMJ673&{sBwF!B&q
z`5kH3S@%^JUbjvjws+6y+r6QnOVik31!jA08Vu&!q`L)C76k`T>Q{swjE2;ED<Xtq
z2BE6fV|;g-ovy8Z|3;iTwr|_6g{^O0aZE~^uf#d?ESwidY$~n7l`6DnX&j`cMHjWj
z1VWKX2m^_|_SFEnd>!ZGYpOr|+~d*pwv@L^Ve2nlxnCL^TZsvL%no%PmMqrLgl*;-
zFGcW_$QL%LJ!=}cX4JtZvad$&M3Bp?OK*H>TNahRd=}frZGF!@qv_S}U4%D|&!C74
zN+l;MD8p)Xs_NoeN<LtxOef{bpBXnB6`n}(Uwp5{)x}lmfDhbKopa9S#%N}e(w&(X
z=KH0~4^89sT}b@+;;c0Zgwh19IAk$ANQFl%42nphYmc#+Lsxjw-uZ+|bE5cW52fW*
zJ%aP^dDX=?uP*c%2>HA>0|zv%Z@uiJX{>$}6U;?r;#NFO1pQD^#W4@uG_BY>q_GNN
zFu(y7J<a%oM#0#Y51?pb_72qb@o6kQTHkQ-M;pVfmze5Sw|wY-_j*k5lCt`uH=9hT
zhRp#Ro%6&kla=6UsTfubU>ciCas$sWI_%&ULm2uXn#xQ7M*ETK#&pohm(AqV;F*;W
zQx@vmub!JWtos@!dqy@YnKcDyvdt5Uvnms$z!vQ@lDDq!(pY3Op+eK>aLs}1TRVk{
z4sKk>O;z2W7Vf*e`sCFci)tEzGMa`7Qu@M*1!;VI6{M4jp-mL-Gy$JuTaS_9KB+v&
zlmfXRKh!cy9=7bMR#8e%Nczd_-GTX_pV0d3tMqW%W5Maw?_Ik#FsCFk(zKcv^;?+9
zvOF2M&}5ZxDF9sq6kZ}Zz^-ruuV5Yff=^&y{6lbxLE1?zdkn0Y-e;nF2v}7;miE}=
z<mnc7T5n!<_>YgRLPEKytO}E>!y5%tGmN;uJY4{eIVW-p$91x0uU0VU5Eo`L#{r8v
z(}#TIm${ovo$MVWJ{T-ZYu2o?xzooK+ms7yZ&d5;oZ1}zRw$2TNijLTVssSWc*3JH
zV1&(9n0$2Yg|iped)Y^d$<&LR&CIsgJ2s(xIw`&U!q=<@L%#cgDHk@q!gv3{8CEpg
z%S<LDOxc?EMW+=ZzW3ycBbmJgU?<-ldn-mKhM9%<6pKCmkbp+4W#5At&+)d8Gtx5;
zTu=2>8kfTsTm3h<P8|&HYchn1lJy0Z69!(!bW0KdCTO^iP2~=V+Zda|%TTj*u6Kru
zD-w0WA}^COE8^k~*~fgP^qw{&BWG4CzVLS)&CpQO8d3<bPgEPmA4OsIG|ZCY#wt~6
zR|;JWTeEP~lUBi_QKXa2Nt7m8_C*1~b%A2gkiAc}h0_lWgJ04J4e@}nRrQ)QnvSdf
z_{*y^(7&DZRAA?njhpYXqB0NzmZkx5myN?Q4qt2HU_ep4tjt^4*od~#UPMkDa<S)t
zja+tN%*(PeHWD^oxFI~dX!x-0wf7jbA7FuvrMtFtzMZtN>BVnfgrLWlz;xU_zgp5B
z7+s#Jk3lzEO~~x&gE-Hf=w+V=1kgeu6q9hv-u)1_X3jJST=Jxo?0v*7K9{Rn;1nKo
zSw22J{m;1BG;xcbS}eQuw{gQ$D8Pa;XR^()Pdp~0;E`h<nV`Eiox%j15bddF6JG<3
zr(_S3axr`Qlkbi$@{HpN2v@vbU9}c@F0KCb%e}W8Ctk7Z-&~oCs#&48!^9IUMFnnw
zISb0{H38QVqC$rm`AXhY7~3R>8`<@d2f1bMykgIo7|8EX58Xgl7}2lW=>A2tlRxEF
z?9CT%i>`#!+h{V>>c9TfF?d?~Sk4q`1}KdKPC}rMjTCVjI7d|T;rwE6V6*AN`><Z$
z4A}~n{q|wgwP)eky1r(mW!0x|8+sBk!HONf(u%?yEl*EYPVLPpOn^9t)|<c-9FxGY
z+mtsq*U3&jVYa?80~t=eu^L_<pO~8D$?U~tAN^70itXZK3AGw-Lo2ra+e?<FP3cK^
z@uG7T(xIp^Q8^?Q^hODoCM3ElB8u^$Jn*oT-ud2?4n88K-QSkk>t0LgIec~C$wyLJ
z|9VP`mZY@Teksk}6?zzMd^4q=y`0hut5aI@O1A07)0inL7Ma9#3dojuE50y|yIiv$
zVR7D7{n>4;2b8m9Tl!5ko~G)-A5mq3UZRo1z(j6@aRzuPA;ZJiCP*$Zbi3ko^=r#h
zI{ZBtblSrGQ{wB`52myh-_Lmd$0?1y)sSe**TL^d>E-9K1HOx5Z^-%*-|0L@v&90D
z)8%E>FmCqXx9qV1Yt}4XAT#!yVrll=f8B-`G1>VINJki1PTcsQh^A=c#h7-`7yF<v
z9E!bBw6iWwX}A3OBQW|!7WJ9`OlbpFYG2#9KBezHm=afdY~A81eix@rFJ=nN1vyjS
znm-<`&mCD*t+=gxZ=rpTeSOoJc;`h?Y3MKaSAw;0diSPa?Acm89~ZxVu9~;o^omNq
zv*)Dr_IIZ=Yc@wsV_3fC%uDILr(~XTP)~MOCdNj*+ly<yU9T$>%_SSnPj3zIMU<ws
z3!657yirMl!xGdni$T0QZUJ&Ifj!i}e*V-~YU3>zjpyN^a1PAD+IaV`G!`X)8Mvy8
zThSV`B6Z)arHJ-}L92G9u=P#&E>)^OWH#C>G?XzFaV)%W6%BpCXz#1j)WP4P#VNhx
zm|!$balt~ITX*;TdJ4Ah!71$lj`Eay%|W=v%1<j%xOmhXhWRj@aPjb!sru>*P{Z6x
zVbl0VenBmKmr4|!Q<S{-(Ycn6g2>c**q3C3;^-5@U@OJF76n5jWH|-s;KQ3iZ*EX`
z3uL^;tVk`~Ye1z$e7`0Q#!eN#DePeLDFzM&;)-)?ITt4uOjzuV58FPB=gFD2J@(3}
zF+EMN_yn*w55jJIa*3&@;BuBYXzW_{e)M(cWA@Nh_|~Mirm$6YN~-{3@GV_Q#O#$^
z;X#N2TX@hBAH`K3i!#%;3*N{^nknQ&>C}rg57)XQqn^KlsgQn1+q=B$TKV%x>uKWH
z$6M$lt?m@IzTwg(_*AjD<;DsZ_M9clB0FZ}pjSXS5l_7)%P}Xstr~ZdHTZ4yKAgP^
z1nOL0@}V9W$E9y*WuD?2&-Es=qHbR}gT?jLzq162ly~>|TSsxwIP)d1WZXwi!g<Em
zrjvB*4GSEt3MIGx4LYIm%-iNM_?X1kCjT&@$#)}maptZ(Be%;_%q~6{w_4`Hj-;iH
zvsfhNj4|Kk*`kwDJg#Eb8HpQW0L#mFl*Z#I#+&$fI@30`3At$zbeu6KegfM(p7Wqu
zd6u4naPJME44u7PCT?~te9#ML&xTux>~di_kRwxiz$jB6+mLer#!)Xa$B?`B&p$1~
z*7tGeSPXYXne8>)LtwMHq34lj%?XCPp>n6b$bP8G_hk0E#7u)&So|S{8Nq|a#2^M$
zGQvt=Q)F(-J|t)U$fNJ@dhB1_cn008|C@~&Lz9m2e)8WrrYWJ&{Zw*n4j!8_?Uf&4
z^Mg&{LAK(#&TtP(Zex#6F3pNvm>obHott-Iq_bJX+(oXz;s%bHVC;~&;O1$3-hbtV
zGMu)+yIO01*7z;{Dd4qkO-e7}rVN{%Hz{!TY|uNcHE&Z<M<rV6{qWDAZS#EkxD`H?
zG=;^V`e0NFCC83sFRmvR&ui{nwn_%H#vcc0kwYKf_+mZ>X6@9sw0-8kvOlx3<Qc&J
z*~<L>!;o1JpNr`{Z^MMs%z2id(x5N*rx@}@zG6{l_8CHKd>m9^6aJ1WHpYx^3LML+
z@qEv>0tW}gTlP$lPCD(y=TiFS?ci?iC?*-w&$CbA?$!iX7M$ec|CVnt%8lj8_<lqc
zoCVdudrqzJiGg5ah|&>evjS()c;r@<)iPfM@(<Lk(Fp`z9_jWNaXOA;adl`>uO@Ef
z3yVDQfB5Zu*e?I0{J}wZU(bpB_y;Myj>EiE#B(N}`tSTpO0W7UrW?=3Ho=a47o#&Y
z<FlG<;K050-MP`+8iXp>(yy-Fu?R6C%H2IhCvKAWng^GidgIX^`iKeVjg({FpVG1q
zY`Lhksc;c<$dM`i6mMF5@!qU*mVViZc;bLJt)KiT-?J@wT2MN{3t+*c19H$xuFf?~
z8=uRNJ-JQu!s5>;?awQrpwn(4=%fT|j5FpArSG+egNVOvpOj8JKR+>Gtm(8}=B9MO
zp?EFHZ(c0oTYO^RGv%kcrOQ$}0(Z{%MB#_u!6O}<HY`4AHklleqM9An$ffY8uqBE<
z;<9&a*nS-$FKlWGOVol>@YXl(E54RbOqecY&;Hnxa36MgN-WTf8YadSe-xfPu(&_v
z;U5Aszx{CQa3Su1vABG0hMRZRNTbMn;yjdRo8<X}D|_jS9|Pns6t>16{KggoC^+>I
z=bKYZs%5V|9l-fGjsNxqSV>q-+p_T{%aS8g+H-Hbso_e2pXxYawNX52;HhTOAt`+y
z*Up=`x=~fl#XeQW3PD#eI*~Km6K>}+{fNt27(Le#CoQzPe%1RXpaIyZcuGV#dtr*r
zv9QRSjn#Sn<=eifF$N2J#Id-}L81HFBCOsMe#0N>Fi((_xA=xdFvvDH5oH_o#LR)!
z(hG|}O;<r;Z_YsO!x%$)W*9k9$2XjF{s1dxG12YY=HnUK;Ya7iP%3AW&2f3F@|S)!
z<luQ5g&Q{S4dW0(oSWf(L`r8EH{|or{B<2$Rk$!jiw+D38|egf$HaxH=b`f93-RzT
z-#nA)cI{cbL*I!IerPh7P28jIb3jVReGnLm<F&{d445~ul0OIVQ!o=8gUn%Uw5yWU
z(pT&NUw-SbEC`Lmi%v8)IgI=4k3Th~qfa1n$2PuU?R$_Hq$l)2hvg@|tc>Q<mw!vg
z`l!fy4{>|>$)Q4FM`k}^m>k&&83=t@^S!U&>O~MQ+Ve5=NgtMj9p4{#Xy@9PNh(o@
zN8(M?9-#+Z`P-#eNSV`@j&N{e1J#3lHEOlA6<htut<S>nx#CKW=)oLz&M73S_-5oh
zIiUUfelsOr3GA%KqV2!fqa(l4T;}B-&&O<p3dIGRH*t*lvehb?I8P<QomW-QRiC}<
zS&aOCETyW(Pkp#yESecZuby0M&J`|O#$rL=cbfBdVz(a(JG=A64yD694?|(?db(#W
z;@RTDK=afdpuOfyF69Ag=q;aPZ7_<$I;s_GhK@x?5vQ7Coqy=${lB#hJ^*;!nRKJL
z^xA((<H6>DA$vBiYJNiV^i3#pak7m`##r+<Oh%5gW~r~Rv+D=2e(UyL09Qp;HuPsr
zfdrrzcj<8=?fjk}pP8c4>}Is+kc_B+#&vSRFm|X2;uQ`Uqq{sH_hrT63tcZjg&(Hr
zIEiC(0)6XL!K7&uUc2LC=FdyBr?lN<kgF;+mtR%m`O+cHk$^C9ZI0xDFAS2+J*9`L
z>+ULd?n_~*N4q0;@EGr>S`bDF&4QN5L4jra%KwD%P8RK3i81#evrv4}V9jwm>Ht`Q
zgQ|=>_BO<(R_(G)yRdUc?gNbPL88TvvU1AaWc9|(m~`y_>8trOyQ_Cv$Hl=LG)T!d
zmSYwT;|=y7{Cn1u!<AT$MpQV?$y{*WvX@}v^=a0gtX*l`Kdn|@{fXP)@RJ3k^L+9w
zkO{)A?^0mHPeAX%hXa1<I`HkdQozT}9nth?ozKHweG#`5H@4H~_YBtH>FrB6s`w>l
z`;G$>^FnrW<osAAmLax+Lot$Wude^b1yMa**uT7BDW1hYiBmy)HLH+}z#v1xJhBDs
zNpiOZDeZG$N_;a}fEy+YP<URJ@f(9Y&+&V&JRkBk3wJa14HvFDt}N>*<Hhd^@QWH_
zc=28=5BK%BLHEY%xlrSqazTskjr=`^H*nZ*-~rh)0nM)zES8BTuqks6_7#3^YS!#`
zRoC5{Zwt8DP+^JJfANXCaaf#V9IKaY+=PVSSkYR%l0mjHeq-M3{otn)B2V6JioK^>
zCOMhC;(=qn#RXpM#bGZV#8&zN7d_fn)jib>_n#}3`u3_6Iy$(<g3|$CY7{k&z2w4k
zJL2V>McXae8zIM_ZOb0BH4H13&HM_ZU1;LThXocl+QX)BgFSuAmc5!Vj)hm%HB!gE
zx3JZp-}yLp+nq+#-ZMuGD09iNr%VE0-g@m_Zyh$Jr)&dRH><}kaRfU@T$ykzOjP#N
z_u}&7<X(I2kP;-5v(G!L&;31WHQag&YqYs@FGn(KZDlAa>)|nuqfEmR-+9{mrgLSq
zi87Btqqr?~dYL^|8}-p9%B>jAGrc)=U&MXYwtNSU{Ft8Hpi}$`fAX0U?%wye2@7j~
zBU+7IW#=0@wjjYtNmxq~I>SOwI@N5JkOYo>a)l5u^CLsrp!wX2Q0%kX@S*rL@|{)k
zC7)PvC<hJJ()HQHq^_^3Zd~<JW89V|EUeLvKK&L<=#f%X&XqxR-ehhZt2ZMK&<v+8
zyv*KpeH>zH(M~dTC6*UQI`*+eT(SyUc1p-?TK4rL>BKp=#Bg1C(!$ygdR3$6;dwr;
zQ#^^ThmtfDnsh9D;me+V0U-;QJy!CB_HJkP?xfg<Li3U=Htx`vzv9b}iYi~R@H91h
zx`07dtx3D!r~1yh7uSFjw@C|2v+6T<tj6Q@3(bWBGfA5~15tw>|E!gs0&#y)X%IJP
zEqja|HXVJ^&g><7uSpNt%K>`Xn+t4=3$T@oif<F}c!*(5TnuPq_AXcH!fNF|tj@fN
zw_7YMO{>59Dt-e6KTBtaQgFtARsdj}aFKzlNmOsR56VO_mQ0n3X7R+8L-xYl&US#y
zR4EUm1}?|NmSQL8l7os)POz`ijn(H@p%z<iQ!1>vS@x035aoVLObOV^fYyThUS{Hk
zqi0SrF-;`mbj~rGaWRN~TlUbIt+*so&RwzB4xw$Yy>Jgij&e3v7|2%kDczsmKMysS
zTAOlV?R-0D-g0E{aB<BEmB1l6VeBnotpFxWYun^bhZ!+VZphyGX4;X(E%qU&5<l1|
zwtUH+lz8Kbdh=;TemE`Md-;~mt7hUGPGwrHUh%v5DU;W}1*2uT5Ht^oOH`4hwlN22
znv5ngsl83CnY8RJbJv+u-xS}B6R;ACI22p7FTNj3yUstky7pdPw@$fDdBw_Ob?q0|
zBB_(HcONbV(gZ}}jLJ$Rh_NQD-e6zJL-tS>dn$vys%5YYokO2$#omDuS2n;4CZo{j
zD~pG>rl|BX?ZVQ?_TIetcv^^`0=49jEc4}Llq^>SWqZ*IO<c*e5!SNDpxBdR2JXuS
zLB^Pny~3N3R;Y3?7tW<@g{KjkIO>UwjNG60-siOGu2h<`*#VKo>2K?M&K^zwF}NO+
zx+E7uK0IL#gO~^95X)pMEJPK;P#JZ&=FBSI`0cgNuCpuo3K&J%v1jav;oU!-v@3p?
zck*l1Y}CJXkNwK2qV*ML@hAGef(-X83AZZRDUeMD-dl6#z<JE7rQ<jNDn`Uq^j_an
zv1fQ({PQ~XrhlB$B^4|tY}=%;^j=?n_M!OYqq`s;pQD9Bl`46-QV{1*AL^FveLKVj
zUa-LI!>I1V`>+Z>ex63ot8U)%#eax8p}1A&*gkL7%6nI*UmiUHd;MbQ@nc^smcPuv
zSED{T+2n+EswzA6EqmvhJrpgD5gV+l>y9%WKi5BUaXM-K3EQfubi2(~tWU|h`pV_|
zrHva`Vul~f0JkiN7qWFer3$((CVqD{_i_6$hE$`zuT{9`JUV*$WOu3h%%*~Em%=J=
z{i%=OhtcXQF+K~`<FEZdWXMotk=1vLq@uJ6KMi~NRnKQsb^1E~Q;BP;o4(n5lUmf7
z^xL(tO02%(Z2Tuan^xcw=UmhkPY%&akqax=TSMzR1ys?gQ^6y@4=Z~7(oj|3jfa%i
zVuiLI{1wVJ6n02qm2Z8;>G{8%s_lnq@ZV0wzn0KycD5C%Q&_E96?oD@njikhRuAEI
zN1BKKcIvuS?Z359V%wqLp@oh4qsRx~|MogHZN^Wg<e&UlTvlN$oQl~pM#1}Va`073
z9O@6IQG7vdFzbQp=2b65(;X%6w8C~LSYLX^5_}vw3fIH<ul?$!sL&BO-WQ_i{5xO#
z*M9g@%Dh7Pr&IXv{qQGL$^UD=8ejDv!GG^JI{S(0^Y=g7_5F+S|Dy{0A0zg2d~UDz
QJpcdz07*qoM6N<$g7H8m3IG5A

literal 0
HcmV?d00001

diff --git a/src/static/img/share/poster.png b/src/static/img/share/poster.png
new file mode 100644
index 0000000000000000000000000000000000000000..481792c91c10a166fa2acc40fd5fdd5cb0dabb03
GIT binary patch
literal 7082
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
UAn?h$&j0`b07*qoM6N<$f^2r8SpWb4

literal 0
HcmV?d00001

diff --git a/src/static/img/share/recommend.png b/src/static/img/share/recommend.png
new file mode 100644
index 0000000000000000000000000000000000000000..ac38dfa84588dae2676188de9620c42763cea68b
GIT binary patch
literal 7558
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

literal 0
HcmV?d00001

diff --git a/src/store/modules/details.js b/src/store/modules/details.js
index 46d0d18..4b250d8 100644
--- a/src/store/modules/details.js
+++ b/src/store/modules/details.js
@@ -4,6 +4,7 @@ import request from '../request'
 const {
   read,
   cartList,
+  makePost,
 } = urlAlias
 
 const state = {
@@ -44,20 +45,27 @@ const state = {
   more: '',
   // 购物车数目
   cartNumber: 0,
+  // skuList
+  skuList: [],
+  postUrl: 'https://api.glass.xiuyetang.com/adv_pic/428_0_7.png',
 }
 
 const mutations = {
-  INIT: (state, { carousel, goodsInfo, tag, specification, evaluate, more }) => {
+  INIT: (state, { carousel, goodsInfo, tag, specification, evaluate, more, skuList }) => {
     state.carousel = carousel
     state.goodsInfo = goodsInfo
     state.tag = tag
     state.specification = specification
     state.evaluate = evaluate
     state.more = more
+    state.skuList = skuList
   },
   CART: (state, number) => {
     state.cartNumber = number
   },
+  POST: (state, url) => {
+    state.postUrl = url
+  },
 }
 
 const actions = {
@@ -87,6 +95,7 @@ const actions = {
         }
 
         commit('INIT', {
+          skuList: data.skuList,
           carousel: data.pics,
           goodsInfo: {
             name: data.p_name,
@@ -101,6 +110,7 @@ const actions = {
             tag: data.judge_tag,
             star: parseInt(5 * Number(data.judgeInfo.good.slice(0, -1)) / 100),
           },
+          // eslint-disable-next-line
           more: data.prodIntro1.replace(/\<img/gi, '<img style="max-width:100%;height:auto"'),
         })
         resolve(data)
@@ -116,7 +126,6 @@ const actions = {
       url: cartList,
       data: param,
       success: ({ data: { data } }) => {
-        console.log('cartData', data)
         let number = 0
         for (let index = 0; index < data.length; index++) {
           number += Number(data[index].num)
@@ -125,6 +134,17 @@ const actions = {
       },
     }))
   },
+  // 生成分享海报
+  post({ commit }, param) {
+    return new Promise((resolve) => request({
+      url: makePost,
+      data: param,
+      success: ({ data }) => {
+        commit('POST', data.data)
+        resolve()
+      },
+    }))
+  },
 }
 
 export default {
diff --git a/src/store/url.js b/src/store/url.js
index 7a4c687..bb52b32 100644
--- a/src/store/url.js
+++ b/src/store/url.js
@@ -35,6 +35,7 @@ const urlAlias = {
   detailStandardList: '/app/prod/read', // 获取商品的详细信息
   // 选购页
   detailStandardUrl: '/app/prod/read', // 获取商品的详细信息
+  makePost: '/app/glass/makeProdAdvPic', // 生成分享海报
 
   // 地址管理
   editAddress: '/app/address/edit_address', // 编辑地址