index.vue 22 KB

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