index.vue 21 KB

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