Ver Fonte

feat:投标企业信用报告相关调整

yangfeng há 4 meses atrás
pai
commit
3b89138237

+ 9 - 1
apps/bigmember_pc/src/api/modules/pay.js

@@ -72,7 +72,7 @@ export function getPDFPackDetail(params) {
 export function getPDFPackBalance() {
   return request({
     url: '/jypay/pdfExportPack/account',
-    method: 'post',
+    method: 'post'
   })
 }
 
@@ -157,3 +157,11 @@ export function ajaxBiddingEntSearch(data) {
     data
   })
 }
+
+// 投标企业信用报告-获取配置项
+export function ajaxGetConfig() {
+  return request({
+    url: '/subscribepay/config',
+    method: 'post'
+  })
+}

+ 9 - 9
apps/bigmember_pc/src/router/modules/report.js

@@ -9,7 +9,7 @@ export default [
     },
     component: () => import('@/views/reportDownload/index.vue')
   },
-  //下载的PDF
+  // 下载的PDF
   {
     path: '/report/pdf',
     name: 'report_download_pdf',
@@ -18,30 +18,30 @@ export default [
       {
         path: 'market',
         name: 'pdf_market',
-        component: () => import('@/views/download-pdf/marketReport.vue'),
+        component: () => import('@/views/download-pdf/marketReport.vue')
       },
       // 企业中标分析
       {
         path: 'ent',
         name: 'pdf_ent',
-        component: () => import('@/views/download-pdf/entReport.vue'),
+        component: () => import('@/views/download-pdf/entReport.vue')
       },
       // 业主采购分析
       {
         path: 'prop',
         name: 'pdf_prop',
-        component: () => import('@/views/download-pdf/propReport.vue'),
+        component: () => import('@/views/download-pdf/propReport.vue')
       }
     ]
   },
