Преглед изворни кода

Merge branch 'feature/v1.1.76' of https://jygit.jydev.jianyu360.cn/jianyu/jy-mobile into dev/v1.1.76_wmh

wenmenghao1 пре 1 година
родитељ
комит
5342e6b67c

+ 1 - 1
.env.development

@@ -1,5 +1,5 @@
 VITE_APP_BASE_API='/api'
-VITE_APP_BASE_URL='/jy_mobile/'
+VITE_APP_BASE_URL='/jy_mobile'
 VITE_APP_IMAGE_BASE='https://web2-qmxtest.jydev.jianyu360.com'
 VITE_APP_APP_PROJECT_BASE='https://app2-jytest.jydev.jianyu360.com'
 VITE_APP_WX_PROJECT_BASE='https://jybx2-webtest.jydev.jianyu360.com'

+ 1 - 0
src/api/modules/marketing.js

@@ -7,6 +7,7 @@ import request from '@/api'
 export function getServerInitTime () {
   return request({
     url: '/jyapi/marketing/time/now?t=' + Date.now(),
+    noToast: true,
     method: 'post'
   })
 }

+ 2 - 2
src/components/ad/Ad.vue

@@ -79,7 +79,7 @@ export default {
       }
     },
     getConfig () {
-      if (this.ad && this.info?.link) {
+      if (this.ad && this.info?.pic) {
         return this.info
       } else {
         return this.config
@@ -102,7 +102,7 @@ export default {
     },
     async openAD () {
       if (this.beforeOpen) {
-        const prevent = await this.beforeOpen()
+        const prevent = await this.beforeOpen(this.getConfig)
         // 返回true可以继续往下走,返回false阻止跳转
         if (!prevent) {
           return

+ 2 - 0
src/router/modules/order.js

@@ -5,6 +5,7 @@ function createRouterNamedComponents (r) {
     activity: () => import('@/views/create-order/components/common/Activity'),
     form: () => import('@/views/create-order/components/common/Form'),
     desc: null,
+    adsense: null,
     footerNotice: null,
     footer: () => import('@/views/create-order/components/common/Footer')
   }
@@ -27,6 +28,7 @@ export default [
         },
         components: createRouterNamedComponents({
           default: () => import('@/views/create-order/components/vipsubscribe/Default'),
+          adsense: () => import('@/views/create-order/components/vipsubscribe/Adsense'),
           desc: () => import('@/views/order/components/vipsubscribe/Introduction')
         })
       },

+ 1 - 0
src/router/modules/redirect.js

@@ -1,4 +1,5 @@
 export default [
+  // 移动端采购单位画像中转路由
   {
     path: '/unit_portrayal/:id',
     name: 'unit_portrayal',

+ 9 - 0
src/router/modules/static.js

@@ -52,6 +52,15 @@ export default [
       title: '剑鱼标讯大会员'
     }
   },
+  {
+    path: '/terms/activity/qq_live',
+    name: 'qq_live_terms',
+    component: () => import('@/views/static/ActivityQQLiveTerms.vue'),
+    meta: {
+      header: true,
+      title: '赠送须知'
+    }
+  },
   {
     path: '/subscribe_transfer',
     name: 'subscribe_transfer',

+ 77 - 5
src/utils/callFn/index.js

@@ -104,9 +104,9 @@ export function openLinkOfAd ({ link, type = 'within', title = '', iosHref } = {
  * @param config.query 请求参数
  * @param config.type 打开形式 仅支持 replace、push
  */
-export function openLinkOfOther (link, config = {}) {
+export function openLinkOfOther (link, config = {}, router = routerVm) {
   if (!link) return
-  const { query = {}, type = 'push' } = config
+  const { query = {}, type = 'push', match = true } = config
   let prefix = ''
   if (NotURLPrefixRegExp.test(link)) {
     if (inWeiXinBrowser) {
@@ -133,11 +133,83 @@ export function openLinkOfOther (link, config = {}) {
       return
     }
   }
+  const toLInkArr = toLink.split('?')
+  const toLinkQuery = toLInkArr[1]
+  const r = checkLinkRegistered(toLink, router)
+  // console.log(link, router, r)
+  if (match && r.path) {
+    const pArr = [r.path]
+    if (toLinkQuery) {
+      pArr.push(toLinkQuery)
+    }
+    const routeInfo = {
+      path: pArr.join('?'),
+      query: {
+        'inside-jumps': 1
+      }
+    }
+    if (type !== 'push') {
+      router.replace(routeInfo)
+    } else {
+      router.push(routeInfo)
+    }
+  } else {
+    if (type !== 'push') {
+      location.replace(toLink)
+    } else {
+      location.href = toLink
+    }
+  }
+}
+
+/**
+ * 检查url是否在当前vue-router中注册过
+ * url: '/jyapp/free/set'
+ * url: 'https://app-jytest.jydev.jianyu360.com/jyapp/free/set'
+ * url: '/jy_mobile/tabbar/home'
+ * url: 'https://app-jytest.jydev.jianyu360.com/jy_mobile/tabbar/home'
+ * 
+ * 检测到注册过url,则返回匹配到的路由对象
+ * 检测到注册过,则返回url
+ * 
+ */
+export function checkLinkRegistered (url, router = routerVm) {
+  if (!url) return console.error('url为必传参数')
+  const routerBase = router.options.base || ''
+  let waitingMatchUrl = ''
+  const withDomain = url.includes('http://') || url.includes('https://')
+  // url中有域名。
+  if (withDomain) {
+    const u = new URL(url)
+    // 域名为剑鱼,并且pathname中有路由前缀(/jy_mobile/),进行匹配。否则直接进行跳转
+    if (u.host.includes('jianyu360')) {
+      waitingMatchUrl = u.pathname
+    } else {
+      return {
+        url
+      }
+    }
+  } else {
+    waitingMatchUrl = url
+  }
 
-  if (type !== 'push') {
-    location.replace(toLink)
+  // pathname中有路由前缀(/jy_mobile/),进行匹配并替换。否则直接进行跳转
+  const hasRouterBaseStart = waitingMatchUrl && waitingMatchUrl.match(new RegExp(`^${routerBase}/`))
+  if (hasRouterBaseStart) {
+    waitingMatchUrl = waitingMatchUrl.replace(new RegExp('^' + routerBase), '')
+    const r = router.matcher.match(waitingMatchUrl)
+    if (r.name === '404') {
+      return {
+        url
+      }
+    } else {
+      return r
+    }
   } else {
-    location.href = toLink
+    // 直接返回url进行location.href跳转
+    return {
+      url
+    }
   }
 }
 

+ 1 - 0
src/views/create-order/CreateOrderLayout.vue

@@ -7,6 +7,7 @@
       <router-view name="default" class="create-order-default"></router-view>
       <router-view name="activity" v-if="pageLayout.activity" class="create-order-activity"></router-view>
       <router-view name="form" class="create-order-form"></router-view>
+      <router-view name="adsense" class="create-order-adsense"></router-view>
       <router-view name="desc" class="create-order-desc"></router-view>
     </div>
     <div class="j-footer">

+ 1 - 1
src/views/create-order/components/dataexport/ProductionCard.vue

@@ -59,7 +59,7 @@
         </div>
       </template>
     </SpecList>
-    <QuestionTip v-model="dialog.question" />
+    <QuestionTip v-model="dialog.question" :show-signaturedate="true"/>
     <van-dialog v-model="dialog.balance" title="对不起,余额不足" get-container="body"
       :show-cancel-button="balanceConf.showCancelButton" :cancel-button-text="balanceConf.cancelButtonText"
       :confirm-button-text="balanceConf.confirmButtonText" confirm-button-color="#2abed1" class="balance-tip"

+ 39 - 0
src/views/create-order/components/vipsubscribe/Adsense.vue

@@ -0,0 +1,39 @@
+<template>
+  <AdSingle
+    :ad="getContentAdID"
+    :showTag="false"
+    :showCloseIcon="false"
+    class="adsense-container" />
+</template>
+<script>
+import AdSingle from '@/components/ad/Ad'
+export default {
+  name: 'Adsense',
+  components: {
+    AdSingle
+  },
+  computed: {
+    getContentAdID () {
+      return `equity_mobile_vip_${this.type}_code`
+    }
+  },
+  data () {
+    return {
+      type: 'buy'
+    }
+  },
+  created () {
+    this.getQuery()
+  },
+  methods: {
+    getQuery () {
+      this.type = this.$route.query.type || 'buy'
+    }
+  }
+}
+</script>
+<style lang="scss">
+.adsense-container {
+  margin-bottom: 8px;
+}
+</style>

+ 9 - 7
src/views/dataexport/LimitPreviewData.vue

@@ -81,6 +81,7 @@
                 <td rowspan='2'>报名截止日期</td>
                 <td rowspan='2'>开标日期</td>
                 <td rowspan='2'>投标截止日期</td>
+                <td rowspan='2'>合同签订时间</td>
                 <td colspan='5'>采购单位信息</td>
                 <td rowspan='2'>招标代理机构</td>
                 <td colspan='3'>中标单位信息(来源:招标公告网站)</td>
@@ -122,6 +123,7 @@
                 <td>{{ gj.signendtime }}</td>
                 <td>{{ gj.bidopentime }}</td>
                 <td>{{ gj.bidendtime }}</td>
+                <td>{{ gj.signaturedate }}</td>
                 <td>{{ gj.buyer }}</td>
                 <td>{{ gj.buyerclass }}</td>
                 <td>{{ textFormatForMosaic(gj.buyerperson) }}</td>
@@ -139,7 +141,7 @@
           </table>
         </div>
       </van-tab>
-      <QuestionTip v-model="question" />
+      <QuestionTip v-model="question" :show-signaturedate="true"/>
       <div class="export-table-footer" v-if="total > 20">
         <p class="view-text">导出后可查看更多数据</p>
         <div @click="setExport" class="export-text">
@@ -245,7 +247,7 @@ export default {
       'power',
     ])
   },
-  
+
   methods: {
      getQRimg(){
       if(this.power){
@@ -420,18 +422,18 @@ export default {
 <style scoped lang='scss'>
 .havemore{
   padding: 0!important;
-  
+
 }
 .havemore td{
   border-right: none !important;
   display: flex;
   width: 100%!important;
- 
+
 }
 .havemore tr{
   display: flex;
   width: 100%!important;
-  
+
   background-color: rgba(255, 255, 255, 0) !important;
 }
 .b-none{
@@ -544,7 +546,7 @@ export default {
   .maxExportTips{
     position: fixed;
     bottom:64px;
-    left: 0; 
+    left: 0;
     padding: 9px 16px;
     background-color:#FFF4E8;
     color: #FF9F40;
@@ -883,7 +885,7 @@ overflow: hidden;
       font-size: 14px;
       color: #1B1A2A;
       margin-left: 4px;
-    } 
+    }
   }
   .qr-box{
     margin: auto;

+ 5 - 3
src/views/dataexport/PreviewData.vue

@@ -67,6 +67,7 @@
                 <td rowspan='2'>报名截止日期</td>
                 <td rowspan='2'>开标日期</td>
                 <td rowspan='2'>投标截止日期</td>
+                <td rowspan='2'>合同签订时间</td>
                 <td colspan='5'>采购单位信息</td>
                 <td rowspan='2'>招标代理机构</td>
                 <td colspan='3'>中标单位信息(来源:招标公告网站)</td>
@@ -108,6 +109,7 @@
                 <td>{{ gj.signendtime }}</td>
                 <td>{{ gj.bidopentime }}</td>
                 <td>{{ gj.bidendtime }}</td>
+                <td>{{ gj.signaturedate }}</td>
                 <td>{{ gj.buyer }}</td>
                 <td>{{ gj.buyerclass }}</td>
                 <td>{{ textFormatForMosaic(gj.buyerperson) }}</td>
@@ -251,17 +253,17 @@ export default {
 <style scoped lang='scss'>
 .havemore{
   padding: 0!important;
-  
+
 }
 .havemore td{
   border-right: none !important;
   display: flex;
   width: 100%!important;
- 
+
 }
 .havemore tr{
   display: flex;
-  width: 100%!important; 
+  width: 100%!important;
   background-color: rgba(255, 255, 255, 0) !important;
 }
 .b-none{

+ 3 - 4
src/views/message/MsgDetail.vue

@@ -4,10 +4,8 @@
       {{ info.createtime }}
     </header>
     <main>
-      <h1>
-        {{ info.title }}
-      </h1>
-      <p>{{ info.content }}</p>
+      <h1 v-html="info.title"></h1>
+      <p v-html="info.content"></p>
     </main>
   </div>
 </template>
@@ -50,6 +48,7 @@ export default {
 
 <style lang="scss" scoped>
 .msg-detail {
+  user-select: text;
   header {
     display: flex;
     justify-content: center;

+ 6 - 1
src/views/order/components/datapack/QuestionTip.vue

@@ -18,7 +18,7 @@
       <div class="content-item">
         <div class="content-label">· 高级字段包</div>
         <div class="content-text">
-          匹配关键词、省份、城市、区县、公告标题、公告类别、公告内容、发布时间、公告地址、剑鱼标讯地址、项目名称、行业、项目范围、预算金额、中标金额、报名截止日期、开标日期、投标截止日期、采购单位信息(采购单位名称、采购单位类型、采购单位联系人、采购单位联系电话、采购单位地址)、招标代理机构、中标单位信息(中标单位名称、中标单位联系人、中标单位联系电话)(来源:招标公告网站)、中标单位信息(中标单位联系人、中标单位联系电话、电子邮箱)(来源:国家企业公示网站)
+          匹配关键词、省份、城市、区县、公告标题、公告类别、公告内容、发布时间、公告地址、剑鱼标讯地址、项目名称、行业、项目范围、预算金额、中标金额、报名截止日期、开标日期、投标截止日期、{{showSignaturedate ? '合同签订时间、': ''}}采购单位信息(采购单位名称、采购单位类型、采购单位联系人、采购单位联系电话、采购单位地址)、招标代理机构、中标单位信息(中标单位名称、中标单位联系人、中标单位联系电话)(来源:招标公告网站)、中标单位信息(中标单位联系人、中标单位联系电话、电子邮箱)(来源:国家企业公示网站)
         </div>
       </div>
     </div>
@@ -31,6 +31,11 @@ export default {
     show: {
       type: Boolean,
       default: false
+    },
+    // 是否展示合同签订时间(数据导出展示,其他不展示)
+    showSignaturedate: {
+      type: Boolean,
+      default: false
     }
   },
   model: {

+ 61 - 0
src/views/static/ActivityQQLiveTerms.vue

@@ -0,0 +1,61 @@
+<template>
+  <div class="activity-qq-live-terms">
+    <ol class="activity-qq-live-terms-content">
+      <li v-for="(item, index) in contentList" :key="index" v-html="item.text"></li>
+    </ol>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'activity-qq-live-terms',
+  data () {
+    return {
+      contentList: [
+        {
+          text: '本活动为限时优惠,数量有限,先到先得,送完即止。'
+        },
+        {
+          text: '腾讯视频会员无法退回,若申请超级订阅退款,需按腾讯视频会员原价从超级订阅退款费用中进行扣除。'
+        },
+        {
+          text: '购买全国版/1年超级订阅可获得12 个月的腾讯视频VIP,购买省份版/1年超级订阅可获得1个月的腾讯视频VIP。'
+        },
+        {
+          text: '腾讯视频VIP在您付款后将通过剑鱼标讯平台短信、站内信等形式自动发送兑换权益码到注册剑鱼标讯的手机号上,腾讯视频会员兑换截至时间2024年06月18日,超过兑换截至时间,不予补发。'
+        },
+        {
+          text: '腾讯视频会员兑换方式:打开链接(<a class="terms-link" href="https://22233.cn/2258">https://22233.cn/2258</a>)输入兑换码和手机号,即可兑换使用,兑换成功后可用充值的账号登录官方APP进行查询,每个兑换码只能兑换1次且兑换过程中不可更换充值账号,请确认充值账号无误后进行兑换'
+        },
+        {
+          text: '腾讯视频会员权益为移动端视频会员,权益支持在电脑/手机/平板内使用,如遇兑换失败等问题,请拨打客服热线400-108-6670进行反馈。'
+        },
+        {
+          text: '本活动最终解释权归剑鱼标讯所有。'
+        }
+      ]
+    }
+  }
+}
+</script>
+
+
+<style scoped lang="scss">
+::v-deep {
+  .terms-link {
+    color: blue;
+  }
+}
+.activity-qq-live-terms {
+  padding: 16px;
+  color: #5F5E64;
+  font-size: 12px;
+  line-height: 24px;
+}
+ol {
+  padding-left: 20px;
+}
+ol, li {
+  list-style-type: decimal;
+}
+</style>