list.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557
  1. <template>
  2. <div class="flex w-full h-[100px] title fixed top-0 left-0 bottom-0 z-20 bg-[#fff]"
  3. style="border-bottom: 1px solid #E1E1E1;">
  4. <div class="flex-[1]"></div>
  5. <div class="h-[100px] bg-[#fff] flex items-center justify-between w-[1200px]"
  6. style="border-bottom: 1px solid #E1E1E1;">
  7. <!-- 头部title -->
  8. <div class="flex items-center cursor-pointer" @click="titlebtn">
  9. <img src="~/public/favicon.ico" class="w-[50px] h-[50px] mr-[10px]" alt="">
  10. <div class="flex flex-col">
  11. <span class="text-[#333333] text-[24px] font-medium">惠融易客</span>
  12. <span class="text-[16px] font-light">
  13. HUIRONG CRM
  14. </span>
  15. </div>
  16. </div>
  17. <!-- 右边 -->
  18. <ul class='flex items-center'>
  19. <li v-for="i in headerTitle" :key="i.go" @mouseenter="mouseenterFn(i.go)" @mouseleave="mouseleaveFn"
  20. :class="headerClass == i.go ? 'text-[#1f4df5!important]' : ''" @click="titleRight(i.go)"
  21. class="pr-[70px] text-[#999999] cursor-pointer text-[18px]">
  22. {{ i.title }}
  23. </li>
  24. <li class="px-[16px] text-[#999999] font-medium" @click="loginBtn">
  25. <!-- <n-button type="info" class="bg-[#165DFF] text-[18px] w-[130px] h-[42px]" style="border-radius: 6px;" >
  26. 登录/注册
  27. </n-button> -->
  28. <van-button type="primary"> 登录/注册</van-button>
  29. </li>
  30. </ul>
  31. </div>
  32. <div class="flex-[1]">
  33. </div>
  34. </div>
  35. <div class="flex w-full flex-col items-center justify-center mt-[100px]">
  36. <h1 class="my-[20px] font-black text-[30px]">
  37. {{title}}
  38. </h1>
  39. <!-- <div > -->
  40. <p v-html="list" class="w-[1000px] h-[80vh] overflow-y-scroll">
  41. </p>
  42. <!-- </div> -->
  43. </div>
  44. <div class="w-full bg-[#1f1d2a] pt-[20px] pb-[10px] relative" id="contact">
  45. <div class="w-[1200px] m-auto">
  46. <div class="flex justify-between my-[20px]">
  47. <!-- 左侧 -->
  48. <div class="flex">
  49. <!-- 左边 -->
  50. <div class="flex flex-col text-[#999999] mr-[30px]">
  51. <h3 class="text-[17px] font-medium text-[#fff]">
  52. 联系方式
  53. </h3>
  54. <span class="text-[13px] mt-[20px]">
  55. 客服邮箱:kefu@hrshuke.com
  56. </span>
  57. <span class="text-[13px] my-[20px]">
  58. 客户投诉:400-003-9350
  59. </span>
  60. <span class="text-[13px]">
  61. 商务合作:17723267692(微信同号)
  62. </span>
  63. </div>
  64. <!-- 地址 -->
  65. <div class="text-[#999999]">
  66. <h3 class="text-[17px] font-medium mb-[20px] text-[#fff]">
  67. 公司地址
  68. </h3>
  69. <span class="text-[13px]">
  70. 重庆市两江新区大竹林街道清枫北路10号3幢双子座A座1406
  71. </span>
  72. </div>
  73. </div>
  74. <!-- 二维码 -->
  75. <div class="flex items-center justify-center">
  76. <div class="flex flex-col items-center justify-center ml-" v-if="bottomCode.wxQrUrl">
  77. <!-- <div class="flex flex-col items-center justify-center"> -->
  78. <span class="text-[#fff] text-[17px] mb-[20px]">
  79. 关注公众号
  80. </span>
  81. <n-popover trigger="hover">
  82. <template #trigger>
  83. <img :src="bottomCode.wxQrUrl" class="w-[100px] h-[100px]" alt="">
  84. </template>
  85. <img :src="bottomCode.wxQrUrl" class="w-[200px] h-[200px]" alt="">
  86. </n-popover>
  87. </div>
  88. <div class="flex flex-col items-center justify-center mx-[50px]" v-if="bottomCode.iosQrUrl">
  89. <span class="text-[#fff] text-[17px] mb-[20px]">
  90. iosAPP下载
  91. </span>
  92. <n-popover trigger="hover">
  93. <template #trigger>
  94. <img :src="bottomCode.iosQrUrl" class="w-[100px] h-[100px]" alt="">
  95. </template>
  96. <img :src="bottomCode.wxQrUrl" class="w-[200px] h-[200px]" alt="">
  97. </n-popover>
  98. </div>
  99. <div class="flex flex-col items-center justify-center" v-if="bottomCode.androidQrUrl">
  100. <!-- <div class="flex flex-col items-center justify-center"> -->
  101. <span class="text-[#fff] text-[17px] mb-[20px]">
  102. 安卓APP下载
  103. </span>
  104. <n-popover trigger="hover">
  105. <template #trigger>
  106. <img :src="bottomCode.androidQrUrl" class="w-[100px] h-[100px]" alt="">
  107. </template>
  108. <img :src="bottomCode.androidQrUrl" class="w-[200px] h-[200px]" alt="">
  109. </n-popover>
  110. </div>
  111. </div>
  112. </div>
  113. <!-- 备案号 -->
  114. <div class="h-[154px] flex flex-col items-center justify-center text-[#585667] text-[13px] py-[60px]">
  115. <div class="pt-[30px]">
  116. <span>Copyright © 2023 重庆惠融数字科技有限公司版权所有</span>
  117. <span class="mx-[5px] cursor-pointer">
  118. <a href="https://beian.miit.gov.cn/#/Integrated/index" target="_blank" class="text-[#585667!important]">渝ICP备2023000211号-4</a>
  119. </span>
  120. <span class="mx-[10px]">
  121. 营业执照:91500000MA5UJ59N6Q
  122. </span>
  123. </div>
  124. <div class="my-[20px]">
  125. 违法和不良信息举报邮箱:kefu@hrshuke.com
  126. </div>
  127. <div>
  128. <span class="ml-[20px] mr-[5px] cursor-pointer">
  129. <a href="https://www.beian.gov.cn/portal/registerSystemInfo?recordcode=50019002503593#" target="_blank" class="text-[#585667!important]">联网备案号:50019002503593</a>
  130. </span>
  131. <span class="cursor-pointer">
  132. <a href="https://www.12377.cn/" target="_blank" class="text-[#585667!important]">中国互联网违法和不良信息举报中心</a>
  133. </span>
  134. </div>
  135. </div>
  136. </div>
  137. <div class="absolute bottom-[140px] left-0 w-full">
  138. <div class="w-full h-0 opacity-[1] border-[0.5px] border-[#2B374A]">
  139. </div>
  140. </div>
  141. </div>
  142. <n-modal v-model:show="showModal" class="modalCss">
  143. <n-card style="width: 800px" title="申请试用" :bordered="false" size="huge" role="dialog" aria-modal="true">
  144. <div class="text-[#999999] text-[18px] pt-[15px] pb-[12px]">
  145. 为了我们能更好的服务您,请您填写以下信息,如遇到问题,请您拨打免费服务热线
  146. </div>
  147. <n-form ref="formRef" :model="customer" :rules="rules">
  148. <n-form-item path="companyName" label="公司名称">
  149. <n-input v-model:value="customer.companyName" @keydown.enter.prevent class="h-[55px] leading-[55px]"
  150. placeholder="请输入公司名称" />
  151. </n-form-item>
  152. <n-form-item path="city" label="所在城市">
  153. <n-input v-model:value="customer.city" class="h-[55px] leading-[55px]" placeholder="请选择所在城市" />
  154. <!-- <n-cascader v-model:value="customer.city" placeholder="请选择所在城市" class="h-[55px] leading-[55px]"
  155. :options="provice" check-strategy="child" :show-path="true" value-field="name" label-field="name" @update:value="handleUpdateValue"
  156. /> -->
  157. </n-form-item>
  158. <n-form-item path="customName" label="姓名">
  159. <n-input v-model:value="customer.customName" class="h-[55px] leading-[55px]" placeholder="请输入姓名" />
  160. </n-form-item>
  161. <n-form-item path="phone" label="联系方式">
  162. <n-input v-model:value="customer.phone" class="h-[55px] leading-[55px]" placeholder="请输入联系方式" />
  163. </n-form-item>
  164. <n-form-item path="verifyCode" label="验证码" class="">
  165. <n-input v-model:value="customer.verifyCode" class="h-[55px] leading-[55px]" placeholder="请输入验证码" />
  166. <n-button type="info" class="w-[150px] h-[55px] text-[#fff] bg-[#1f4df5] ml-[20px] rounded-[4px] text-[18px]"
  167. :disabled="countdown != 0" @click="verifyCodeFn">
  168. {{ countdown == 0 ? '获取验证码' : countdown }}
  169. </n-button>
  170. </n-form-item>
  171. <div class="flex justify-center mt-[20px] submission">
  172. <n-button type="info" class="w-[700px] h-[55px] text-[20px] text-[#fff] bg-[#1f4df5] rounded-[4px]"
  173. @click="handleValidateButtonClick">
  174. 立即提交
  175. </n-button>
  176. </div>
  177. </n-form>
  178. </n-card>
  179. </n-modal>
  180. </template>
  181. <script lang="ts" setup>
  182. import {
  183. FormRules,
  184. useMessage,
  185. FormInst,
  186. } from 'naive-ui'
  187. import { postListData, downInfo, sendSms, postCustomer } from '~/server/api/index'
  188. import axios from 'axios'
  189. const message = useMessage()
  190. let list = ref('')
  191. let title =ref('')
  192. const postListIDFn = async () => {
  193. localStorage.getItem('hryk-id')
  194. // console.log('localStorage.getItem',localStorage.getItem('hryk-id'))
  195. let z: any = await axios.get(`https://official.webapi.bicredit.xin/api/news/detail/${localStorage.getItem('hryk-id')}`)
  196. console.log('zzz', z)
  197. // if(z.msg == '成功'){
  198. list.value = z.data.data.content
  199. title.value =z.data.data.title
  200. // console.log('list',list.value)
  201. // }
  202. }
  203. postListIDFn()
  204. const headerTitle = reactive([
  205. {
  206. title: '首页',
  207. go: 'home'
  208. },
  209. {
  210. title: '解决方案',
  211. go: 'solution'
  212. },
  213. {
  214. title: '联系我们',
  215. go: 'contact'
  216. },
  217. {
  218. title: '申请试用',
  219. go: 'probation'
  220. }
  221. ]
  222. )
  223. const headerClass = ref<string>('')
  224. const titleRight = (i: string) => {
  225. if (i == 'probation') {
  226. btn()
  227. return
  228. }
  229. console.log('iii',i)
  230. // document.querySelector('#' + i)?.scrollIntoView()
  231. localStorage.setItem('entryPage',i)
  232. history.back()
  233. }
  234. const mouseenterFn = (i: string) => {
  235. // console.log('mouseenterFn')
  236. headerClass.value = i
  237. }
  238. const mouseleaveFn = () => {
  239. headerClass.value = ''
  240. }
  241. const loginBtn = () => {
  242. console.log('跳转')
  243. // window.location.replace('http://p.daicrm.com/#/login')
  244. window.open('http://p.daicrm.com/#/login')
  245. // window.location.href('http://p.daicrm.com/#/login')
  246. }
  247. const titlebtn =()=>{
  248. history.back()
  249. }
  250. // 框显示隐藏
  251. let showModal = ref<boolean>(false)
  252. const rules: FormRules = {
  253. companyName: [
  254. {
  255. required: true,
  256. trigger: ['blur', 'input'],
  257. message: '请输入公司名称'
  258. }
  259. ],
  260. customName: [
  261. {
  262. required: true,
  263. trigger: ['blur', 'input'],
  264. message: '请输入姓名'
  265. }
  266. ],
  267. city: [
  268. {
  269. required: true,
  270. trigger: ['blur', 'input'],
  271. message: '请选择所在城市'
  272. }
  273. ],
  274. phone: [
  275. {
  276. required: true,
  277. trigger: ['blur', 'input'],
  278. message: '请输入手机号'
  279. }
  280. ],
  281. verifyCode: [
  282. {
  283. required: true,
  284. trigger: ['blur', 'input'],
  285. message: '请输入验证码'
  286. }
  287. ],
  288. }
  289. interface customerType {
  290. sceneType?: string;
  291. companyName?: null | string;
  292. customName?: null | string;
  293. city?: null | string;
  294. phone?: null | string;
  295. verifyCode?: null | string;
  296. channel?: number;
  297. }
  298. let countdown = ref(0)
  299. const customer = ref<customerType>({
  300. sceneType: "loanofficial", // 场景
  301. companyName: null,// 公司名称
  302. customName: null, // 姓名
  303. city: null, // 所在城市
  304. phone: null, // 手机号
  305. verifyCode: null, //验证码
  306. channel: 16, //pc官网16 手机端17
  307. })
  308. const verifyCodeFn = async () => {
  309. if (customer.value.phone) {
  310. if (new RegExp('^1[0-9]{10}$').test(customer.value.phone)) {
  311. let z = await sendSms({
  312. sceneType: "loanofficial",
  313. userMobile: customer.value.phone
  314. })
  315. if (z.data.code == 0) {
  316. message.success('发送成功')
  317. countdown.value = 60
  318. // this.countDown()
  319. countDown()
  320. // console.log('进来了', this.countdown)
  321. } else {
  322. message.error('发送失败')
  323. }
  324. } else {
  325. message.error('请输入正确手机号')
  326. }
  327. } else {
  328. // 唤起提示
  329. message.error('请输入手机号')
  330. }
  331. }
  332. const intervalBtn = ref()
  333. // 倒计时
  334. const countDown = () => {
  335. // 设置倒计时
  336. intervalBtn.value = setInterval(() => {
  337. if (countdown.value == 1) {
  338. // 清除定时器
  339. clearInterval(intervalBtn.value)
  340. // 重置倒计时状态
  341. countdown.value = 1
  342. };
  343. // 倒计时
  344. countdown.value--
  345. }, 1000)
  346. }
  347. const formRef = ref<FormInst | null>(null)
  348. const handleValidateButtonClick = (e: MouseEvent) => {
  349. e.preventDefault()
  350. formRef.value?.validate(async (errors) => {
  351. if (!errors) {
  352. message.success('验证成功')
  353. console.log('customer.value', customer.value)
  354. let z = await postCustomer(customer.value)
  355. console.log('zzz', z)
  356. if (z.data.msg == '成功') {
  357. // 关闭页面
  358. fouse()
  359. }
  360. } else {
  361. console.log(errors)
  362. message.error('验证失败')
  363. }
  364. })
  365. }
  366. const fouse = () => {
  367. showModal.value = false
  368. }
  369. const btn = () => {
  370. customer.value = {
  371. sceneType: "loanofficial", // 场景
  372. companyName: null,// 公司名称
  373. customName: null, // 姓名
  374. city: null, // 所在城市
  375. phone: null, // 手机号
  376. verifyCode: null, //验证码
  377. channel: 16, //pc官网16 手机端17
  378. }
  379. clearInterval(intervalBtn.value)
  380. countdown.value = 0
  381. showModal.value = true
  382. }
  383. let bottomCode: any = ref([])
  384. const downInfoFn = async () => {
  385. const list = await downInfo()
  386. console.log('list', list)
  387. bottomCode.value = list.data.data
  388. }
  389. downInfoFn()
  390. </script>
  391. <style scoped lang="scss">
  392. .num-item {
  393. border-radius: 4px;
  394. width: 50px;
  395. height: 60px;
  396. margin: 10px;
  397. background: linear-gradient(0deg, rgb(255, 255, 255) 0%, rgba(244, 244, 255, 0.961) 50%, rgb(255, 255, 255) 100%);
  398. font-size: 36px;
  399. color: #fff;
  400. }
  401. .trial {
  402. background: url(~/public/image/try_out.png) no-repeat;
  403. background-size: cover;
  404. }
  405. .advantage {
  406. background: url(~/public/image/advantage.png) no-repeat;
  407. background-size: cover;
  408. }
  409. img {
  410. height: 100%;
  411. }
  412. .n-carousel {
  413. width: 529px !important;
  414. }
  415. .carousel-img {
  416. width: 509px;
  417. height: 306px;
  418. border-radius: 4px;
  419. }
  420. .custom-dots {
  421. display: flex;
  422. margin: 0;
  423. padding: 0;
  424. }
  425. .custom-dots li {
  426. display: inline-block;
  427. width: 20px;
  428. height: 4px;
  429. margin: 0 5px;
  430. // border-radius: 4px;
  431. background: #0000001d;
  432. transition: width 0.3s, background-color 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  433. cursor: pointer;
  434. }
  435. .custom-dots li.is-active {
  436. width: 40px;
  437. background: #0047FF;
  438. }
  439. .text1 {
  440. display: inline-block;
  441. white-space: nowrap;
  442. width: 300px;
  443. overflow: hidden;
  444. text-overflow: ellipsis;
  445. }
  446. ::v-deep(.n-button) {
  447. border-radius: 4px !important;
  448. }
  449. // 框
  450. ::v-deep(.n-card-header__main) {
  451. flex: inherit !important;
  452. margin: 0 auto !important;
  453. }
  454. ::v-deep(.n-card-header) {
  455. padding: 0 !important;
  456. padding-top: 50px !important;
  457. }
  458. ::v-deep(.n-card__content) {
  459. flex: inherit;
  460. margin: 0 auto;
  461. margin-bottom: 50px !important;
  462. }
  463. ::v-deep(.n-form-item-label) {
  464. display: none !important;
  465. }
  466. ::v-deep(.n-form-item) {
  467. --n-label-height: 10px !important;
  468. }
  469. ::v-deep(.n-carousel__dots) {
  470. display: none !important;
  471. }
  472. ::v-deep(.n-input__input-el) {
  473. height: 55px !important;
  474. line-height: 55px !important;
  475. }
  476. ::v-deep(.n-card-header__main) {
  477. font-size: 30px;
  478. }
  479. // 按钮样式
  480. ::v-deep(.van-button--normal) {
  481. border-radius: 6px;
  482. background: #0047FF;
  483. border: 0;
  484. height: 67px;
  485. }
  486. .trial ::v-deep(.van-button--normal) {
  487. border-radius: 6px;
  488. background: #0047FF;
  489. border: 0;
  490. width: 400px;
  491. height: 67px;
  492. }
  493. ::v-deep(.van-button__content) {
  494. font-size: 24px;
  495. }
  496. .title ::v-deep(.van-button--normal) {
  497. border-radius: 6px;
  498. background: #0047FF;
  499. border: 0;
  500. width: 130px;
  501. height: 42px;
  502. }
  503. .title ::v-deep(.van-button__content) {
  504. font-size: 16px;
  505. }
  506. .message ::v-deep(.van-button--normal) {
  507. border-radius: 6px;
  508. background: #0047FF;
  509. border: 0;
  510. width: 130px;
  511. height: 42px;
  512. }
  513. .message ::v-deep(.van-button__content) {
  514. font-size: 16px;
  515. }
  516. .modalCss ::v-deep(.n-button) {
  517. border-radius: 4px !important;
  518. height: 55px !important;
  519. }
  520. .submission ::v-deep(.n-button) {
  521. width: 700px !important;
  522. }
  523. </style>