index.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831
  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 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 Researc
  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">
  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. });
  306. }
  307. // 行业资讯
  308. function chooseNewsMenu(key: string | number) {
  309. router.push({
  310. name: "newsCategories",
  311. params: { marketType: key, lang: language.value },
  312. });
  313. }
  314. onBeforeMount(async () => {
  315. pcShow.value = !isMobile();
  316. });
  317. // 关于我们跳转
  318. function chooseAboutMenu(key: string | number, option: DropdownOption) {
  319. router.push({ name: option.name, params: { lang: language.value } });
  320. }
  321. // 关于简报智库
  322. function chooseBulletinMenu(key: string | number, _option: DropdownOption) {
  323. router.push({
  324. name: "bulletinThinkTank",
  325. params: {
  326. marketType: _option.marketType,
  327. },
  328. });
  329. }
  330. // 手机端跳转
  331. function chooseMenu(key: string | number, option: DropdownOption) {
  332. if ("reports" === option.name) {
  333. router.push({
  334. name: option.name,
  335. params: { category: key, lang: language.value },
  336. });
  337. } else if ("newsCategories" === option.name) {
  338. router.push({
  339. name: option.name,
  340. params: { marketType: key, lang: language.value },
  341. });
  342. } else if ("index" === option.name) {
  343. router.push({
  344. name: "index___en",
  345. params: { marketType: key, lang: language.value },
  346. });
  347. } else {
  348. router.push({ name: option.name, params: { lang: language.value } });
  349. }
  350. }
  351. function handleSearch() {
  352. switch (selectTypeValue.value) {
  353. case "reports":
  354. router.push({
  355. name: "reports",
  356. params: { lang: language.value, keyword: keyword.value },
  357. });
  358. break;
  359. case "newsCategories":
  360. router.push({
  361. name: "newsCategories",
  362. params: { lang: language.value, keyword: keyword.value },
  363. });
  364. break;
  365. case "bulletinThinkTank":
  366. router.push({
  367. name: "bulletinThinkTank",
  368. params: { marketType: "industry-brief", title: keyword.value },
  369. });
  370. break;
  371. default:
  372. router.push({
  373. name: "reports",
  374. params: { lang: language.value, keyword: keyword.value },
  375. });
  376. break;
  377. }
  378. }
  379. function keyDown() {
  380. handleSearch();
  381. }
  382. const handleSignIn = () => {
  383. signInVisible.value = true;
  384. sginType.value = "login";
  385. signInTitle.value = t("common.login.title");
  386. };
  387. const toMine = () => {
  388. router.push({
  389. name: "mine",
  390. });
  391. };
  392. const handleLogout = () => {
  393. logoutVisible.value = true;
  394. };
  395. const submitLogoutCallback = () => {
  396. logOut_Api().then((res) => {
  397. message.message.success(t("report.demand.success"));
  398. userStore.resetState();
  399. router.push("/");
  400. });
  401. };
  402. const cancelLogoutCallback = () => {
  403. logoutVisible.value = false;
  404. };
  405. const closeSginDialog = (type: string) => {
  406. switch (type) {
  407. case "success":
  408. signInVisible.value = false;
  409. break;
  410. case "login":
  411. signInTitle.value = t("common.login.title");
  412. break;
  413. case "register":
  414. signInVisible.value = true;
  415. sginType.value = type;
  416. signInTitle.value = t("common.login.register");
  417. break;
  418. case "forgot":
  419. sginType.value = type;
  420. signInTitle.value = t("common.login.forgetPasswordTitle");
  421. break;
  422. default:
  423. break;
  424. }
  425. };
  426. // onMounted(async () => {
  427. //window.addEventListener('scroll',onScroll);
  428. // 下拉菜单
  429. const getDictListData = async () => {
  430. const cacheDict = await getLocalSessionReport();
  431. cacheDict?.forEach(
  432. (vo: { dictLabel: any; dictValue: any; dictIcon: any }) => {
  433. reportOptions.push({
  434. label: vo.dictLabel,
  435. key: vo.dictValue,
  436. icon: renderIcon(vo.dictIcon),
  437. name: "reports",
  438. });
  439. }
  440. );
  441. const cacheDictNews = await getLocalSessionNews();
  442. cacheDictNews?.forEach((vo: any) => {
  443. newsOptions.push({
  444. label: vo.dictLabel,
  445. key: vo.dictValue,
  446. icon: renderIcon(vo.dictIcon),
  447. name: "newsCategories",
  448. });
  449. });
  450. aboutOptions.push({
  451. label: t("common.navAboutUs.comp"),
  452. name: "about",
  453. icon: renderIcon("iconfont iconfont icon-ziyuan"),
  454. });
  455. aboutOptions.push({
  456. label: t("common.navAboutUs.method"),
  457. name: "link",
  458. icon: renderIcon("iconfont icon-chaxun"),
  459. });
  460. aboutOptions.push({
  461. label: t("common.navAboutUs.order"),
  462. name: "order",
  463. icon: renderIcon("iconfont icon-a-dingdanguanli2x"),
  464. });
  465. aboutOptions.push({
  466. label: t("common.navAboutUs.term"),
  467. name: "term",
  468. icon: renderIcon("iconfont icon-shejiyukaifa-"),
  469. });
  470. // aboutOptions.push({
  471. // label: t("common.navAboutUs.qualify"),
  472. // name: "qualify",
  473. // icon: renderIcon("iconfont iconfont icon-ziyuan"),
  474. // });
  475. bulletinOptions.push({
  476. label: "行业简报",
  477. name: "bulletinThinkTank",
  478. marketType: "industry-brief",
  479. icon: renderIcon("bqfl-iconfont bqfl-iconfont icon-zhinengjianbao"),
  480. });
  481. bulletinOptions.push({
  482. label: "企业洞察",
  483. name: "bulletinThinkTank",
  484. marketType: "enterprise-hole-analysis",
  485. icon: renderIcon("bqfl-iconfont bqfl-iconfont icon-yanjiubaogao"),
  486. });
  487. bulletinOptions.push({
  488. label: "行业简报",
  489. name: "bulletinThinkTank",
  490. marketType: "industry-brief",
  491. icon: renderIcon("bqfl-iconfont bqfl-iconfont icon-zhinengjianbao"),
  492. });
  493. };
  494. watch(
  495. () => route.path,
  496. (val) => {
  497. getDictListData();
  498. }
  499. );
  500. getDictListData();
  501. </script>
  502. <style lang='scss' >
  503. @import "~/assets/css/tool.scss";
  504. .headPhone {
  505. display: none;
  506. }
  507. .bg1 {
  508. background: #37404a !important;
  509. }
  510. .app-header {
  511. z-index: 9;
  512. width: 100%;
  513. position: fixed;
  514. background: rgba(6, 17, 29, 0.5);
  515. left: 0;
  516. top: 0;
  517. .top {
  518. display: flex;
  519. align-items: center;
  520. justify-content: end;
  521. padding: 0 var(--size-60);
  522. border-bottom: 1px solid rgba(255, 255, 255, 0.2);
  523. > a,
  524. > div {
  525. display: inline-block;
  526. font-size: var(--size-14);
  527. color: #ffffff;
  528. margin-left: var(--size-35);
  529. height: var(--size-45);
  530. line-height: var(--size-45);
  531. cursor: pointer;
  532. display: flex;
  533. align-items: center;
  534. span {
  535. font-size: var(--size-19);
  536. display: inline-block;
  537. margin-right: var(--size-4);
  538. }
  539. &:last-child {
  540. padding-left: var(--size-35);
  541. border-left: var(--size-1) solid #fff;
  542. }
  543. }
  544. .userInfo {
  545. display: flex;
  546. align-items: center;
  547. .avatar {
  548. width: 30px;
  549. height: 30px;
  550. margin-right: 10px;
  551. vertical-align: middle;
  552. border-radius: 50%;
  553. }
  554. .username {
  555. font-size: 14px;
  556. }
  557. span {
  558. margin-right: 10px;
  559. cursor: pointer;
  560. &:last-child {
  561. margin-right: 0;
  562. }
  563. }
  564. > .logout {
  565. font-size: var(--size-14);
  566. }
  567. }
  568. }
  569. .navBox {
  570. display: flex;
  571. align-items: center;
  572. justify-content: space-between;
  573. padding: 0 var(--size-60);
  574. border-bottom: 1px solid rgba(255, 255, 255, 0.2);
  575. height: var(--size-85);
  576. .navBox_l {
  577. font-size: var(--size-34);
  578. color: #ffffff;
  579. img {
  580. width: var(--size-366);
  581. height: var(--size-57);
  582. display: block;
  583. }
  584. }
  585. .navBox_c {
  586. font-size: var(--size-18);
  587. color: #ffffff;
  588. display: flex;
  589. cursor: pointer;
  590. > a {
  591. padding: var(--size-7) var(--size-43);
  592. border-right: var(--size-1) solid rgba(255, 255, 255, 0.5);
  593. }
  594. }
  595. .navBox_r {
  596. .search {
  597. display: flex;
  598. align-items: center;
  599. width: var(--size-450);
  600. height: var(--size-44);
  601. background: #ffffff;
  602. border-radius: 8px;
  603. overflow: hidden;
  604. .search_l {
  605. width: var(--size-148);
  606. font-size: var(--size-14);
  607. text-align: center;
  608. cursor: pointer;
  609. .search_l_type {
  610. span {
  611. transform: rotateZ(90deg);
  612. display: inline-block;
  613. color: #1a1a1a;
  614. }
  615. }
  616. }
  617. .search_c {
  618. border-left: 1px solid #cccccc;
  619. .n-input {
  620. --n-height: var(--size-26) !important;
  621. line-height: var(--size-26) !important;
  622. }
  623. }
  624. .search_r {
  625. width: var(--size-105);
  626. font-size: var(--size-16);
  627. color: #ffffff;
  628. height: var(--size-44);
  629. background: linear-gradient(0deg, #7b9c4f 0%, #2da19d 100%), #1a1a1a;
  630. cursor: pointer;
  631. display: flex;
  632. align-items: center;
  633. justify-content: center;
  634. span {
  635. font-size: var(--size-20);
  636. margin-right: var(--size-4);
  637. }
  638. }
  639. }
  640. }
  641. }
  642. }
  643. .n-input {
  644. --n-border: none !important;
  645. --n-border-hover: none !important;
  646. --n-border-focus: none !important;
  647. --n-box-shadow-focus: none !important;
  648. --n-caret-color: #ef001f !important;
  649. font-size: var(--size-16) !important;
  650. --n-text-color-hover: none !important;
  651. }
  652. .modalCls {
  653. width: var(--size-720) !important;
  654. }
  655. @include responseTo("phone") {
  656. .pc {
  657. display: none;
  658. }
  659. .headPhone {
  660. background: rgba(6, 17, 29, 0.5);
  661. z-index: 9;
  662. width: 100%;
  663. position: fixed;
  664. left: 0;
  665. top: 0;
  666. background-size: cover;
  667. padding: var(--size-10) var(--size-20);
  668. display: block;
  669. .head_t {
  670. display: flex;
  671. justify-content: space-between;
  672. .head_t_l {
  673. font-size: 0;
  674. img {
  675. height: var(--size-36);
  676. }
  677. }
  678. .head_t_r {
  679. img {
  680. width: var(--size-36);
  681. height: var(--size-36);
  682. }
  683. }
  684. }
  685. .head_c {
  686. height: var(--size-30);
  687. margin: var(--size-10) auto;
  688. display: flex;
  689. align-items: center;
  690. justify-content: space-between;
  691. background: #ffffff;
  692. border: 1px solid none;
  693. overflow: hidden;
  694. border-radius: var(--size-4);
  695. .head_c_l {
  696. font-size: var(--size-12);
  697. color: #808080;
  698. padding-left: var(--size-7);
  699. position: relative;
  700. padding-right: var(--size-6);
  701. cursor: pointer;
  702. display: flex;
  703. align-items: center;
  704. .icon-dkw_guanbi- {
  705. transform: rotateZ(90deg);
  706. display: inline-block;
  707. }
  708. &::after {
  709. content: "";
  710. display: block;
  711. width: 1px;
  712. height: var(--size-16);
  713. background: #cccccc;
  714. position: absolute;
  715. right: 0;
  716. }
  717. .icon-jiantou {
  718. display: inline-block;
  719. transform: rotateZ(-90deg);
  720. font-size: var(--size-10);
  721. color: #000000;
  722. vertical-align: text-bottom;
  723. }
  724. }
  725. .head_c_c {
  726. flex: 1;
  727. padding: 0 var(--size-9);
  728. .n-input {
  729. --n-border: none !important;
  730. }
  731. }
  732. .head_c_r {
  733. width: var(--size-53);
  734. height: var(--size-30);
  735. font-size: var(--size-12);
  736. background: linear-gradient(0deg, #7b9c4f 0%, #2da19d 100%), #1a1a1a;
  737. color: #fff;
  738. display: flex;
  739. align-items: center;
  740. justify-content: center;
  741. cursor: pointer;
  742. .icon-sousuo {
  743. font-size: var(--size-12);
  744. margin-right: var(--size-3);
  745. }
  746. }
  747. .n-input {
  748. font-size: var(--size-12) !important;
  749. ::v-deep .n-input-wrapper {
  750. padding: 0 !important;
  751. }
  752. }
  753. }
  754. .head_b {
  755. display: flex;
  756. justify-content: flex-end;
  757. .head_b_lang {
  758. font-size: var(--size-12);
  759. color: #ffffff;
  760. display: flex;
  761. align-items: center;
  762. margin-right: var(--size-30);
  763. cursor: pointer;
  764. .head_b_lang_l {
  765. width: var(--size-13);
  766. height: var(--size-13);
  767. margin-right: var(--size-4);
  768. }
  769. .head_b_lang_r {
  770. width: var(--size-9);
  771. height: var(--size-5);
  772. margin-left: var(--size-5);
  773. margin-right: var(--size-10);
  774. }
  775. }
  776. .userInfo {
  777. display: flex;
  778. align-items: center;
  779. .username {
  780. font-size: var(--size-14);
  781. color: #fff;
  782. }
  783. span {
  784. margin-right: var(--size-5);
  785. cursor: pointer;
  786. color: #fff;
  787. font-size: var(--size-14);
  788. &:last-child {
  789. margin-right: 0;
  790. }
  791. }
  792. }
  793. .head_t_r_login {
  794. font-size: var(--size-12);
  795. color: #ffffff;
  796. cursor: pointer;
  797. }
  798. }
  799. }
  800. }
  801. </style>