index.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469
  1. <template>
  2. <div id="page" class="page">
  3. <div class="top">
  4. <img src="@/assets/images/contactUs/img5.png" alt="">
  5. <div>
  6. <div class="top_title">Contact Us</div>
  7. <div class="top_location">
  8. <span class="iconfont icon-weizhi"></span>
  9. Current Location : Home <span class="iconfont icon-dkw_guanbi-"></span> <span>Contact Us</span>
  10. </div>
  11. </div>
  12. </div>
  13. <div class="content">
  14. <div class="content_l">
  15. <div class="content_l_title">DRIVEINTEL Market Research</div>
  16. <div class="content_l_line"></div>
  17. <n-form require-mark-placement="left" ref="formRef" label-align="left" :model="formData" :rules="rules">
  18. <div class="flex">
  19. <n-form-item :label="t('report.demand.companyName')" label-placement="left" path="companyName">
  20. <n-input placeholder="" v-model:value="formData.companyName" />
  21. </n-form-item>
  22. <n-form-item :label="t('report.demand.address')" label-placement="left" path="addr">
  23. <n-input placeholder="" v-model:value="formData.addr" />
  24. </n-form-item>
  25. </div>
  26. <div class="flex">
  27. <n-form-item :label="t('report.demand.email')" label-placement="left" path="email">
  28. <n-input placeholder="" v-model:value="formData.email" />
  29. </n-form-item>
  30. <n-form-item :label="t('report.demand.phone')" label-placement="left" path="contact">
  31. <n-input placeholder="" v-model:value="formData.contact" />
  32. </n-form-item>
  33. </div>
  34. <n-form-item :label="t('report.demand.person')" label-placement="left" path="name">
  35. <n-input placeholder="" v-model:value="formData.name" />
  36. </n-form-item>
  37. <n-form-item class="area" :label="t('report.demand.desc')" label-placement="top" path="demand" :style="{ width: '100%' }">
  38. <n-input type="textarea" placeholder="" v-model:value="formData.demand" />
  39. </n-form-item>
  40. <div class="form-item-btn">
  41. <n-button type="primary" size="large" @click="handleSubmit">{{ t('report.demand.submit') }}</n-button>
  42. </div>
  43. </n-form>
  44. </div>
  45. <div class="content_r">
  46. <div class="content_r_list">
  47. <div class="content_r_item ">
  48. <img src="@/assets/images/contactUs/img1.png" alt="">
  49. <div>Ocean Tower, No.145, Hong Kong Road, Wuhan City, Hubei Province, China</div>
  50. </div>
  51. <div class="content_r_item ">
  52. <img src="@/assets/images/contactUs/img2.png" alt="">
  53. <div>market@DRIVEINTEL.com</div>
  54. </div>
  55. <div class="content_r_item ">
  56. <img src="@/assets/images/contactUs/img3.png" alt="">
  57. <div>+1-888 422 6988 (US)</div>
  58. </div>
  59. <div class="content_r_item ">
  60. <img src="@/assets/images/contactUs/img4.png" alt="">
  61. <div>+86-191 0717 4767 (Int'l)</div>
  62. </div>
  63. </div>
  64. </div>
  65. </div>
  66. </div>
  67. </template>
  68. <script lang="ts" setup>
  69. import {
  70. MdPhonePortrait,
  71. MdNavigate,
  72. MdHome,
  73. IosPin,
  74. MdMail,
  75. IosCall,
  76. } from "@vicons/ionicons4";
  77. import {
  78. // NIcon,
  79. // NBreadcrumb,
  80. // NBreadcrumbItem,
  81. // FormItemRule,
  82. // NForm,
  83. // NButton,
  84. // NFormItem,
  85. // NInput,
  86. // FormRules,
  87. createDiscreteApi,
  88. // NSpin,
  89. } from "naive-ui";
  90. import { onMounted, ref, reactive } from "vue";
  91. import { useI18n } from "#imports";
  92. import { useUserStore } from "@/store/user";
  93. const userStore = useUserStore();
  94. const lang = userStore.getLang;
  95. const config = useRuntimeConfig();
  96. const { t } = useI18n();
  97. onMounted(() => {
  98. if (typeof window !== "undefined") {
  99. window.scrollTo(0, 1);
  100. }
  101. });
  102. const formRef = ref();
  103. const formData = reactive({
  104. name: "", // 姓名
  105. contact: "", // 联系方式
  106. email: "", // 邮箱
  107. companyName: "", // 名称
  108. demand: "", // 需求
  109. reportId: "", // 报告id
  110. reportPrice: "", // 报告单价
  111. addr: "", // 联系地址
  112. lang: userStore.getLang, // 语言
  113. type: "", //类型,1.样本,2.定制
  114. });
  115. const rules: FormRules = {
  116. companyName: [
  117. {
  118. required: true,
  119. trigger: ["input", "blur"],
  120. validator(rule: FormItemRule, value: string) {
  121. if (!value) {
  122. return new Error(t("report.demand.companyNameTip"));
  123. }
  124. return true;
  125. },
  126. },
  127. ],
  128. // addr: [{
  129. // required: true,
  130. // trigger: ['input','blur'],
  131. // validator(rule: FormItemRule, value: string){
  132. // if(!value){
  133. // return new Error(t('report.demand.addressTip'));
  134. // }
  135. // return true;
  136. // }
  137. // }],
  138. email: [
  139. {
  140. required: true,
  141. trigger: ["blur"],
  142. validator(rule: FormItemRule, value: string) {
  143. if (!value) {
  144. return new Error(t("report.demand.emailTip"));
  145. } else if (!isEmail(value)) {
  146. return new Error(t("report.demand.emailFormat"));
  147. }
  148. return true;
  149. },
  150. },
  151. ],
  152. contact: [
  153. {
  154. required: true,
  155. trigger: ["blur"],
  156. validator(rule: FormItemRule, value: string) {
  157. if (!value) {
  158. return new Error(t("report.demand.phoneTip"));
  159. } else if (!isPhoneNumber(value)) {
  160. return new Error(t("report.demand.phoneFormat"));
  161. }
  162. return true;
  163. },
  164. },
  165. ],
  166. name: [
  167. {
  168. required: true,
  169. trigger: ["blur", "input"],
  170. validator(rule: FormItemRule, value: string) {
  171. if (!value) {
  172. return new Error(t("report.demand.personTip"));
  173. }
  174. return true;
  175. },
  176. },
  177. ],
  178. demand: [
  179. {
  180. required: true,
  181. trigger: ["input", "blur"],
  182. validator(rule: FormItemRule, value: string) {
  183. if (!value) {
  184. return new Error(t("report.demand.descTip"));
  185. }
  186. return true;
  187. },
  188. },
  189. ],
  190. };
  191. // 提交
  192. const message = createDiscreteApi(["message"]);
  193. function handleSubmit() {
  194. formRef.value?.validate(async (errors: any) => {
  195. if (!errors) {
  196. //formData.reportId = prop.rowId;
  197. //formData.reportPrice = prop.rowPrice;
  198. // formData.lang = langOnBrowser();
  199. //formData.type = prop.rowType;
  200. await customerInfoSave({ ...formData });
  201. message.message.success(t("report.demand.success"));
  202. formData.companyName = "";
  203. formData.addr = "";
  204. formData.email = "";
  205. formData.contact = "";
  206. formData.name = "";
  207. formData.demand = "";
  208. }
  209. });
  210. }
  211. useHead({
  212. title: t("common.navigate.contactUs") + "-" + t("defaultSettings.title"),
  213. viewport: "width=device-width,initial-scale=1,maximum-scale=1 ",
  214. charset: "utf-8",
  215. link: [
  216. {
  217. rel: "alternate",
  218. hreflang: userStore.getLang,
  219. href: config.public.domainName + "/contactUs",
  220. },
  221. ],
  222. meta: [
  223. {
  224. hid: "keywords",
  225. name: "keywords",
  226. content: t("defaultSettings.keyword"),
  227. },
  228. {
  229. hid: "description",
  230. name: "description",
  231. content: t("defaultSettings.desc"),
  232. },
  233. ],
  234. });
  235. </script>
  236. <style lang="scss" scoped>
  237. @import "~/assets/css/tool.scss";
  238. .page {
  239. background: #f6f7fa;
  240. .top {
  241. width: 100%;
  242. position: relative;
  243. margin-top: var(--size-130);
  244. img {
  245. width: 100%;
  246. }
  247. > div {
  248. width: 100%;
  249. padding: var(--size-60) var(--size-176) 0;
  250. position: absolute;
  251. top: 0;
  252. left: 0;
  253. .top_title {
  254. font-size: var(--size-48);
  255. font-family: Arial, Arial-Bold;
  256. font-weight: 700;
  257. text-align: left;
  258. color: #ffffff;
  259. }
  260. .top_location {
  261. font-size: var(--size-14);
  262. font-family: Arial, Arial-Regular;
  263. font-weight: 400;
  264. color: #ffffff;
  265. .icon-dkw_guanbi- {
  266. color: #ffffff;
  267. font-size: var(--size-12);
  268. }
  269. span {
  270. color: #72ff56;
  271. }
  272. }
  273. }
  274. }
  275. .content {
  276. display: flex;
  277. padding: var(--size-100) var(--size-145) 0;
  278. .content_l {
  279. width: var(--size-1055);
  280. padding: var(--size-30) var(--size-30) var(--size-60);
  281. background: #ffffff;
  282. .content_l_title {
  283. font-size: var(--size-48);
  284. font-family: Arial, Arial-Bold;
  285. font-weight: 700;
  286. text-align: center;
  287. color: #1a1a1a;
  288. }
  289. .content_l_line {
  290. width: var(--size-71);
  291. height: var(--size-4);
  292. background: linear-gradient(90deg, #719d59 2%, #479f82 98%);
  293. border-radius: var(--size-2);
  294. margin: 0 auto var(--size-20);
  295. }
  296. .n-form {
  297. .flex {
  298. display: flex;
  299. justify-content: space-between;
  300. :deep(.n-form-item) {
  301. width: 48%;
  302. }
  303. }
  304. :deep(.n-form-item-label) {
  305. font-size: var(--size-18);
  306. font-family: Microsoft YaHei, Microsoft YaHei-Regular;
  307. color: #666666;
  308. line-height: var(--size-63);
  309. border-bottom: 1px solid #e6e6e6;
  310. }
  311. :deep(.n-input-wrapper) {
  312. font-size: var(--size-18);
  313. font-family: Microsoft YaHei, Microsoft YaHei-Regular;
  314. line-height: var(--size-63);
  315. border-bottom: var(--size-1) solid #e6e6e6;
  316. }
  317. :deep(.n-form-item-blank--error .n-input) {
  318. --n-border-error: var(--size-1) solid transparent !important;
  319. --n-border-focus-error: var(--size-1) solid transparent !important;
  320. --n-border-hover-error: var(--size-1) solid transparent !important;
  321. }
  322. .area {
  323. :deep(.n-form-item-label),
  324. :deep(.n-input-wrapper) {
  325. border-bottom: none;
  326. }
  327. :deep(.n-input--textarea) {
  328. background: #fafafa;
  329. border: var(--size-1) solid #e6e6e6;
  330. border-radius: var(--size-10);
  331. padding: 0 var(--size-5);
  332. }
  333. :deep(
  334. .n-input.n-input--textarea.n-input--resizable .n-input-wrapper
  335. ) {
  336. min-height: var(--size-260);
  337. }
  338. }
  339. }
  340. .form-item-btn {
  341. text-align: center;
  342. .n-button {
  343. font-size: var(--size-18);
  344. font-family: MicrosoftYaHei;
  345. text-align: center;
  346. color: #ffffff;
  347. line-height: var(--size-63);
  348. width: var(--size-227);
  349. height: var(--size-63);
  350. background: linear-gradient(
  351. 90deg,
  352. #7b9c4f 0%,
  353. #549f76 70%,
  354. #2da19d 100%
  355. );
  356. border-radius: var(--size-8);
  357. }
  358. }
  359. }
  360. .content_r {
  361. width: var(--size-573);
  362. // height: var(--size-881);
  363. background: linear-gradient(180deg, #709d59, #449f86);
  364. border-radius: 0px var(--size-10) var(--size-10) 0px;
  365. padding: var(--size-50) 0;
  366. .content_r_list {
  367. .content_r_item {
  368. text-align: center;
  369. img {
  370. width: var(--size-124);
  371. height: var(--size-124);
  372. }
  373. div {
  374. width: var(--size-290);
  375. font-size: var(--size-16);
  376. font-family: Arial, Arial-Regular;
  377. text-align: center;
  378. color: #ffffff;
  379. margin: 0 auto var(--size-30);
  380. }
  381. }
  382. }
  383. }
  384. }
  385. }
  386. @include responseTo("phone") {
  387. .page {
  388. .top {
  389. img {
  390. height: 100px;
  391. object-fit: cover;
  392. }
  393. > div {
  394. padding: var(--size-15);
  395. .top_title {
  396. font-size: var(--size-28);
  397. }
  398. }
  399. }
  400. .content {
  401. padding: 0px;
  402. flex-direction: column;
  403. .content_l {
  404. width: 100%;
  405. padding: var(--size-15);
  406. .content_l_title {
  407. font-size: var(--size-20);
  408. }
  409. .n-form {
  410. .flex {
  411. display: block;
  412. :deep(.n-form-item) {
  413. width: 100%;
  414. }
  415. }
  416. :deep(.n-form-item-label) {
  417. font-size: var(--size-14);
  418. line-height: var(--size-40);
  419. }
  420. :deep(.n-input-wrapper) {
  421. font-size: var(--size-14);
  422. line-height: var(--size-40);
  423. }
  424. .area {
  425. :deep(.n-input--textarea) {
  426. border-radius: var(--size-10);
  427. padding: 0 var(--size-5);
  428. }
  429. :deep(
  430. .n-input.n-input--textarea.n-input--resizable .n-input-wrapper
  431. ) {
  432. min-height: var(--size-100);
  433. }
  434. }
  435. }
  436. .form-item-btn {
  437. .n-button {
  438. font-size: var(--size-16);
  439. line-height: var(--size-36);
  440. width: var(--size-100);
  441. height: var(--size-40);
  442. border-radius: var(--size-8);
  443. }
  444. }
  445. }
  446. .content_r {
  447. width: 100%;
  448. border-radius: 0;
  449. height: auto;
  450. .content_r_list {
  451. .content_r_item {
  452. &:last-child {
  453. div {
  454. margin-bottom: 0;
  455. }
  456. }
  457. img {
  458. width: var(--size-60);
  459. height: var(--size-60);
  460. }
  461. }
  462. }
  463. }
  464. }
  465. }
  466. }
  467. </style>