index.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854
  1. <template>
  2. <div class="app-header pc" :class="{bg1:route.path!='/'}">
  3. <div class="top">
  4. <a> <span class="iconfont icon-youxiang"></span> market@aporesearch.com</a>
  5. <a><span class="iconfont icon-lianxidianhua"></span> 1-332-251-9412</a>
  6. <!-- <template v-if="isLogin">
  7. <div class="userInfo">
  8. <img click="toMine" class="avatar" src="@/assets/images/avatar.png" alt="avatar" width="30" />
  9. <span class="username" @click="toMine">{{
  10. userInfo.name
  11. }}</span>
  12. <span>|</span>
  13. <span class="logout" @click="handleLogout">{{t('common.login.logout')}}</span>
  14. </div>
  15. </template>
  16. <template v-if="!isLogin">
  17. <div><span class="iconfont icon-weidenglu"></span>
  18. <div @click="handleSignIn()">Login</div> / <div @click="closeSginDialog('register')">Register</div>
  19. </div>
  20. </template> -->
  21. </div>
  22. <div class="navBox">
  23. <a class="navBox_l" href="/">
  24. <img src="/assets/images/img2.png" alt="">
  25. </a>
  26. <div class="navBox_c">
  27. <n-dropdown :options="reportOptions" trigger="hover" size="huge" @select="chooseReportMenu">
  28. <a :class="{'router-link-active':(route.name=='reports')}" :href="jumpLink('/report-industries')">
  29. Reports
  30. </a>
  31. </n-dropdown>
  32. <a :class="{'router-link-active':route.path=='/market'}" :href="jumpLink('/market')">
  33. Custom Research
  34. </a>
  35. <n-dropdown :options="newsOptions" trigger="hover" size="huge" @select="chooseNewsMenu">
  36. <a :class="{'router-link-active':(route.name=='newsCategories'||route.path=='/news-categories')}" :href="jumpLink('/news-categories')">
  37. Industry News
  38. </a>
  39. </n-dropdown>
  40. <n-dropdown :options="aboutOptions" trigger="hover" size="huge" @select="chooseAboutMenu">
  41. <a :class="{'router-link-active':route.path=='/about'||route.path=='/link'||route.path=='/order'||route.path=='/term'||route.path=='/qualify'}" :href="jumpLink('/about')">
  42. About Us
  43. </a>
  44. </n-dropdown>
  45. <a :class="{'router-link-active':route.path=='/contactUs'}" :href="jumpLink('/contactUs')">Contact</a>
  46. </div>
  47. <div class="navBox_r">
  48. <div class="search">
  49. <div class="search_l">
  50. <n-dropdown trigger="hover" :keyboard="false" :options="selectTypeList" @select="selectValueFun">
  51. <div class="search_l_type">
  52. {{ selectTypeLabel }}
  53. <span class="iconfont icon-dkw_guanbi-"></span>
  54. </div>
  55. </n-dropdown>
  56. </div>
  57. <div class="search_c">
  58. <n-input v-model:value="keyword" @keydown.enter="handleSearch()" type="text" clearable placeholder="Please Enter Keywords" />
  59. </div>
  60. <div class="search_r" @click="handleSearch()">
  61. <span class="iconfont icon-sousuo"></span>
  62. Search
  63. </div>
  64. </div>
  65. </div>
  66. </div>
  67. </div>
  68. <div class="headPhone">
  69. <div class="head_t">
  70. <div class="head_t_l">
  71. <a href="/">
  72. <img src="/assets/images/img2.png" alt="" />
  73. </a>
  74. </div>
  75. <div class="head_t_r">
  76. <n-dropdown placement="bottom-start" class="en" trigger="click" size="small" :options="mobileMenu" @select="chooseMenu">
  77. <img src="/assets/images/menu.png" alt="" />
  78. </n-dropdown>
  79. </div>
  80. </div>
  81. <div class="head_c_box">
  82. <div class="head_c">
  83. <div class="head_c_l">
  84. <n-dropdown trigger="click" :options="selectTypeList" @select="selectValueFun" placement="bottom-start" :class="language">
  85. <div style="color: #000">
  86. {{ selectTypeLabel }}<span class="iconfont icon-dkw_guanbi-"></span>
  87. </div>
  88. </n-dropdown>
  89. </div>
  90. <div class="head_c_c">
  91. <n-input v-model:value="keyword" type="text" clearable :placeholder="$t('report.content.keyword')" />
  92. </div>
  93. <div class="head_c_r" @click="handleSearch()">
  94. Search
  95. </div>
  96. </div>
  97. </div>
  98. <!-- <div class="head_b">
  99. <div>
  100. <div class="userInfo" v-if="userStore.getToken">
  101. <span class="username">
  102. <a href="/mine/mineCenter">
  103. {{ userStore.getUserInfo?.name }}
  104. </a>
  105. </span>
  106. <span>|</span>
  107. <span class="logout" @click="handleLogout">{{
  108. $t("common.login.logout")
  109. }}</span>
  110. </div>
  111. <div v-else class="head_t_r_login">
  112. <span @click="handleSignIn()">
  113. Login</span>/
  114. <span @click="closeSginDialog('register')">Register</span>
  115. </div>
  116. </div>
  117. </div> -->
  118. </div>
  119. <n-modal :show="signInVisible" :title="signInTitle" :showIcon="false" @esc="signInVisible = false" @mask-click="signInVisible = false" @close="signInVisible = false" class="modalCls" :class="{ 'login-dialog': !pcShow }">
  120. <SignInLogin @closeSginDialog="closeSginDialog" v-if="sginType == 'login'"></SignInLogin>
  121. <SignInRegister @closeSginDialog="closeSginDialog" v-if="sginType == 'register'"></SignInRegister>
  122. <SignInForgot @closeSginDialog="closeSginDialog" v-if="sginType == 'forgot'"></SignInForgot>
  123. </n-modal>
  124. <n-modal v-model:show="logoutVisible" preset="dialog" title="Hint" :showIcon="false" content="Are you sure you want to log out?" positive-text="Confirm" negative-text="Cancel" :close-on-esc="false" :mask-closable="false" @positive-click="submitLogoutCallback" @negative-click="cancelLogoutCallback" :class="{ 'login-dialog': !pcShow }" />
  125. </template>
  126. <script lang="ts" setup>
  127. import { useI18n } from "#imports";
  128. import SignInLogin from "@/components/Login/index.vue";
  129. import SignInRegister from "@/components/Login/register.vue";
  130. import SignInForgot from "@/components/Login/forgot.vue";
  131. import { useLocaleStoreWithOut } from "@/store";
  132. import {
  133. // Component,
  134. // h,
  135. onMounted,
  136. ref,
  137. onUnmounted,
  138. onBeforeMount,
  139. watch,
  140. computed,
  141. inject,
  142. onServerPrefetch,
  143. } from "vue";
  144. import { createDiscreteApi } from "naive-ui";
  145. import { useRouter, useRoute } from "vue-router";
  146. import {
  147. MdApps,
  148. MdHome,
  149. IosPaper,
  150. IosSearch,
  151. MdToday,
  152. MdPeople,
  153. MdSearch,
  154. IosCall,
  155. IosGlobe,
  156. } from "@vicons/ionicons4";
  157. import { useUserStore } from "@/store/user";
  158. const message = createDiscreteApi(["message"]);
  159. const { t, locale, setLocale } = useI18n();
  160. const switchLocalePath = useSwitchLocalePath();
  161. const router = useRouter();
  162. const route = useRoute();
  163. const userStore = useUserStore();
  164. const pcShow = ref(true);
  165. const keyword = ref<string>(""); //关键字
  166. userStore.setLang(locale.value == "en" ? "en-US" : "zh-CN");
  167. const value = userStore.getLang;
  168. const language = ref("");
  169. const langSelected = ref("zh");
  170. language.value = value === "en-US" ? "en" : "";
  171. langSelected.value = value === "en-US" ? "en" : "zh";
  172. const renderIcon = (icon: string) => {
  173. return () => {
  174. return h("span", { class: icon });
  175. };
  176. };
  177. const renderIconC4 = (icon: Component) => {
  178. return () => {
  179. return h(NIcon, null, {
  180. default: () => h(icon),
  181. });
  182. };
  183. };
  184. const selectValueFun = (value: any) => {
  185. selectTypeValue.value = selectTypeList.value[value].value;
  186. selectTypeLabel.value = selectTypeList.value[value].label;
  187. };
  188. // const renderIconLabel = (option: DropdownOption) => {
  189. // return h('a',{ onclick: () => chooseMenu, target: '_blank' },{ default: () => option.label});
  190. // }
  191. const reportOptions = [] as any; //报告列表
  192. const newsOptions = [] as any; //行业资讯
  193. const aboutOptions = [] as any; //关于我们
  194. const bulletinOptions = [] as any; // 简报智库
  195. const mobileMenu = [
  196. { label: t("common.navigate.home"), key: "home", name: "index" },
  197. {
  198. label: t("common.navigate.report"),
  199. key: "reports",
  200. children: reportOptions,
  201. name: "reports",
  202. },
  203. { label: t("common.navigate.market"), key: "market", name: "marketIndex" },
  204. {
  205. label: t("common.navigate.news"),
  206. key: "newsCategories",
  207. children: newsOptions,
  208. name: "newsCategories",
  209. },
  210. {
  211. label: t("common.navigate.aboutUs"),
  212. key: "about",
  213. children: aboutOptions,
  214. name: "about",
  215. },
  216. {
  217. label: t("common.navigate.contactUs"),
  218. key: "contactUs",
  219. name: "contactUsIndex",
  220. },
  221. // {
  222. // label: "简报智库",
  223. // key: "bulletin",
  224. // children: bulletinOptions,
  225. // name: "bulletin",
  226. // },
  227. ];
  228. const selectTypeValue = ref("reports");
  229. const selectTypeLabel = ref(t("common.navigate.report"));
  230. const selectTypeList = ref([
  231. {
  232. label: t("common.navigate.report"),
  233. value: "reports",
  234. key: 0,
  235. },
  236. {
  237. label: t("common.navigate.news"),
  238. value: "newsCategories",
  239. key: 1,
  240. },
  241. //{
  242. // label: t("common.navigate.bulletin"),
  243. // value: "bulletinThinkTank",
  244. //},
  245. ]);
  246. const signInVisible = ref<boolean>(false);
  247. const signInTitle = ref<string>("");
  248. const sginType = ref<string>("login");
  249. const logoutVisible = ref(false);
  250. const userInfo = computed(() => userStore.getUserInfo);
  251. const isLogin = computed(() =>
  252. userStore.getToken && userStore.getUserInfo ? true : false
  253. );
  254. const jumpLink = (url: string) => {
  255. return url;
  256. };
  257. watch(
  258. () => userStore.getSearchType,
  259. (val) => {
  260. selectTypeValue.value = val || null;
  261. }
  262. );
  263. watch(langSelected, () => {
  264. if (langSelected.value == "en") {
  265. selectTypeList.value = [
  266. {
  267. label: t("common.navigate.report"),
  268. value: "reports",
  269. },
  270. {
  271. label: t("common.navigate.news"),
  272. value: "newsCategories",
  273. },
  274. ];
  275. // userStore.resetState();
  276. }
  277. });
  278. watch(
  279. () => userStore.getShowLoginDialog,
  280. (newval, oldval) => {
  281. signInVisible.value = newval;
  282. sginType.value = "login";
  283. signInTitle.value = t("common.login.title");
  284. }
  285. );
  286. watch(signInVisible, (val) => {
  287. if (val === false) {
  288. userStore.setShowLoginDialog(false);
  289. }
  290. });
  291. // 中英文切换
  292. const langChange = async (lng: string) => {
  293. userStore.setLang(lng == "zh" ? "zh-CN" : "en-US");
  294. const path = switchLocalePath(lng);
  295. setLocale(lng);
  296. // router.push(path);
  297. // location.reload();
  298. location.href = path;
  299. };
  300. // 研究报告菜单切换
  301. function chooseReportMenu(key: string | number, _option: DropdownOption) {
  302. router.push({
  303. name: "reports",
  304. // params: { category: key, lang: language.value },
  305. params: { category: key },
  306. });
  307. }
  308. // 行业资讯
  309. function chooseNewsMenu(key: string | number) {
  310. router.push({
  311. name: "newsCategories",
  312. // params: { marketType: key, lang: language.value },
  313. params: { marketType: key },
  314. });
  315. }
  316. onBeforeMount(async () => {
  317. pcShow.value = !isMobile();
  318. });
  319. // 关于我们跳转
  320. function chooseAboutMenu(key: string | number, option: DropdownOption) {
  321. router.push({ name: option.name, params: { lang: language.value } });
  322. }
  323. // 关于简报智库
  324. function chooseBulletinMenu(key: string | number, _option: DropdownOption) {
  325. router.push({
  326. name: "bulletinThinkTank",
  327. params: {
  328. marketType: _option.marketType,
  329. },
  330. });
  331. }
  332. // 手机端跳转
  333. function chooseMenu(key: string | number, option: DropdownOption) {
  334. if ("reports" === option.name) {
  335. router.push({
  336. name: option.name,
  337. params: { category: key, lang: language.value },
  338. });
  339. } else if ("newsCategories" === option.name) {
  340. router.push({
  341. name: option.name,
  342. params: { marketType: key, lang: language.value },
  343. });
  344. } else if ("index" === option.name) {
  345. router.push({
  346. name: "index___en",
  347. params: { marketType: key, lang: language.value },
  348. });
  349. } else {
  350. router.push({ name: option.name, params: { lang: language.value } });
  351. }
  352. }
  353. function handleSearch() {
  354. switch (selectTypeValue.value) {
  355. case "reports":
  356. router.push({
  357. name: "reports",
  358. params: { lang: language.value, keyword: keyword.value },
  359. });
  360. break;
  361. case "newsCategories":
  362. router.push({
  363. name: "newsCategories",
  364. params: { lang: language.value, keyword: keyword.value },
  365. });
  366. break;
  367. case "bulletinThinkTank":
  368. router.push({
  369. name: "bulletinThinkTank",
  370. params: { marketType: "industry-brief", title: keyword.value },
  371. });
  372. break;
  373. default:
  374. router.push({
  375. name: "reports",
  376. params: { lang: language.value, keyword: keyword.value },
  377. });
  378. break;
  379. }
  380. }
  381. function keyDown() {
  382. handleSearch();
  383. }
  384. const handleSignIn = () => {
  385. signInVisible.value = true;
  386. sginType.value = "login";
  387. signInTitle.value = t("common.login.title");
  388. };
  389. const toMine = () => {
  390. router.push({
  391. name: "mine",
  392. });
  393. };
  394. const handleLogout = () => {
  395. logoutVisible.value = true;
  396. };
  397. const submitLogoutCallback = () => {
  398. logOut_Api().then((res) => {
  399. message.message.success(t("report.demand.success"));
  400. userStore.resetState();
  401. router.push("/");
  402. });
  403. };
  404. const cancelLogoutCallback = () => {
  405. logoutVisible.value = false;
  406. };
  407. const closeSginDialog = (type: string) => {
  408. switch (type) {
  409. case "success":
  410. signInVisible.value = false;
  411. break;
  412. case "login":
  413. signInTitle.value = t("common.login.title");
  414. break;
  415. case "register":
  416. signInVisible.value = true;
  417. sginType.value = type;
  418. signInTitle.value = t("common.login.register");
  419. break;
  420. case "forgot":
  421. sginType.value = type;
  422. signInTitle.value = t("common.login.forgetPasswordTitle");
  423. break;
  424. default:
  425. break;
  426. }
  427. };
  428. // onMounted(async () => {
  429. //window.addEventListener('scroll',onScroll);
  430. // 下拉菜单
  431. const getDictListData = async () => {
  432. const cacheDict = await getLocalSessionReport();
  433. cacheDict?.forEach(
  434. (vo: { dictLabel: any; dictValue: any; dictIcon: any }) => {
  435. reportOptions.push({
  436. label: vo.dictLabel,
  437. key: vo.dictValue,
  438. icon: renderIcon(vo.dictIcon),
  439. name: "reports",
  440. });
  441. }
  442. );
  443. const cacheDictNews = await getLocalSessionNews();
  444. cacheDictNews?.forEach((vo: any) => {
  445. newsOptions.push({
  446. label: vo.dictLabel,
  447. key: vo.dictValue,
  448. icon: renderIcon(vo.dictIcon),
  449. name: "newsCategories",
  450. });
  451. });
  452. aboutOptions.push({
  453. label: t("common.navAboutUs.comp"),
  454. name: "about",
  455. icon: renderIcon("iconfont iconfont icon-ziyuan"),
  456. });
  457. aboutOptions.push({
  458. label: t("common.navAboutUs.method"),
  459. name: "link",
  460. icon: renderIcon("iconfont icon-chaxun"),
  461. });
  462. aboutOptions.push({
  463. label: t("common.navAboutUs.order"),
  464. name: "order",
  465. icon: renderIcon("iconfont icon-a-dingdanguanli2x"),
  466. });
  467. aboutOptions.push({
  468. label: t("common.navAboutUs.term"),
  469. name: "term",
  470. icon: renderIcon("iconfont icon-shejiyukaifa-"),
  471. });
  472. // aboutOptions.push({
  473. // label: t("common.navAboutUs.qualify"),
  474. // name: "qualify",
  475. // icon: renderIcon("iconfont iconfont icon-ziyuan"),
  476. // });
  477. bulletinOptions.push({
  478. label: "行业简报",
  479. name: "bulletinThinkTank",
  480. marketType: "industry-brief",
  481. icon: renderIcon("bqfl-iconfont bqfl-iconfont icon-zhinengjianbao"),
  482. });
  483. bulletinOptions.push({
  484. label: "企业洞察",
  485. name: "bulletinThinkTank",
  486. marketType: "enterprise-hole-analysis",
  487. icon: renderIcon("bqfl-iconfont bqfl-iconfont icon-yanjiubaogao"),
  488. });
  489. bulletinOptions.push({
  490. label: "行业简报",
  491. name: "bulletinThinkTank",
  492. marketType: "industry-brief",
  493. icon: renderIcon("bqfl-iconfont bqfl-iconfont icon-zhinengjianbao"),
  494. });
  495. };
  496. watch(
  497. () => route.path,
  498. (val) => {
  499. getDictListData();
  500. }
  501. );
  502. getDictListData();
  503. </script>
  504. <style lang='scss' >
  505. @import "~/assets/css/tool.scss";
  506. .headPhone {
  507. display: none;
  508. }
  509. .bg1 {
  510. background: #37404a !important;
  511. }
  512. .app-header {
  513. z-index: 9;
  514. width: 100%;
  515. position: fixed;
  516. background: rgba(6, 17, 29, 0.5);
  517. left: 0;
  518. top: 0;
  519. .top {
  520. display: flex;
  521. align-items: center;
  522. justify-content: end;
  523. padding: 0 var(--size-60);
  524. border-bottom: 1px solid rgba(255, 255, 255, 0.2);
  525. > a,
  526. > div {
  527. display: inline-block;
  528. font-size: var(--size-14);
  529. color: #ffffff;
  530. margin-left: var(--size-35);
  531. height: var(--size-45);
  532. line-height: var(--size-45);
  533. cursor: pointer;
  534. display: flex;
  535. align-items: center;
  536. span {
  537. font-size: var(--size-19);
  538. display: inline-block;
  539. margin-right: var(--size-4);
  540. }
  541. &:last-child {
  542. padding-left: var(--size-35);
  543. border-left: var(--size-1) solid #fff;
  544. }
  545. }
  546. .userInfo {
  547. display: flex;
  548. align-items: center;
  549. .avatar {
  550. width: var(--size-30);
  551. height: var(--size-30);
  552. margin-right: var(--size-10);
  553. vertical-align: middle;
  554. border-radius: 50%;
  555. }
  556. .username {
  557. font-size: var(--size-14);
  558. }
  559. span {
  560. margin-right: var(--size-10);
  561. cursor: pointer;
  562. &:last-child {
  563. margin-right: 0;
  564. }
  565. }
  566. > .logout {
  567. font-size: var(--size-14);
  568. }
  569. }
  570. }
  571. .navBox {
  572. display: flex;
  573. align-items: center;
  574. justify-content: space-between;
  575. padding: 0 var(--size-60);
  576. border-bottom: 1px solid rgba(255, 255, 255, 0.2);
  577. height: var(--size-85);
  578. .navBox_l {
  579. font-size: var(--size-34);
  580. color: #ffffff;
  581. img {
  582. width: var(--size-366);
  583. height: var(--size-57);
  584. display: block;
  585. }
  586. }
  587. .navBox_c {
  588. font-size: var(--size-18);
  589. color: #ffffff;
  590. display: flex;
  591. cursor: pointer;
  592. > a {
  593. padding: var(--size-7) var(--size-43);
  594. border-right: var(--size-1) solid rgba(255, 255, 255, 0.5);
  595. }
  596. }
  597. .navBox_r {
  598. .search {
  599. display: flex;
  600. align-items: center;
  601. width: var(--size-450);
  602. height: var(--size-44);
  603. background: #ffffff;
  604. border-radius: var(--size-8);
  605. overflow: hidden;
  606. .search_l {
  607. width: var(--size-148);
  608. font-size: var(--size-14);
  609. text-align: center;
  610. cursor: pointer;
  611. .search_l_type {
  612. span {
  613. transform: rotateZ(90deg);
  614. display: inline-block;
  615. color: #1a1a1a;
  616. }
  617. }
  618. }
  619. .search_c {
  620. border-left: var(--size-1) solid #cccccc;
  621. .n-input {
  622. --n-height: var(--size-26) !important;
  623. line-height: var(--size-26) !important;
  624. }
  625. :deep(.n-input__input) {
  626. width: var(--size-180) !important;
  627. }
  628. /* 全局placeholder样式 */
  629. .n-input .n-input__placeholder {
  630. font-size: 14px !important;
  631. }
  632. .n-input .n-input-wrapper .n-input__placeholder {
  633. font-size: 14px !important;
  634. }
  635. .n-input input::placeholder {
  636. font-size: 14px !important;
  637. }
  638. .n-input .n-input__input-el::placeholder {
  639. font-size: 14px !important;
  640. }
  641. }
  642. .search_r {
  643. width: var(--size-105);
  644. font-size: var(--size-16);
  645. color: #ffffff;
  646. height: var(--size-44);
  647. background: linear-gradient(0deg, #7b9c4f 0%, #2da19d 100%), #1a1a1a;
  648. cursor: pointer;
  649. display: flex;
  650. align-items: center;
  651. justify-content: center;
  652. span {
  653. font-size: var(--size-20);
  654. margin-right: var(--size-4);
  655. }
  656. }
  657. }
  658. }
  659. }
  660. }
  661. .n-input {
  662. --n-border: none !important;
  663. --n-border-hover: none !important;
  664. --n-border-focus: none !important;
  665. --n-box-shadow-focus: none !important;
  666. // --n-caret-color: #000000 !important;
  667. font-size: var(--size-16) !important;
  668. --n-text-color-hover: none !important;
  669. }
  670. .modalCls {
  671. width: var(--size-720) !important;
  672. }
  673. .router-link-active {
  674. font-weight: 700;
  675. color: #6aaa87;
  676. }
  677. @include responseTo("phone") {
  678. .pc {
  679. display: none;
  680. }
  681. .headPhone {
  682. // background: rgba(6, 17, 29, 0.5);
  683. background: #37404a;
  684. z-index: 9;
  685. width: 100%;
  686. position: fixed;
  687. left: 0;
  688. top: 0;
  689. background-size: cover;
  690. padding: var(--size-10) var(--size-20);
  691. display: block;
  692. .head_t {
  693. display: flex;
  694. justify-content: space-between;
  695. .head_t_l {
  696. font-size: 0;
  697. img {
  698. height: var(--size-36);
  699. }
  700. }
  701. .head_t_r {
  702. img {
  703. width: var(--size-36);
  704. height: var(--size-36);
  705. }
  706. }
  707. }
  708. .head_c {
  709. height: var(--size-30);
  710. margin: var(--size-10) auto;
  711. display: flex;
  712. align-items: center;
  713. justify-content: space-between;
  714. background: #ffffff;
  715. border: 1px solid none;
  716. overflow: hidden;
  717. border-radius: var(--size-4);
  718. .head_c_l {
  719. font-size: var(--size-12);
  720. color: #808080;
  721. padding-left: var(--size-7);
  722. position: relative;
  723. padding-right: var(--size-6);
  724. cursor: pointer;
  725. display: flex;
  726. align-items: center;
  727. .icon-dkw_guanbi- {
  728. transform: rotateZ(90deg);
  729. display: inline-block;
  730. }
  731. &::after {
  732. content: "";
  733. display: block;
  734. width: 1px;
  735. height: var(--size-16);
  736. background: #cccccc;
  737. position: absolute;
  738. right: 0;
  739. }
  740. .icon-jiantou {
  741. display: inline-block;
  742. transform: rotateZ(-90deg);
  743. font-size: var(--size-10);
  744. color: #000000;
  745. vertical-align: text-bottom;
  746. }
  747. }
  748. .head_c_c {
  749. flex: 1;
  750. padding: 0 var(--size-9);
  751. .n-input {
  752. --n-border: none !important;
  753. }
  754. }
  755. .head_c_r {
  756. width: var(--size-53);
  757. height: var(--size-30);
  758. font-size: var(--size-12);
  759. background: linear-gradient(0deg, #7b9c4f 0%, #2da19d 100%), #1a1a1a;
  760. color: #fff;
  761. display: flex;
  762. align-items: center;
  763. justify-content: center;
  764. cursor: pointer;
  765. .icon-sousuo {
  766. font-size: var(--size-12);
  767. margin-right: var(--size-3);
  768. }
  769. }
  770. .n-input {
  771. font-size: var(--size-12) !important;
  772. ::v-deep .n-input-wrapper {
  773. padding: 0 !important;
  774. }
  775. }
  776. }
  777. .head_b {
  778. display: flex;
  779. justify-content: flex-end;
  780. .head_b_lang {
  781. font-size: var(--size-12);
  782. color: #ffffff;
  783. display: flex;
  784. align-items: center;
  785. margin-right: var(--size-30);
  786. cursor: pointer;
  787. .head_b_lang_l {
  788. width: var(--size-13);
  789. height: var(--size-13);
  790. margin-right: var(--size-4);
  791. }
  792. .head_b_lang_r {
  793. width: var(--size-9);
  794. height: var(--size-5);
  795. margin-left: var(--size-5);
  796. margin-right: var(--size-10);
  797. }
  798. }
  799. .userInfo {
  800. display: flex;
  801. align-items: center;
  802. .username {
  803. font-size: var(--size-14);
  804. color: #fff;
  805. }
  806. span {
  807. margin-right: var(--size-5);
  808. cursor: pointer;
  809. color: #fff;
  810. font-size: var(--size-14);
  811. &:last-child {
  812. margin-right: 0;
  813. }
  814. }
  815. }
  816. .head_t_r_login {
  817. font-size: var(--size-12);
  818. color: #ffffff;
  819. cursor: pointer;
  820. }
  821. }
  822. }
  823. }
  824. </style>