{"version":3,"sources":["webpack:///./src/components/public/PublicTitle.vue?5dcd","webpack:///src/components/public/PublicTitle.vue","webpack:///./src/components/public/PublicTitle.vue?4ec8","webpack:///./src/components/public/PublicTitle.vue","webpack:///./node_modules/core-js/modules/web.dom-collections.for-each.js","webpack:///./node_modules/core-js/internals/array-for-each.js","webpack:///./src/assets/image/tab-bg.png","webpack:///./src/views/trustworthy/subscription/Index.vue?2648","webpack:///src/views/trustworthy/subscription/Index.vue","webpack:///./src/views/trustworthy/subscription/Index.vue?0611","webpack:///./src/views/trustworthy/subscription/Index.vue","webpack:///./src/components/public/PublicBanner.vue?0bc4","webpack:///src/components/public/PublicBanner.vue","webpack:///./src/components/public/PublicBanner.vue?9093","webpack:///./src/components/public/PublicBanner.vue","webpack:///./node_modules/core-js/modules/es.array.filter.js","webpack:///./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack:///./node_modules/@babel/runtime/helpers/esm/objectSpread2.js","webpack:///./src/api/safeCredible.js","webpack:///./src/views/trustworthy/dahua_psirt/Index.vue?769e","webpack:///src/views/trustworthy/dahua_psirt/Index.vue","webpack:///./src/views/trustworthy/dahua_psirt/Index.vue?dd8d","webpack:///./src/views/trustworthy/dahua_psirt/Index.vue","webpack:///./src/views/trustworthy/dahua_psirt/Index.vue?0270","webpack:///./src/components/public/PublicTitle.vue?9044","webpack:///./node_modules/core-js/internals/array-method-is-strict.js","webpack:///./src/views/trustworthy/subscription/Index.vue?c050","webpack:///./node_modules/core-js/modules/es.object.get-own-property-descriptors.js","webpack:///./src/components/public/PublicBanner.vue?1db6","webpack:///./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"],"names":["render","_vm","this","_h","$createElement","_c","_self","staticClass","titleInfo","_v","_s","bgTitle","_e","title","description","staticRenderFns","props","type","Object","default","component","global","DOMIterables","DOMTokenListPrototype","forEach","createNonEnumerableProperty","handlePrototype","CollectionPrototype","error","COLLECTION_NAME","prototype","$forEach","arrayMethodIsStrict","STRICT_METHOD","module","exports","callbackfn","arguments","length","undefined","attrs","bannerInfo","directives","name","rawName","value","expression","LP","lang_announcement_subscription","lang_announcement_subscription_description","ref","subscribeForm","subscribeRules","lang_first_name","lang_please_name","model","callback","$$v","$set","lang_email","lang_please_email","lang_code","lang_please_enter_the_verification_code","handleSendCodeEmail","on","refreshCaptcha","agreePrivacy","lang_i_agree","lang_privacy","class","isSubscribeButtonDisabled","submitSubscribe","lang_submit_subscription_information","lang_no_need_cancel","switchToUnsubscribe","lang_unsubscribe","showSubscribe","unsubscribeForm","unsubscribeRules","staticStyle","sendCodeDisabled","getVerificationCode","sendCodeBtnText","cancelSubmitDisabled","submitUnsubscribe","lang_submit","showPrivacyDialog","$event","lang_privacy_content","components","PublicBanner","data","email","code","lang_get_verification_code","countdown","computed","emailReg","test","methods","$nextTick","switchToSubscribe","$refs","validate","valid","res","status","setTimeout","style","domProps","$","$filter","filter","arrayMethodHasSpeciesSupport","HAS_SPECIES_SUPPORT","target","proto","forced","_defineProperty","obj","key","defineProperty","enumerable","configurable","writable","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","push","apply","_objectSpread2","i","source","getOwnPropertyDescriptors","defineProperties","apiUrl","credibleInfo","lang","dahuaPsirtInfo","technologyInfo","resourceInfo","trendsInfo","newsDetailInfo","cybersecurityHitInfo","noticeSubscription","cancelSubscription","sendCode","getCredibleInfoApi","fetch","getDahuaPsirtApi","getTechnologyInfoApi","params","getResourceInfoApi","getTrendsInfoApi","getNewsDetailApi","getCybersecurityHitApi","handleNoticeSubscription","handleCancelSubscription","handleSendCode","getSubscribe","lang_subscribe_now","_l","item","index","defaultIndex","bgImg","tabClick","menu_name","handleLink","post_date_d","post_date_y_m","pageSize","currentPage","total","handleCurrentChange","vTitleInfo","dataInfo","spirt_info","background","loophole_content","disposeTitleInfo","dispose_of_content","responseTitleInfo","image","publicTitle","menuInfo","tableData","lang_vulnerability_reporting_cn","lang_vulnerability_reporting","lang_disposal_specification_cn","lang_disposal_specification","lang_vulnerability_response_cn","lang_vulnerability_response","subscriptionTop","debounceTimer","beforeDestroy","window","removeEventListener","handleResize","clearTimeout","checkTabListPosition","tabListEl","elementBottom","elementTop","viewportHeight","calculateButtonPosition","position","buttonTop","maxButtonTop","$router","getPage","allData","slice","$index","getDahuaPsirtData","val","fails","METHOD_NAME","argument","method","call","DESCRIPTORS","toIndexedObject","getOwnPropertyDescriptorModule","createProperty","stat","sham","descriptor","O","f","result","nativeGetOwnPropertyDescriptor","FAILS_ON_PRIMITIVES","FORCED","it"],"mappings":"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","file":"js/dahua_psirt.fda858ba.js?t=1772678056554","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"public-title container\"},[(_vm.titleInfo.bgTitle)?_c('div',{staticClass:\"bg-title\"},[_vm._v(\" \"+_vm._s(_vm.titleInfo.bgTitle)+\" \")]):_vm._e(),(_vm.titleInfo.title)?_c('div',{staticClass:\"title\"},[_vm._v(\" \"+_vm._s(_vm.titleInfo.title)+\" \")]):_vm._e(),(_vm.titleInfo.description)?_c('div',{staticClass:\"desc\"},[_vm._v(\" \"+_vm._s(_vm.titleInfo.description)+\" \")]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n  <div class=\"public-title container\">\r\n    <div v-if=\"titleInfo.bgTitle\" class=\"bg-title\">\r\n      {{ titleInfo.bgTitle }}\r\n    </div>\r\n    <div v-if=\"titleInfo.title\" class=\"title\">\r\n      {{ titleInfo.title }}\r\n    </div>\r\n    <div v-if=\"titleInfo.description\" class=\"desc\">\r\n      {{ titleInfo.description }}\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n  props: {\r\n    titleInfo: {\r\n      type: Object,\r\n      default: () => {}\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.public-title {\r\n  text-align: center;\r\n  position: relative;\r\n  margin-bottom: 88px;\r\n  .bg-title {\r\n    font-size: 50px;\r\n    line-height: 66px;\r\n    color: rgba(33, 39, 51, .1);\r\n    font-weight: bold;\r\n  }\r\n  .title {\r\n    width: 100%;\r\n    position: absolute;\r\n    top: 33px;\r\n    left: 50%;\r\n    transform: translateX(-50%);\r\n    font-size: 40px;\r\n    line-height: 52px;\r\n    color: #000;\r\n    font-weight: normal;\r\n  }\r\n  .desc {\r\n    max-width: 985px;\r\n    font-size: 14px;\r\n    line-height: 20px;\r\n    color: rgba(33, 39, 51, .7);\r\n    margin: 36px auto 0;\r\n  }\r\n  @media screen and (max-width: 600px) {\r\n    margin-bottom: 48px;\r\n    .bg-title {\r\n      font-size: 30px;\r\n      line-height: 48px;\r\n    }\r\n    .title {\r\n      top: 22px;\r\n      font-size: 24px;\r\n      line-height: 36px;\r\n    }\r\n    .desc {\r\n      max-width: 92%;\r\n    }\r\n  }\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PublicTitle.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PublicTitle.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PublicTitle.vue?vue&type=template&id=7c2b8bee&scoped=true&\"\nimport script from \"./PublicTitle.vue?vue&type=script&lang=js&\"\nexport * from \"./PublicTitle.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PublicTitle.vue?vue&type=style&index=0&id=7c2b8bee&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"7c2b8bee\",\n  null\n  \n)\n\nexport default component.exports","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar DOMTokenListPrototype = require('../internals/dom-token-list-prototype');\nvar forEach = require('../internals/array-for-each');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar handlePrototype = function (CollectionPrototype) {\n  // some Chrome versions have non-configurable methods on DOMTokenList\n  if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n    createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n  } catch (error) {\n    CollectionPrototype.forEach = forEach;\n  }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n  if (DOMIterables[COLLECTION_NAME]) {\n    handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype);\n  }\n}\n\nhandlePrototype(DOMTokenListPrototype);\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n  return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n} : [].forEach;\n","module.exports = \"data:image/png;base64,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\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"dahua-subscription\"},[_c('public-banner',{attrs:{\"banner-info\":_vm.bannerInfo}}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showSubscribe),expression:\"showSubscribe\"}],staticClass:\"subscription-container\"},[_c('div',{staticClass:\"subscription-title\"},[_vm._v(_vm._s(_vm.LP.lang_announcement_subscription))]),_c('div',{staticClass:\"subscription-content\"},[_vm._v(_vm._s(_vm.LP.lang_announcement_subscription_description))]),_c('el-form',{ref:\"subscribeForm\",staticClass:\"custom-form\",attrs:{\"model\":_vm.subscribeForm,\"rules\":_vm.subscribeRules,\"label-width\":\"70px\"}},[_c('el-form-item',{attrs:{\"label\":_vm.LP.lang_first_name,\"prop\":\"title\"}},[_c('el-input',{attrs:{\"placeholder\":_vm.LP.lang_please_name},model:{value:(_vm.subscribeForm.title),callback:function ($$v) {_vm.$set(_vm.subscribeForm, \"title\", $$v)},expression:\"subscribeForm.title\"}})],1),_c('el-form-item',{attrs:{\"label\":_vm.LP.lang_email,\"prop\":\"email\"}},[_c('el-input',{attrs:{\"placeholder\":_vm.LP.lang_please_email},model:{value:(_vm.subscribeForm.email),callback:function ($$v) {_vm.$set(_vm.subscribeForm, \"email\", $$v)},expression:\"subscribeForm.email\"}})],1),_c('el-form-item',{staticClass:\"email-with-code\",attrs:{\"label\":_vm.LP.lang_code,\"prop\":\"code\"}},[_c('div',{staticClass:\"email-input-wrapper\"},[_c('el-input',{attrs:{\"maxlength\":\"4\",\"placeholder\":_vm.LP.lang_please_enter_the_verification_code},model:{value:(_vm.subscribeForm.code),callback:function ($$v) {_vm.$set(_vm.subscribeForm, \"code\", $$v)},expression:\"subscribeForm.code\"}}),_c('span',[_c('img',{attrs:{\"src\":_vm.handleSendCodeEmail,\"alt\":\"\"},on:{\"click\":_vm.refreshCaptcha}})])],1)]),_c('div',{staticClass:\"subscribe-operation\"},[_c('div',[_c('el-checkbox',{model:{value:(_vm.agreePrivacy),callback:function ($$v) {_vm.agreePrivacy=$$v},expression:\"agreePrivacy\"}},[_c('span',{staticClass:\"agree-privacy\"},[_vm._v(\" \"+_vm._s(_vm.LP.lang_i_agree)+\" \"),_c('a',{attrs:{\"href\":\"https://www.dahuatech.com/law/policy.html\",\"target\":\"_blank\"}},[_vm._v(_vm._s(_vm.LP.lang_privacy))])])])],1),_c('el-button',{staticClass:\"subscribe-tip-submit\",class:{ 'submit-isChecked': !_vm.isSubscribeButtonDisabled },attrs:{\"plain\":\"\",\"disabled\":_vm.isSubscribeButtonDisabled},on:{\"click\":_vm.submitSubscribe}},[_vm._v(_vm._s(_vm.LP.lang_submit_subscription_information))]),_c('div',{staticClass:\"subscribe-tip-cacel\"},[_vm._v(\" \"+_vm._s(_vm.LP.lang_no_need_cancel)+\" \"),_c('span',{on:{\"click\":_vm.switchToUnsubscribe}},[_vm._v(_vm._s(_vm.LP.lang_unsubscribe))])])],1)],1)],1),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.showSubscribe),expression:\"!showSubscribe\"}],staticClass:\"subscription-container\"},[_c('div',{staticClass:\"subscription-title subscription-title-unsubscribe\"},[_vm._v(_vm._s(_vm.LP.lang_unsubscribe))]),_c('el-form',{ref:\"unsubscribeForm\",attrs:{\"model\":_vm.unsubscribeForm,\"rules\":_vm.unsubscribeRules,\"label-width\":\"70px\"}},[_c('el-form-item',{attrs:{\"label\":_vm.LP.lang_email,\"prop\":\"email\"}},[_c('el-input',{attrs:{\"placeholder\":_vm.LP.lang_please_email},model:{value:(_vm.unsubscribeForm.email),callback:function ($$v) {_vm.$set(_vm.unsubscribeForm, \"email\", $$v)},expression:\"unsubscribeForm.email\"}})],1),_c('el-form-item',{attrs:{\"label\":_vm.LP.lang_code,\"prop\":\"code\"}},[_c('el-input',{staticStyle:{\"width\":\"160px\"},attrs:{\"placeholder\":_vm.LP.lang_please_enter_the_verification_code},model:{value:(_vm.unsubscribeForm.code),callback:function ($$v) {_vm.$set(_vm.unsubscribeForm, \"code\", $$v)},expression:\"unsubscribeForm.code\"}}),_c('el-button',{staticStyle:{\"margin-left\":\"10px\",\"width\":\"100px\",\"padding\":\"12px\"},attrs:{\"disabled\":_vm.sendCodeDisabled},on:{\"click\":_vm.getVerificationCode}},[_vm._v(\" \"+_vm._s(_vm.sendCodeBtnText)+\" \")])],1),_c('el-form-item',[_c('el-button',{staticClass:\"subscribe-tip-submit\",class:{ 'submit-isChecked': !_vm.cancelSubmitDisabled },staticStyle:{\"width\":\"126px\"},attrs:{\"plain\":\"\",\"disabled\":_vm.cancelSubmitDisabled},on:{\"click\":_vm.submitUnsubscribe}},[_vm._v(_vm._s(_vm.LP.lang_submit))])],1)],1)],1),_c('el-dialog',{staticClass:\"privacy-dialog-wrap\",attrs:{\"visible\":_vm.showPrivacyDialog,\"width\":\"65%\"},on:{\"update:visible\":function($event){_vm.showPrivacyDialog=$event}}},[_c('div',{staticStyle:{\"line-height\":\"1.6\",\"padding\":\"20px\",\"background\":\"#f9f9f9\",\"border-radius\":\"5px\",\"display\":\"flex\",\"flex-direction\":\"column\",\"align-items\":\"center\",\"justify-content\":\"center\"}},[_c('h3',[_vm._v(_vm._s(_vm.LP.lang_privacy))]),_c('div',{staticClass:\"privacy-dialog\"},[_vm._v(\" \"+_vm._s(_vm.LP.lang_privacy_content)+\" \")])])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n  <div class=\"dahua-subscription\">\r\n    <public-banner :banner-info=\"bannerInfo\" />\r\n    <div v-show=\"showSubscribe\" class=\"subscription-container\">\r\n      <div class=\"subscription-title\">{{ LP.lang_announcement_subscription }}</div>\r\n      <div class=\"subscription-content\">{{ LP.lang_announcement_subscription_description }}</div>\r\n      <el-form\r\n        :model=\"subscribeForm\"\r\n        :rules=\"subscribeRules\"\r\n        ref=\"subscribeForm\"\r\n        label-width=\"70px\"\r\n        class=\"custom-form\"\r\n      >\r\n        <el-form-item :label=\"LP.lang_first_name\" prop=\"title\">\r\n          <el-input v-model=\"subscribeForm.title\" :placeholder=\"LP.lang_please_name\"></el-input>\r\n        </el-form-item>\r\n\r\n        <el-form-item :label=\"LP.lang_email\" prop=\"email\">\r\n          <el-input v-model=\"subscribeForm.email\" :placeholder=\"LP.lang_please_email\"></el-input>\r\n        </el-form-item>\r\n        <el-form-item :label=\"LP.lang_code\" prop=\"code\" class=\"email-with-code\">\r\n          <div class=\"email-input-wrapper\">\r\n            <el-input\r\n              maxlength=\"4\"\r\n              v-model=\"subscribeForm.code\"\r\n              :placeholder=\"LP.lang_please_enter_the_verification_code\"\r\n            ></el-input>\r\n            <span><img :src=\"handleSendCodeEmail\" alt=\"\" @click=\"refreshCaptcha\" /></span>\r\n          </div>\r\n        </el-form-item>\r\n        <!-- <el-form-item :label=\"LP.lang_phone\" prop=\"phone\">\r\n          <el-input v-model=\"subscribeForm.phone\" :placeholder=\"LP.lang_please_tel\"></el-input>\r\n        </el-form-item> -->\r\n        <div class=\"subscribe-operation\">\r\n          <div>\r\n            <el-checkbox v-model=\"agreePrivacy\">\r\n              <span class=\"agree-privacy\">\r\n                {{ LP.lang_i_agree }}\r\n                <a href=\"https://www.dahuatech.com/law/policy.html\" target=\"_blank\">{{ LP.lang_privacy }}</a>\r\n              </span>\r\n            </el-checkbox>\r\n          </div>\r\n          <el-button\r\n            plain\r\n            @click=\"submitSubscribe\"\r\n            :disabled=\"isSubscribeButtonDisabled\"\r\n            :class=\"{ 'submit-isChecked': !isSubscribeButtonDisabled }\"\r\n            class=\"subscribe-tip-submit\"\r\n            >{{ LP.lang_submit_subscription_information }}</el-button\r\n          >\r\n          <div class=\"subscribe-tip-cacel\">\r\n            {{ LP.lang_no_need_cancel }}\r\n            <span @click=\"switchToUnsubscribe\">{{ LP.lang_unsubscribe }}</span>\r\n          </div>\r\n        </div>\r\n      </el-form>\r\n    </div>\r\n    <div v-show=\"!showSubscribe\" class=\"subscription-container\">\r\n      <div class=\"subscription-title subscription-title-unsubscribe\">{{ LP.lang_unsubscribe }}</div>\r\n      <el-form :model=\"unsubscribeForm\" :rules=\"unsubscribeRules\" ref=\"unsubscribeForm\" label-width=\"70px\">\r\n        <el-form-item :label=\"LP.lang_email\" prop=\"email\">\r\n          <el-input v-model=\"unsubscribeForm.email\" :placeholder=\"LP.lang_please_email\"></el-input>\r\n        </el-form-item>\r\n\r\n        <el-form-item :label=\"LP.lang_code\" prop=\"code\">\r\n          <el-input\r\n            v-model=\"unsubscribeForm.code\"\r\n            :placeholder=\"LP.lang_please_enter_the_verification_code\"\r\n            style=\"width: 160px\"\r\n          ></el-input>\r\n          <el-button\r\n            :disabled=\"sendCodeDisabled\"\r\n            @click=\"getVerificationCode\"\r\n            style=\"margin-left: 10px; width: 100px; padding: 12px\"\r\n          >\r\n            {{ sendCodeBtnText }}\r\n          </el-button>\r\n        </el-form-item>\r\n\r\n        <el-form-item>\r\n          <el-button\r\n            style=\"width: 126px\"\r\n            plain\r\n            class=\"subscribe-tip-submit\"\r\n            @click=\"submitUnsubscribe\"\r\n            :disabled=\"cancelSubmitDisabled\"\r\n            :class=\"{ 'submit-isChecked': !cancelSubmitDisabled }\"\r\n            >{{ LP.lang_submit }}</el-button\r\n          >\r\n        </el-form-item>\r\n      </el-form>\r\n    </div>\r\n    <!-- 隐私协议弹窗 -->\r\n    <el-dialog :visible.sync=\"showPrivacyDialog\" class=\"privacy-dialog-wrap\" width=\"65%\">\r\n      <div\r\n        style=\"\r\n          line-height: 1.6;\r\n          padding: 20px;\r\n          background: #f9f9f9;\r\n          border-radius: 5px;\r\n          display: flex;\r\n          flex-direction: column;\r\n          align-items: center;\r\n          justify-content: center;\r\n        \"\r\n      >\r\n        <h3>{{ LP.lang_privacy }}</h3>\r\n        <div class=\"privacy-dialog\">\r\n          {{ LP.lang_privacy_content }}\r\n        </div>\r\n      </div>\r\n      <!-- <span slot=\"footer\" class=\"dialog-footer\">\r\n        <el-button @click=\"showPrivacyDialog = false\">关闭</el-button>\r\n      </span> -->\r\n    </el-dialog>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport PublicBanner from '@/components/public/PublicBanner.vue'\r\nimport { handleNoticeSubscription, handleCancelSubscription, handleSendCode } from '@/api/safeCredible'\r\nimport { mapState } from 'vuex'\r\nimport apiConfig from '../../../../api.config'\r\nimport lang from '@/utils/lang'\r\nexport default {\r\n  components: {\r\n    PublicBanner,\r\n  },\r\n  data() {\r\n    return {\r\n      bannerInfo: {},\r\n      showSubscribe: true, // 默认显示订阅页\r\n      showPrivacyDialog: false,\r\n      agreePrivacy: false,\r\n      // 订阅表单数据\r\n      subscribeForm: {\r\n        title: '',\r\n        email: '',\r\n        // phone: '',\r\n        code: '',\r\n      },\r\n      // 取消订阅表单数据\r\n      unsubscribeForm: {\r\n        email: '',\r\n        code: '',\r\n      },\r\n      // 验证码倒计时相关\r\n      sendCodeDisabled: false,\r\n      sendCodeBtnText: this.LP.lang_get_verification_code,\r\n      countdown: 60,\r\n      // 表单校验规则\r\n      subscribeRules: {\r\n        title: [{ required: false, message: this.LP.lang_please_name, trigger: 'blur' }],\r\n        email: [\r\n          { required: true, message: this.LP.lang_please_email },\r\n          { type: 'email', message: this.LP.lang_enter_true_adress },\r\n        ],\r\n        code: [{ required: true, message: this.LP.lang_please_enter_the_verification_code }],\r\n      },\r\n\r\n      unsubscribeRules: {\r\n        email: [\r\n          { required: true, message: this.LP.lang_please_email },\r\n          { type: 'email', message: this.LP.lang_enter_true_adress },\r\n        ],\r\n        code: [{ required: true, message: this.LP.lang_please_enter_the_verification_code }],\r\n      },\r\n      handleSendCodeEmail: apiConfig.baseUrl + `/cybersecurity/verification_code${lang}`,\r\n    }\r\n  },\r\n  computed: {\r\n    ...mapState({\r\n      banner: (state) => state.common.banner.banner,\r\n    }),\r\n    isSubscribeButtonDisabled() {\r\n      if (!this.agreePrivacy) return true\r\n      const { email, code } = this.subscribeForm\r\n      if (!email || !code || (code && code.length < 4)) return true\r\n      const emailReg = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/\r\n      if (!emailReg.test(email)) return true\r\n      return false\r\n    },\r\n    cancelSubmitDisabled() {\r\n      const { email, code } = this.unsubscribeForm\r\n      if (!email || !code) return true\r\n      const emailReg = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/\r\n      if (!emailReg.test(email)) return true\r\n      return false\r\n    },\r\n  },\r\n  async mounted() {\r\n    await this.$store.dispatch('common/getBanner', { id: 4 })\r\n    this.bannerInfo = this.banner\r\n  },\r\n  methods: {\r\n    refreshCaptcha() {\r\n      const timestamp = new Date().getTime()\r\n      this.handleSendCodeEmail = `${this.handleSendCodeEmail}?_=${timestamp}`\r\n    },\r\n    // 切换到取消订阅页\r\n    switchToUnsubscribe() {\r\n      this.showSubscribe = false\r\n      this.$nextTick(() => {\r\n        if (this.$refs.unsubscribeForm) {\r\n          this.$refs.unsubscribeForm.clearValidate()\r\n        }\r\n      })\r\n    },\r\n    // 切换到订阅页\r\n    switchToSubscribe() {\r\n      this.showSubscribe = true\r\n      this.$nextTick(() => {\r\n        if (this.$refs.subscribeForm) {\r\n          this.$refs.subscribeForm.clearValidate()\r\n        }\r\n      })\r\n    },\r\n    // 提交订阅\r\n    submitSubscribe() {\r\n      this.$refs.subscribeForm.validate((valid) => {\r\n        if (valid && this.agreePrivacy) {\r\n          handleNoticeSubscription(this.subscribeForm).then((res) => {\r\n            if (res.status == '00') {\r\n              this.$message.success(res.message || this.LP.lang_submit_success)\r\n              setTimeout(() => {\r\n                this.$router.push(`/${this.$route.params.lang}/dahuaPsirt`)\r\n              }, 3000)\r\n            } else {\r\n              this.refreshCaptcha()\r\n              this.$message.error(res.message || this.LP.lang_submit_fail)\r\n            }\r\n          })\r\n        }\r\n      })\r\n    },\r\n\r\n    // 获取验证码\r\n    async getVerificationCode() {\r\n      if (!this.unsubscribeForm.email) {\r\n        this.$message.error(this.LP.lang_please_email)\r\n        return\r\n      }\r\n\r\n      // 校验邮箱格式\r\n      const emailReg = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/\r\n      if (!emailReg.test(this.unsubscribeForm.email)) {\r\n        this.$message.error(this.LP.lang_enter_true_adress)\r\n        return\r\n      }\r\n\r\n      // 模拟发送验证码\r\n      const res = await handleSendCode({ email: this.unsubscribeForm.email })\r\n      if (res.status == '00') {\r\n        this.$message.success(res.data || res.message)\r\n      } else {\r\n        this.$message.error(res.data || res.message)\r\n        return\r\n      }\r\n      // 启动倒计时\r\n      this.sendCodeDisabled = true\r\n      this.countdown = 60\r\n      this.sendCodeBtnText = `${this.countdown}${this.LP.lang_try_again_in_second}`\r\n\r\n      const timer = setInterval(() => {\r\n        this.countdown--\r\n        this.sendCodeBtnText = `${this.countdown}${this.LP.lang_try_again_in_second}`\r\n        if (this.countdown <= 0) {\r\n          clearInterval(timer)\r\n          this.sendCodeDisabled = false\r\n          this.sendCodeBtnText = this.LP.lang_get_verification_code\r\n        }\r\n      }, 1000)\r\n    },\r\n\r\n    // 提交取消订阅\r\n    submitUnsubscribe() {\r\n      this.$refs.unsubscribeForm.validate((valid) => {\r\n        if (valid) {\r\n          handleCancelSubscription(this.unsubscribeForm).then((res) => {\r\n            if (res.status == '00') {\r\n              this.$message.success(res.message || this.LP.lang_submit_success)\r\n              setTimeout(() => {\r\n                this.$router.push(`/${this.$route.params.lang}/dahuaPsirt`)\r\n              }, 3000)\r\n            } else {\r\n              this.$message.error(res.message || this.LP.lang_submit_fail)\r\n            }\r\n          })\r\n        }\r\n      })\r\n    },\r\n  },\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import '~@/styles/common/common.less';\r\n.dahua-subscription {\r\n  .email-with-code {\r\n    ::v-deep .el-form-item__content {\r\n      line-height: normal;\r\n    }\r\n  }\r\n\r\n  .email-input-wrapper {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 10px;\r\n    width: 100%;\r\n  }\r\n\r\n  .email-input {\r\n    flex: 1;\r\n    min-width: 0;\r\n  }\r\n\r\n  .captcha-img {\r\n    width: 110px;\r\n    height: 40px;\r\n    cursor: pointer;\r\n    flex-shrink: 0;\r\n  }\r\n  .subscription-container {\r\n    display: flex;\r\n    justify-content: center;\r\n    align-items: center;\r\n    flex-direction: column;\r\n    .subscription-title {\r\n      height: 68px;\r\n      line-height: 68px;\r\n      color: rgba(16, 16, 16, 1);\r\n      font-size: 40px;\r\n      text-align: center;\r\n      font-family: PingFangSC-regular;\r\n    }\r\n    .subscription-title-unsubscribe {\r\n      margin-bottom: 30px;\r\n    }\r\n    .subscription-content {\r\n      height: 20px;\r\n      line-height: 20px;\r\n      color: rgba(16, 16, 16, 1);\r\n      font-size: 14px;\r\n      text-align: center;\r\n      font-family: PingFangSC-regular;\r\n      margin: 10px 20px 50px;\r\n    }\r\n    .agree-privacy {\r\n      display: inline-flex;\r\n      align-items: center;\r\n      gap: 0;\r\n      height: 20px;\r\n      line-height: 20px;\r\n      color: rgba(16, 16, 16, 1);\r\n      font-size: 14px;\r\n      text-align: center;\r\n      font-family: PingFangSC-regular;\r\n      margin-left: 8px;\r\n      a {\r\n        color: #1691ff;\r\n      }\r\n    }\r\n    .subscribe-operation {\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      flex-direction: column; // background-color: #0884f1;\r\n      // color: #fff;\r\n    }\r\n    .subscribe-tip-submit {\r\n      margin: 14px auto 33px;\r\n    }\r\n    .submit-isChecked {\r\n      background-color: #0884f1;\r\n      color: #fff;\r\n    }\r\n    .subscribe-tip-cacel {\r\n      display: inline-flex;\r\n      align-items: center;\r\n      gap: 0;\r\n      height: 28px;\r\n      line-height: 28px;\r\n      color: rgba(16, 16, 16, 1);\r\n      font-size: 14px;\r\n      text-align: center;\r\n      font-family: PingFangSC-regular;\r\n      margin-bottom: 64px;\r\n      span {\r\n        color: #1691ff;\r\n        cursor: pointer;\r\n      }\r\n    }\r\n  }\r\n  .privacy-dialog-wrap {\r\n    .privacy-dialog {\r\n      max-height: 300px;\r\n      overflow-y: auto;\r\n    }\r\n  }\r\n  .custom-form {\r\n    width: 448px;\r\n  }\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .custom-form {\r\n    width: auto !important;\r\n  }\r\n}\r\n</style>\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Index.vue?vue&type=template&id=f2ca0508&scoped=true&\"\nimport script from \"./Index.vue?vue&type=script&lang=js&\"\nexport * from \"./Index.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Index.vue?vue&type=style&index=0&id=f2ca0508&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"f2ca0508\",\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"public-banner\"},[(_vm.bannerInfo.image)?_c('div',{staticClass:\"banner-box\",style:((\"background: url('\" + (_vm.bannerInfo.image) + \"') center center / cover no-repeat\"))},[_c('div',{staticClass:\"banner-info\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"info-title\"},[_vm._v(\" \"+_vm._s(_vm.bannerInfo.title)+\" \")]),_c('div',{staticClass:\"info-desc\",domProps:{\"innerHTML\":_vm._s(_vm.bannerInfo.description)}})])])]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n  <div class=\"public-banner\">\r\n    <div v-if=\"bannerInfo.image\" class=\"banner-box\" :style=\"`background: url('${bannerInfo.image}') center center / cover no-repeat`\">\r\n      <div class=\"banner-info\">\r\n        <div class=\"container\">\r\n          <div class=\"info-title\">\r\n            {{ bannerInfo.title }}\r\n          </div>\r\n          <div class=\"info-desc\" v-html=\"bannerInfo.description\"></div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n  props: {\r\n    bannerInfo: {\r\n      type: [Object],\r\n      default: () => {}\r\n    }\r\n  }\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.public-banner {\r\n  height: 560px;\r\n  .banner-box {\r\n    width: 100%;\r\n    height: 100%;\r\n    position: relative;\r\n    .banner-info {\r\n      width: 100%;\r\n      position: absolute;\r\n      top: 50%;\r\n      left: 0;\r\n      transform: translateY(-50%);\r\n      .info-title {\r\n        font-size: 50px;\r\n        line-height: 66px;\r\n        color: #fff;\r\n        margin-bottom: 30px;\r\n        letter-spacing: 4px;\r\n        font-weight: 600;\r\n      }\r\n      .info-desc {\r\n        max-width: 56%;\r\n        font-size: 20px;\r\n        line-height: 30px;\r\n        color: rgba(255, 255, 255, .7);\r\n        letter-spacing: 2px;\r\n      }\r\n    }\r\n  }\r\n  @media screen and (max-width: 996px) {\r\n    height: 420px;\r\n    padding-top: 64px;\r\n    .banner-box {\r\n      .banner-info {\r\n        .info-title {\r\n          font-size: 38px;\r\n          line-height: 52px;\r\n        }\r\n        .info-desc {\r\n          max-width: 75%;\r\n          font-size: 16px;\r\n          line-height: 24px;\r\n        }\r\n      }\r\n    }\r\n  }\r\n  @media screen and (max-width: 768px) {\r\n    .banner-box {\r\n      .banner-info {\r\n        .info-title {\r\n          font-size: 24px;\r\n          line-height: 32px;\r\n        }\r\n        .info-desc {\r\n          max-width: 100%;\r\n          font-size: 14px;\r\n          line-height: 20px;\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PublicBanner.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PublicBanner.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PublicBanner.vue?vue&type=template&id=2b7b7416&scoped=true&\"\nimport script from \"./PublicBanner.vue?vue&type=script&lang=js&\"\nexport * from \"./PublicBanner.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PublicBanner.vue?vue&type=style&index=0&id=2b7b7416&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"2b7b7416\",\n  null\n  \n)\n\nexport default component.exports","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.es/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n  filter: function filter(callbackfn /* , thisArg */) {\n    return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n","export default function _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}","import defineProperty from \"./defineProperty.js\";\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n\n    if (enumerableOnly) {\n      symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      });\n    }\n\n    keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nexport default function _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}","// 安全可信\r\nimport { fetch } from '@/plugins/axios.js'\r\nimport lang from '@/utils/lang'\r\n\r\nconst apiUrl = {\r\n  credibleInfo: `/cybersecurity/safe_trustworthy_home${lang}`, // 安全可信首页\r\n  dahuaPsirtInfo: `/cybersecurity/dahua_spirt${lang}`, // 安全可信-大华PSIRT\r\n  technologyInfo: `/cybersecurity/safe_technology${lang}`, // 安全技术\r\n  resourceInfo: `/cybersecurity/security_resources${lang}`, // 安全资源\r\n  trendsInfo: `/cybersecurity/security_dynamics${lang}`, // 安全动态\r\n  newsDetailInfo: `/cybersecurity/news_detail${lang}`, // 新闻详情\r\n  cybersecurityHitInfo: `/cybersecurity/cybersecurity_hit${lang}`, // 下载量\r\n  noticeSubscription: `/cybersecurity/announcement_subscription${lang}`, // 公告订阅\r\n  cancelSubscription: `/cybersecurity/cancel_announcement_subscription${lang}`, // 取消订阅\r\n  sendCode: `/cybersecurity/email_verification_code${lang}` // 获取验证码\r\n}\r\n\r\n// 安全可信首页\r\nexport const getCredibleInfoApi = () => fetch(apiUrl.credibleInfo)\r\n// 安全可信-大华PSIRT\r\nexport const getDahuaPsirtApi = () => fetch(apiUrl.dahuaPsirtInfo)\r\n// 安全技术\r\nexport const getTechnologyInfoApi = (params) => fetch(apiUrl.technologyInfo, params)\r\n// 安全资源\r\nexport const getResourceInfoApi = (params) => fetch(apiUrl.resourceInfo, params)\r\n// 安全动态\r\nexport const getTrendsInfoApi = (params) => fetch(apiUrl.trendsInfo, params)\r\n// 新闻详情\r\nexport const getNewsDetailApi = (params) => fetch(apiUrl.newsDetailInfo, params)\r\n// 下载量\r\nexport const getCybersecurityHitApi = (params) => fetch(apiUrl.cybersecurityHitInfo, params)\r\n// 公告订阅\r\nexport const handleNoticeSubscription = (params) => fetch(apiUrl.noticeSubscription, params,'post')\r\n// 取消订阅\r\nexport const handleCancelSubscription = (params) => fetch(apiUrl.cancelSubscription, params,'post')\r\n// 获取验证码\r\nexport const handleSendCode = (params) => fetch(apiUrl.sendCode, params,'post')","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"dahua-psirt\"},[_c('public-banner',{attrs:{\"banner-info\":_vm.bannerInfo}}),_c('div',{staticClass:\"dahua-psirt-container\"},[_c('div',{staticClass:\"tab-box\"},[_c('div',{staticClass:\"subscription-btn-new\",on:{\"click\":_vm.getSubscribe}},[_vm._v(\" \"+_vm._s(_vm.LP.lang_subscribe_now)+\" \")]),_c('div',{ref:\"tabList\",staticClass:\"tab-list container\"},_vm._l((_vm.menuInfo),function(item,index){return _c('div',{key:index,staticClass:\"tab-items\",style:((\"background: url('\" + (_vm.defaultIndex === index ? _vm.bgImg : '') + \"') center center / cover no-repeat\")),on:{\"click\":function($event){return _vm.tabClick(item, index)}}},[_vm._v(\" \"+_vm._s(item.menu_name)+\" \")])}),0),_c('div',{staticClass:\"tab-content container\"},_vm._l((_vm.tableData),function(item,index){return _c('a',{key:index,staticClass:\"content-items\",attrs:{\"title\":item.title,\"rel\":\"nofollow noopener noreferrer\"},on:{\"click\":function($event){return _vm.handleLink(item)}}},[_c('div',{staticClass:\"data-box\"},[_c('div',{staticClass:\"data\"},[_vm._v(_vm._s(item.post_date_d))]),_c('p',{staticClass:\"year\"},[_vm._v(_vm._s(item.post_date_y_m))])]),_c('div',{staticClass:\"text-box\"},[_c('h5',{staticClass:\"title\",domProps:{\"innerHTML\":_vm._s(item.title)}}),_c('p',{staticClass:\"desc\",domProps:{\"innerHTML\":_vm._s(item.description)}})])])}),0),_c('div',{staticClass:\"public-pagination container\"},[_c('el-pagination',{attrs:{\"background\":\"\",\"layout\":\"prev, pager, next\",\"page-size\":_vm.pageSize,\"current-page\":_vm.currentPage,\"total\":_vm.total},on:{\"current-change\":_vm.handleCurrentChange}})],1)]),_c('div',{staticClass:\"loophole-box\"},[_c('public-title',{attrs:{\"title-info\":_vm.vTitleInfo}}),(Object.keys(_vm.dataInfo.spirt_info).length > 0)?_c('div',{staticClass:\"vulnerability-bg container\"},[_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"img-bg\"},[_c('div',{staticClass:\"img-box\",style:({ background: (\"url('\" + (_vm.dataInfo.spirt_info.loophole_image) + \"')  center center / cover no-repeat\") })})]),_c('div',{staticClass:\"text-box\",domProps:{\"innerHTML\":_vm._s(_vm.dataInfo.spirt_info.loophole_content)}})])]):_vm._e(),_c('public-title',{attrs:{\"title-info\":_vm.disposeTitleInfo}}),_c('div',{staticClass:\"vulnerability-bg dispose-bg container\"},[_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"text-box\",domProps:{\"innerHTML\":_vm._s(_vm.dataInfo.spirt_info.dispose_of_content)}}),_c('div',{staticClass:\"img-bg\"},[_c('div',{staticClass:\"img-box right-img-box\",style:({\n                background: (\"url('\" + (_vm.dataInfo.spirt_info.dispose_of_image) + \"') center center / cover no-repeat\"),\n              })})])])])],1),_c('div',{staticClass:\"response-box container\"},[_c('public-title',{attrs:{\"title-info\":_vm.responseTitleInfo}}),_c('ul',{staticClass:\"response-content\"},_vm._l((_vm.dataInfo.spirt_info.response_content),function(item,index){return _c('li',{key:index,staticClass:\"response-items\"},[_c('div',{staticClass:\"img-box\"},[_c('img',{staticClass:\"img-name\",attrs:{\"src\":item.image,\"alt\":item.name}})]),_c('p',{staticClass:\"name\"},[_vm._v(_vm._s(item.name))]),_c('p',{staticClass:\"desc\",domProps:{\"innerHTML\":_vm._s(item.description)}})])}),0)],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n  <div class=\"dahua-psirt\">\r\n    <public-banner :banner-info=\"bannerInfo\" />\r\n    <div class=\"dahua-psirt-container\">\r\n      <div class=\"tab-box\">\r\n        <div class=\"subscription-btn-new\" @click=\"getSubscribe\">\r\n          {{ LP.lang_subscribe_now }}\r\n        </div>\r\n        <div ref=\"tabList\" class=\"tab-list container\">\r\n          <div\r\n            v-for=\"(item, index) in menuInfo\"\r\n            :key=\"index\"\r\n            class=\"tab-items\"\r\n            :style=\"`background: url('${defaultIndex === index ? bgImg : ''}') center center / cover no-repeat`\"\r\n            @click=\"tabClick(item, index)\"\r\n          >\r\n            {{ item.menu_name }}\r\n          </div>\r\n        </div>\r\n        <div class=\"tab-content container\">\r\n          <a\r\n            v-for=\"(item, index) in tableData\"\r\n            :key=\"index\"\r\n            class=\"content-items\"\r\n            :title=\"item.title\"\r\n            rel=\"nofollow noopener noreferrer\"\r\n            @click=\"handleLink(item)\"\r\n          >\r\n            <div class=\"data-box\">\r\n              <div class=\"data\">{{ item.post_date_d }}</div>\r\n              <p class=\"year\">{{ item.post_date_y_m }}</p>\r\n            </div>\r\n            <div class=\"text-box\">\r\n              <h5 class=\"title\" v-html=\"item.title\"></h5>\r\n              <p class=\"desc\" v-html=\"item.description\"></p>\r\n            </div>\r\n          </a>\r\n        </div>\r\n        <div class=\"public-pagination container\">\r\n          <el-pagination\r\n            background\r\n            layout=\"prev, pager, next\"\r\n            :page-size=\"pageSize\"\r\n            :current-page=\"currentPage\"\r\n            :total=\"total\"\r\n            @current-change=\"handleCurrentChange\"\r\n          />\r\n        </div>\r\n      </div>\r\n      <div class=\"loophole-box\">\r\n        <public-title :title-info=\"vTitleInfo\" />\r\n        <div v-if=\"Object.keys(dataInfo.spirt_info).length > 0\" class=\"vulnerability-bg container\">\r\n          <div class=\"content\">\r\n            <div class=\"img-bg\">\r\n              <div\r\n                class=\"img-box\"\r\n                :style=\"{ background: `url('${dataInfo.spirt_info.loophole_image}')  center center / cover no-repeat` }\"\r\n              ></div>\r\n            </div>\r\n            <div class=\"text-box\" v-html=\"dataInfo.spirt_info.loophole_content\"></div>\r\n          </div>\r\n        </div>\r\n        <public-title :title-info=\"disposeTitleInfo\" />\r\n        <div class=\"vulnerability-bg dispose-bg container\">\r\n          <div class=\"content\">\r\n            <div class=\"text-box\" v-html=\"dataInfo.spirt_info.dispose_of_content\"></div>\r\n            <div class=\"img-bg\">\r\n              <div\r\n                class=\"img-box right-img-box\"\r\n                :style=\"{\r\n                  background: `url('${dataInfo.spirt_info.dispose_of_image}') center center / cover no-repeat`,\r\n                }\"\r\n              ></div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n      <div class=\"response-box container\">\r\n        <public-title :title-info=\"responseTitleInfo\" />\r\n        <ul class=\"response-content\">\r\n          <li v-for=\"(item, index) in dataInfo.spirt_info.response_content\" :key=\"index\" class=\"response-items\">\r\n            <div class=\"img-box\">\r\n              <img class=\"img-name\" :src=\"item.image\" :alt=\"item.name\" />\r\n            </div>\r\n            <p class=\"name\">{{ item.name }}</p>\r\n            <p class=\"desc\" v-html=\"item.description\"></p>\r\n          </li>\r\n        </ul>\r\n      </div>\r\n      <!-- <div class=\"subscription-btn\" @click=\"getSubscribe\" :style=\"{ top: subscriptionTop }\">\r\n        {{ LP.lang_subscribe_now }}\r\n      </div> -->\r\n    </div>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\nimport PublicBanner from '@/components/public/PublicBanner.vue'\r\nimport publicTitle from '@/components/public/PublicTitle.vue'\r\nimport { getDahuaPsirtApi, getCybersecurityHitApi } from '@/api/safeCredible'\r\nimport bgImg from '@/assets/image/tab-bg.png'\r\nimport { mapState } from 'vuex'\r\nexport default {\r\n  components: {\r\n    PublicBanner,\r\n    publicTitle,\r\n  },\r\n  data() {\r\n    return {\r\n      bannerInfo: {},\r\n      dataInfo: {},\r\n      menuInfo: [],\r\n      tableData: [],\r\n      bgImg: bgImg,\r\n      defaultIndex: 0,\r\n      pageSize: 5,\r\n      currentPage: 1,\r\n      total: 0,\r\n      vTitleInfo: {\r\n        bgTitle: this.LP.lang_vulnerability_reporting_cn,\r\n        title: this.LP.lang_vulnerability_reporting,\r\n        description: '',\r\n      },\r\n      disposeTitleInfo: {\r\n        bgTitle: this.LP.lang_disposal_specification_cn,\r\n        title: this.LP.lang_disposal_specification,\r\n        description: '',\r\n      },\r\n      responseTitleInfo: {\r\n        bgTitle: this.LP.lang_vulnerability_response_cn,\r\n        title: this.LP.lang_vulnerability_response,\r\n        description: '',\r\n      },\r\n      subscriptionTop: '300px',\r\n      debounceTimer: null, // 用于防抖\r\n    }\r\n  },\r\n  beforeDestroy() {\r\n    // 移除事件监听\r\n    window.removeEventListener('resize', this.handleResize)\r\n    if (this.debounceTimer) {\r\n      clearTimeout(this.debounceTimer)\r\n    }\r\n  },\r\n  computed: {\r\n    ...mapState({\r\n      banner: (state) => state.common.banner.banner,\r\n    }),\r\n  },\r\n  async mounted() {\r\n    await this.$store.dispatch('common/getBanner', { id: 4 })\r\n    this.bannerInfo = this.banner\r\n    await this.getDahuaPsirtData()\r\n    // this.calculateButtonPosition()\r\n    // window.addEventListener('resize', this.handleResize)\r\n  },\r\n  methods: {\r\n    checkTabListPosition() {\r\n      const tabListEl = this.$refs.tabList\r\n      if (!tabListEl) return\r\n\r\n      const rect = tabListEl.getBoundingClientRect()\r\n      const viewportHeight = window.innerHeight || document.documentElement.clientHeight\r\n\r\n      // 判断元素相对于可视区域的位置\r\n      const elementTop = rect.top\r\n      const elementBottom = rect.bottom\r\n      const elementHeight = rect.height\r\n\r\n      // 情况1: 元素完全在可视区上方\r\n      if (elementBottom <= 0) {\r\n        return 'above'\r\n      }\r\n      // 情况2: 元素完全在可视区下方\r\n      if (elementTop >= viewportHeight) {\r\n        return 'below'\r\n      }\r\n      // 情况3: 元素部分在可视区内 元素顶部超出可视区，底部在可视区内/元素顶部在可视区内，底部超出可视区/元素完全在可视区内\r\n      if (elementTop < 0 && elementBottom > 0 && elementBottom <= viewportHeight) {\r\n        return 'partial-above'\r\n      }\r\n      if (elementTop >= 0 && elementBottom > viewportHeight) {\r\n        return 'partial-below'\r\n      }\r\n      // 情况4: 元素完全在可视区内\r\n      if (elementTop >= 0 && elementBottom <= viewportHeight) {\r\n        return 'inside'\r\n      }\r\n      // 情况5: 元素覆盖整个可视区（高度大于可视区）\r\n      if (elementTop < 0 && elementBottom > viewportHeight) {\r\n        return 'covering'\r\n      }\r\n\r\n      return 'unknown'\r\n    },\r\n    handleResize() {\r\n      if (this.debounceTimer) {\r\n        clearTimeout(this.debounceTimer)\r\n      }\r\n      this.debounceTimer = setTimeout(() => {\r\n        this.calculateButtonPosition()\r\n      }, 300)\r\n    },\r\n    // 计算按钮位置\r\n    calculateButtonPosition() {\r\n      this.$nextTick(() => {\r\n        const tabListEl = this.$refs.tabList\r\n        if (tabListEl) {\r\n          const position = this.checkTabListPosition()\r\n          if (position === 'above') {\r\n            return\r\n          }\r\n          const rect = tabListEl.getBoundingClientRect()\r\n\r\n          const scrollTop = window.pageYOffset || document.documentElement.scrollTop\r\n\r\n          const viewportHeight = window.innerHeight || document.documentElement.clientHeight\r\n\r\n          let buttonTop = rect.top + rect.height + 16\r\n          // const maxButtonTop = scrollTop + viewportHeight - 67\r\n          const maxButtonTop = viewportHeight - 67\r\n          // 如果计算的位置超出最大允许位置，使用最大允许位置\r\n          if (buttonTop > maxButtonTop) {\r\n            buttonTop = maxButtonTop\r\n          }\r\n          this.subscriptionTop = `${buttonTop}px`\r\n        }\r\n      })\r\n    },\r\n    getSubscribe() {\r\n      this.$router.push(`/${this.$route.params.lang}/subscription`)\r\n    },\r\n    // 分页\r\n    getPage() {\r\n      let data = []\r\n      data = this.allData.slice((this.currentPage - 1) * this.pageSize, this.currentPage * this.pageSize)\r\n      this.total = this.allData.length\r\n      data.forEach((item, i) => {\r\n        item.$index = (this.currentPage - 1) * this.pageSize + 1 + i\r\n      })\r\n      this.tableData = data\r\n    },\r\n    // 获取接口数据\r\n    getDahuaPsirtData() {\r\n      getDahuaPsirtApi().then((res) => {\r\n        this.dataInfo = res.data\r\n        this.menuInfo = res.data.menu_info\r\n        this.allData = res.data.menu_info[this.defaultIndex].news_list\r\n        this.$store.commit('common/SET_MATE', res.data.seo)\r\n        this.$nextTick(() => {\r\n          this.getPage()\r\n          // this.calculateButtonPosition()\r\n        })\r\n      })\r\n      this.currentPage = 1\r\n    },\r\n    // tab切换\r\n    tabClick(item, index) {\r\n      this.defaultIndex = index\r\n      this.getDahuaPsirtData()\r\n    },\r\n    // 分页切换\r\n    handleCurrentChange(val) {\r\n      this.currentPage = val\r\n      this.getPage()\r\n    },\r\n    // 跳转\r\n    handleLink(item) {\r\n      this.$router.push(`/${this.$route.params.lang}/newsDetail/${item.id}?typeId=4`)\r\n      getCybersecurityHitApi({\r\n        type: 2,\r\n      })\r\n    },\r\n  },\r\n}\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n@import '~@/styles/common/common.less';\r\n.dahua-psirt {\r\n  .dahua-psirt-container {\r\n    position: relative;\r\n    .subscription-btn {\r\n      position: fixed;\r\n      // top: 716px;\r\n      left: 50%;\r\n      transform: translateX(-50%);\r\n      width: 151px;\r\n      height: 47px;\r\n      line-height: 47px;\r\n      border-radius: 4px;\r\n      background-color: #0884f1;\r\n      color: #fff;\r\n      font-size: 14px;\r\n      text-align: center;\r\n      font-family: PingFangSC-regular;\r\n      cursor: pointer;\r\n    }\r\n  }\r\n  .tab-box {\r\n    padding-top: 77px;\r\n    position: relative;\r\n    .subscription-btn-new {\r\n      position: absolute;\r\n      top: 176px;\r\n      left: 50%;\r\n      transform: translateX(-50%);\r\n      width: 140px;\r\n      height: 40px;\r\n      line-height: 40px;\r\n      border-radius: 20px;\r\n      background-color: #0884f1;\r\n      color: #fff;\r\n      font-size: 14px;\r\n      text-align: center;\r\n      font-family: PingFangSC-regular;\r\n      cursor: pointer;\r\n    }\r\n\r\n    .tab-list {\r\n      display: flex;\r\n      justify-content: center;\r\n      margin-bottom: 120px;\r\n      .tab-items {\r\n        font-size: 40px;\r\n        line-height: 61px;\r\n        color: #212733;\r\n        margin-right: 92px;\r\n        cursor: pointer;\r\n        &:last-child {\r\n          margin-right: 0;\r\n        }\r\n      }\r\n    }\r\n    .tab-content {\r\n      margin-bottom: 70px;\r\n      .content-items {\r\n        background-image: linear-gradient(0deg, #eaeef6 0%, #f6f9ff 100%);\r\n        box-shadow: 0px 3px 10px 0px rgba(70, 110, 226, 0.1);\r\n        border-radius: 8px;\r\n        margin-bottom: 36px;\r\n        padding: 30px;\r\n        display: flex;\r\n        cursor: pointer;\r\n        transition: all 0.3s;\r\n        &:hover {\r\n          transform: scale(1.05);\r\n          background-image: linear-gradient(0deg, #c9e1ff 0%, #dcebff 51%, #eef4ff 100%);\r\n          box-shadow: 0px 3px 10px 0px rgba(0, 112, 210, 0.2);\r\n          border-radius: 8px;\r\n        }\r\n        .data-box {\r\n          width: 6%;\r\n          text-align: center;\r\n          .data {\r\n            font-family: 'YouSheBiaoTiHei';\r\n            font-size: 50px;\r\n            line-height: 30px;\r\n            color: #a6aeb7;\r\n            position: relative;\r\n            display: inline-block;\r\n            padding-bottom: 15px;\r\n            &::after {\r\n              content: '';\r\n              position: absolute;\r\n              bottom: 0;\r\n              left: 50%;\r\n              transform: translateX(-50%);\r\n              width: 23px;\r\n              height: 3px;\r\n              background-color: @theme;\r\n            }\r\n          }\r\n          .year {\r\n            font-size: 16px;\r\n            line-height: 30px;\r\n            color: #a6aeb7;\r\n            margin-top: 6px;\r\n          }\r\n        }\r\n        .text-box {\r\n          width: calc(96% - 36px);\r\n          margin-left: 36px;\r\n          .title {\r\n            font-size: 20px;\r\n            line-height: 30px;\r\n            color: #212733;\r\n          }\r\n          .desc {\r\n            font-size: 14px;\r\n            line-height: 24px;\r\n            color: #212733;\r\n            opacity: 0.7;\r\n            margin-top: 16px;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    .public-pagination {\r\n      margin-bottom: 80px;\r\n    }\r\n  }\r\n  .loophole-box {\r\n    position: relative;\r\n    background: url('~@/assets/image/loophole-bg.png') center center / cover no-repeat;\r\n    padding: 70px 0 36px 0;\r\n    .vulnerability-bg {\r\n      width: 100%;\r\n      background-color: #ffffff;\r\n      border-radius: 8px;\r\n      background: url('~@/assets/image/v-bg.png') center center / cover no-repeat;\r\n      margin: 46px auto 85px auto;\r\n      padding: 36px 39px;\r\n      .content {\r\n        display: flex;\r\n        align-items: center;\r\n        .img-bg {\r\n          width: 360px;\r\n          .img-box {\r\n            width: 360px;\r\n            height: 462px;\r\n            background-color: rgba(225, 225, 225, 0.7);\r\n            border-radius: 8px 0px 0px 8px;\r\n          }\r\n          .right-img-box {\r\n            border-radius: 0 8px 8px 0;\r\n          }\r\n        }\r\n        .text-box {\r\n          width: calc(100% - 360px);\r\n          font-size: 14px;\r\n          line-height: 28px;\r\n          color: #333;\r\n          padding: 30px 48px 62px 29px;\r\n        }\r\n      }\r\n    }\r\n    .dispose-bg {\r\n      margin: 46px auto 0 auto;\r\n      background: url('~@/assets/image/disposal-bg.png') center center / cover no-repeat;\r\n    }\r\n  }\r\n  .response-box {\r\n    position: relative;\r\n    padding: 80px 0 116px 0;\r\n    .response-content {\r\n      display: flex;\r\n      justify-content: center;\r\n      text-align: center;\r\n      margin-top: 84px;\r\n      .response-items {\r\n        width: calc((100% - 78px * 4) / 5);\r\n        margin-right: 78px;\r\n        position: relative;\r\n        &::after {\r\n          content: '';\r\n          width: 120px;\r\n          height: 25px;\r\n          background: url('~@/assets/image/arrow.png') center center / cover no-repeat;\r\n          position: absolute;\r\n          top: 25%;\r\n          left: 89%;\r\n        }\r\n        &:nth-child(5n) {\r\n          margin-right: 0;\r\n          &::after {\r\n            display: none;\r\n          }\r\n        }\r\n        .img-box {\r\n          .img-name {\r\n            width: 100%;\r\n            max-width: 137px;\r\n          }\r\n        }\r\n        .name {\r\n          font-size: 20px;\r\n          font-weight: 600;\r\n          line-height: 26px;\r\n          color: #212733;\r\n          margin: 28px 0 16px 0;\r\n        }\r\n        .desc {\r\n          font-size: 14px;\r\n          line-height: 19px;\r\n          color: #212733;\r\n          opacity: 0.7;\r\n        }\r\n      }\r\n    }\r\n  }\r\n  @media screen and (max-width: 1366px) {\r\n    .response-box {\r\n      .response-content {\r\n        .response-items {\r\n          &::after {\r\n            width: 100px;\r\n            height: 18px;\r\n            left: 93%;\r\n          }\r\n          .img-box {\r\n            .img-name {\r\n              max-width: 120px;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n  @media screen and (max-width: 1200px) {\r\n    .response-box {\r\n      .response-content {\r\n        .response-items {\r\n          &::after {\r\n            width: 70px;\r\n            height: 14px;\r\n            left: 103%;\r\n          }\r\n          .img-box {\r\n            .img-name {\r\n              max-width: 120px;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n  @media screen and (max-width: 768px) {\r\n    .tab-box {\r\n      padding-top: 40px;\r\n      .subscription-btn-new {\r\n        top: 78px;\r\n        height: 30px;\r\n        line-height: 30px;\r\n      }\r\n      .tab-list {\r\n        margin-bottom: 60px;\r\n        .tab-items {\r\n          font-size: 16px;\r\n          line-height: 24px;\r\n          margin-right: 24px;\r\n        }\r\n      }\r\n      .tab-content {\r\n        margin-bottom: 40px;\r\n        .content-items {\r\n          padding: 24px 16px;\r\n          margin-bottom: 16px;\r\n          .data-box {\r\n            .data {\r\n              font-size: 28px;\r\n              padding-bottom: 8px;\r\n            }\r\n            .year {\r\n              font-size: 12px;\r\n              margin-top: 0;\r\n            }\r\n          }\r\n          .text-box {\r\n            .title {\r\n              font-size: 18px;\r\n              line-height: 26px;\r\n            }\r\n          }\r\n        }\r\n      }\r\n      .public-pagination {\r\n        margin-bottom: 40px;\r\n      }\r\n    }\r\n    .response-box {\r\n      padding: 24px 0 40px 0;\r\n      .response-content {\r\n        flex-wrap: wrap;\r\n        margin-top: 36px;\r\n        .response-items {\r\n          width: 100%;\r\n          margin-right: 0;\r\n          margin-bottom: 90px;\r\n          &::after {\r\n            left: 50%;\r\n            transform: translateX(-50%) rotate(90deg);\r\n            top: 122%;\r\n          }\r\n          &:last-child {\r\n            margin-bottom: 0;\r\n          }\r\n          .img-box {\r\n            .img-name {\r\n              max-width: 80px;\r\n            }\r\n          }\r\n          .name {\r\n            margin: 16px 0 8px 0;\r\n          }\r\n        }\r\n      }\r\n    }\r\n    .loophole-box {\r\n      padding: 24px 0 0 0;\r\n      .vulnerability-bg {\r\n        margin: 36px auto 0 auto;\r\n        padding: 0 16px 24px 16px;\r\n        .content {\r\n          flex-wrap: wrap;\r\n          .img-bg {\r\n            width: 100%;\r\n            .img-box {\r\n              width: 100%;\r\n              height: 240px;\r\n              border-radius: 8px;\r\n              order: 1;\r\n            }\r\n          }\r\n          .text-box {\r\n            width: 100%;\r\n            padding: 16px 0 40px 0;\r\n            order: 2;\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n</style>\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Index.vue?vue&type=template&id=2b9acc6c&scoped=true&\"\nimport script from \"./Index.vue?vue&type=script&lang=js&\"\nexport * from \"./Index.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Index.vue?vue&type=style&index=0&id=2b9acc6c&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"2b9acc6c\",\n  null\n  \n)\n\nexport default component.exports","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../../node_modules/style-resources-loader/lib/index.js??ref--10-oneOf-1-4!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=style&index=0&id=2b9acc6c&lang=less&scoped=true&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../node_modules/style-resources-loader/lib/index.js??ref--10-oneOf-1-4!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PublicTitle.vue?vue&type=style&index=0&id=7c2b8bee&lang=less&scoped=true&\"","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = function (METHOD_NAME, argument) {\n  var method = [][METHOD_NAME];\n  return !!method && fails(function () {\n    // eslint-disable-next-line no-useless-call,no-throw-literal -- required for testing\n    method.call(null, argument || function () { throw 1; }, 1);\n  });\n};\n","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../../node_modules/style-resources-loader/lib/index.js??ref--10-oneOf-1-4!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Index.vue?vue&type=style&index=0&id=f2ca0508&lang=less&scoped=true&\"","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar ownKeys = require('../internals/own-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar createProperty = require('../internals/create-property');\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n  getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n    var O = toIndexedObject(object);\n    var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n    var keys = ownKeys(O);\n    var result = {};\n    var index = 0;\n    var key, descriptor;\n    while (keys.length > index) {\n      descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n      if (descriptor !== undefined) createProperty(result, key, descriptor);\n    }\n    return result;\n  }\n});\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../node_modules/style-resources-loader/lib/index.js??ref--10-oneOf-1-4!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PublicBanner.vue?vue&type=style&index=0&id=2b7b7416&lang=less&scoped=true&\"","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); });\nvar FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n  getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n    return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n  }\n});\n"],"sourceRoot":""}