-  // 报告样例
+  // 报告样例/报告预览
   {
-    path: '/free/report/sample',
-    name: 'report_sample',
+    path: '/free/report/preview',
+    name: 'report_preview',
     meta: {
-      title: '报告样例'
+      title: '报告预览'
     },
-    component: () => import('@/views/reportDownload/sample.vue')
+    component: () => import('@/views/reportDownload/preview.vue')
   },
   // 报告审核
   {

+ 31 - 20
apps/bigmember_pc/src/views/article-content/components/ContentHeader.vue

@@ -7,7 +7,8 @@ import {
   ContentModel,
   ContentId,
   IsSunPublishContent,
-  useRenMaiModel
+  useRenMaiModel,
+  showCreditReportButton
 } from '@/views/article-content/composables/useContentStore'
 import { computed, getCurrentInstance, onMounted, ref } from 'vue'
 import { useRoute } from 'vue-router/composables'
@@ -19,7 +20,10 @@ import BidrenewalDialog from '@/views/BidrenewalDialog/index.vue'
 import { useQuickJoinBidModel } from '@/composables/quick-join-bid'
 import WorkspaceButtonGroup from '@/components/dialog/WorkspaceButtonGroup.vue'
 import ContentBIActions from '@/views/article-content/components/ContentBIActions.vue'
-import { GetInWhichContainer, doOpenCreditReportPage } from '@/views/article-content/composables/useArticleUtil'
+import {
+  GetInWhichContainer,
+  doOpenCreditReportPage
+} from '@/views/article-content/composables/useArticleUtil'
 
 const getters = useStore().getters
 const vt = computed(() => {
@@ -36,7 +40,9 @@ const headerType = computed(() => {
 
 const sunPublishContent = computed(() => IsSunPublishContent.value)
 
-const headerTypeShow = computed(() => ContentModel.value.isSelfSite || sunPublishContent.value)
+const headerTypeShow = computed(
+  () => ContentModel.value.isSelfSite || sunPublishContent.value
+)
 
 const keepLabel = [
   {
@@ -109,10 +115,10 @@ const {
   loading: remMaiLoading
 } = useRenMaiModel(ContentModel)
 
-// console.log(ContentModel.value)
+// console.log(ContentModel.value, ContentModel.value?._ob?.topType)
 const buyerName = ref('')
 buyerName.value = ContentModel.value?._summary?._s?.buyer || ''
-console.log(buyerName.value)
+// console.log(showCreditReportButton)
 </script>
 
 <template>
@@ -158,7 +164,6 @@ console.log(buyerName.value)
             <span class="text">转给同事</span>
           </div>
         </template>
-        
 
         <div class="action-item">
           <el-popover
@@ -211,7 +216,6 @@ console.log(buyerName.value)
             ></article-star>
           </div>
         </template>
-        
       </div>
       <div class="actions" v-if="isUseBIActions">
         <content-b-i-actions
@@ -263,11 +267,18 @@ console.log(buyerName.value)
         </div>
       </div>
     </div>
-    <div class="flex flex-(items-center justify-end)">
+    <div
+      class="flex flex-(items-center justify-end)"
+      v-if="showCreditReportButton"
+    >
       <div class="credit-report">
         <div class="report-container">
-          <div class="report-text">通过信用背书、风险预警、政策适配,赋能投标突围</div>
-          <button class="report-btn" @click="doOpenCreditReportPage(buyerName)">投标企业信用报告</button>
+          <div class="report-text">
+            通过信用背书、风险预警、政策适配,赋能投标突围
+          </div>
+          <button class="report-btn" @click="doOpenCreditReportPage(buyerName)">
+            投标企业信用报告
+          </button>
         </div>
       </div>
       <div class="expands-actions" v-if="!sunPublishContent">
@@ -361,10 +372,10 @@ console.log(buyerName.value)
   .tags {
     margin-top: 12px;
     .tag-orange {
-      color: #FA6F33;
-      background-color: #FFF1EB;
+      color: #fa6f33;
+      background-color: #fff1eb;
       &.border {
-        border: 1px solid #F56500;
+        border: 1px solid #f56500;
       }
     }
   }
@@ -503,16 +514,16 @@ console.log(buyerName.value)
   margin-left: 10px;
   padding: 6px 20px;
   height: 30px;
-  background: linear-gradient(281deg, #28C1E2 3.53%, #5FD4E3 98.32%);
+  background: linear-gradient(281deg, #28c1e2 3.53%, #5fd4e3 98.32%);
   border: 0;
   .iconfont {
     margin-right: 2px;
   }
 }
-.credit-report{
+.credit-report {
   display: flex;
   justify-content: flex-end;
-  .report-container{
+  .report-container {
     display: inline-flex;
     height: 30px;
     margin-top: 8px;
@@ -522,22 +533,22 @@ console.log(buyerName.value)
     overflow: hidden;
     border: 1px solid rgba(42, 190, 209, 0.16);
   }
-  .report-text{
+  .report-text {
     flex: 1;
     height: 100%;
     padding: 4px 12px;
     line-height: 22px;
-    color: #2ABED1;
+    color: #2abed1;
     font-size: 14px;
   }
-  .report-btn{
+  .report-btn {
     height: 100%;
     color: #fff;
     line-height: 22px;
     padding: 4px 12px;
     font-size: 14px;
     border-radius: 4px;
-    background: linear-gradient(281deg, #28C1E2 3.53%, #5FD4E3 98.32%);
+    background: linear-gradient(281deg, #28c1e2 3.53%, #5fd4e3 98.32%);
   }
 }
 </style>

+ 8 - 2
apps/bigmember_pc/src/views/article-content/composables/useContentStore.js

@@ -103,7 +103,8 @@ async function useContentStore() {
       ContentPageLoading.value = false
       if (IsSunPublishContent.value && model.content.changedTitle) {
         setPageTDK(model.content.tdk, window.top.document)
-      } else {
+      }
+      else {
         setPageTDK(model.content.tdk)
       }
     })
@@ -185,6 +186,10 @@ function useRenMaiModel(ContentModel) {
   }
 }
 
+const showCreditReportButton = computed(() => {
+  return ['采购意向', '预告', '招标'].includes(ContentModel.value?._ob?.topType)
+})
+
 export {
   useContentStore,
   useRenMaiModel,
@@ -198,5 +203,6 @@ export {
   hasPowerToReadSunPublishContent,
   IsSunPublishContent,
   ContentIsError,
-  ContentErrorText
+  ContentErrorText,
+  showCreditReportButton
 }

+ 1 - 1
apps/bigmember_pc/src/views/order/components/common/form.vue

@@ -61,7 +61,7 @@ export default {
             phone: this.form.phone
           },
           this.form,
-          { phone: data.phone }
+          { phone: data.phone, reportMail: data.reportMail }
         )
         this.updateFormStatus(this.form)
       }

+ 99 - 77
apps/bigmember_pc/src/views/order/components/credit-report/info.vue

@@ -3,12 +3,20 @@
     <div class="report-order-info__header flex flex-justify-between">
       <div>
         <p class="report-role">报告作用:</p>
-        <p class="report-desc">信用报告通过信用背书、风险预警、政策适配,三大核心作用,成为投标企业参与市场竞争的关键工具。</p>
+        <p class="report-desc">
+          信用报告通过信用背书、风险预警、政策适配,三大核心作用,成为投标企业参与市场竞争的关键工具。
+        </p>
       </div>
       <button type="button" class="sample-btn">查看报告样例</button>
     </div>
     <div class="report-order-info__main">
-      <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="104px" @validate="updateFormState" >
+      <el-form
+        :model="ruleForm"
+        :rules="rules"
+        ref="ruleForm"
+        label-width="104px"
+        @validate="updateFormState"
+      >
         <el-form-item label="投标企业名称" prop="biddingName">
           <el-select
             v-model="ruleForm.biddingCode"
@@ -40,9 +48,16 @@
           ></el-autocomplete>
         </el-form-item>
         <el-form-item label="邮箱" prop="email">
-          <el-input v-model="ruleForm.email" placeholder="必填,报告将发送至邮箱"></el-input>
+          <el-input
+            v-model="ruleForm.email"
+            placeholder="必填,报告将发送至邮箱"
+          ></el-input>
         </el-form-item>
-        <p class="buy-notify">支付成功后,系统将在XX分钟内将报告发送至您的邮箱,您也可前往“资产-报告下载记录”查看详情。</p>
+        <p class="buy-notify">
+          支付成功后,系统将在{{
+            bidCreditReport_makeTime
+          }}分钟内将报告发送至您的邮箱,您也可前往“资产-报告下载记录”查看详情。
+        </p>
       </el-form>
     </div>
   </div>
@@ -51,7 +66,11 @@
 <script>
 import { Form, FormItem, Input, Autocomplete, Select, Option } from 'element-ui'
 import { mapActions, mapMutations, mapGetters } from 'vuex'
-import { getCourseInfo, getBuyerAssociation, ajaxBiddingEntSearch } from '@/api/modules'
+import {
+  ajaxGetConfig,
+  getBuyerAssociation,
+  ajaxBiddingEntSearch
+} from '@/api/modules'
 
 export default {
   name: 'credit-report-order-info',
@@ -90,52 +109,44 @@ export default {
         buyerName: [
           { required: true, message: '招标单位名称不能为空', trigger: 'change' }
         ],
-        email: [
-          { required: true, validator: validateEmail, trigger: 'change' }
-        ]
+        email: [{ required: true, validator: validateEmail, trigger: 'change' }]
       },
       reportInfo: {},
       biddingOptions: [],
       buyerOptions: [],
-      loading: false
+      loading: false,
+      bidCreditReport_makeTime: 0
     }
   },
   computed: {
-    ...mapGetters('order', [
-      'productSpecInfoList',
-      'productSpecInfo',
-      'productFormInfo',
-      'productChoiceOffers',
-      'productOrderAmount'
-    ]),
-    // 格式化商品规格
-    specList() {
-      return this.productSpecInfoList.map((spec) => {
-        return {
-          label: spec._format.title,
-          price: spec._format.money,
-          desc: spec._format.desc,
-          tipText: spec._format.tag,
-          id: spec.productId,
-          _data: spec
-        }
-      })
-    },
-    // 获取当前选中的规格信息
-    specActiveInfo() {
-      return this.specList.find((spec) => spec.id === this.specActiveId)
-    },
+    ...mapGetters('order', ['productFormInfo']),
     pass() {
-      const emailPass = this.ruleForm.email && /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/.test(this.ruleForm.email)
-      return Boolean(this.ruleForm.biddingName && this.ruleForm.buyerName && emailPass)
+      const emailPass =
+        this.ruleForm.email &&
+        /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/.test(this.ruleForm.email)
+      return Boolean(
+        this.ruleForm.biddingName && this.ruleForm.buyerName && emailPass
+      )
+    },
+    reportMail() {
+      return this.productFormInfo?.reportMail || ''
+    }
+  },
+  watch: {
+    reportMail: {
+      immediate: true,
+      handler(newVal) {
+        if (newVal) {
+          this.ruleForm.email = newVal
+        }
+      }
     }
   },
   async created() {
     if (this.$route.query && this.$route.query.buyer) {
       this.ruleForm.buyerName = this.$route.query.buyer
     }
-    // 获取报告信息
-    // this.getInfo()
+    this.getConfigInfo()
     // 获取产品信息
     await this.setProductInfo({
       id: this.$route.meta.productId,
@@ -149,20 +160,15 @@ export default {
     this.updateFormState()
   },
   methods: {
-    ...mapMutations('order', ['updateFormStatus', 'updateUI', 'updateCanNextMap']),
-    ...mapActions('order', [
-      'setProductInfo',
-      'setProductSpecInfo',
-      'changeProductChoiceSpec'
-    ]),
+    ...mapMutations('order', ['updateUI', 'updateCanNextMap']),
+    ...mapActions('order', ['setProductInfo']),
     updateFormState() {
       this.updateCanNextMap({
         spec: this.pass
       })
     },
     selectBiddingName(value) {
-      // this.ruleForm.biddingCode = value
-      const selected = this.biddingOptions.find(item => item.value === value);
+      const selected = this.biddingOptions.find((item) => item.value === value)
       if (selected) {
         this.ruleForm.biddingName = selected.label
       }
@@ -174,7 +180,10 @@ export default {
           entName: queryString
         })
         if (code === 0) {
-          this.biddingOptions = data?.map(item => ({ value: item.cert_no, label: item.name }))
+          this.biddingOptions = data?.map((item) => ({
+            value: item.cert_no,
+            label: item.name
+          }))
         }
         this.loading = false
       } else {
@@ -183,13 +192,18 @@ export default {
     },
     async querySearchBuyer(queryString, cb) {
       if (queryString) {
-       const { error_code: code, data } = await getBuyerAssociation({ name: queryString })
-       if (code === 0 && data && data?.list.length) {
-        this.buyerOptions = data?.list.map(item => ({ value: item, label: item }))
-        cb(this.buyerOptions)
-       } else {
-        cb([])
-       }
+        const { error_code: code, data } = await getBuyerAssociation({
+          name: queryString
+        })
+        if (code === 0 && data && data?.list.length) {
+          this.buyerOptions = data?.list.map((item) => ({
+            value: item,
+            label: item
+          }))
+          cb(this.buyerOptions)
+        } else {
+          cb([])
+        }
       } else {
         cb([])
       }
@@ -197,15 +211,11 @@ export default {
     selectBuyerName(item) {
       this.ruleForm.buyerName = item.label
     },
-    // 获取信用报告信息
-    async getInfo() {
-      await getCourseInfo({
-        _id: this.$route.params.id
-      }).then((res) => {
-        if (res?.result?.data) {
-          this.reportInfo = res.result.data
-        }
-      })
+    async getConfigInfo() {
+      const { error_code: code, data } = await ajaxGetConfig()
+      if (code === 0 && data) {
+        this.bidCreditReport_makeTime = data?.bidCreditReport_makeTime
+      }
     },
     /**
      * 订单提交事件
@@ -252,19 +262,19 @@ export default {
   padding: 0 32px;
   &__header {
     padding: 24px 0;
-    border-bottom: 1px solid #E0E0E0;
+    border-bottom: 1px solid #e0e0e0;
   }
-  .report-role{
+  .report-role {
     font-size: 14px;
     line-height: 24px;
-    color:#1d1d1d;
+    color: #1d1d1d;
   }
-  .report-desc{
+  .report-desc {
     font-size: 14px;
     line-height: 22px;
-    color:#686868;
+    color: #686868;
   }
-  .sample-btn{
+  .sample-btn {
     width: 100px;
     height: 30px;
     line-height: 30px;
@@ -275,42 +285,54 @@ export default {
   }
   &__main {
     padding: 24px 0 16px;
-    .buy-notify{
+    .buy-notify {
       padding-left: 104px;
       font-size: 14px;
       color: #686868;
       line-height: 22px;
     }
   }
-  ::v-deep{
-    .el-form-item__label{
+  ::v-deep {
+    .el-form-item__label {
       padding-right: 8px;
       font-size: 14px;
       color: #1d1d1d;
       line-height: 22px;
       text-align: left;
     }
-    .el-input__inner{
+    .el-input__inner {
       width: 590px;
       height: 36px;
       padding: 0 12px;
       line-height: 36px;
       color: #1d1d1d;
     }
-    .el-form-item{
+    .el-form-item {
       display: flex;
       align-items: center;
       margin-bottom: 20px;
-      &:last-of-type{
+      &:last-of-type {
         margin-bottom: 8px;
-        &.is-error{
+        &.is-error {
           margin-bottom: 20px;
         }
       }
     }
-    .el-form-item__content{
-      margin-left: 0!important;
+    .el-form-item__content {
+      margin-left: 0 !important;
+    }
+    .el-form-item.is-required:not(.is-no-asterisk)
+      .el-form-item__label-wrap
+      > .el-form-item__label:before,
+    .el-form-item.is-required:not(.is-no-asterisk)
+      > .el-form-item__label:before {
+      color: #ff3a20;
     }
   }
 }
 </style>
+<style>
+.selector-card.vip-sub-list-item.order-form {
+  display: none !important;
+}
+</style>

+ 134 - 58
apps/bigmember_pc/src/views/reportDownload/examine.vue

@@ -1,7 +1,10 @@
 <template>
   <section class="report-examine v-w1200">
     <el-form v-if="hasRecord" ref="form" :model="form" label-width="240px">
-      <el-form-item label="无政府采购严重违法行为记录证明:" prop="prove_purchase">
+      <el-form-item
+        label="无政府采购严重违法行为记录证明:"
+        prop="prove_purchase"
+      >
         <el-upload
           action="string"
           :http-request="(file) => uploadFileHandle(file, 'prove_purchase')"
@@ -11,13 +14,20 @@
           accept="image/jpeg, image/jpg, image/png"
         >
           <div class="upload-container">
-            <div v-if="form.prove_purchase" class="avatar-container" @click.stop>
-              <img :src="domain + form.prove_purchase" class="avatar">
-              <i class="el-icon-delete" @click.stop="removeImg('prove_purchase')"></i>
+            <div
+              v-if="form.prove_purchase"
+              class="avatar-container"
+              @click.stop
+            >
+              <img :src="domain + form.prove_purchase" class="avatar" />
+              <i
+                class="el-icon-error"
+                @click.stop="removeImg('prove_purchase')"
+              ></i>
             </div>
             <i v-else class="el-icon-plus avatar-uploader-icon"></i>
           </div>
-          <div slot="tip" class="el-upload__tip">只能上传jpeg/jpg/png图片文件</div>
+          <div slot="tip" class="el-upload__tip">上传jpeg/jpg/png图片文件</div>
         </el-upload>
       </el-form-item>
       <el-form-item label="有无政府采购严重违法行为:">
@@ -36,13 +46,20 @@
           accept="image/jpeg, image/jpg, image/png"
         >
           <div class="upload-container">
-            <div v-if="form.prove_executed" class="avatar-container" @click.stop>
-              <img :src="domain + form.prove_executed" class="avatar">
-              <i class="el-icon-delete" @click.stop="removeImg('prove_executed')"></i>
+            <div
+              v-if="form.prove_executed"
+              class="avatar-container"
+              @click.stop
+            >
+              <img :src="domain + form.prove_executed" class="avatar" />
+              <i
+                class="el-icon-error"
+                @click.stop="removeImg('prove_executed')"
+              ></i>
             </div>
             <i v-else class="el-icon-plus avatar-uploader-icon"></i>
           </div>
-          <div slot="tip" class="el-upload__tip">只能上传jpeg/jpg/png图片文件</div>
+          <div slot="tip" class="el-upload__tip">上传jpeg/jpg/png图片文件</div>
         </el-upload>
       </el-form-item>
       <el-form-item label="有无被执行记录:">
@@ -61,13 +78,20 @@
           accept="image/jpeg, image/jpg, image/png"
         >
           <div class="upload-container">
-            <div v-if="form.prove_dishonesty" class="avatar-container" @click.stop>
-              <img :src="domain + form.prove_dishonesty" class="avatar">
-              <i class="el-icon-delete" @click.stop="removeImg('prove_dishonesty')"></i>
+            <div
+              v-if="form.prove_dishonesty"
+              class="avatar-container"
+              @click.stop
+            >
+              <img :src="domain + form.prove_dishonesty" class="avatar" />
+              <i
+                class="el-icon-error"
+                @click.stop="removeImg('prove_dishonesty')"
+              ></i>
             </div>
             <i v-else class="el-icon-plus avatar-uploader-icon"></i>
           </div>
-          <div slot="tip" class="el-upload__tip">只能上传jpeg/jpg/png图片文件</div>
+          <div slot="tip" class="el-upload__tip">上传jpeg/jpg/png图片文件</div>
         </el-upload>
       </el-form-item>
       <el-form-item label="有无失信被执行记录:">
@@ -87,12 +111,15 @@
         >
           <div class="upload-container">
             <div v-if="form.prove_produce" class="avatar-container" @click.stop>
-              <img :src="domain + form.prove_produce" class="avatar">
-              <i class="el-icon-delete" @click.stop="removeImg('prove_produce')"></i>
+              <img :src="domain + form.prove_produce" class="avatar" />
+              <i
+                class="el-icon-error"
+                @click.stop="removeImg('prove_produce')"
+              ></i>
             </div>
             <i v-else class="el-icon-plus avatar-uploader-icon"></i>
           </div>
-          <div slot="tip" class="el-upload__tip">只能上传jpeg/jpg/png图片文件</div>
+          <div slot="tip" class="el-upload__tip">上传jpeg/jpg/png图片文件</div>
         </el-upload>
       </el-form-item>
       <el-form-item label="有无安全生产严重失信记录:">
@@ -117,16 +144,18 @@
               closable
               @close="removePdf"
               @click.stop="handlePreviewPdf(form.creditchina)"
-              >
+            >
               {{ pdfName }}
             </el-tag>
             <i v-else class="el-icon-plus avatar-uploader-icon"></i>
           </div>
-          <div slot="tip" class="el-upload__tip">*只能上传pdf文件</div>
+          <div slot="tip" class="el-upload__tip">上传pdf文件</div>
         </el-upload>
       </el-form-item>
       <el-form-item>
-        <el-button :disabled="disabled" type="primary" @click="onSubmit">审核</el-button>
+        <el-button :disabled="disabled" type="primary" @click="onSubmit"
+          >提交</el-button
+        >
       </el-form-item>
     </el-form>
     <Empty v-else>
@@ -139,15 +168,27 @@
       custom-class="collect-dialog"
       :close-on-click-modal="false"
       :close-on-press-escape="false"
-      center>
+      center
+    >
       <div class="dialog-content">
         <p>该报告的表单信息已经收集过。</p>
-        <p v-if="reportInfo.confirmTime">表单提交时间: <span class="highlight-text">{{ reportInfo.confirmTime }}</span></p>
-        <p v-if="reportInfo.reportTime">报告生成时间: <span class="highlight-text">{{ reportInfo.reportTime }}</span></p>
-        <p v-if="reportInfo.emailTime">邮件发送时间: <span class="highlight-text">{{ reportInfo.emailTime }}</span></p>
+        <p v-if="reportInfo.confirmTime">
+          表单提交时间:
+          <span class="highlight-text">{{ reportInfo.confirmTime }}</span>
+        </p>
+        <p v-if="reportInfo.reportTime">
+          报告生成时间:
+          <span class="highlight-text">{{ reportInfo.reportTime }}</span>
+        </p>
+        <p v-if="reportInfo.emailTime">
+          邮件发送时间:
+          <span class="highlight-text">{{ reportInfo.emailTime }}</span>
+        </p>
       </div>
       <span slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="collectDialogVisible = false">我知道了</el-button>
+        <el-button type="primary" @click="collectDialogVisible = false"
+          >我知道了</el-button
+        >
       </span>
     </el-dialog>
     <el-dialog
@@ -157,7 +198,8 @@
       custom-class="collect-dialog"
       :close-on-click-modal="false"
       :close-on-press-escape="false"
-      center>
+      center
+    >
       <div class="dialog-content">
         <p>该报告的表单信息已经收集过,是否重新提交?</p>
       </div>
@@ -170,8 +212,22 @@
 </template>
 
 <script>
-import { Form, FormItem, Radio, RadioGroup, Button, Upload, Tag, Icon, Dialog } from 'element-ui'
-import { ajaxUploadFile, ajaxUpdateCreditReport, ajaxGetCreditReport } from '@/api/modules'
+import {
+  Form,
+  FormItem,
+  Radio,
+  RadioGroup,
+  Button,
+  Upload,
+  Tag,
+  Icon,
+  Dialog
+} from 'element-ui'
+import {
+  ajaxUploadFile,
+  ajaxUpdateCreditReport,
+  ajaxGetCreditReport
+} from '@/api/modules'
 import Empty from '@/components/common/Empty.vue'
 export default {
   name: 'report-examine',
@@ -216,7 +272,13 @@ export default {
   },
   computed: {
     disabled() {
-      return !this.form.prove_purchase || !this.form.prove_executed || !this.form.prove_dishonesty || !this.form.prove_produce || !this.form.creditchina
+      return (
+        !this.form.prove_purchase ||
+        !this.form.prove_executed ||
+        !this.form.prove_dishonesty ||
+        !this.form.prove_produce ||
+        !this.form.creditchina
+      )
     }
   },
   created() {
@@ -230,9 +292,19 @@ export default {
       const { data, status, msg } = await ajaxGetCreditReport({ id: this.id })
       if (status === 1) {
         this.hasRecord = true
-        const { prove_purchase, prove_purchase_status, prove_executed, prove_executed_status, prove_dishonesty, prove_dishonesty_status,  prove_produce, prove_produce_status, creditchina } = data
+        const {
+          prove_purchase,
+          prove_purchase_status,
+          prove_executed,
+          prove_executed_status,
+          prove_dishonesty,
+          prove_dishonesty_status,
+          prove_produce,
+          prove_produce_status,
+          creditchina
+        } = data
         this.reportInfo.status = data.status
-        if (data.status >= 0) {
+        if (data.status > 0) {
           this.form = {
             prove_purchase,
             prove_purchase_status,
@@ -244,7 +316,7 @@ export default {
             prove_produce_status,
             creditchina
           }
-          if(creditchina){
+          if (creditchina) {
             const filename = creditchina.split('/').pop()
             this.pdfName = filename
           }
@@ -264,12 +336,14 @@ export default {
       params.append('type', 'bidCreditReportFile')
       params.append('bidCreditReportFile', file.file)
       try {
-         const { error: code, url, filename } = await ajaxUploadFile(params)
+        const { error: code, url, filename } = await ajaxUploadFile(params)
         if (code === 0 && url) {
           this.form[filed] = url
-          if(filed === 'creditchina'){
+          if (filed === 'creditchina') {
             this.pdfName = filename
           }
+        } else {
+          this.form[filed] = ''
         }
       } catch (error) {
         console.error('上传失败:', error)
@@ -295,7 +369,9 @@ export default {
       return isLt2M
     },
     async confirmFn() {
-      const { error_code: code, error_msg: msg } = await ajaxUpdateCreditReport({ ...this.form, id: this.id })
+      const { error_code: code, error_msg: msg } = await ajaxUpdateCreditReport(
+        { ...this.form, id: this.id }
+      )
       if (code === 0) {
         this.$toast('提交成功')
         window.location.reload()
@@ -316,19 +392,19 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-.report-examine{
+.report-examine {
   background: #fff;
-  ::v-deep{
-    .el-form{
+  ::v-deep {
+    .el-form {
       padding: 30px;
     }
-    .el-form-item:nth-child(odd){
+    .el-form-item:nth-child(odd) {
       margin-bottom: 10px;
     }
-    .el-upload__input{
-      display: none!important;
+    .el-upload__input {
+      display: none !important;
     }
-    .upload-container{
+    .upload-container {
       text-align: left;
     }
     .avatar-uploader .el-upload {
@@ -339,7 +415,7 @@ export default {
       overflow: hidden;
     }
     .avatar-uploader .el-upload:hover {
-      border-color: #409EFF;
+      border-color: #409eff;
     }
     .avatar-uploader-icon {
       font-size: 28px;
@@ -350,23 +426,23 @@ export default {
       text-align: center;
       border: 1px dashed #d9d9d9;
     }
-    .avatar-container{
+    .avatar-container {
       position: relative;
       width: 120px;
       height: 120px;
       border: 1px dashed #d9d9d9;
       border-radius: 6px;
-      overflow: hidden;
+      // overflow: hidden;
     }
-    .el-icon-delete{
+    .el-icon-error {
       display: none;
       position: absolute;
-      right: 2px;
-      top: 2px;
+      right: -6px;
+      top: -6px;
       z-index: 10;
       font-size: 22px;
       color: #1d1d1d;
-      &:hover{
+      &:hover {
         color: #1d1d1d;
       }
     }
@@ -376,36 +452,36 @@ export default {
       display: block;
       z-index: 9;
     }
-    .avatar-container:hover{
-      .el-icon-delete{
+    .avatar-container:hover {
+      .el-icon-error {
         display: block;
       }
     }
   }
 }
-::v-deep{
-  .empty-container{
+::v-deep {
+  .empty-container {
     height: 500px;
   }
-  .collect-dialog{
+  .collect-dialog {
     margin: 0 auto !important;
     position: absolute;
     top: 50%;
     left: 50%;
     transform: translate(-50%, -50%);
     border-radius: 8px;
-    .el-dialog__body{
+    .el-dialog__body {
       padding: 20px 30px;
     }
-    .el-dialog__footer{
+    .el-dialog__footer {
       padding: 10px 30px 24px;
-      .el-button{
+      .el-button {
         padding: 10px 40px;
         border-radius: 4px;
       }
     }
-    .dialog-content{
-      p{
+    .dialog-content {
+      p {
         margin-bottom: 8px;
         line-height: 24px;
         font-size: 14px;

+ 34 - 15
apps/bigmember_pc/src/views/reportDownload/sample.vue → apps/bigmember_pc/src/views/reportDownload/preview.vue

@@ -1,8 +1,18 @@
 <template>
   <div class="report-sample v-w1200">
-    <div class="sample-container">
-      <iframe class="iframe" :src="pdfUrl" :style="{ height: iframeHeight }" frameborder="0"></iframe>
-      <AdSense v-show="!loginFlag" ref="adSense" :code="code" @openUrl="openUrl"></AdSense>
+    <div class="sample-container" v-loading="loading">
+      <iframe
+        class="iframe"
+        :src="pdfUrl"
+        :style="{ height: iframeHeight }"
+        frameborder="0"
+      ></iframe>
+      <AdSense
+        v-show="!loginFlag"
+        ref="adSense"
+        :code="code"
+        @openUrl="openUrl"
+      ></AdSense>
     </div>
   </div>
 </template>
@@ -13,14 +23,15 @@ import { getAssetsFile } from '@/utils'
 import AdSense from '@/views/order/components/adsense/index.vue'
 export default {
   name: 'report-sample',
-  components:{
+  components: {
     AdSense
   },
   data() {
     return {
-      pdfUrl: getAssetsFile('投标企业信用报告(样例_剑鱼标讯).pdf'),
-      code: 'new-pc-index-top-ad',
-      adHeight: 0
+      pdfUrl: '',
+      code: 'pc-credit-report-sample',
+      adHeight: 0,
+      loading: true
     }
   },
   computed: {
@@ -29,11 +40,19 @@ export default {
       return this.adHeight ? `calc(100% - ${this.adHeight}px)` : '100%'
     }
   },
+  created() {
+    if (this.$route.query && this.$route.query.url) {
+      this.pdfUrl = decodeURIComponent(this.$route.query.url)
+      this.loading = false
+    } else {
+      this.pdfUrl = getAssetsFile('投标企业信用报告(样例_剑鱼标讯).pdf')
+      this.loading = false
+    }
+  },
   mounted() {
     setTimeout(() => {
       this.getAdStyle()
     }, 300)
-    console.log(this.loginFlag)
   },
   methods: {
     getAdStyle() {
@@ -47,7 +66,7 @@ export default {
     },
     openUrl() {
       // 打开登录弹框or跳转登录页面
-      // location.href = '/notin/page?source=bidCreditReport'
+      // location.href = '/notin/page?source=bidCreditReportPreview'
       const redirectUrl = '/swordfish/page_big_pc/order/credit-report'
       this.$showLoginDialog(false, redirectUrl)
     }
@@ -56,24 +75,24 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-.report-sample{
+.report-sample {
   height: 100vh;
-  .sample-container{
+  .sample-container {
     display: flex;
     flex-direction: column;
     height: 100%;
   }
-  .iframe{
+  .iframe {
     flex: 1;
     width: 100%;
   }
-  .adsense{
+  .adsense {
     padding: 0;
   }
 }
 </style>
 <style>
-.adsense .content{
-  padding: 0!important;
+.adsense .content {
+  padding: 0 !important;
 }
 </style>

+ 414 - 326
apps/bigmember_pc/src/views/reportDownload/record.vue

@@ -10,12 +10,22 @@
         <div class="card-col" v-for="item in cardList">
           <p class="title">{{ item.title }}</p>
           <div class="num">
-            <span><strong>{{ item.total }}</strong>份</span>
-            <el-button class="recharge-button" type="primary" @click="goRecharge(item)">立即充值</el-button>
+            <span
+              ><strong>{{ item.total }}</strong
+              >份</span
+            >
+            <el-button
+              class="recharge-button"
+              type="primary"
+              @click="goRecharge(item)"
+              >立即充值</el-button
+            >
           </div>
           <p class="date">
             <span v-if="item.total">最近有效期至:{{ item.minEndTime }}</span>
-            <span class="text-button" @click="goBalance(item)">查明细<i class="iconfont icon-more"></i></span>
+            <span class="text-button" @click="goBalance(item)"
+              >查明细<i class="iconfont icon-more"></i
+            ></span>
           </p>
         </div>
       </div>
@@ -23,36 +33,40 @@
     <section class="flex flex-(justify-between items-center) credit-report-box">
       <div class="flex flex-items-center credit-report-content">
         <p class="credit-report-title">投标企业信用报告</p>
-        <p class="credit-report-desc">信用报告通过信用背书、风险预警、政策适配,三大核心作用,成为投标企业参与市场竞争的关键工具‌</p>
-        <img class="credit-report-icon" src="@/assets/images/credit-report-icon.png" alt="信用报告">
+        <p class="credit-report-desc">
+          信用报告通过信用背书、风险预警、政策适配,三大核心作用,成为投标企业参与市场竞争的关键工具‌
+        </p>
+        <img
+          class="credit-report-icon"
+          src="@/assets/images/credit-report-icon.png"
+          alt="信用报告"
+        />
       </div>
       <div class="flex flex-items-center report-action">
-        <span class="view-report-sample" @click="goViewSample">查看报告样例</span>
+        <span class="view-report-sample" @click="goViewSample"
+          >查看报告样例</span
+        >
         <button class="report-to-buy" @click="goBuyCreditReport">去购买</button>
       </div>
     </section>
     <section class="box-container record-box">
       <p class="box-title">报告下载记录</p>
-      <el-table
-        :data="listState.list"
-        v-show="!showEmpty"
-      >
+      <el-table :data="listState.list" v-show="!showEmpty">
         <el-table-column label="下载时间" width="170" align="center">
           <template slot-scope="scope">
             <span class="max-line-3">{{
-                (scope.row.l_createTime * 1000) | formatTime('yyyy-MM-dd HH:mm')
-              }}</span>
+              (scope.row.l_createTime * 1000) | formatTime('yyyy-MM-dd HH:mm')
+            }}</span>
           </template>
         </el-table-column>
         <el-table-column label="报告类型" width="230" align="center">
           <template slot-scope="scope">
-            {{scope.row.type | formatType}}
+            {{ scope.row.type | formatType }}
           </template>
-
         </el-table-column>
         <el-table-column label="报告说明" min-width="400">
           <template slot-scope="scope">
-           <!-- 市场分析报告-->
+            <!-- 市场分析报告-->
             <el-tooltip
               v-if="scope.row.type === '3'"
               effect="dark"
@@ -78,24 +92,30 @@
                 <div>
                   <span>成交时间:</span
                   ><span
-                >{{
-                    scope.row.rangeTimeStart | formatTime('yyyy-MM-dd')
-                  }}至{{
-                    scope.row.rangeTimeEnd | formatTime('yyyy-MM-dd')
-                  }}</span
-                >
+                    >{{
+                      scope.row.rangeTimeStart | formatTime('yyyy-MM-dd')
+                    }}至{{
+                      scope.row.rangeTimeEnd | formatTime('yyyy-MM-dd')
+                    }}</span
+                  >
                 </div>
                 <div v-if="scope.row.s_area && scope.row.s_area !== '{}'">
                   <span>项目地区:</span
                   ><span>{{ scope.row.s_area | formatArea }}</span>
                 </div>
-                <div v-if="scope.row.s_industry && scope.row.s_industry !== '{}'">
+                <div
+                  v-if="scope.row.s_industry && scope.row.s_industry !== '{}'"
+                >
                   <span>行业:</span
-                  ><span>{{ scope.row.s_industry | formatMarketIndustry }}</span>
+                  ><span>{{
+                    scope.row.s_industry | formatMarketIndustry
+                  }}</span>
                 </div>
                 <div v-if="scope.row.s_buyerClass">
                   <span>采购单位类型:</span
-                  ><span>{{ getFormatBuyerClass(scope.row.s_buyerClass) }}</span>
+                  ><span>{{
+                    getFormatBuyerClass(scope.row.s_buyerClass)
+                  }}</span>
                 </div>
               </div>
               <div>
@@ -111,128 +131,190 @@
                   <div>
                     <span>成交时间:</span
                     ><span
-                  >{{
-                      scope.row.rangeTimeStart | formatTime('yyyy-MM-dd')
-                    }}至{{
-                      scope.row.rangeTimeEnd | formatTime('yyyy-MM-dd')
-                    }}</span
-                  >
+                      >{{
+                        scope.row.rangeTimeStart | formatTime('yyyy-MM-dd')
+                      }}至{{
+                        scope.row.rangeTimeEnd | formatTime('yyyy-MM-dd')
+                      }}</span
+                    >
                   </div>
-                  <div class="ellipsis-1" v-if="scope.row.s_area && scope.row.s_area !== '{}'">
+                  <div
+                    class="ellipsis-1"
+                    v-if="scope.row.s_area && scope.row.s_area !== '{}'"
+                  >
                     <span>项目地区:</span
                     ><span>{{ scope.row.s_area | formatArea }}</span>
                   </div>
-                  <div class="ellipsis-1" v-if="scope.row.s_industry && scope.row.s_industry !== '{}'">
+                  <div
+                    class="ellipsis-1"
+                    v-if="scope.row.s_industry && scope.row.s_industry !== '{}'"
+                  >
                     <span>行业:</span
-                    ><span>{{ scope.row.s_industry | formatMarketIndustry }}</span>
+                    ><span>{{
+                      scope.row.s_industry | formatMarketIndustry
+                    }}</span>
                   </div>
-                  <div  class="ellipsis-1" v-if="scope.row.s_buyerClass">
+                  <div class="ellipsis-1" v-if="scope.row.s_buyerClass">
                     <span>采购单位类型:</span
-                    ><span>{{ getFormatBuyerClass(scope.row.s_buyerClass) }}</span>
+                    ><span>{{
+                      getFormatBuyerClass(scope.row.s_buyerClass)
+                    }}</span>
                   </div>
                 </div>
               </div>
             </el-tooltip>
+            <div v-else-if="scope.row.type === '4'" class="">
+              <div>
+                <span>投标企业名称:</span>
+                <span>{{ scope.row.ent }}</span>
+              </div>
+              <div>
+                <span>招标单位名称:</span>
+                <span>{{ scope.row.buyer }}</span>
+              </div>
+            </div>
             <!-- 业主采购、企业中标分析报告-->
             <el-tooltip
-                v-else
-                effect="dark"
-                placement="right"
-                popper-class="analyse-condition-tooltip"
-              >
-                <div
-                  slot="content"
-                  style="
+              v-else
+              effect="dark"
+              placement="right"
+              popper-class="analyse-condition-tooltip"
+            >
+              <div
+                slot="content"
+                style="
                   max-width: 300px !important;
                   font-size: 12px;
                   line-height: 22px;
                 "
-                >
+              >
+                <div v-if="scope.row.type === '1'">
+                  <span>目标企业:</span>
+                  <span
+                    class="highlight-name"
+                    @click="goEntPortrayal(scope.row.ent)"
+                    >{{ scope.row.entName }}</span
+                  >
+                </div>
+                <div v-if="scope.row.type === '2'">
+                  <span>目标业主:</span>
+                  <span
+                    class="highlight-name"
+                    @click="goUnitPortrayal(scope.row.ent)"
+                    >{{ scope.row.entName }}</span
+                  >
+                </div>
+                <div>
+                  <span>成交时间:</span
+                  ><span
+                    >{{ scope.row.rangeTimeStart }}至{{
+                      scope.row.rangeTimeEnd
+                    }}</span
+                  >
+                </div>
+                <div v-if="scope.row.match">
+                  <span>关键词:</span>
+                  <span>{{
+                    scope.row.match +
+                    (scope.row.exactMatch === '1' ? '(精准)' : '(模糊)')
+                  }}</span>
+                </div>
+                <div v-if="scope.row.matchRange">
+                  <span>搜索范围:</span
+                  ><span>{{ scope.row.matchRange | formatSelectType }}</span>
+                </div>
+                <div v-if="scope.row.area">
+                  <span>项目地区:</span><span>{{ scope.row.area }}</span>
+                </div>
+                <div v-if="scope.row.scopeClass">
+                  <span>行业:</span
+                  ><span>{{ getFormatIndustry(scope.row.scopeClass) }}</span>
+                </div>
+                <div v-if="scope.row.buyerClass && scope.row.type === '1'">
+                  <span>采购单位类型:</span
+                  ><span>{{ getFormatBuyerClass(scope.row.buyerClass) }}</span>
+                </div>
+              </div>
+              <div>
+                <div class="analyse-condition">
                   <div v-if="scope.row.type === '1'">
                     <span>目标企业:</span>
-                    <span class="highlight-name" @click="goEntPortrayal(scope.row.ent)">{{scope.row.entName}}</span>
+                    <span
+                      class="highlight-name"
+                      @click="goEntPortrayal(scope.row.ent)"
+                      >{{ scope.row.entName }}</span
+                    >
                   </div>
                   <div v-if="scope.row.type === '2'">
                     <span>目标业主:</span>
-                    <span class="highlight-name" @click="goUnitPortrayal(scope.row.ent)">{{scope.row.entName}}</span>
+                    <span
+                      class="highlight-name"
+                      @click="goUnitPortrayal(scope.row.ent)"
+                      >{{ scope.row.entName }}</span
+                    >
                   </div>
                   <div>
                     <span>成交时间:</span
                     ><span
-                  >{{scope.row.rangeTimeStart }}至{{scope.row.rangeTimeEnd }}</span>
+                      >{{ scope.row.rangeTimeStart }}至{{
+                        scope.row.rangeTimeEnd
+                      }}</span
+                    >
                   </div>
-                  <div v-if="scope.row.match">
+                  <div class="ellipsis-1" v-if="scope.row.match">
                     <span>关键词:</span>
-                    <span>{{ scope.row.match + (scope.row.exactMatch === '1' ? '(精准)': '(模糊)')}}</span>
+                    <span>{{
+                      scope.row.match +
+                      (scope.row.exactMatch === '1' ? '(精准)' : '(模糊)')
+                    }}</span>
                   </div>
-                  <div v-if="scope.row.matchRange">
+                  <div class="ellipsis-1" v-if="scope.row.matchRange">
                     <span>搜索范围:</span
                     ><span>{{ scope.row.matchRange | formatSelectType }}</span>
                   </div>
-                  <div v-if="scope.row.area">
-                    <span>项目地区:</span
-                    ><span>{{ scope.row.area }}</span>
+                  <div class="ellipsis-1" v-if="scope.row.area">
+                    <span>项目地区:</span><span>{{ scope.row.area }}</span>
                   </div>
-                  <div v-if="scope.row.scopeClass">
+                  <div class="ellipsis-1" v-if="scope.row.scopeClass">
                     <span>行业:</span
                     ><span>{{ getFormatIndustry(scope.row.scopeClass) }}</span>
                   </div>
-                  <div v-if="scope.row.buyerClass && scope.row.type === '1'">
-                    <span>采购单位类型:</span
-                    ><span>{{ getFormatBuyerClass(scope.row.buyerClass)}}</span>
-                  </div>
-                </div>
-                <div>
-                  <div class="analyse-condition">
-                    <div v-if="scope.row.type === '1'">
-                      <span>目标企业:</span>
-                      <span class="highlight-name" @click="goEntPortrayal(scope.row.ent)">{{scope.row.entName}}</span>
-                    </div>
-                    <div v-if="scope.row.type === '2'">
-                      <span>目标业主:</span>
-                      <span class="highlight-name" @click="goUnitPortrayal(scope.row.ent)">{{scope.row.entName}}</span>
-                    </div>
-                    <div>
-                    <span>成交时间:</span
-                    ><span
-                    >{{scope.row.rangeTimeStart }}至{{scope.row.rangeTimeEnd }}</span>
-                    </div>
-                    <div class="ellipsis-1" v-if="scope.row.match" >
-                      <span>关键词:</span>
-                      <span>{{ scope.row.match  + (scope.row.exactMatch === '1' ? '(精准)': '(模糊)')}}</span>
-                    </div>
-                    <div class="ellipsis-1" v-if="scope.row.matchRange">
-                    <span>搜索范围:</span
-                    ><span>{{ scope.row.matchRange | formatSelectType }}</span>
-                    </div>
-                    <div class="ellipsis-1"  v-if="scope.row.area">
-                    <span>项目地区:</span
-                    ><span>{{ scope.row.area }}</span>
-                    </div>
-                    <div class="ellipsis-1"  v-if="scope.row.scopeClass">
-                    <span>行业:</span
-                    ><span>{{ getFormatIndustry(scope.row.scopeClass)}}</span>
-                    </div>
-                    <div class="ellipsis-1"  v-if="scope.row.buyerClass && scope.row.type === '1'">
+                  <div
+                    class="ellipsis-1"
+                    v-if="scope.row.buyerClass && scope.row.type === '1'"
+                  >
                     <span>采购单位类型:</span
-                    ><span>{{ getFormatBuyerClass(scope.row.buyerClass)}}</span>
-                    </div>
+                    ><span>{{
+                      getFormatBuyerClass(scope.row.buyerClass)
+                    }}</span>
                   </div>
                 </div>
-              </el-tooltip>
+              </div>
+            </el-tooltip>
           </template>
         </el-table-column>
         <el-table-column min-width="100" label="操作" align="center">
           <template slot-scope="scope">
-            <a v-if="scope.row.s_pdfUrl" class="text-button" :download="scope.row.fileName + '.pdf'" :href="scope.row.s_pdfUrl" target="_blank">下载</a>
+            <a
+              v-if="scope.row.s_pdfUrl"
+              class="text-button"
+              :download="scope.row.fileName + '.pdf'"
+              :href="scope.row.s_pdfUrl"
+              target="_blank"
+              >下载</a
+            >
             <span v-else>--</span>
           </template>
         </el-table-column>
       </el-table>
-      <empty  v-show="showEmpty">
+      <empty v-show="showEmpty">
         <div class="flex-c-c center">
-          <div style="width:310px;text-align: center">暂无下载记录,您可前往查看市场分析定制报告,精准分析客户、竞对、市场</div>
-          <el-button class="view-report-btn" type="primary" @click="viewReport">查看报告</el-button>
+          <div style="width: 310px; text-align: center">
+            暂无下载记录,您可前往查看市场分析定制报告,精准分析客户、竞对、市场
+          </div>
+          <el-button class="view-report-btn" type="primary" @click="viewReport"
+            >查看报告</el-button
+          >
         </div>
       </empty>
 
@@ -252,7 +334,6 @@
         </el-pagination>
       </div>
     </section>
-
   </div>
 </template>
 
@@ -266,7 +347,7 @@ export default {
   components: {
     Empty
   },
-  data () {
+  data() {
     return {
       listState: {
         loaded: true, // 是否已经搜索过
@@ -303,10 +384,10 @@ export default {
         }
       ],
       typeObj: {
-        '1': '企业中标分析报告',
-        '2': '业主采购分析报告',
-        '3': '市场分析定制报告',
-        '4': '投标企业信用报告'
+        1: '企业中标分析报告',
+        2: '业主采购分析报告',
+        3: '市场分析定制报告',
+        4: '投标企业信用报告'
       }
     }
   },
@@ -356,7 +437,7 @@ export default {
         if (!value[key].length) {
           keyArr.push(key)
         } else {
-          for(const item of value[key]) {
+          for (const item of value[key]) {
             valueArr.push(key + '_' + item)
           }
         }
@@ -366,17 +447,17 @@ export default {
       return obj.industryText
     },
     FormatKeys: function (keys) {
-      if(!keys) return '-'
+      if (!keys) return '-'
       let tempStr = '-'
       const tempResult = []
       const tempList = JSON.parse(keys)
       tempList.forEach(function (v) {
         v.a_key.forEach(function (k) {
           let key = []
-          if(k.key) {
+          if (k.key) {
             key = key.concat(k.key)
           }
-          if(k.appendkey) {
+          if (k.appendkey) {
             key = key.concat(k.appendkey)
           }
           tempResult.push({
@@ -388,11 +469,12 @@ export default {
       tempStr = tempResult
         .map(function (v) {
           return v.key.join(' ') + '(' + v.type + ')'
-        }).join(',')
+        })
+        .join(',')
       return tempStr
     },
     formatSelectType: function (value) {
-      if(!value) return '-'
+      if (!value) return '-'
       const arr = value.split(',')
       const strArr = []
       const str = ''
@@ -402,15 +484,15 @@ export default {
         winner: '中标企业',
         agency: '招标代理机构'
       }
-      for(let item of arr) {
+      for (let item of arr) {
         strArr.push(obj[item])
       }
       return strArr.join(',')
     },
     formatType: function (value) {
-      if(!value) return '-'
+      if (!value) return '-'
       let result = ''
-      switch(Number(value)) {
+      switch (Number(value)) {
         case 1:
           result = '企业中标分析报告'
           break
@@ -428,9 +510,7 @@ export default {
     }
   },
   computed: {
-    ...mapGetters('user', [
-      'isMember'
-    ]),
+    ...mapGetters('user', ['isMember']),
     showEmpty() {
       return this.listState.list.length === 0 && this.listState.loaded
     }
@@ -446,7 +526,7 @@ export default {
       return obj.industryText
     },
     // 格式化采购单位
-    getFormatBuyerClass (val) {
+    getFormatBuyerClass(val) {
       const obj = formatBuyerClass(val)
       return obj.buyerClassText
     },
@@ -458,7 +538,7 @@ export default {
       const text = map[m] || map.content
       return text
     },
-    async getList () {
+    async getList() {
       try {
         const query = {
           page: this.listState.pageNum,
@@ -473,21 +553,26 @@ export default {
           if (this.listState.pageNum === 1) {
             this.listState.total = data.count
           }
-          const list = data.list?.map((v) => {
-            if (v.s_rangeTime) {
-              const rangeTimeArr = v.s_rangeTime.split('-')
-              v.rangeTimeStart = new Date(rangeTimeArr[0] * 1000).getTime()
-              v.rangeTimeEnd = new Date(rangeTimeArr[1] * 1000).getTime()
-            } else if(v.timeRange) {
-              const rangeTimeArr = v.timeRange.split('_')
-              v.rangeTimeStart = rangeTimeArr[0]
-              v.rangeTimeEnd = rangeTimeArr[1]
-            }
-            const creatTime = v.l_createTime ? new Date(v.l_createTime * 1000).pattern('yyyyMMdd') : new Date().pattern('yyyyMMdd')
-            const typeName = v.type ? this.typeObj[v.type.toString()] : '分析报告'
-            v.fileName = `剑鱼标讯-${typeName}-${creatTime}`
-            return v
-          }) || []
+          const list =
+            data.list?.map((v) => {
+              if (v.s_rangeTime) {
+                const rangeTimeArr = v.s_rangeTime.split('-')
+                v.rangeTimeStart = new Date(rangeTimeArr[0] * 1000).getTime()
+                v.rangeTimeEnd = new Date(rangeTimeArr[1] * 1000).getTime()
+              } else if (v.timeRange) {
+                const rangeTimeArr = v.timeRange.split('_')
+                v.rangeTimeStart = rangeTimeArr[0]
+                v.rangeTimeEnd = rangeTimeArr[1]
+              }
+              const creatTime = v.l_createTime
+                ? new Date(v.l_createTime * 1000).pattern('yyyyMMdd')
+                : new Date().pattern('yyyyMMdd')
+              const typeName = v.type
+                ? this.typeObj[v.type.toString()]
+                : '分析报告'
+              v.fileName = `剑鱼标讯-${typeName}-${creatTime}`
+              return v
+            }) || []
           this.listState.list = list || []
         } else {
           throw new Error(code)
@@ -508,11 +593,11 @@ export default {
       this.listState.pageSize = size
       this.getList()
     },
-    async getBalanceList () {
+    async getBalanceList() {
       const { data = {}, error_code: code } = await getPDFPackBalance()
-      if(code === 0 && data) {
-        for(let item of this.cardList) {
-          if(data[item.type]) {
+      if (code === 0 && data) {
+        for (let item of this.cardList) {
+          if (data[item.type]) {
             item.total = data[item.type].total
             item.minEndTime = data[item.type].minEndTime
           }
@@ -520,11 +605,14 @@ export default {
       }
     },
     // 立即充值
-    goRecharge (item) {
-      window.open(`/swordfish/page_big_pc/order/download-pack/${item.flag}`, '_self')
+    goRecharge(item) {
+      window.open(
+        `/swordfish/page_big_pc/order/download-pack/${item.flag}`,
+        '_self'
+      )
     },
     // 查看余额明细页面
-    goBalance (item) {
+    goBalance(item) {
       this.$router.push({
         path: '/report/download_record',
         query: {
@@ -534,237 +622,237 @@ export default {
       })
     },
     // 查看报告
-    viewReport () {
+    viewReport() {
       this.$router.push('/desktop/report_analysis')
     },
     // 跳转企业画像
-    goEntPortrayal (id) {
-      if(this.isMember) {
+    goEntPortrayal(id) {
+      if (this.isMember) {
         // 大会员
         window.open(`/swordfish/page_big_pc/ent_portrait/${id}`, '_blank')
       } else {
         // 非大会员
-        window.open(`/swordfish/page_big_pc/svip/ent_ser_portrait/${id}`, '_blank')
+        window.open(
+          `/swordfish/page_big_pc/svip/ent_ser_portrait/${id}`,
+          '_blank'
+        )
       }
     },
     // 进入采购单位画像
-    goUnitPortrayal (name) {
+    goUnitPortrayal(name) {
       window.open(`/swordfish/page_big_pc/unit_portrayal/${name}`, '_blank')
     },
     goViewSample() {
-      window.open('/swordfish/page_big_pc/free/report/sample', '_blank')
+      window.open('/swordfish/page_big_pc/free/report/preview', '_blank')
     },
     goBuyCreditReport() {
       window.open('/swordfish/page_big_pc/order/credit-report', '_blank')
     }
   }
 }
-
 </script>
 
 <style lang="scss" scoped>
-  $char_color: #1d1d1d;
-  .in-app {
-    .report-download-record {
-      padding: 24px;
-    }
+$char_color: #1d1d1d;
+.in-app {
+  .report-download-record {
+    padding: 24px;
   }
+}
 
-  .report-download-record{
-    margin: 0 auto;
-    .page-header{
-      height: 40px;
-      line-height:40px;
-      vertical-align: text-bottom;
-      h1{
-        display: inline-block;
-        font-size: 24px;
-        line-height:38px;
-        color: $char_color;
-        margin-right: 12px;
-      }
-      em{
-        font-size:12px;
-        color: #999;
-        line-height:18px;
-      }
+.report-download-record {
+  margin: 0 auto;
+  .page-header {
+    height: 40px;
+    line-height: 40px;
+    vertical-align: text-bottom;
+    h1 {
+      display: inline-block;
+      font-size: 24px;
+      line-height: 38px;
+      color: $char_color;
+      margin-right: 12px;
     }
-    .box-container{
-      border-radius: 4px;
-      background: #fff;
-      .box-title{
-        font-size:16px;
-        color: $char_color;
-        line-height:24px;
-        margin-bottom: 12px;
-      }
+    em {
+      font-size: 12px;
+      color: #999;
+      line-height: 18px;
     }
-    .balance-box{
-      margin: 24px 0 16px;
-      padding: 12px 24px 32px;
-      .card-row{
-        display: grid;
-        grid-template-columns: 1fr 1fr 1fr;
-        grid-column-gap: 24px;
-      }
-      .card-col{
-        background: url(~@/assets/images/report/balance-bg.png) no-repeat center;
-        background-size: cover;
-        padding: 24px 32px;
-        border-radius: 8px;
-        box-shadow: 0 4px 8px rgba(0,0,0, 0.08);
-        font-size: 16px;
-        color: $char_color;
-        .num{
-          margin: 14px 0 20px;
-          display: flex;
-          align-items: flex-end;
-          strong {
-            font-size:40px;
-          }
-          >span{
-            margin-right: 11px;
-          }
+  }
+  .box-container {
+    border-radius: 4px;
+    background: #fff;
+    .box-title {
+      font-size: 16px;
+      color: $char_color;
+      line-height: 24px;
+      margin-bottom: 12px;
+    }
+  }
+  .balance-box {
+    margin: 24px 0 16px;
+    padding: 12px 24px 32px;
+    .card-row {
+      display: grid;
+      grid-template-columns: 1fr 1fr 1fr;
+      grid-column-gap: 24px;
+    }
+    .card-col {
+      background: url(~@/assets/images/report/balance-bg.png) no-repeat center;
+      background-size: cover;
+      padding: 24px 32px;
+      border-radius: 8px;
+      box-shadow: 0 4px 8px rgba(0, 0, 0, 0.08);
+      font-size: 16px;
+      color: $char_color;
+      .num {
+        margin: 14px 0 20px;
+        display: flex;
+        align-items: flex-end;
+        strong {
+          font-size: 40px;
         }
+        > span {
+          margin-right: 11px;
+        }
+      }
 
-        .date{
-          font-size:14px;
-          color: #999;
-          line-height:22px;
+      .date {
+        font-size: 14px;
+        color: #999;
+        line-height: 22px;
 
-          span:nth-of-type(1) {
-            margin-right: 12px;
-          }
+        span:nth-of-type(1) {
+          margin-right: 12px;
         }
       }
     }
-    .record-box{
-      padding: 12px 20px 24px;
+  }
+  .record-box {
+    padding: 12px 20px 24px;
+  }
+  .recharge-button {
+    padding: 4px 17px;
+    font-size: 14px;
+    line-height: 22px;
+  }
+  .text-button {
+    font-size: 14px;
+    line-height: 22px;
+    color: #2abed1;
+    cursor: pointer;
+  }
+  .highlight-name {
+    color: #2abed1;
+    cursor: pointer;
+    text-decoration: underline;
+  }
+  .icon-more {
+    font-size: 14px;
+    margin-left: 4px;
+    font-weight: bold;
+  }
+  .max-line-6 {
+    display: -webkit-box;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    -webkit-line-clamp: 6;
+    line-clamp: 6;
+    -webkit-box-orient: vertical;
+    box-orient: vertical;
+  }
+  .ellipsis-1 {
+    display: -webkit-box;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    -webkit-line-clamp: 1;
+    line-clamp: 1;
+    -webkit-box-orient: vertical;
+    box-orient: vertical;
+  }
+  .analyse-condition {
+    color: #1d1d1d;
+    font-size: 14px;
+    line-height: 22px;
+    &:hover {
+      color: #2abed1;
     }
-    .recharge-button{
-      padding: 4px 17px;
+  }
+  .el-pagination-container {
+    margin-right: 0;
+    margin-top: 24px;
+    padding-bottom: 18px;
+  }
+  .view-report-btn {
+    font-size: 16px;
+    line-height: 24px;
+    padding: 6px 34px;
+    margin-top: 56px;
+    border-radius: 6px;
+  }
+  ::v-deep {
+    .el-table .cell {
       font-size: 14px;
+      font-weight: 400;
+      color: #1d1d1d;
       line-height: 22px;
+      border-bottom-color: rgba(255, 255, 255, 0.5);
     }
-    .text-button{
-      font-size: 14px;
-      line-height: 22px;
-      color: #2abed1;
-      cursor: pointer;
+    .el-table th.is-leaf {
+      line-height: 18px;
+      background: #f7f9fc;
+      border-bottom-color: transparent;
     }
-    .highlight-name{
-      color: #2abed1;
-      cursor: pointer;
-      text-decoration: underline;
-    }
-    .icon-more{
-      font-size:14px;
-      margin-left: 4px;
-      font-weight:bold;
+    .empty-content-position.v-column .empty-main {
+      margin-top: 0;
     }
-    .max-line-6 {
-      display: -webkit-box;
-      overflow: hidden;
-      text-overflow: ellipsis;
-      -webkit-line-clamp: 6;
-      line-clamp: 6;
-      -webkit-box-orient: vertical;
-      box-orient: vertical;
-    }
-    .ellipsis-1 {
-      display: -webkit-box;
-      overflow: hidden;
-      text-overflow: ellipsis;
-      -webkit-line-clamp: 1;
-      line-clamp: 1;
-      -webkit-box-orient: vertical;
-      box-orient: vertical;
+  }
+  .credit-report-box {
+    padding: 15px 24px;
+    margin-bottom: 16px;
+    background: linear-gradient(90deg, #e3fcff 0%, #ffffff 100%);
+    border-radius: 4px;
+    border: 1px solid #87dfea;
+    .credit-report-content {
+      position: relative;
     }
-    .analyse-condition {
+    .credit-report-title {
+      margin-right: 12px;
       color: #1d1d1d;
+      font-size: 16px;
+      line-height: 24px;
+    }
+    .credit-report-desc {
+      position: relative;
+      color: #686868;
       font-size: 14px;
       line-height: 22px;
-      &:hover {
-        color: #2abed1;
-      }
+      z-index: 10;
     }
-    .el-pagination-container {
-      margin-right: 0;
-      margin-top:24px;
-      padding-bottom: 18px;
-    }
-    .view-report-btn{
-      font-size:16px;
-      line-height: 24px;
-      padding: 6px 34px;
-      margin-top:56px;
-      border-radius: 6px;
-    }
-    ::v-deep {
-      .el-table .cell {
-        font-size: 14px;
-        font-weight: 400;
-        color: #1d1d1d;
-        line-height: 22px;
-        border-bottom-color: rgba(255, 255, 255, 0.5);
-      }
-      .el-table th.is-leaf {
-        line-height: 18px;
-        background: #f7f9fc;
-        border-bottom-color: transparent;
-      }
-      .empty-content-position.v-column .empty-main {
-        margin-top:0;
-      }
+    .view-report-sample {
+      color: $color_main;
+      cursor: pointer;
+      font-size: 14px;
+      line-height: 22px;
     }
-    .credit-report-box{
-      padding: 15px 24px;
-      margin-bottom: 16px;
-      background: linear-gradient(90deg, #E3FCFF 0%, #FFFFFF 100%);
+    .report-to-buy {
+      margin-left: 20px;
+      background: $color_main;
+      color: #fff;
+      font-size: 14px;
+      line-height: 22px;
+      padding: 4px 24px;
       border-radius: 4px;
-      border: 1px solid #87DFEA;
-      .credit-report-content{
-        position: relative;
-      }
-      .credit-report-title{
-        margin-right: 12px;
-        color: #1D1D1D;
-        font-size: 16px;
-        line-height: 24px;
-      }
-      .credit-report-desc{
-        position: relative;
-        color: #686868;
-        font-size: 14px;
-        line-height: 22px;
-        z-index: 10;
-      }
-      .view-report-sample{
-        color: $color_main;
-        cursor: pointer;
-        font-size: 14px;
-        line-height: 22px;
-      }
-      .report-to-buy{
-        margin-left: 20px;
-        background: $color_main;
-        color: #fff;
-        font-size: 14px;
-        line-height: 22px;
-        padding: 4px 24px;
-        border-radius: 4px;
-      }
-      .credit-report-icon{
-        position: absolute;
-        top: 50%;
-        right: -80px;
-        width: 112px;
-        height: 60px;
-        transform: translateY(-50%);
-        z-index: 9;
-      }
+    }
+    .credit-report-icon {
+      position: absolute;
+      top: 50%;
+      right: -80px;
+      width: 112px;
+      height: 60px;
+      transform: translateY(-50%);
+      z-index: 9;
     }
   }
-
-
+}
 </style>