This commit is contained in:
@zuopngfei 2025-06-16 19:01:34 +08:00
parent ad74161e4d
commit 61eeaf35b8
427 changed files with 21458 additions and 0 deletions

7
.env.development Normal file
View File

@ -0,0 +1,7 @@
NODE_ENV = development
//VUE_APP_BASEURL = 'http://huhang-admin.mujiwork.cn'
VUE_APP_BASEURL = '/api'
VUE_APP_CDN = './'

7
.env.muji Normal file
View File

@ -0,0 +1,7 @@
NODE_ENV = muji
//VUE_APP_BASEURL = 'http://huhang-admin.mujiwork.cn'
VUE_APP_BASEURL = 'https://hadmin.mujiwork.cn/'
VUE_APP_CDN = 'https://cdn.mujiwork.com/huhang/mobile/'

5
.env.production Normal file
View File

@ -0,0 +1,5 @@
NODE_ENV = production
VUE_APP_BASEURL = ''
VUE_APP_CDN = 'https://img.novots.com/huhang/mobile/'

7
.env.test Normal file
View File

@ -0,0 +1,7 @@
NODE_ENV = test
//VUE_APP_BASEURL = 'http://huhang-admin.mujiwork.cn'
VUE_APP_BASEURL = 'http://dev.novots.com'
VUE_APP_CDN = 'http://cdn.mujiwork.com/huhang/mobile/'

14
.eslintrc.js Normal file
View File

@ -0,0 +1,14 @@
// @see https://eslint.bootcss.com/docs/rules/
module.exports = {
rules: {
"vue/multi-word-component-names": "off"
},
parserOptions: {
parser: "babel-eslint",
ecmaVersion: 2017,
sourceType: "module",
allowImportExportEverywhere: true,
codeFrame: false, // 关闭解析错误提示
}
};

23
.gitignore vendored Normal file
View File

@ -0,0 +1,23 @@
.DS_Store
node_modules
/dist
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

5
babel.config.js Normal file
View File

@ -0,0 +1,5 @@
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset'
]
}

19
jsconfig.json Normal file
View File

@ -0,0 +1,19 @@
{
"compilerOptions": {
"target": "es5",
"module": "esnext",
"baseUrl": "./",
"moduleResolution": "node",
"paths": {
"@/*": [
"src/*"
]
},
"lib": [
"esnext",
"dom",
"dom.iterable",
"scripthost"
]
}
}

63
package.json Normal file
View File

@ -0,0 +1,63 @@
{
"name": "website",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint",
"devBuild": "vue-cli-service build --mode development",
"testBuild": "vue-cli-service build --mode test",
"prodBuild": "vue-cli-service build --mode production",
"mjBuild": "vue-cli-service build --mode muji"
},
"dependencies": {
"axios": "^1.6.2",
"babel-polyfill": "^6.26.0",
"classlist-polyfill": "^1.2.0",
"core-js": "^3.8.3",
"element-ui": "^2.15.14",
"moment": "^2.29.4",
"vant": "^2.12.47",
"vue": "^2.6.14",
"vue-amap": "^0.5.10",
"vue-awesome-swiper": "^4.0.1",
"vue-lazyload": "^1.3.3",
"vue-meta-info": "^0.1.7",
"vue-router": "^3.0.3"
},
"devDependencies": {
"@babel/core": "^7.12.16",
"@babel/eslint-parser": "^7.12.16",
"@vue/cli-plugin-babel": "~5.0.0",
"@vue/cli-plugin-eslint": "~5.0.0",
"@vue/cli-service": "~5.0.0",
"eslint": "^7.32.0",
"eslint-plugin-vue": "^8.0.3",
"less": "^3.9.0",
"less-loader": "^5.0.0",
"sass": "^1.69.5",
"sass-loader": "^13.3.2",
"swiper": "^2.7.6",
"vue-template-compiler": "^2.6.14"
},
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/essential",
"eslint:recommended"
],
"parserOptions": {
"parser": "@babel/eslint-parser"
},
"rules": {}
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead"
]
}

69
public/index.html Normal file
View File

@ -0,0 +1,69 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>护航科技股份有限公司】—IT外包|IT服务|IT运维|helpdesk|IT基础架构服务|IT巡检|IT维护</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">
<meta name="theme-color" content="#000000" />
<meta data-vue-meta-info="true" name="keywords" content="桌面运维、运维外包、桌面外包、网络安全、服务外包、网络运维、网络维护、设备维护">
<meta data-vue-meta-info="true" name="description" content="护航科技股份有限公司专注于全方位的IT服务包括IT外包IT运维helpdesk基础架构系统集成、自有产品研发和行业应用解决方案等已成为客户最信赖、最具实力的IT合作伙伴。">
<!-- <link rel="stylesheet" href="//at.alicdn.com/t/font_3151601_c8vop7v9ce.css"> -->
<script>
// 异步统计
!function(p){"use strict";!function(t){var s=window,e=document,i=p,c="".concat("https:"===e.location.protocol?"https://":"http://","sdk.51.la/js-sdk-pro.min.js"),n=e.createElement("script"),r=e.getElementsByTagName("script")[0];n.type="text/javascript",n.setAttribute("charset","UTF-8"),n.async=!0,n.src=c,n.id="LA_COLLECT",i.d=n;var o=function(){s.LA.ids.push(i)};s.LA?s.LA.ids&&o():(s.LA=p,s.LA.ids=[],o()),r.parentNode.insertBefore(n,r)}()}({id:"JcsxVtY54HXCV46t",ck:"60480",hashMode: true});
</script>
<!-- <script>
// 异步监控
!(function(c,i,e,b){
var h=i.createElement("script");
var f=i.getElementsByTagName("script")[0];
h.type="text/javascript";
h.crossorigin=true;
h.onload=function(){new c[b]["Monitor"]().init({id:"JbE5xTdZzGZkNCMX"});};
f.parentNode.insertBefore(h,f);h.src=e;})(window,document,"https://sdk.51.la/perf/js-sdk-perf.min.js","LingQue");
</script> -->
<!-- 同步监控 -->
<script src="https://sdk.51.la/perf/js-sdk-perf.min.js" crossorigin="anonymous"></script>
<script>
new LingQue.Monitor().init({id:"JcsxVtY54HXCV46t",sendSuspicious:true,sendSpaPv:true});
</script>
</head>
<body class="my">
<div id="app"></div>
</body>
<!-- 手淘适配方案 -->
<script>
!function (e, t) {
var n = t.documentElement,
d = e.devicePixelRatio || 1;
function i() {
var e = document.body.clientWidth / 7.5;
n.style.fontSize = e + "px"
}
if (
function e() {
t.body ? t.body.style.fontSize = "16px" : t.addEventListener("DOMContentLoaded", e)
// t.body ? '' : t.addEventListener("DOMContentLoaded", e)
}(),
i(),
e.addEventListener("resize", i), e.addEventListener("pageshow",
function (e) {
e.persisted && i()
}),
2 <= d
) {
var o = t.createElement("body"),
a = t.createElement("div");
a.style.border = ".5px solid transparent",
o.appendChild(a),
n.appendChild(o),
1 === a.offsetHeight && n.classList.add("hairlines"),
n.removeChild(o)
}
}(window, document)
</script>
</html>

25
src/App.vue Normal file
View File

@ -0,0 +1,25 @@
<script setup >
// This starter template is using Vue 3 <script setup> SFCs
// Check out https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup
// import HelloWorld from './components/HelloWorld.vue'
</script>
<template>
<!-- <img alt="Vue logo" src="./assets/logo.png" /> -->
<!-- <HelloWorld msg="Hello Vue 3 + TypeScript + Vite" /> -->
<router-view></router-view>
</template>
<style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
/* text-align: center; */
/* color: #2c3e50; */
/* margin-top: 60px; */
height: 100%;
overflow-x: hidden;
}
</style>

View File

@ -0,0 +1,59 @@
@font-face {
font-family: "iconfont"; /* Project id 2914224 */
src: url('//at.alicdn.com/t/font_2914224_y82ol8e100h.woff2?t=1637303909890') format('woff2'),
url('//at.alicdn.com/t/font_2914224_y82ol8e100h.woff?t=1637303909890') format('woff'),
url('//at.alicdn.com/t/font_2914224_y82ol8e100h.ttf?t=1637303909890') format('truetype'),
url('//at.alicdn.com/t/font_2914224_y82ol8e100h.svg?t=1637303909890#iconfont') format('svg');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-hezuoshengtai:before {
content: "\e6c3";
}
.icon-jichujiagoupingtai:before {
content: "\e6c4";
}
.icon-fuwuguanlitixijianshe:before {
content: "\e6c5";
}
.icon-xiangxia:before {
content: "\e6c6";
}
.icon-kehuwendangzhongxin:before {
content: "\e6c7";
}
.icon-kehuanli:before {
content: "\e6c8";
}
.icon-jichengyushishifuwu:before {
content: "\e6c9";
}
.icon-ITSS:before {
content: "\e6ca";
}
.icon-xinxianquantixijianshe:before {
content: "\e6cb";
}
.icon-yunfuwu:before {
content: "\e6cc";
}
.icon-ITSSpeixunfuwu:before {
content: "\e6cd";
}

114
src/assets/css/index.css Normal file
View File

@ -0,0 +1,114 @@
* {
margin: 0;
padding: 0;
box-sizing: border-box;
/* font-size: 14px; */
font-family: Avenir, Helvetica, Arial, sans-serif;
}
html {
height: 100%;
background-color: #f1f4fa;
}
body {
height: 100%;
max-width: 750px;
margin: 0 auto!important;
color: #303133;
}
div,
ul,
li,h1,h2,h3,h4,h5,h6,p {
box-sizing: border-box;
position: relative;
z-index: 1;
}
li {
list-style: none;
}
.main-container {
font-size: 0.18rem;
}
.admin-container {
padding: 20px;
background-color: #fff;
font-size: 16px;
}
.container-centent{
padding: 0 .26rem;
}
.title-sub{
text-align: center;
font-size: .38rem;
font-weight: 500;
color: #001D2D;
line-height: .62rem;
margin-bottom: .4rem;
}
.title-sub span{
display: inline-block;
width: .36rem;
height: .36rem;
position: relative;
top: .04rem;
}
.title-sub span:first-child{
background: #E1EAFD;
}
.title-sub span:last-child{
background: #ECF4E3;
}
.custom-indicator {
position: absolute;
right: 5px;
bottom: 5px;
padding: 2px 5px;
font-size: 12px;
color: #fff;
background: rgba(0, 0, 0, 0.1);
}
.title-sub2{
text-align: left;
font-size: .32rem;
margin-bottom: .16rem;
margin-top: .3rem;
}
.title-sub2 span{
width: .32rem;
height: .32rem;
top: .06rem;
}
.html-content{
width: 100%;
}
.html-content img{
max-width: 100%;
height: auto;
}
.html-content p{
max-width: 100%;
/* line-height: .44rem; */
}
.span-class{
font-size: .4rem;
color: #12BEC3;
font-weight: bold;
}
.span-class-i{
color: #12BEC3;
}
.my-loading .el-icon-loading{
font-size: 40px;
}

BIN
src/assets/image/hu_rq.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

BIN
src/assets/image/icon_r.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 B

BIN
src/assets/image/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

BIN
src/assets/image/user.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

@ -0,0 +1,6 @@
import Vue from 'vue';
// 使用 Event Bus
const bus = new Vue();
export default bus;

1
src/assets/js/fitter.js Normal file
View File

@ -0,0 +1 @@

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

174
src/components/Footer.vue Normal file
View File

@ -0,0 +1,174 @@
<template>
<div class="footer-container">
<div class="footer-box">
<van-row gutter="10">
<van-col span="8">
<div class="footer-nav">
<span>公司介绍</span>
<ul>
<li @click="goLink('/about')">公司概况</li>
<li @click="goLink('/about')">发展历程</li>
<li @click="goLink('/index_2')">荣誉资质</li>
</ul>
</div>
<div class="footer-nav">
<span>公司动态</span>
<ul>
<li @click="goLink('/about_2')">新闻</li>
<li @click="goLink('/apply')">案例</li>
</ul>
</div>
<div class="footer-nav">
<span>加入我们</span>
<ul>
<li @click="goLink('/about_3')">社会招聘</li>
<li @click="goLink('/about_3')">校园招聘</li>
<li @click="goLink('/it3')">ITSS培训</li>
</ul>
</div>
</van-col>
<van-col span="16" style="text-align: right;">
<div class="footer-call">
<ul>
<li>售前咨询热线 &nbsp;&nbsp;&nbsp; 400-612-6010</li>
<li>售后投诉热线 &nbsp;&nbsp;&nbsp; 400-612-6010</li>
<li>ITSS课程咨询 &nbsp;&nbsp;&nbsp; 400-612-6010</li>
<li>邮箱 &nbsp;&nbsp;&nbsp; marketing@novots.com</li>
</ul>
</div>
<div class="hu-rq">
<img src="../assets/image/hu_rq.png" />
<div>搜索护航科技或扫码<br />关注护航科技了解更多信息</div>
</div>
</van-col>
</van-row>
</div>
<div class="footer_mian">
<span class="fl"
><a href="https://beian.miit.gov.cn/" target="blank"
> ICP备13007157号 </a
> 公网安备110108400789号</span
>
<br />
<span class="fl">
版权所有 护航科技
<font>Copyright © Novots Technologies Limited All Right Reserved</font>
</span>
</div>
</div>
</template>
<script>
export default {
components: {
// Fold,
// Expand,
},
data() {
return {
actIndex: "",
};
},
created() {
this.actIndex = this.$router.path;
},
methods: {
goLink(path) {
this.$router.push(path);
},
},
};
</script>
<style lang="less" scoped>
.footer-container {
overflow: hidden;
padding: 0.36rem;
background-color: #25283b;
// text-align: center;
z-index: 0;
.footer_mian {
border-top: 1px solid rgba(255,255,255,0.6);
padding-top: 20px;
color: #fff;
margin-top: 10px;
line-height: 22px;
font-size: 14px;
span {
color: #fff;
a {
color: #fff;
text-decoration: underline;
}
}
}
}
.footer-box {
// width: auto;
overflow: hidden;
.hu-rq {
// position: absolute;
// right: 0;
// top: 0;
display: inline-block;
margin-top: .3rem;
text-align: center;
img {
width: 2.4rem;
}
div {
font-size: 0.28rem;
font-weight: 400;
color: #ffffff;
line-height: 0.44rem;
margin-top: 0.24rem;
}
}
.footer-nav {
text-align: left;
margin-bottom: 0.3rem;
span {
font-size: 0.32rem;
// font-weight: 600;
color: #ffffff;
margin-bottom: 0.1rem;
display: block;
// line-height: .32rem;
}
ul {
padding-top: 0.08rem;
}
li {
font-size: 0.28rem;
font-weight: 400;
color: #ffffff;
line-height: 0.44rem;
opacity: 0.8;
cursor: pointer;
// margin-bottom: .18rem;
}
}
.footer-call {
margin-right: 0;
margin-top: .1rem;
display: inline-block;
// display: flex;
// align-items: center;
// height: 1.6rem;
ul {
}
li {
font-size: 0.26rem;
font-weight: 400;
color: #ffffff;
line-height: 0.32rem;
opacity: 0.8;
margin-bottom: 0.18rem;
text-align: left;
}
}
}
</style>

250
src/components/Form.vue Normal file
View File

@ -0,0 +1,250 @@
<template>
<div class="index-form">
<!-- <div class="hu-it">
项目咨询<br />
PROJECT CONSULTING
</div> -->
<div class="server">
<h3>项目咨询</h3>
<p class="sub">PROJECT CONSULTING</p>
<van-form @submit="onSubmit">
<van-field
v-model="form.need"
label="需求"
name="need"
placeholder=""
type="textarea"
:rules="[{ required: true, message: '请填写您的需求' }]"
/>
<van-field
v-model="form.name"
name="name"
label="姓名"
placeholder=""
:rules="[{ required: true, message: '请填写您的姓名' }]"
/>
<van-field
v-model="form.email"
name="email"
label="邮箱"
placeholder=""
:rules="[{ required: true, message: '请填写您的邮箱' }]"
/>
<van-field
v-model="form.phone"
name="phone"
label="联系电话"
placeholder=""
:rules="[{ required: true, message: '请填写您的联系电话' }]"
/>
<van-field
v-model="form.city"
name="city"
label="省份"
placeholder=""
:rules="[{ required: true, message: '请填写您所在省份' }]"
/>
<van-field
v-model="form.company"
name="company"
label="公司名称"
placeholder=""
:rules="[{ required: true, message: '请填写您的公司名称' }]"
/>
<van-field
v-model="form.postion"
name="postion"
label="职务"
placeholder=""
:rules="[{ required: true, message: '请填写您的职务' }]"
/>
<div style="margin-left: 16px; margin-top: 0.3rem">
<van-checkbox
v-model="checked"
shape="square"
icon-size=".30rem"
checked-color="#39a9ed"
style="margin-bottom: 0.12rem"
>我已阅读护航科技公司用户协议隐私政策</van-checkbox
>
<van-checkbox
v-model="checked2"
shape="square"
icon-size=".30rem"
checked-color="#39a9ed"
>愿意通过电子邮件接收来自护航科技的咨询和信息</van-checkbox
>
</div>
<div style="margin: 16px">
<van-button round block type="info" native-type="submit"
>联系我们</van-button
>
</div>
</van-form>
</div>
</div>
</template>
<script>
import api from "@/http/api";
export default {
data() {
return {
checked: true,
checked2: true,
form: {
need: "",
name: "",
email: "",
phone: "",
city: "",
company: "",
postion: "",
form: 1,
},
};
},
mounted() {},
methods: {
onSubmit(values) {
console.log("submit", values);
api.postDate(this.form).then(() => {
Toast.success("提交成功");
// this.$message({
// type: "success",
// message: ``,
// });
});
},
// save() {
// if (this.form.need == "") {
// this.$message({
// type: "warning",
// message: ``,
// });
// return;
// }
// if (this.form.name == "") {
// this.$message({
// type: "warning",
// message: ``,
// });
// return;
// }
// if (this.form.email == "") {
// this.$message({
// type: "warning",
// message: ``,
// });
// return;
// }
// if (this.form.phone == "") {
// this.$message({
// type: "warning",
// message: ``,
// });
// return;
// }
// if (this.form.city == "") {
// this.$message({
// type: "warning",
// message: ``,
// });
// return;
// }
// if (this.form.company == "") {
// this.$message({
// type: "warning",
// message: ``,
// });
// return;
// }
// if (this.form.postion == "") {
// this.$message({
// type: "warning",
// message: ``,
// });
// return;
// }
// api.postDate(this.form).then(() => {
// this.$message({
// type: "success",
// message: ``,
// });
// });
// },
},
};
</script>
<style lang="less" scoped>
.index-form {
// padding: 0.5rem 1.2rem 0.65rem 1.2rem;
.server {
margin-top: 0.6rem;
position: relative;
h3 {
font-size: 0.45rem;
text-align: center;
letter-spacing: 0.04rem;
margin-bottom: 0.16rem;
color: #303133;
}
.sub{
font-size: .32rem;
color: #12BEC3;
text-align: center;
margin-bottom: .2rem;
}
}
.hu-it {
font-size: 0.42rem;
font-weight: 500;
color: #001d2d;
line-height: 0.62rem;
position: relative;
}
.block {
.form-item {
border-bottom: 1px solid #dadada;
height: 0.88rem;
position: relative;
span {
// font-size: .18rem;
font-weight: bold;
color: #042030;
position: absolute;
line-height: 0.88rem;
left: 0;
top: 0;
display: inline-block;
i {
position: relative;
color: #e02020;
margin-right: 0.04rem;
}
}
input {
width: 100%;
height: 100%;
border: 0;
background-color: rgba(0, 0, 0, 0);
text-indent: 1.25rem;
outline: none;
// font-size: .18rem;
}
}
}
::v-deep .van-button--info {
// background: linear-gradient(to right,var(--primary) 0%,var(--success) 100%);
background: linear-gradient(to right, #39a9ed 0%, #6eecf3 100%);
border: 0;
box-shadow: 0.06667rem 0.06667rem 0.10667rem #12bec34d,
-0.06667rem -0.06667rem 0.10667rem #fffc;
}
::v-deep van-button__text {
color: #fff;
}
}
</style>

186
src/components/Header.vue Normal file
View File

@ -0,0 +1,186 @@
<template>
<div class="header-box">
<div class="logo">
<img src="../assets/image/logo.png" @click="toLink('')" />
</div>
<div class="meun-icon">
<van-icon class="my-icon" name="wap-nav" @click="open" />
</div>
<!-- <van-popup v-model="show" position="left" :style="{ height: '100%', width: '40%' }" >
</van-popup> -->
<div class="menus" v-show="show">
<ul>
<li v-for="(item, index) in navList" :class="{active: actIndex == index}" @click="toLink(index)" >
{{item.text}}
</li>
<li :class="{active: actIndex == -1}" @click="toLink(-1)">
企业动态
</li>
</ul>
<van-icon class="my-close" name="close" @click="show = false" />
</div>
<!-- <div class="menus2" v-show="show">
<van-collapse v-model="activeName" accordion v-for="(item, index) in navList">
<van-collapse-item :title="item.text" :name="index">内容</van-collapse-item>
</van-collapse>
<van-icon class="my-close" name="close" @click="show = false" />
</div> -->
</div>
</template>
<script>
import bus from "@/assets/js/eventBus";
import api from "@/http/api";
export default {
computed: {
pathData() {
return this.$route;
},
},
data() {
return {
show: false,
activeKey: 0,
navList: JSON.parse(JSON.parse(window.localStorage.homeData)).navList,
actIndex: 0,
activeName:'',
};
},
watch: {},
methods: {
toLink(index){
this.actIndex = index;
this.show = false;
if(index == -1){
this.$router.push('/about_2')
}else{
this.navList.forEach((item, i) => {
if(i == index){
this.$router.push(item.url)
}
})
}
},
open(){
this.show = true
if(this.$route.path == '/' || '' || false){
this.actIndex = 0
return
}
if(this.$route.path == '/about_2'){
this.actIndex = -1
return
}
this.navList.forEach((item, i) => {
if(item.url == this.$route.path){
this.actIndex = i
}
})
}
},
mounted() {
console.log( JSON.parse(JSON.parse(window.localStorage.homeData)))
},
};
</script>
<style lang="less" scoped>
.header-box {
height: 100%;
.logo{
width: 2rem;
float: left;
position: relative;
height: 100%;
img{
width: 100%;
position: absolute;
top: 50%;
transform: translateY(-50%);
}
}
.meun-icon{
float: right;
position: relative;
height: 100%;
font-size: .42rem;
.my-icon{
position: relative;
top: 50%;
transform: translateY(-50%);
}
}
.menus{
position: fixed;
width: 100%;
height: 100%;
top: 0;
left: 0;
z-index: 9999;
background: rgba(255,255,255,.7);
backdrop-filter: blur(0.26667rem);
display: flex;
justify-content: center;
align-items: center;
ul{
width: 80%;
}
li{
text-align: center;
height: 0.6rem;
line-height: .6rem;
margin: 0.1rem 0;
font-size: .30rem;
}
.active{
color: #12BEC3;
}
.my-close{
position: absolute;
bottom: 2rem;
left: 50%;
transform: translateX(-50%);
font-size: .6rem;
color: #12BEC3;
}
}
.menus2{
position: fixed;
width: 100%;
height: 100%;
top: 0;
left: 0;
z-index: 9999;
background: rgba(255,255,255,.7);
backdrop-filter: blur(0.26667rem);
// display: flex;
// justify-content: center;
// align-items: center;
ul{
width: 80%;
}
li{
// text-align: center;
height: 0.6rem;
line-height: .6rem;
margin: 0.1rem 0;
font-size: .30rem;
}
.active{
color: #12BEC3;
}
.my-close{
position: absolute;
bottom: 2rem;
left: 50%;
transform: translateX(-50%);
font-size: .6rem;
color: #12BEC3;
}
}
}
</style>

156
src/components/Main.vue Normal file
View File

@ -0,0 +1,156 @@
<template>
<div class="main-container">
<div class="main-content">
<div class="header">
<Header />
</div>
<div class="content">
<keep-alive>
<router-view></router-view>
</keep-alive>
</div>
<div class="footer" v-show="isUs">
<Footer />
</div>
<div class="TABBER">
<TabBer />
</div>
<div>
<Service />
</div>
<el-dialog :visible.sync="dialogVisible" :close-on-click-modal="false" :show-close="true" width="86%" center
:lock-scroll="false" append-to-body>
<template #title>
<span style="opacity: 0;">标题</span>
</template>
<div class="dialog-content">
<h2 style="text-align: center;margin-bottom: 0.2rem;">护航科技股份有限公司严正声明</h2>
<p>
近期发现不法分子冒用我司名义通过伪造公章营业执照搭建虚假网站APP在微信群QQ群等社交平台实施诈骗诱骗公众转账此类行为已涉嫌违反中华人民共和国刑法第二百六十六条诈骗罪第二百八十条伪造变造买卖国家机关公文证件印章罪之规定不仅严重侵害我司企业名称权商标权等合法权益更对社会公众财产安全造成重大威胁
</p>
<p>我司严正声明如下</p>
<p>1护航科技从没有开发或上线过任何APP软件任何以护航科技APP名义进行谋利的软件均是骗子提醒公众切勿上当受骗</p>
<p>2从未开展任何线上线下资金募集转账交易活动</p>
<p>3官方业务仅通过官网https://www.novots.com/index</p>
<p>4正规业务资金往来均通过企业对公账户绝不要求私人转账</p>
<p>请公众通过官方渠道核实业务真实性谨防受骗如遇可疑情况请立即报警或联系我司电话400-612-6010我司将依法追究侵权者法律责任</p>
<p style="text-align: right;">护航科技股份有限公司</p>
<p style="text-align: right;">2025 年4 25 </p>
</div>
</el-dialog>
</div>
</div>
</template>
<script>
import Header from "./Header.vue";
import Footer from "./Footer.vue";
import TabBer from "./tabBer.vue";
import Service from "./Service.vue";
import api from "../http/api";
export default {
components: { Header, Footer, TabBer, Service },
data() {
return {
isUs: true,
PagekeyWords:
"桌面运维、运维外包、桌面外包、网络安全、服务外包、网络运维、网络维护、设备维护",
PageDescription:
"护航科技股份有限公司专注于全方位的IT服务包括IT外包IT运维helpdesk基础架构系统集成、自有产品研发和行业应用解决方案等已成为客户最信赖、最具实力的IT合作伙伴。",
PageTitle:
"护航科技股份有限公司】—IT外包|IT服务|IT运维|helpdesk|IT基础架构服务|IT巡检|IT维护",
dialogVisible: true,
};
},
methods: {},
computed: {
path() {
return this.$route.path;
},
},
watch: {
path(a) {
console.log(a);
if (a == "/contactUs") {
this.isUs = false;
} else {
this.isUs = true;
}
},
},
metaInfo() {
return {
title: this.PageTitle,
meta: [
{
name: "keyWords",
content: this.PagekeyWords,
},
{
name: "description",
content: this.PageDescription,
},
],
};
},
created() { },
mounted() {
api.seo().then((res) => {
console.log(res);
this.PageTitle = res.data.reseoHome.metaTitle;
this.PagekeyWords = res.data.reseoHome.metaKey;
this.PageDescription = res.data.reseoHome.metaDesc;
});
api.getHome().then((res) => {
window.localStorage.homeData = JSON.stringify(
res.data.resettingDict.settings
);
});
},
};
</script>
<style lang="less" scoped>
.main-container {
// height: 100vh;
// overflow: hidden;
font-size: 14px;
position: relative;
background-color: #fff;
padding-bottom: 1rem;
.header {
position: fixed;
top: 0;
left: 0;
width: 100%;
background: #fff;
height: 1rem;
z-index: 999;
padding: 0 0.26rem;
box-shadow: 1px 2px 10px #12bec34d, -0.06667rem -0.06667rem 0.10667rem #fffc;
}
.content {
padding-top: 1rem;
padding: 1rem 0rem 0.3rem 0rem;
min-height: 100vh;
}
.footer {
z-index: 0;
}
}
.dialog-content {
p {
line-height: 0.4rem;
text-indent: 2em;
}
}
</style>

48
src/components/NavBar.vue Normal file
View File

@ -0,0 +1,48 @@
<template>
<div>
<van-nav-bar
:title="title"
left-text="返回"
left-arrow
@click-left="onClickLeft"
/>
</div>
</template>
<script>
export default {
data() {
return {
title:''
};
},
computed:{
path(){
return this.$route.path
}
},
watch: {
path(){
this.title = this.$route.meta.title
}
},
methods: {
onClickLeft(){
this.$router.back()
},
},
mounted() {
this.title = this.$route.meta.title
// console.log(this.$route.meta.title)
},
};
</script>
<style lang="less" scoped>
</style>

View File

@ -0,0 +1,80 @@
<template>
<div>
<van-popup v-model="show" :style="{ height: '100%',width: '100%' }" class="my-popup" >
<van-icon name="close" class="my-close" @click="show = false" />
<Form />
</van-popup>
<div class="service" @click="show = true">
<div>
<img src="@/assets/image/service.png" />
<span>咨询</span>
</div>
</div>
</div>
</template>
<script>
import Form from './Form.vue';
export default {
data() {
return {
show: false
};
},
computed: {},
watch: {},
methods: {},
mounted() {
},
components: { Form }
};
</script>
<style lang="less" scoped>
.service {
position: fixed;
z-index: 999;
right: .26rem;
bottom: 1.2rem;
width: 1.04rem;
height: 1.04rem;
border-radius: 50%;
color: #fff;
background-color: #12BEC3;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0px 5px 10px 0px rgba(0, 49, 75, 0.1);
opacity: .88;
div {
text-align: center;
span {
font-size: 12px;
}
}
img {
width: .54rem;
display: block;
margin: auto;
}
}
.my-popup{
display: flex;
align-items: center;
justify-content: center;
border-radius: 8px;
.my-close{
position: absolute;
font-size: .58rem;
z-index: 999;
top: 1.5rem;
color: #6eecf3;
right: .3rem;
}
}
</style>

213
src/components/Sidebar.vue Normal file
View File

@ -0,0 +1,213 @@
<template>
<div class="sidebar">
<el-menu
active-text-color="#234883"
:default-active="actIndex"
text-color="#fff"
router
@open="handleOpen"
@close="handleClose"
:collapse="isCollapse"
background-color="rgba(0,0,0,0)"
>
<div class="logo" @click="goIndex">
<!-- <img src="../../assets/image/logo.png" /> -->
AutoMan
</div>
<el-menu-item index="/">
<div class="menu-bg">
<i class="el-icon-house"></i>
<span>首页</span>
</div>
</el-menu-item>
<el-menu-item index="/conify">
<div class="menu-bg">
<i class="el-icon-setting"></i>
<span>系统配置</span>
</div>
</el-menu-item>
<el-menu-item index="/appStore">
<div class="menu-bg">
<i class="el-icon-sold-out"></i>
<span>应用市场</span>
</div>
</el-menu-item>
<el-submenu index="1">
<template slot="title">
<i class="el-icon-user"></i>
<span>用户中心</span>
</template>
<el-menu-item index="/me">
<div class="menu-bg">我的信息</div>
</el-menu-item>
<el-menu-item index="/spread">
<div class="menu-bg">推广信息</div>
</el-menu-item>
<!-- <el-menu-item index="/">消费明细</el-menu-item> -->
</el-submenu>
<!-- <el-submenu index="2">
<template slot="title">
<i class="el-icon-service"></i>
<span>帮助中心</span>
</template>
<el-menu-item index="/">联系我们</el-menu-item>
<el-menu-item index="/">帮助文档</el-menu-item>
</el-submenu> -->
</el-menu>
</div>
</template>
<script>
// import emitter from "../../../assets/js/eventBus"
export default {
components: {},
methods: {
handleOpen(key, keyPath) {
console.log(key, keyPath);
},
handleClose(key, keyPath) {
console.log(key, keyPath);
},
goIndex() {
this.$router.push("/");
},
},
computed:{
path(){
return this.$route.path
}
},
watch:{
path(a){
this.actIndex = a
}
},
created() {
this.actIndex = this.path;
},
data() {
return {
isCollapse: false,
actIndex: "",
};
},
};
</script>
<style scoped>
.sidebar {
flex: none;
overflow: hidden;
}
.el-menu-item {
padding: 0;
}
.logo {
display: flex;
align-items: center;
justify-content: center;
height: 60px;
cursor: pointer;
color: #fff;
}
.logo img {
width: 120px;
}
.el-menu-vertical-demo:not(.el-menu--collapse) {
width: 200px;
min-height: 400px;
}
.sidebar {
height: 100%;
}
.el-menu {
border: 0;
height: 100%;
background-color: rgba(0, 0, 0, 0);
}
.el-menu-item i {
position: relative;
top: -2px;
display: inline-block;
}
.el-menu-item span {
margin-left: 4px;
}
.el-menu-item:hover:hover {
background-color: rgba(0, 0, 0, 0) !important;
}
::v-deep .el-submenu__title:hover {
background-color: rgba(0, 0, 0, 0) !important;
}
.is-active .menu-bg {
background: #fff;
padding-left: 20px;
}
.is-active .menu-bg::before {
opacity: 1;
}
.is-active .menu-bg::after {
opacity: 1;
}
.is-active .el-menu .menu-bg {
background: rgba(0, 0, 0, 0);
}
.is-active .el-menu .menu-bg::before {
opacity: 0;
}
.is-active .el-menu .menu-bg::after {
opacity: 0;
}
.is-active .el-menu .is-active .menu-bg {
background: #fff;
padding-left: 35px;
}
.is-active .el-menu .is-active .menu-bg::before {
opacity: 1;
}
.is-active .el-menu .is-active .menu-bg::after {
opacity: 1;
}
.el-menu-item {
padding-left: 5px !important;
background-color: rgba(0, 0, 0, 0) !important;
}
.el-menu--inline .menu-bg {
padding-left: 30px;
}
.menu-bg {
height: 100%;
border-bottom-left-radius: 50px;
border-top-left-radius: 50px;
padding: 0 15px;
transition: all 0.3s;
position: relative;
}
.menu-bg::before {
width: 20px;
height: 12px;
background-repeat: no-repeat;
background-size: 100% 100%;
content: "";
position: absolute;
right: 0;
top: -12px;
background-image: url("../assets/image/round.png");
opacity: 0;
}
.menu-bg::after {
width: 20px;
height: 12px;
background-repeat: no-repeat;
background-size: 100% 100%;
content: "";
position: absolute;
right: 0;
bottom: -12px;
background-image: url("../assets/image/round-1.png");
opacity: 0;
}
</style>

41
src/components/tabBer.vue Normal file
View File

@ -0,0 +1,41 @@
<template>
<!-- <router-view /> -->
<van-tabbar route>
<van-tabbar-item replace to="/index" icon="home-o">首页</van-tabbar-item>
<van-tabbar-item replace to="/itService" icon="like-o">服务</van-tabbar-item>
<van-tabbar-item replace to="/product" icon="diamond-o">产品</van-tabbar-item>
<van-tabbar-item replace to="/contactUs" icon="friends-o">合作</van-tabbar-item>
</van-tabbar>
</template>
<script>
export default {
data() {
return {
};
},
computed: {
path() {
}
},
watch: {
path() {
}
},
methods: {
onClickLeft() {
},
},
mounted() {
},
};
</script>
<style lang="less" scoped>
</style>

36
src/components/wrap.vue Normal file
View File

@ -0,0 +1,36 @@
<template>
<div class="wrap-container">
<NavBar />
<keep-alive>
<router-view></router-view>
</keep-alive>
<Footer />
</div>
</template>
<script >
import NavBar from "./NavBar.vue";
import Footer from "./Footer.vue";
export default {
components: { NavBar, Footer},
data() {
return {};
},
methods: {
},
mounted() {
},
};
</script>
<style lang="less" scoped>
.wrap-container {
position: relative;
background-color: #fff;
}
</style>

217
src/filters/Filters.js Normal file
View File

@ -0,0 +1,217 @@
// import state from '@/store/state'
import moment from 'moment'
//图片加前缀
// export const ImageCdn = (text) => {
// return process.env.VUE_APP_CDN_BASEURL + text
// }
// 没有数据返回--
const formatText = (val) => {
if (val == '' || val == undefined || val == null) {
return '--'
}
return val
}
// 没有数据返回0
const formatZero = (val) => {
if (val == '' || val == undefined || val == null) {
return 0
}
return val
}
const payDate = (val) => {
if (val == 7) {
return val + '天'
}
if (val > 7 && val < 40) {
return '月'
}
if (val > 40) {
return '年'
}
return val
}
const toFixed2 = (val) => {
let str = val.toFixed(2)
return str
}
const percent2 = (val) => {
if (val == '' || val == undefined || val == null) {
return '--'
}
let str = Math.round(val * 10000) / 100 + '%'
return str
}
// 日期格式化年月日
const formatYYYYMMDD = (value) => {
if (!value) {
return '--'
} else {
let str = moment(value).format('YYYY-MM-DD')
return str
}
}
// 字符串转数组
const strArr = (value) => {
if (!value) {
return '--'
} else {
let arr = JSON.parse(value)
let str = ''
arr.map((item, index) => {
str += item + '/'
})
str = str.substring(0, str.length - 1)
return str
}
}
const phoneFormat = (value) => {
if (!value) {
return '--'
} else {
let str = value
return str.substring(0, 3) + '****' + str.substring(7, str.length)
}
}
// 分转元 保留2位小数
export const toDecimal2 = (num) => {
let x = +num / 100
var f = parseFloat(x + '')
if (isNaN(f)) {
return '0'
}
var f = Math.round(x * 100) / 100
var s = f.toString()
var rs = s.indexOf('.')
if (rs < 0) {
rs = s.length
s += '.'
}
while (s.length <= rs + 2) {
s += '0'
}
return s
}
export const priceUppercase = (money) => {
var cnNums = new Array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖') //汉字的数字
var cnIntRadice = new Array('', '拾', '佰', '仟') //基本单位
var cnIntUnits = new Array('', '万', '亿', '兆') //对应整数部分扩展单位
var cnDecUnits = new Array('角', '分', '毫', '厘') //对应小数部分单位
//var cnInteger = "整"; //整数金额时后面跟的字符
var cnIntLast = '元' //整型完以后的单位
var maxNum = 999999999999999.9999 //最大处理的数字
var IntegerNum //金额整数部分
var DecimalNum //金额小数部分
var ChineseStr = '' //输出的中文金额字符串
var parts //分离金额后用的数组,预定义
if (money == '') {
return ''
}
money = parseFloat(money)
if (money >= maxNum) {
// $.alert('超出最大处理数字');
return ''
}
if (money == 0) {
//ChineseStr = cnNums[0]+cnIntLast+cnInteger;
ChineseStr = cnNums[0] + cnIntLast
//document.getElementById("show").value=ChineseStr;
return ChineseStr
}
money = money.toString() //转换为字符串
if (money.indexOf('.') == -1) {
IntegerNum = money
DecimalNum = ''
cnIntLast = '元整'
} else {
parts = money.split('.')
IntegerNum = parts[0]
DecimalNum = parts[1].substr(0, 4)
}
let zeroCount = 0
let IntLen = 0
let n
let p
let m
let q
let decLen = 0
if (parseInt(IntegerNum, 10) > 0) {
//获取整型部分转换
zeroCount = 0
IntLen = IntegerNum.length
for (var i = 0; i < IntLen; i++) {
n = IntegerNum.substr(i, 1)
p = IntLen - i - 1
q = p / 4
m = p % 4
if (n == '0') {
zeroCount++
} else {
if (zeroCount > 0) {
ChineseStr += cnNums[0]
}
zeroCount = 0 //归零
ChineseStr += cnNums[parseInt(n)] + cnIntRadice[m]
}
if (m == 0 && zeroCount < 4) {
ChineseStr += cnIntUnits[q]
}
}
ChineseStr += cnIntLast
//整型部分处理完毕
}
if (DecimalNum != '') {
//小数部分
decLen = DecimalNum.length
for (i = 0; i < decLen; i++) {
n = DecimalNum.substr(i, 1)
if (n != '0') {
ChineseStr += cnNums[Number(n)] + cnDecUnits[i]
}
}
}
if (ChineseStr == '') {
//ChineseStr += cnNums[0]+cnIntLast+cnInteger;
ChineseStr += cnNums[0] + cnIntLast
} /* else if( DecimalNum == '' ){
ChineseStr += cnInteger;
ChineseStr += cnInteger;
} */
return ChineseStr
}
//删除版本的V字符
export const deleteV = function(text) {
let str = text
? text
.replace(' ', '')
.replace('V', '')
.replace('v', '')
: text
return text
}
// 手机号中间加****
export const telChange = function(tel) {
tel = '' + tel
let newTel = tel.substr(0, 3) + '****' + tel.substr(7)
return newTel
}
//流程管理图片处理
const processIcon = function(data, type) {
let int = parseInt(data)
}
export { formatText, toFixed2, percent2, formatYYYYMMDD, strArr, phoneFormat, payDate, processIcon, formatZero }

290
src/http/api.js Normal file
View File

@ -0,0 +1,290 @@
// import {Get, Post} from "./request";
import request from "./axios";
let scroll = 0
/** Get请求Url参数拼接 */
function judgeParam(param) {
var str = "?";
for (var i in param) {
if (param[i] !== -1) {
str += i + "=" + param[i] + "&";
}
}
var str2 = str.substring(0, str.length - 1);
return str2;
}
//blob转化file
function blobToFile(blob, num, filename) {
blob.lastModifiedDate = Date.now();
if (!filename) {//若无文件名则取当前时间戳
filename = Date.parse(new Date()) + '+' + num + '.jpg';
}
let file = new File([blob], filename, { type: "image/jpeg", lastModified: Date.now() });
// blob.name = fileName;
console.log(file)
return file;
};
const api = {
login(body) {
return request
.post('/api/v1/login', body)
.then((res) => {
return res
})
.catch(function (error) {
throw error
})
},
qiniuToken() {
return request
.get('/api/v1/token')
.then((res) => {
return res
})
.catch(function (error) {
throw error
})
},
upImage64(body, num) {
let file = blobToFile(body, num)
let formData = new FormData();
formData.append('file', file);
return request
.post('/api/v1/image', formData)
.then((res) => {
return res
})
.catch(function (error) {
throw error
})
},
getTable(url, body) {
return request
.get(`/api/${url}` + judgeParam(body))
.then((res) => {
return res
})
.catch(function (error) {
throw error
})
},
addData(url, body) {
return request
.post(`/api/v1/${url}`, body)
.then((res) => {
return res
})
.catch(function (error) {
throw error
})
},
dataInfo(url, body) {
return request
.get(`/api/v1/${url}/${body}`)
.then((res) => {
return res
})
.catch(function (error) {
throw error
})
},
dataEdit(url, body) {
return request
.patch(`/api/v1/${url}/${body.id}`, body.data)
.then((res) => {
return res
})
.catch(function (error) {
throw error
})
},
dataDelete(url, body) {
return request
.delete(`/api/v1/${url}/${body}`)
.then((res) => {
return res
})
.catch(function (error) {
throw error
})
},
deleteSelect(body) {
console.log(body)
return request
.post(`/api/v1/delete`, body)
.then((res) => {
return res
})
.catch(function (error) {
throw error
})
},
postDate(body) {
return request
.post(`/api/consult/createConsult`, body)
.then((res) => {
return res
})
.catch(function (error) {
throw error
})
},
services() {
return request
.get(`/api/pubadvantage/getAdvantageList`)
.then((res) => {
return res
})
.catch(function (error) {
throw error
})
},
servicesUp(body) {
return request
.patch(`/api/v1/services/${body.id}`, body.data)
.then((res) => {
return res
})
.catch(function (error) {
throw error
})
},
getHome() {
return request
.get(`/api/pubsettingDict/findSettingDcit?ID=1`)
.then((res) => {
return res
})
.catch(function (error) {
throw error
})
},
homeUp(body) {
return request
.patch(`/api/v1/home/195454129470967808`, body)
.then((res) => {
return res
})
.catch(function (error) {
throw error
})
},
boss(body) {
return request
.patch(`/api/v1/home/195454129470967808`, body)
.then((res) => {
return res
})
.catch(function (error) {
throw error
})
},
// 文档下载
download(str, name) {
// let name = "123.jpg";
let url = str;
let suffix = url.substring(url.lastIndexOf("."), url.length);
let ajax = new XMLHttpRequest();
ajax.open("GET", url, true);
ajax.responseType = 'blob';
ajax.onload = function (e) {
let url = window.URL.createObjectURL(ajax.response);
let a = document.createElement('a');
a.href = url;
a.download = name;
a.click()
};
ajax.send();
},
// 文档预览
wordPreview(url) {
let suffix = url.substring(url.lastIndexOf("."), url.length);
console.log(suffix)
// return
if(suffix == '.docx' || suffix == '.ppt' || suffix == '.xls'|| suffix == 'xlsx' || suffix == '.doc' || suffix == '.txt'){
var xurl = "https://view.officeapps.live.com/op/view.aspx?src=";
xurl += encodeURIComponent(url);
var ops = {
"_pdf": true, //word/excel文档尝试以pdf方式显示默认false
// "_watermark": "XDOC文档预览", //水印文本,显示水印
// "_saveable": false, //是否允许保存PDF默认true
// "_printable": false, //是否允许打印PDF默认true
// "_copyable": false, //是否允许选择复制内容默认true
// "_toolbar": false, //是否显示底部工具条默认true
// "_title": "文档预览", //自定义标题
// "_expire": 30, //预览链接有效期,单位分钟,默认永久有效
// "_limit": "1,3", //限制页数“5”表示只显示前5页“2,5”表示从第2页开始的5页对pdf/doc/docx/ppt/pptx有效
};//传入预览参数
for (var a in ops) {
xurl += "&" + encodeURIComponent(a) + "=" + encodeURIComponent(ops[a]);
}
window.open(xurl);
}else{
window.open(url);
}
},
numbers(){
return request
.get(`/api/v1/numbers`)
.then((res) => {
return res
})
.catch(function (error) {
throw error
})
},
getBtags(){
return request
.get(`/api/v1/btags`)
.then((res) => {
return res
})
.catch(function (error) {
throw error
})
},
//字符串转base64
encode(str) {
// 对字符串进行编码
var encode = encodeURI(str);
// 对编码的字符串转化base64
var base64 = btoa(encode);
return base64;
},
// base64转字符串
decode(base64) {
// 对base64转编码
var decode = atob(base64);
// 编码转字符串
var str = decodeURI(decode);
return str;
},
news(body){
return request
.get(`/api/pubinfo/findInfo?ID=${body}`)
.then((res) => {
return res
})
.catch(function (error) {
throw error
})
},
setScroll(data){
window.localStorage.scroll = data
},
getScroll(){
return window.localStorage.scroll
},
seo(){
return request
.get(`/api/seoHome/findSeoHome?ID=1`)
.then((res) => {
return res
})
.catch(function (error) {
throw error
})
}
}
export default api

57
src/http/axios.js Normal file
View File

@ -0,0 +1,57 @@
import axios from 'axios';
// import QS from 'qs'; // 引入qs模块用来序列化post类型的数据后面会提到
// import { Message } from 'element-ui';
import { Toast } from 'vant';
const path = process.env.NODE_ENV === 'development' ? '/api' : '';
const service = axios.create({
baseURL: path,
timeout: 30000 // 请求超时时间
});
service.interceptors.request.use(
(config) => {
config.headers['x-token'] = window.localStorage.token || ''
return config
},
error => {
console.log(error)
Promise.reject(console.error);
}
)
service.interceptors.response.use(
response => {
const res = response.data
if(res.code == 1015){
window.location.href = window.location.origin + '/login'
}
if(res.code == 1006){
// Message.error(res.msg);
window.location.href = window.location.origin + '/login'
}
if(res.code == 0){
return res
} else {
Toast.fail(res.msg);
// Message.error(res.msg);
return Promise.reject('error')
}
// if (res.code === 200) {
// return response.data
// } else {
// if(res.code === 401){
// window.localStorage.removeItem('token')
// window.localStorage.removeItem('userInfo')
// window.location.href = window.location.origin + '/login'
// return
// }
// return Promise.reject('error')
// }
},
error => {
return Promise.reject(error)
}
)
export default service

71
src/main.js Normal file
View File

@ -0,0 +1,71 @@
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css'; // 默认主题
// import './assets/theme/index.css' //自定义主题
// import "animate.css";
import Vant from 'vant';
import 'vant/lib/index.css';
Vue.use(Vant);
import 'babel-polyfill';
import './assets/css/iconfont.css'
import './assets/css/index.css'
import './assets/js/fitter.js'
// import api from './http/api'
Vue.use(ElementUI);
import * as Filters from './filters/Filters'
//图片懒加载插件
// import vueLazy from 'vue-lazyload'
// Vue.use(vueLazy)
import { Lazyload } from 'vant';
Vue.use(Lazyload);
import MetaInfo from 'vue-meta-info';
Vue.use(MetaInfo);
Vue.config.productionTip = false;
import VueAMap from 'vue-amap';
// import { lazyAMapApiLoaderInstance } from 'vue-amap';
Vue.use(VueAMap);
VueAMap.initAMapApiLoader({
key: 'dda7ab288f7fafb799771df908aa1550',
plugin: ['AMap.Autocomplete', 'AMap.PlaceSearch', 'AMap.Scale', 'AMap.OverView', 'AMap.ToolBar', 'AMap.MapType', 'AMap.PolyEditor', 'AMap.CircleEditor'],
// 默认高德 sdk 版本为 1.4.4
v: '1.4.4'
});
import api from './http/api'
router.beforeEach((to, from, next) => {
const homeData = window.localStorage.homeData
if(!homeData){
api.getHome().then((res) => {
window.localStorage.homeData = JSON.stringify(res.data.resettingDict.settings);
next();
});
} else {
next();
}
})
router.afterEach((to) => {
// gtag('config', 'UA-ID', {'page_path': to.fullPath});
// ga('set', 'page', to.path)
// ga('send', 'pageview')
})
Object.keys(Filters).forEach((key) => {
Vue.filter(key, Filters[key])
})
new Vue({
router,
render: h => h(App)
}).$mount('#app');

239
src/router/index.js Normal file
View File

@ -0,0 +1,239 @@
import Vue from 'vue';
import Router from 'vue-router';
Vue.use(Router);
export default new Router({
mode: 'hash',
scrollBehavior (to, from, savedPosition) {
if (savedPosition) {
return savedPosition
} else {
return { x: 0, y: 0 }
}
},
routes: [
{
path: '/login',
component: () => import('@/views/login/login.vue'),
meta: { title: '登录' },
},
{
path: '/',
// redirect: '/index',
component: () => import('@/components/Main.vue'),
meta: { title: ''},
children: [
{
path: '/',
component: () => import('@/views/index/index.vue'),
meta: { title: '' },
},
{
path: '/index',
component: () => import('@/views/index/index.vue'),
meta: { title: ''},
},
{
path: '/itService',
component: () => import('@/views/itServer/itServer.vue'),
meta: { title: ''},
},
{
path: '/product',
component: () => import('@/views/product/product.vue'),
meta: { title: ''},
},
{
path: '/solution',
component: () => import('@/views/solution/solution.vue'),
meta: { title: ''},
},
{
path: '/apply',
component: () => import('@/views/apply/apply.vue'),
meta: { title: '', },
},
{
path: '/about',
component: () => import('@/views/about/about.vue'),
meta: { title: '', },
},
{
path:'/contactUs',
component: () => import('@/views/contactUs/contactUs.vue'),
meta: { title: '', },
},
{
path: '/index_1',
component: () => import('@/views/index/childs/index_1/index.vue'),
meta: { title: '文档中心', proPath: '/index' },
},
{
path: '/index_2',
component: () => import('@/views/index/childs/index_2/index.vue'),
meta: { title: '企业资质', proPath: '/index' },
},
{
path: '/it1',
component: () => import('@/views/itServer/childs/index_1/index.vue'),
meta: { title: 'IT 基础架构服务', proPath: '/itService', power: false },
},
{
path: '/it2',
component: () => import('@/views/itServer/childs/index_2/index.vue'),
meta: { title: '云服务', proPath: '/itService', power: false },
},
{
path: '/it3',
component: () => import('@/views/itServer/childs/index_3/index.vue'),
meta: { title: 'ITSS 培训服务', proPath: '/itService', power: false },
},
{
path: '/it4',
component: () => import('@/views/itServer/childs/index_4/index.vue'),
meta: { title: 'IT 系统集成与实施服务', proPath: '/itService', power: false },
},
{
path: '/it5',
component: () => import('@/views/itServer/childs/index_5/index.vue'),
meta: { title: '信息安全体系建设', proPath: '/itService', power: false },
},
{
path: '/it6',
component: () => import('@/views/itServer/childs/index_6/index.vue'),
meta: { title: 'IT服务', proPath: '/itService', power: false },
},
{
path: '/pro1',
component: () => import('@/views/product/childs/index_1/index.vue'),
meta: { title: 'ITSM 管理工具', proPath: '/product', power: false },
},
{
path: '/pro2',
component: () => import('@/views/product/childs/index_2/index.vue'),
meta: { title: 'OA 协同办公工具', proPath: '/product', power: false },
},
{
path: '/pro3',
component: () => import('@/views/product/childs/index_3/index.vue'),
meta: { title: '数字化应用底座', proPath: '/product', power: false },
},
{
path: '/pro4',
component: () => import('@/views/product/childs/index_4/index.vue'),
meta: { title: '配置自动化核查', proPath: '/product', power: false },
},
{
path: '/pro5',
component: () => import('@/views/product/childs/index_5/index.vue'),
meta: { title: '软件成分分析及同源漏洞检测工具', proPath: '/product', power: false },
},
{
path: '/pro6',
component: () => import('@/views/product/childs/index_6/index.vue'),
meta: { title: '软件源代码缺陷检测工具', proPath: '/product', power: false },
},
{
path: '/anonymousLetter',
component: () => import('../views/product/childs/anonymousLetter/index.vue'),
meta: { title: '飞书平台定制化开发', proPath: '/product', power: false },
},
{
path: '/solu1',
component: () => import('@/views/solution/childs/index_1/index.vue'),
meta: { title: '终端运维管理解决方案', proPath: '/solution', power: false },
},
{
path: '/solu2',
component: () => import('@/views/solution/childs/index_2/index.vue'),
meta: { title: 'IT 服务管理解决方案', proPath: '/solution', power: false },
},
{
path: '/solu3',
component: () => import('@/views/solution/childs/index_3/index.vue'),
meta: { title: '呼叫中心解决方案', proPath: '/solution', power: false },
},
{
path: '/solu4',
component: () => import('@/views/solution/childs/index_4/index.vue'),
meta: { title: '数据中心运维咨询及服务解决方案', proPath: '/solution', power: false },
},
{
path: '/app1',
component: () => import('@/views/apply/childs/index_1/index.vue'),
meta: { title: '某知名运动品牌', proPath: '/apply', power: false },
},
{
path: '/app2',
component: () => import('@/views/apply/childs/index_2/index.vue'),
meta: { title: '某大型互联网教育集团', proPath: '/apply', power: false },
},
{
path: '/app3',
component: () => import('@/views/apply/childs/index_3/index.vue'),
meta: { title: '全球500强大型制造型企业', proPath: '/apply', power: false },
},
{
path: '/app4',
component: () => import('@/views/apply/childs/index_4/index.vue'),
meta: { title: '某大型综合类央企', proPath: '/apply', power: false },
},
{
path: '/about_3',
component: () => import('@/views/about/childs/index_3/index.vue'),
meta: { title: '加入我们', proPath: '/about', power: false },
},
{
path: '/about_2',
component: () => import('@/views/about/childs/index_2/index.vue'),
meta: { title: '企业动态', proPath: '/about', power: false },
},
{
path: '/info_detial',
component: () => import('@/views/about/childs/index_2/childs/index.vue'),
meta: { title: '企业动态', proPath: '/about', power: false },
},
{
path: '/about_4',
component: () => import('@/views/about/childs/index_4/index.vue'),
meta: { title: '联系我们', proPath: '/about', power: false },
},
{
path: '/join_info',
component: () => import('@/views/about/childs/index_3/childs/join_info.vue'),
meta: { title: '职位详情', proPath: '/about', power: false },
},
{
path: '/guard',
component: () => import('../views/guard/index.vue'),
meta: { title: '护航科技代码安全卫士', proPath: '/guard', power: false },
},
{
path: '/seek',
component: () => import('../views/seek/seek.vue'),
meta: { title: '免费咨询', proPath: '/seek', power: false },
}
]
},
// {
// path: '/wrap',
// // redirect: '/index',
// component: () => import('@/components/wrap.vue'),
// meta: { title: ''},
// children:[
// ]
// }
]
})

623
src/views/about/about.less Normal file
View File

@ -0,0 +1,623 @@
.about-container {
overflow-x: hidden;
.it-temp1 {
// height: 6.48rem;
// padding-left: 1.2rem;
// display: flex;
// align-items: center;
position: relative;
img {
// position: absolute;
width: 100%;
display: block;
// height: 100%;
// top:0;
// left: 0;
// z-index: 0;
}
.title {
font-size: 0.6rem;
font-weight: 500;
color: #001d2d;
line-height: 0.89rem;
}
.sub-title {
font-size: 0.24rem;
font-weight: 400;
color: #001d2d;
line-height: 0.36rem;
}
}
.index-temp2 {
padding-top: .4rem;
// background-color: #f2f2f2;
position: relative;
img {
position: absolute;
width: 6rem;
right: -.26rem;
top: 0;
z-index: 0;
opacity: .5;
}
.content {
padding: .2rem;
.title {
font-size: 0.36rem;
font-weight: 600;
color: #001d2d;
line-height: 0.36rem;
margin-bottom: 0.4rem;
}
.text {
font-size: 0.26rem;
font-weight: 400;
color: #606266;
line-height: 0.40rem;
// width: 7.49rem;
text-align: justify;
}
}
}
.index-temp3 {
padding: 0rem ;
position: relative;
background-color: #fff;
overflow: hidden;
z-index: 0;
.bg-img {
width: 146%;
margin-left: -16.5%;
}
}
.index-temp4 {
padding: 0rem;
position: relative;
.bg-img {
position: absolute;
z-index: 0;
width: 6.51rem;
top: 0.6rem;
right: -.26rem;
}
// z-index: 0;
.item {
background-color: #fff;
border-radius: .12rem;
padding: 0.36rem 0.36rem;
box-sizing: border-box;
position: relative;
z-index: 1;
box-shadow: 0px 10px 40px 0px rgba(0, 49, 75, 0.1);
margin-bottom: .3rem;
overflow: hidden;
.icon {
position: relative;
float: left;
width: 1rem;
img {
width: 0.72rem;
position: relative;
z-index: 0;
}
span {
display: block;
position: absolute;
width: 0.72rem;
height: 0.72rem;
background-color: #78bd3a;
border-radius: 0.72rem;
top: 0;
left: 0.36rem;
opacity: 0.09;
z-index: 0;
}
}
.content{
float: right;
width: calc(100% - 1rem);
padding-left: .3rem;
}
.title {
font-size: 0.32rem;
font-weight: 400;
color: #001d2d;
line-height: 0.4rem;
padding-top: 0.1rem;
margin-bottom: 0.1rem;
}
.text {
font-size: 0.24rem;
font-weight: 400;
color: #606266;
line-height: 0.38rem;
// height: 1.2rem;
min-height: .8rem;
position: relative;
// margin-bottom: .2rem;
img {
position: absolute;
width: 0.72rem;
bottom: 0;
left: 0rem;
}
}
}
// .imgList {
// }
}
.index-temp5 {
padding-top: 0.4rem ;
position: relative;
// background-color: #fff;
.title-sub {
margin-bottom: 0rem;
}
.hu-it {
font-size: 0.42rem;
font-weight: 500;
color: #001d2d;
line-height: 0.62rem;
}
.block {
margin-top: 0.4rem;
.my-swipe {
margin-top: .3rem;
.van-swipe-item {
text-align: center;
background-color: #fff;
height: auto;
.swiper-img {
height: 3rem;
width: auto;
margin: auto;
display: block;
}
.title {
text-align: center;
line-height: .42rem;
font-size: .28rem;
margin-top: .2rem;
}
}
}
}
}
.index-temp6 {
padding-top: 0.4rem ;
position: relative;
.content {
position: relative;
// width: 100%;
// overflow: auto;
// padding-right: 1.2rem;
// overflow: hidden;
.flex-content {
// display: flex;
padding-right: 1.2rem;
position: relative;
// left: 50px;
}
.scrollbar-demo-item {
flex-shrink: 0;
width: 4.2rem;
height: 3.6rem;
padding-right: 0.8rem;
padding-left: 0.02rem;
}
// .step {
// height: 20px;
// background: #000000;
// position: absolute;
// left: 0;
// width: 100%;
// top: 1.1rem;
// }
.swiper-content{
padding: .3rem;
}
.date-num {
position: relative;
font-size: 0.58rem;
font-weight: bold;
// line-height: 0.4rem;
letter-spacing: 0.01rem;
margin-bottom: .1rem;
font-family: Arial;
span {
// position: absolute;
// top: -.4rem;
// left: 0;
position: relative;
left: 2px;
display: block;
width: 0.24rem;
height: 0.24rem;
background-color: #6eb92c;
margin-bottom: 0.2rem;
}
}
img{
height: .24rem;
}
.ul-li {
margin-top: 0.3rem;
font-size: 0.28rem;
font-weight: 400;
// color: #606266;
line-height: 0.4rem;
text-align: justify;
}
// ul {
// padding-left: 16px;
// margin-top: 0.8rem;
// li {
// list-style: disc;
// font-size: 0.18rem;
// font-weight: 400;
// color: #606266;
// line-height: 0.3rem;
// }
// }
}
}
.index-temp7 {
padding: 0.4rem .26rem;
position: relative;
.title-sub {
position: relative;
z-index: 1;
text-align: center;
font-size: 0.42rem;
font-weight: 500;
color: #001d2d;
line-height: 0.62rem;
margin-bottom: 0rem;
span {
display: inline-block;
width: 0.24rem;
height: 0.24rem;
position: relative;
top: -0.02rem;
&:first-child {
background: #e1eafd;
}
&:last-child {
background: #ecf4e3;
}
}
}
.content {
padding-top: 0.4rem;
overflow: hidden;
}
div {
font-size: 0.38rem;
font-weight: 400;
// color: #001d2d;
line-height: 0.44rem;
letter-spacing: 0.01rem;
margin-bottom: 0.12rem;
}
img {
width: 1.1rem;
margin-bottom: 0.12rem;
}
li {
font-size: 0.26rem;
font-weight: 400;
// color: #606266;
line-height: 0.38rem;
margin-bottom: 0.16rem;
color: #606266;
}
}
.index-temp8 {
padding: 0rem ;
.block {
border-radius: 0.4rem;
overflow: hidden;
cursor: pointer;
padding-bottom: 0.2rem;
&:hover {
box-shadow: 0px 10px 40px 0px rgba(0, 49, 75, 0.1);
}
}
img {
width: 100%;
margin-bottom: 0.2rem;
}
.title {
font-size: 0.28rem;
font-weight: 400;
color: #001d2d;
padding-left: 0.2rem;
margin-bottom: 0.14rem;
}
.text {
font-size: 0.18rem;
font-weight: 400;
color: #606266;
padding-left: 0.2rem;
}
.content {
margin-top: 0.6rem;
position: relative;
// width: 100%;
// overflow: auto;
// padding-right: 1.2rem;
.flex-content {
display: flex;
// padding-right: 1.2rem;
}
.scrollbar-demo-item {
flex-shrink: 0;
width: 100%;
// height: 3.6rem;
// padding-right: .8rem;
// padding-left: .02rem;
padding-bottom: 0.2rem;
}
.date-num {
position: relative;
font-size: 0.18rem;
color: #001d2d;
// line-height: .40rem;
letter-spacing: 0.01rem;
text-align: center;
cursor: pointer;
img {
width: 100%;
// height: 2.84rem;
height: 300px;
object-fit: contain;
margin-bottom: 0.2rem;
}
span{
padding-left: .16rem;
padding-right: .1rem;
}
.title{
display: block;
text-align: left;
font-size: .28rem;
height: 1.2rem;
font-weight: 500;
font-weight: 400;
}
.text{
font-size: .18rem;
color: #606266;
font-weight: 400;
margin-top: .1rem;
text-overflow: -o-ellipsis-lastline;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
line-clamp: 2;
-webkit-box-orient: vertical;
}
}
}
}
.index-temp9 {
padding-top: .5rem;
padding-bottom: .4rem;
.block {
position: relative;
}
.num-img {
width: 100%;
height: auto;
position: relative;
z-index: 1;
margin-bottom: 0.2rem;
cursor: pointer;
}
.title {
position: absolute;
bottom: 0.8rem;
left: 0.3rem;
font-size: 0.28rem;
font-weight: 500;
color: #fff;
z-index: 1;
}
.step {
width: 1.2rem;
}
.van-row {
margin-bottom: 0.42rem;
&:last-child {
margin-bottom: 0;
}
}
}
.more{
text-align: center;
font-size: .3rem;
padding-top: .3rem;
color: #12BEC3;
}
}
::v-deep .van-card{
padding: .16rem;
background-color: #fff;
box-shadow: 0px 10px 40px 0px rgba(0, 49, 75, 0.1);
border-radius: .08rem;
}
::v-deep .van-card__thumb img{
// border-radius: 0;
}
::v-deep .van-card__thumb{
margin-right: .2rem;
width: 1.8rem;
height: 1.8rem;
}
::v-deep .van-card__content{
// align-items: center;
// justify-content: center;
padding-top: .16rem;
}
::v-deep .van-card__title{
margin-bottom: .16rem;
font-size: .28rem;
line-height: .4rem;
max-height: 1rem;
}
::v-deep .van-card__desc{
font-size: .24rem;
line-height: 1;
max-height: none;
}
// ::v-deep .is-horizontal .van-scrollbar__thumb{
// // width: 15%!important;
// &::after{
// position: absolute;
// content: '';
// // background: url(./images/left.png) no-repeat;
// left: 15%;
// width: 30px;
// height: 30px;
// top: 0;
// background-size: 30px 30px;
// // margin: 14px 0 0 15px;
// }
// &::before{
// position: absolute;
// content: '';
// // background: url(./images/right.png) no-repeat;
// right: 15%;
// width: 30px;
// height: 30px;
// top: 0;
// background-size: 30px 30px;
// // margin: 14px 0 0 15px;
// }
// }
.my-swipe {
margin-top: .3rem;
.van-swipe-item {
text-align: center;
background-color: #fff;
height: auto;
.swiper-img {
height: 3rem;
width: auto;
margin: auto;
display: block;
}
.title {
text-align: center;
line-height: .42rem;
font-size: .28rem;
margin-top: .2rem;
}
}
}
// .el-carousel__item:nth-child(2n) {
// background-color: #ccc;
// }
// .el-carousel__item:nth-child(2n+1) {
// background-color: #fff;
// }
::v-deep .is-active {
box-shadow: 0px 10px 40px 0px rgba(0, 49, 75, 0.1);
// background-color: #fff;
}
::v-deep .is-active .img {
// box-shadow: 0px 10px 40px 0px rgba(0, 49, 75, 0.1);
}
::v-deep .el-carousel--horizontal {
// padding: 10px 0;
// overflow-x: clip;
padding: 40px 0;
}
.my-swipe {
margin-top: -.5rem;
.img {}
.swiperitem {
text-align: center;
background-color: #fff;
// box-shadow: 0px 10px 40px 0px rgba(0, 49, 75, 0.1);
display: flex;
align-items: center;
justify-content: center;
border-radius: 4px;
padding: 0 10px;
}
.swiper-img {
// height: auto;
// width: 80%;
margin: auto;
display: block;
max-height: 2.2rem;
}
.title {
text-align: center;
line-height: .42rem;
font-size: .24rem;
margin-top: .2rem;
}
}
.my-swipe-qu {
margin-top: .3rem;
img {
width: 100%;
height: auto;
}
.swiper-content {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
background-color: rgba(0, 0, 0, .4);
padding: .3rem .26rem;
text-align: left;
.title {
color: #fff;
font-size: .32rem;
margin-bottom: .18rem;
}
p {
color: #fff;
font-size: .28rem;
}
}
}

384
src/views/about/about.vue Normal file
View File

@ -0,0 +1,384 @@
<template>
<div class="about-container">
<div class="it-temp1">
<img v-lazy="homeData.bannerList[4].image" />
</div>
<div class="container-centent">
<div class="index-temp2">
<div class="content">
<div class="title">助力企业创新并深化数字转型</div>
<div class="text">
护航科技股份有限公司简称护航科技成立于 2005 7
是一家专注于 IT 服务的高科技企业公司拥有丰富的全国 IT
资源与多家国内 IT
厂商建立合作伙伴关系设立了以北京上海武汉广深厦门 ,
成都为中心覆盖全国 700 余个主要城市的业务网络
<div style="height: 0.2rem" />
公司通过 ISO9001ISO27001ISO20000ISO14001ISO45001 以及 ITSS
成熟度一级等资质认证致力于为生物医药金融电信生产制造电广传媒交通能源互联网教育政府
/ IT IT
服务管理体系为核心并利用高效的人工智能技术和自动化运维工具不断的追求
IT
场景的稳定性安全性可靠性帮助行业及企业用户把信息技术应用转化为业务的驱动力充分挖掘信息技术的能量获得竞争的优势
<div style="height: 0.2rem" />
2016
护航科技在新三板上市并进入了创新层由此护航科技也进入了一个迅猛发展的时期
</div>
</div>
<img v-lazy="imgUrl.img1" alt="" />
</div>
<div class="index-temp3">
<img class="bg-img" v-lazy="imgUrl.img2" />
<!-- <div class="hu-it">
发展历程<br />
DEVELOPMENT PATH
</div>
-->
</div>
<div class="index-temp4">
<img class="bg-img" v-lazy="imgUrl.img3" alt="" />
<div class="title-sub">
<span></span>
护航科技企业文化
<span></span>
</div>
<div class="content">
<van-row :gutter="10">
<van-col :span="24">
<div class="item">
<div class="icon">
<img src="./images/icon1.png" />
<span></span>
</div>
<div class="content">
<div class="title">愿景</div>
<div class="text">
成为客户最信赖<br />
最具实力的 IT 运营伙伴
<!-- <img v-lazy="imgUrl.img11" /> -->
</div>
</div>
</div>
</van-col>
<van-col :span="24">
<div class="item">
<div class="icon">
<img src="./images/icon3.png" />
<span></span>
</div>
<div class="content">
<div class="title">使命</div>
<div class="text">
为客户提供全方位高品质的系统运营服务<br />
帮助客户提高 IT 服务水平和运营效率
<!-- <img v-lazy="imgUrl.img11" /> -->
</div>
</div>
</div>
</van-col>
<van-col :span="24">
<div class="item">
<div class="icon">
<img src="./images/icon3.png" />
<span></span>
</div>
<div class="content">
<div class="title">服务宗旨</div>
<div class="text">
专注安全可信赖
<!-- <img v-lazy="imgUrl.img11" /> -->
</div>
</div>
</div>
</van-col>
</van-row>
</div>
</div>
<div class="index-temp5">
<div class="title-sub">
<span></span>
企业资质
<span></span>
</div>
<div class="block">
<!-- <van-swipe
class="my-swipe"
:autoplay="3000"
indicator-color="white"
@change="onChange"
>
<van-swipe-item v-for="(item, index) in qualList" @click="goLink('/index_2')">
<img class="swiper-img" :src="item.image" />
<div class="title">{{ item.title }}</div>
</van-swipe-item>
<template #indicator>
<div class="custom-indicator">{{ current + 1 }}/{{ total }}</div>
</template>
</van-swipe> -->
<el-carousel class="my-swipe" :interval="3000" type="card" height="4rem" indicator-position="none">
<el-carousel-item class="swiperitem" v-for="(item, index) in qualList" @click="goLink('/index_2')">
<div>
<div class="img"><img class="swiper-img" :src="item.image" /></div>
<div class="title">{{ item.title }}</div>
</div>
</el-carousel-item>
</el-carousel>
</div>
</div>
<div class="more">
<span @click="goLink('/index_2')">查看更多 >></span>
</div>
<div class="index-temp6">
<div class="title-sub">
<span></span>
护航科技发展历程
<span></span>
</div>
<div class="content" id="scroll-sb">
<!-- <div class="step"></div> -->
<van-swipe class="swiper">
<van-swipe-item
v-for="item in homeData.course"
style="cursor: pointer"
:key="item"
>
<div class="swiper-content">
<div class="date-num">
{{ item.time }}
</div>
<img v-lazy="imgUrl.img11" />
<div class="ul-li" style="padding-right: 20px">
{{ item.content }}
</div>
</div>
</van-swipe-item
>
<template #indicator>
<div class="custom-indicator">{{ current2 + 1 }}/{{ homeData.course.length }}</div>
</template>
</van-swipe>
</div>
</div>
<div class="index-temp7">
<div class="title-sub">
<span></span>
护航科技服务网络
<span></span>
</div>
<div class="content">
<!-- <van-row :gutter="200"> -->
<van-col
:span="24"
v-for="(item, index) in homeData.address"
:key="index"
style="margin-bottom:.3rem"
@click="goLink('/about_4')"
>
<div>{{ item.ctiy }}</div>
<img v-lazy="imgUrl.img11" />
<ul>
<li>地址{{ item.text }}</li>
<li>电话{{ item.phone }}</li>
</ul>
</van-col>
</div>
</div>
<div class="more">
<span @click="goLink('/about_4')">查看更多 >></span>
</div>
<div class="index-temp8">
<div class="title-sub">
<span></span>
企业动态
<span></span>
</div>
<div class="content">
<!-- <div class="step"></div> -->
<van-card
v-for="item in news"
:desc="item.subtitle"
:title="item.title"
:thumb="item.image"
@click="toNews(item)"
/>
<!-- <div class="flex-content">
<van-row :gutter="66">
<van-col :span="8" v-for="(item, index) in news" :key="index">
<div class="scrollbar-demo-item" @click="link(item.id)">
<div class="date-num">
<img :src="item.image" alt="" />
<span class="title">{{ item.title }}</span>
<span class="text">{{ item.subtitle }}</span>
</div>
</div>
</van-col>
</van-row>
</div> -->
</div>
</div>
<div class="more">
<span @click="goLink('/about_2')">查看更多 >></span>
</div>
<div class="index-temp9">
<van-row :gutter="10" class="content-list">
<van-col :span="8">
<div class="block" @click="goLink('/index_2')">
<img class="num-img" v-lazy="imgUrl.img4" />
<div class="title">企业荣誉</div>
<img class="step" v-lazy="imgUrl.img11" alt="" />
</div>
</van-col>
<van-col :span="8">
<div class="block" @click="goLink('/about_3')">
<img class="num-img" v-lazy="imgUrl.img5" />
<div class="title">社会招聘</div>
<img class="step" v-lazy="imgUrl.img11" alt="" />
</div>
</van-col>
<van-col :span="8">
<div class="block" @click="goLink('/about_3')">
<img class="num-img" v-lazy="imgUrl.img6" />
<div class="title">校园招聘</div>
<img class="step" v-lazy="imgUrl.img11" alt="" />
</div>
</van-col>
</van-row>
</div>
</div>
</div>
</template>
<script>
import api from "@/http/api";
// import bg from "./images/bg.png";
import img1 from "./images/img1.png";
import img2 from "./images/img2.png";
import img3 from "./images/img3.png";
import img4 from "./images/img4.png";
import img5 from "./images/img5.png";
import img6 from "./images/img6.png";
import img11 from "./images/img11.png";
// Import Swiper Vue.js components
// import { Swiper, SwiperSlide } from 'swiper/vue';
// Import Swiper styles
// import 'swiper/css';
// import { Swiper, SwiperSlide } from 'vue-awesome-swiper'
// import 'swiper/dist/idangerous.swiper.css'
export default {
components: {
// Swiper,
// SwiperSlide
},
data() {
return {
current: 0,
current2: 0,
history: [
],
imgUrl: {
// bg: bg,
img1: img1,
img2: img2,
img3: img3,
img4: img4,
img5: img5,
img6: img6,
img11: img11,
},
news: [],
currentPage: 1,
qualList: [],
total: 0,
homeData: JSON.parse(JSON.parse(window.localStorage.homeData)), // {bannerList:[]}
};
},
methods: {
toNews(row){
console.log(row)
this.$router.push({
path:'/info_detial',
query:{
info_id: row.ID
}
})
},
onChange(val) {
this.current = val;
},
link(id) {
console.log(id);
this.$router.push({ path: "/info_detial", query: { info_id: id } });
},
getData() {
api
.getTable("pubinfo/getInfoList", {
page: 1,
pageSize: 3,
})
.then((res) => {
console.log(res);
this.news = res.data.list;
// this.total = res.total;
});
},
goLink(path) {
this.$router.push(path);
},
getQual() {
api
.getTable("pubcompany/getCompanyList", {
page: 1,
pageSize: 200,
is_use: 1,
is_type: "",
})
.then((res) => {
console.log(res);
this.qualList = res.data.list;
this.total = res.data.total;
});
},
},
created() {
this.getData();
this.getQual();
// this.getHomeData()
},
mounted() {
return;
setTimeout(() => {
let sb2 = document.getElementById("scroll-sb");
let sb = this.$refs.myscroll;
let list = document.getElementsByClassName("scrollbar-demo-item");
// let sbw = sb.style.width()
console.log(sb2.offsetWidth, list.length * list[0].offsetWidth);
let i = -50;
setInterval(() => {
i++;
sb.style.left = -i + "px";
if (
i ==
list.length * list[0].offsetWidth - (sb2.offsetWidth * 2 - 130)
) {
i = -50;
}
}, 15);
}, 1000);
},
};
</script>
<style lang="less" scoped>
@import "./about.less";
</style>

View File

@ -0,0 +1,41 @@
.it-container{
.it-temp1{
img{
width: 100%;
}
}
.it-temp2{
padding: .4rem .2rem;
position: relative;
z-index: 1;
.title{
font-size: .32rem;
font-weight: bold;
text-align: center;
margin-bottom: .2rem;
}
.content{
// min-height: 6rem;
// width: 1000px;
width: 100%;
margin: auto;
margin-top: .6rem;
p {
img{
max-width: 100%;
}}
}
.time{
text-align: center;
font-size: .30rem;
color: #606266;
margin-bottom: .3rem;
}
}
}

View File

@ -0,0 +1,65 @@
<template>
<div class="it-container">
<div class="it-temp1">
<img v-lazy="imgUrl.bg" />
</div>
<div class="container-centent">
<div class="it-temp2">
<div class="title">
{{ infos.title || "动态详情" }}
</div>
<!-- <div class="title-sub">
<span></span>
{{ infos.title || "动态详情" }}
<span></span>
</div> -->
<div class="time">{{ infos.CreatedAt | formatYYYYMMDD }}</div>
<div class="html-content">
<div v-html="infos.content"></div>
</div>
</div>
</div>
</div>
</template>
<script>
import bg from "../../../images/bg.png";
import api from "@/http/api";
import formatYYYYMMDD from "@/filters/Filters"
export default {
components: {},
data() {
return {
imgUrl: {
bg: bg,
},
infos: {},
currentPage: 1,
pageSize: 15,
total: 0,
};
},
methods: {
getData() {
// api.dataInfo("pubinfo/findInfo", this.$route.query.info_id).then((res) => {
// this.infos = res.data;
// this.infos.content = api.decode(res.data.content)
// });
api.news(this.$route.query.info_id).then((res) => {
this.infos = res.data.reinfo;
// this.infos.content = api.decode(res.data.content)
});
},
},
mounted() {
// this.getData();
},
activated(){
this.getData();
}
};
</script>
<style lang="less" scoped>
@import "./index.less";
</style>

View File

@ -0,0 +1,115 @@
.it-container{
.it-temp1{
img{
width: 100%;
}
}
.it-temp2{
padding-top: .4rem;
position: relative;
z-index: 1;
.item{
display: flex;
padding: .3rem 0;
position: relative;
border-bottom: 1px solid #DFDFDF;
// margin-bottom: .3rem;
cursor: pointer;
.img{
flex: none;
width: 2.4rem;
height: 1.6rem;
img{
width: 100%;
height: 100%;
object-fit:cover
}
}
.decs{
flex: auto;
padding-left: .2rem;
padding-right: 2.4rem;
.title{
font-size: .28rem;
font-weight: 400;
color: #001D2D;
line-height: .4rem;
padding: .06rem .36rem;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
margin-top: .2rem;
margin-bottom: .16rem;
}
.text{
font-size: .18rem;
font-weight: 400;
color: #606266;
line-height: .32rem;
padding: 0 .36rem;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}
.time{
position: absolute;
right: 0;
bottom: .3rem;
font-size: .18rem;
font-weight: 400;
color: #606266;
}
// padding-bottom: .2rem;
// margin-bottom: .42rem;
// &:hover{
// box-shadow: 0px 10px 40px 0px rgba(0, 49, 75, 0.1);
// }
}
.page{
text-align: center;
padding: .48rem 0;
padding-bottom: .8rem;
}
}
::v-deep .van-card{
padding: .16rem;
background-color: #fff;
box-shadow: 0px 10px 40px 0px rgba(0, 49, 75, 0.1);
border-radius: .08rem;
}
::v-deep .van-card__thumb img{
// border-radius: 0;
}
::v-deep .van-card__thumb{
margin-right: .2rem;
width: 1.8rem;
height: 1.8rem;
}
::v-deep .van-card__content{
// align-items: center;
// justify-content: center;
padding-top: .16rem;
}
::v-deep .van-card__title{
margin-bottom: .16rem;
font-size: .28rem;
line-height: .4rem;
max-height: 1rem;
}
::v-deep .van-card__desc{
font-size: .24rem;
line-height: 1;
max-height: none;
}
}

View File

@ -0,0 +1,128 @@
<template>
<div class="it-container">
<div class="it-temp1">
<img v-lazy="imgUrl.bg" />
</div>
<!-- <div class="breadcrumb">
<van-breadcrumb separator-class="van-icon-arrow-right">
<van-breadcrumb-item :to="{ path: '/about' }">关于护航</van-breadcrumb-item>
<van-breadcrumb-item>企业动态</van-breadcrumb-item>
</van-breadcrumb>
</div> -->
<div class="container-centent">
<div class="it-temp2">
<div class="title-sub">
<span></span>
企业动态
<span></span>
</div>
<div class="content">
<van-list
v-model="loading"
:finished="finished"
finished-text="没有更多了"
@load="onLoad"
>
<van-card
v-for="item in news"
:key="item.ID"
:desc="item.subtitle"
:title="item.title"
:thumb="item.image"
@click="toNews(item)"
/>
</van-list>
</div>
<div class="page">
<!-- <van-pagination
background
:current-page="currentPage"
@current-change="handleCurrentChange"
layout="prev, pager, next"
:total="total"
>
</van-pagination> -->
<!-- <van-pagination v-model="currentPage" :total-items="total" :show-page-size="10" @click="handleCurrentChange">
<template #prev-text>
<van-icon name="arrow-left" />
</template>
<template #next-text>
<van-icon name="arrow" />
</template>
<template #page="{ text }">{{ text }}</template>
</van-pagination> -->
</div>
</div>
</div>
</div>
</template>
<script>
import bg from "../../images/bg.png";
import api from "@/http/api";
export default {
components: {},
data() {
return {
imgUrl: {
bg: bg,
},
news: [],
currentPage: 1,
pageSize: 15,
total: 0,
loading: false,
finished: false,
};
},
methods: {
onLoad(){
if(!this.finished){
this.loading=true
this.currentPage++
this.getData()
}
},
toNews(row) {
console.log(row);
this.$router.push({
path: "/info_detial",
query: {
info_id: row.ID,
},
});
},
getData() {
api
.getTable("pubinfo/getInfoList", {
page: this.currentPage,
pageSize: 10,
})
.then((res) => {
this.news.push(...res.data.list) ;
this.total = res.data.total;
if(this.news.length >= this.total){
this.finished = true;
}
//
this.loading = false;
});
},
handleCurrentChange(val) {
this.currentPage = val;
this.getData();
},
link(id) {
this.$router.push({ path: "/info_detial", query: { info_id: id } });
},
},
created() {
this.getData();
},
};
</script>
<style lang="less" scoped>
@import "./index.less";
</style>

View File

@ -0,0 +1,60 @@
<template>
<div class="it-container">
<div class="it-temp1">
<img v-lazy="imgUrl.bg" />
</div>
<!-- <div class="breadcrumb">
<van-breadcrumb separator-class="van-icon-arrow-right">
<van-breadcrumb-item :to="{ path: '/about' }"
>关于护航</van-breadcrumb-item
>
<van-breadcrumb-item :to="{ path: '/about_3' }">加入我们</van-breadcrumb-item>
<van-breadcrumb-item>职位详情</van-breadcrumb-item>
</van-breadcrumb>
</div> -->
<div class="container-centent">
<div class="it-temp2">
<div class="content-join" style="padding-bottom: 50px">
<div class="title">职位名称{{ info.postionTitle }}</div>
<div class="base">工作点{{ info.address }}</div>
<div v-html="info.content"></div>
<div class="title" style="margin-top: 10px">投递简历</div>
<div>
{{ homeData.describe }}
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import bg from "../../../images/bg.png";
import api from "@/http/api";
export default {
components: {},
data() {
return {
imgUrl: {
bg: bg,
},
info: {},
homeData: JSON.parse(JSON.parse(window.localStorage.homeData)),
};
},
mounted() {
this.getData();
},
methods: {
getData(type) {
// api.dataInfo('boss', this.$route.query.join_id).then((res) => {
this.info = JSON.parse(window.localStorage.join); //res.data
// })
},
},
};
</script>
<style lang="less" scoped>
@import "../index.less";
</style>

View File

@ -0,0 +1,117 @@
.it-container{
.it-temp1{
img{
width: 100%;
}
}
.it-temp2{
padding-top: .4rem;
position: relative;
z-index: 1;
.content{
// padding: 0 3.8rem;
.title{
display: inline-block;
font-size: .32rem;
font-weight: 400;
color: #001D2D;
line-height: .32rem;
letter-spacing: .01rem;
text-align: center;
cursor: pointer;
img{
width: .98rem;
}
}
}
.from{
margin-top: .4rem;
margin-bottom: .4rem;
// display: flex;
// .input{
// flex: auto;
// padding-right: .16rem;
// }
// .button{
// flex: none;
// width: 1.98rem;
// height: 40px;
// background: #001D2D;
// border-radius: 4px;
// text-align: center;
// line-height: 40px;
// font-size: 14px;
// font-weight: 400;
// color: #FFFFFF;
// cursor: pointer;
// }
}
.select{
margin-bottom: .6rem;
}
.table-container {
padding-bottom: .8rem;
.operation {
.edit {
color: #409eff;
}
.delete {
color: #f56c6c;
}
}
.pagination {
margin-top: .4rem;
}
}
.content-join{
min-height: 6rem;
// width: 1000px;
// margin: auto;
.title{
font-size: .32rem;
font-weight: bold;
line-height: .6rem;
}
.base{
font-size: .28rem;
margin-bottom: .4rem;
}
}
}
}
// .amap-marker-content img{
// width: 25px;
// height: 34px;
// }
.ready{
cursor: pointer;
color: #409EFF;
}
.tab-btn {
line-height: 0.28rem;
color: #0091ff;
display: inline-block;
// font-size: 0.18rem;
margin-left: 0.1rem;
cursor: pointer;
position: absolute;
font-size: 14px;
right: 0;
line-height: 24px;
}
.assress {
position: absolute;
font-size: 14px;
right: 1.4rem;
}

View File

@ -0,0 +1,268 @@
<template>
<div class="it-container">
<div class="it-temp1">
<img v-lazy="imgUrl.bg" />
</div>
<div class="container-centent">
<div class="it-temp2">
<div class="content">
<van-row :gutter="88">
<van-col :span="12" style="text-align: right">
<div class="title" @click="change(0)">
社会招聘<br />
<img
v-show="index == 0"
src="../../../../assets/image/icon_r.png"
/>
</div>
</van-col>
<van-col :span="12" style="text-align: left">
<div class="title" @click="change(1)">
校园招聘<br />
<img
v-show="index == 1"
src="../../../../assets/image/icon_r.png"
/>
</div>
</van-col>
</van-row>
</div>
<div class="from">
<!-- <div class="input">
<van-input
v-model="base_title"
style="height: 0.6rem"
placeholder="输入职位关键词"
/>
</div>
<div class="button" @click="sousuo">搜索职位</div> -->
<van-search
v-model="base_title"
show-action
placeholder="请输入搜索关键词"
>
<template #action>
<div @click="getData">搜索</div>
</template>
</van-search>
</div>
<!-- <div class="select">
<van-select
v-model="value"
placeholder="工作地点"
style="margin-right: 0.2rem"
@change="sousuo"
>
<van-option
v-for="item in options"
:key="item"
:label="item"
:value="item"
class="myOption"
>
</van-option>
</van-select>
<van-select v-model="value2" placeholder="职位类别" @change="sousuo">
<van-option
v-for="item in options2"
:key="item"
:label="item"
:value="item"
class="myOption"
>
</van-option>
</van-select>
<van-button style="margin-left: 15px" @click="resft">重置</van-button>
</div> -->
<div class="table-container">
<van-list
:finished="finished"
finished-text="没有更多了"
@load="onLoad"
>
<van-cell v-for="item in tableData" :key="item.it">
{{item.postionTitle}}
<span class="assress">{{item.address}}</span>
<!-- {{ item.UpdatedAt | formatYYYYMMDD }} -->
<span class="tab-btn" @click="readyInfo(item)">
查看
</span>
</van-cell>
</van-list>
<!-- <van-table :data="tableData" style="width: 100%">
<van-table-column prop="postionTitle" label="职位名称" />
<van-table-column prop="postion" label="职位类别" align="center" />
<van-table-column prop="address" label="工作地点" align="center" />
<van-table-column align="right">
<template slot-scope="scope">
<span class="ready" @click="readyInfo(scope.row)"> 查看</span>
</template>
</van-table-column>
</van-table> -->
<div class="pagination">
<van-pagination v-model="currentPage" :total-items="total" :show-page-size="10" @click="handleCurrentChange">
<template #prev-text>
<van-icon name="arrow-left" />
</template>
<template #next-text>
<van-icon name="arrow" />
</template>
<template #page="{ text }">{{ text }}</template>
</van-pagination>
</div>
</div>
<!-- <div class="table-container" v-show="index == 1">
<van-table :data="tableData2" style="width: 100%">
<van-table-column prop="postionTitle" label="职位名称" />
<van-table-column prop="postion" label="职位类别" align="center" />
<van-table-column prop="address" label="工作地点" align="center" />
<van-table-column align="right">
<template slot-scope="scope">
<span class="ready" @click="readyInfo(scope.row)"> 查看</span>
</template>
</van-table-column>
</van-table>
<div class="pagination">
<van-pagination
background
:current-page="currentPage2"
@current-change="handleCurrentChange2"
layout="prev, pager, next"
:total="total2"
>
</van-pagination>
</div>
</div> -->
</div>
</div>
</div>
</template>
<script>
import bg from "../../images/bg.png";
import api from "@/http/api";
export default {
components: {},
data() {
return {
imgUrl: {
bg: bg,
},
infos: [],
currentPage: 1,
pageSize: 15,
total: 0,
currentPage2: 1,
pageSize2: 15,
total2: 0,
index: 0,
options: [
],
value: "",
options2: [
],
value2: "",
tableData: [],
tableData2: [],
input: "",
base_title: "",
};
},
watch:{
index(a, b){
this.getData(1);
}
},
mounted() {
this.getData(0);
// this.getBtags();
},
methods: {
resft() {
this.value = "";
this.value2 = "";
this.base_title = "";
this.getData(0);
this.getData2(1);
},
getBtags() {
api.getBtags().then((res) => {
});
},
sousuo() {
if (this.index == 0) {
this.getData(0);
} else {
this.getData2(1);
}
},
getData(type) {
api
.getTable("pubjoin/getJoinList", {
page: this.currentPage,
pageSize: this.pageSize,
joinType: type,
// base: this.value,
// base_type: this.value2,
postion_title: this.base_title,
})
.then((res) => {
console.log(res);
this.tableData = res.data.list;
this.total = res.data.total;
});
},
getData2(type) {
api
.getTable("pubjoin/getJoinList", {
page: this.currentPage,
pageSize: this.pageSize,
// status: type,
// base: this.value,
postion_title: this.value2,
})
.then((res) => {
console.log(res);
this.tableData2 = res.data.list;
this.total2 = res.data.total;
});
},
handleCurrentChange(val) {
this.currentPage = val;
this.getData();
},
handleCurrentChange2(val) {
this.currentPage2 = val;
this.getData2();
},
link(id) {
console.log(id);
this.$router.push({ path: "/info_detial", query: { info_id: id } });
},
change(index) {
this.index = index;
this.getData(index)
},
readyInfo(row) {
window.localStorage.join = JSON.stringify(row);
this.$router.push({
path: "./join_info",
query: {
join_id: row.id,
},
});
},
},
};
</script>
<style lang="less" scoped>
@import "./index.less";
</style>

View File

@ -0,0 +1,66 @@
.it-container{
.it-temp1{
img{
width: 100%;
}
}
.it-temp2{
position: relative;
z-index: 1;
.content{
padding: 0 1.8rem;
text-align: center;
.title{
display: inline-block;
font-size: .28rem;
font-weight: 400;
color: #001D2D;
height: .32rem;
line-height: .32rem;
letter-spacing: .01rem;
text-align: center;
cursor: pointer;
margin: 0 .3rem;
margin-bottom: .4rem;
position: relative;
img{
position: absolute;
bottom: -.2rem;
width: .68rem;
left: 50%;
margin-left: -.34rem;
}
}
}
.contact-us{
margin-top: .3rem;
.title{
font-size: .28rem;
font-weight: 400;
color: #606266;
line-height: .52rem;
margin-top: .3rem;
}
.map{
padding: .3rem 0 1rem 0;
}
}
}
::v-deep .van-tabs__line {
background-color: #008cd5;
}
}
// .amap-marker-content img{
// width: 25px;
// height: 34px;
// }

View File

@ -0,0 +1,84 @@
<template>
<div class="it-container">
<div class="it-temp1">
<img v-lazy="imgUrl.bg" />
</div>
<div class="container-centent">
<div class="it-temp2">
<div class="contact-us">
<van-tabs>
<van-tab
v-for="(item, index) in address"
:title="item.ctiy"
@click="change(index)"
>
<div class="title">
地址 {{ item.text }}
<br />
电话 {{ item.phone }}
</div>
<div class="map" style="height: 300px;">
<el-amap
:vid="'amap' + index"
class="amap"
:zoom="12"
:center="item.coordinate"
:plugin="plugin"
>
<el-amap-marker
:vid="'component-marker' + index"
:position="item.coordinate"
/>
</el-amap>
</div>
</van-tab>
</van-tabs>
</div>
</div>
</div>
</div>
</template>
<script>
import bg from "../../images/bg.png";
import api from "@/http/api";
export default {
components: {},
data() {
return {
imgUrl: {
bg: bg,
},
addIndex: 0,
address: JSON.parse(JSON.parse(window.localStorage.homeData)).address,
plugin: [
//
{
pName: "Scale", //
events: {
init(instance) {
console.log(instance);
},
},
},
],
};
},
methods: {
change(index) {
this.addIndex = index;
},
},
mounted() {
// getData()
},
};
</script>
<style lang="less" scoped>
@import "./index.less";
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 985 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 488 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 442 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 523 KiB

152
src/views/apply/apply.less Normal file
View File

@ -0,0 +1,152 @@
.it-container{
.it-temp1{
// height: 7.88rem;
// display: flex;
// align-items: center;
// justify-content: center;
// text-align: center;
position: relative;
// z-index: 1;
img{
// position: absolute;
width: 100%;
height: 100%;
// top:0;
// left: 0;
// z-index: 0;
position: relative;
z-index: 0;
}
.title{
font-size: .6rem;
font-weight: 500;
color: #EFEFEF;
line-height: .89rem;
position: absolute;
z-index: 1;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
// .sub-title{
// font-size: .18rem;
// font-weight: 500;
// color: #EFEFEF;
// line-height: .62rem;
// }
}
.it-temp2{
padding-top: .4rem;
position: relative;
z-index: 1;
.text-sub{
font-size: .18rem;
font-weight: 400;
color: #606266;
line-height: .24rem;
text-align: center;
margin-bottom: 1.5rem;
}
.bg-img{
position: absolute;
width: 8.48rem;
height: auto;
top: 0;
right: 0;
}
.bg-img2{
position: absolute;
width: 7.14rem;
left: 0;
top: 11rem;
}
.content-list{
.title{
font-weight: bold;
font-size: .28rem;
padding: .3rem .3rem 0;
}
.sub-title{
font-size: .26rem;
padding: .3rem;
line-height: .4rem;
text-align: justify;
}
}
.content-item2{
// padding-left: 1.8rem;
.box{
.logo{
right: .7rem;
}
}
.setp{
position: absolute;
left: .2rem;
right: auto;
span{
display: block;
width: .24rem;
height: .24rem;
margin-bottom: .12rem;
&:first-child{
background-color: #6EB92C;
}
&:last-child{
background-color: #E1EAFD;
}
}
}
.num{
left: -.6rem;
}
}
.apply-list{
display: flex;
border: 1px solid #DFDFDF;
position: relative;
margin-bottom: .8rem;
.icon{
position: absolute;
right: 0;
top: 0;
width: 1.66rem;
}
.logo{
flex:none;
width: 3.8rem;
height: 1.5rem;
img{
width: 100%;
height: 100%;
display: block;
object-fit: cover;
}
}
.apply-resc{
flex: auto;
padding: .26rem .3rem 0 .3rem;
.title{
font-size: .24rem;
font-weight: bold;
color: #001D2D;
margin-bottom: .06rem;
}
.text{
font-size: .18rem;
font-weight: 400;
color: #606266;
line-height: .24rem;
}
}
}
}
}

158
src/views/apply/apply.vue Normal file
View File

@ -0,0 +1,158 @@
<template>
<div class="it-container">
<div class="it-temp1">
<img v-lazy="homeData.bannerList[3].image" />
<!-- <div class="title">应用案例</div> -->
<!-- <div class="sub-title">专业的 IT 服务管理体系为核心并利用高效的人工智能技术和自动化运维工具不断的追求 IT 场景的稳定性安全性可靠性帮助行业及企业用户把信息技术应用转化为业务的驱动力充分挖掘信息技术的能量获得竞争的优势</div> -->
</div>
<div class="container-centent">
<div class="it-temp2">
<div class="title-sub">
<span></span>
优质客户
<span></span>
</div>
<van-row
class="content-list"
v-for="(item, index) in homeData.customer"
@click="toLink2(index)"
>
<van-col :span="24">
<img v-lazy="item.image" style="width: 100%" />
</van-col>
<van-col :span="24">
<div class="content-item">
<div class="box">
<!-- <span class="num">01</span> -->
<div class="title">
{{ item.title }}
</div>
<div class="sub-title">
{{ item.content }}
</div>
</div>
</div>
</van-col>
</van-row>
<van-row
class="content-list"
v-for="item in tableData"
>
<van-col :span="24">
<img v-lazy="item.image" style="width: 100%" />
</van-col>
<van-col :span="24">
<div class="content-item">
<div class="box">
<!-- <span class="num">01</span> -->
<div class="title">
{{ item.title }}
</div>
<div class="sub-title">
{{ item.content }}
</div>
</div>
</div>
</van-col>
</van-row>
</div>
</div>
<Form />
</div>
</template>
<script>
import Form from "@/components/Form.vue";
// import bg from "./images/bg.png";
// import img1 from "./images/img1.png";
// import img2 from "./images/img2.png";
// import img3 from "./images/img3.png";
// import img4 from "./images/img4.png";
// import img5 from "./images/img5.png";
// import img6 from "./images/img6.png";
// import img7 from "./images/img7.png";
// import img8 from "./images/img8.png";
// import img9 from "./images/img9.png";
// import icon1 from "./images/icon1.png";
// import icon2 from "./images/icon2.png";
// import icon3 from "./images/icon3.png";
// import icon4 from "./images/icon4.png";
// import icon5 from "./images/icon5.png";
import api from "@/http/api";
export default {
components: { Form },
data() {
return {
imgUrl: {
// bg: bg,
// img1: img1,
// img2: img2,
// img3: img3,
// img4: img4,
// img5: img5,
// img6: img6,
// img7: img7,
// img8: img8,
// img9: img9,
// icon1: icon1,
// icon2: icon2,
// icon3: icon3,
// icon4: icon4,
// icon5: icon5,
},
tableData: [],
homeData: JSON.parse(JSON.parse(window.localStorage.homeData)),
// homeData:{bannerList:[]}
};
},
methods: {
toLink2(index){
switch (index) {
case 0:
this.$router.push('/app1')
break;
case 1:
this.$router.push('/app2')
break;
case 2:
this.$router.push('/app3')
break;
case 3:
this.$router.push('/app4')
break;
default:
break;
}
},
// goLink(path) {
// this.$router.push(path);
// },
getData() {
api
.getTable("pubcases/getCasesList", {
page: 1,
pageSize: 20,
})
.then((res) => {
console.log(res);
this.tableData = res.data.list;
});
},
// getHomeData() {
// api.getHome().then((res) => {
// if (res.data.customer) {
// this.homeData = res.data;
// }
// });
// },
},
mounted() {
this.getData();
// this.getHomeData()
},
};
</script>
<style lang="less" scoped>
@import "./apply.less";
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

View File

@ -0,0 +1,378 @@
.it-container {
.it-temp1 {
img{
width: 100%;
z-index: 0;
}
.title{
position: absolute;
font-size: .36rem;
top: 50%;
left: 50%;
transform: translateY(-50%) translateX(-50%);
font-weight: 500;
color: #FFFFFF;
background-color: rgba(0, 39, 59, 0.2);
height: .88rem;
line-height: .88rem;
border-radius: .26rem;
padding: 0 .24rem;
z-index: 1;
width: 100%;
text-align: center;
}
}
// .breadcrumb {
// padding: 0.6rem 1.2rem 0.4rem 1.2rem;
// }
.it-temp2 {
// padding-top: .3rem;
position: relative;
z-index: 1;
.temp2-text {
font-size: 0.26rem;
font-weight: 400;
color: #606266;
line-height: 0.4rem;
text-align: justify;
padding: .4rem .2rem;
}
// img {
// display: block;
// width: 9.65rem;
// margin: auto;
// }
}
.it-temp3 {
position: relative;
.temp2-text {
font-size: 0.26rem;
font-weight: 400;
color: #606266;
line-height: 0.4rem;
text-align: justify;
padding: 0rem .2rem;
}
.pro-flex {
margin-top: .3rem;
.item {
margin-bottom: 0.4rem;
.content {
// line-height: 0.32rem;
margin-top:0rem;
// text-align: center;
position: relative;
// padding-top: .5rem;
div {
// position: absolute;
width: 100%;
left: 0;
top: 0;
// text-align: center;
font-size: 1.4rem;
font-weight: bold;
color: #eef2fb;
z-index: 0;
span {
position: relative;
top: -0.2rem;
width: 1rem;
height: 1rem;
border-radius: 0.5rem;
display: inline-flex;
// line-height: 1rem;
text-align: center;
justify-content: center;
align-items: center;
img {
width: 0.6rem;
height: 0.6rem;
display: block;
}
}
}
& > span {
position: relative;
z-index: 1;
font-size: 0.18rem;
font-weight: 500;
color: #001d2d;
text-align: left;
// padding-left: 1.3rem;
// padding-right: .6rem;
display: block;
top: -0.3rem;
line-height: 0.32rem;
}
.icon {
margin-left: .4rem;
color: #e1eafd;
span {
background-color: #e1eafd;
}
}
.icon2 {
color: #ecf4e3;
span {
background-color: #ecf4e3;
}
}
.icon3 {
color: #e1eafd;
span {
background-color: #e1eafd;
}
}
.title {
margin-top: -.2rem;
font-size: 0.30rem;
font-weight: 500;
color: #001d2d;
margin-bottom: .2rem;
margin-left: .3rem;
}
.text {
font-size: .26rem;
font-weight: 400;
color: #606266;
line-height: .32rem;
padding: 0 .3rem;
}
}
}
.pro-top {
ul {
display: flex;
position: relative;
left: -0.66rem;
padding-left: 0.2rem;
li {
flex: 1;
color: #447ec0;
font-size: 0.2rem;
text-align: center;
}
}
}
.pro-center {
img {
width: 100%;
}
}
.pro-bottom {
ul {
display: flex;
position: relative;
left: 0.5rem;
padding-left: 0.2rem;
li {
flex: 1;
color: #447ec0;
font-size: 0.2rem;
text-align: center;
}
}
}
}
.img{
img{
display: block;
width: 100%;
margin: auto;
margin-top: .2rem;
}
}
}
.it-temp3 {
position: relative;
z-index: 1;
.text-sub {
font-size: 0.18rem;
font-weight: 400;
color: #606266;
line-height: 0.24rem;
text-align: center;
margin-bottom: 0.8rem;
}
.bg-img {
position: absolute;
width: 8.48rem;
height: auto;
top: 0;
right: 0;
}
.bg-img2 {
position: absolute;
width: 7.14rem;
left: 0;
top: 11rem;
}
.content-list {
margin-bottom: 1rem;
img {
width: 100%;
// height: 2.4rem;
}
}
.content-item {
position: relative;
padding-left: 0.66rem;
display: flex;
align-items: center;
height: 100%;
.box {
position: relative;
}
.setp {
position: absolute;
right: 0.2rem;
width: 0.24rem;
height: 100%;
span {
display: block;
width: 0.24rem;
height: 0.24rem;
margin-bottom: 0.12rem;
&:first-child {
background-color: #008cd5;
}
&:last-child {
background-color: #ecf4e3;
}
}
}
.num {
position: absolute;
top: -0.66rem;
left: -0.64rem;
font-size: 0.72rem;
font-weight: 500;
color: #001d2d;
opacity: 0.06;
}
.title {
font-size: 0.36rem;
font-weight: 400;
color: #001d2d;
line-height: 0.24rem;
letter-spacing: 0.01rem;
margin-bottom: 0.2rem;
}
.sub-title {
font-size: 0.2rem;
font-weight: 400;
color: #606266;
line-height: 0.32rem;
width: 80%;
}
}
.content-item2 {
padding-left: 1.8rem;
.setp {
position: absolute;
left: 0.2rem;
right: auto;
span {
display: block;
width: 0.24rem;
height: 0.24rem;
margin-bottom: 0.12rem;
&:first-child {
background-color: #6eb92c;
}
&:last-child {
background-color: #e1eafd;
}
}
}
.num {
left: -0.6rem;
}
}
}
.it-temp5{
// padding-bottom: 0;
position: relative;
margin-top: .4rem;
.item{
margin-bottom: .5rem;
.title{
line-height: .32rem;
// text-align: center;
position: relative;
padding-top: .8rem;
div{
position: absolute;
width: 100%;
left: .38rem;
top: 0;
// text-align: center;
font-size: 1.40rem;
font-weight: bold;
color: #EEF2FB;
z-index: 0;
span{
width: 1rem;
height: 1rem;
border-radius: .5rem;
display: inline-block;
}
}
& > span{
position: relative;
z-index: 1;
font-size: .24rem;
font-weight: 500;
color: #606266;
left: .56rem;
display: inline-block;
}
.title1{
color:#E1EAFD;
span{
background-color: #E1EAFD;
}
}
.title2{
color:#ECF4E3;
span{
background-color: #ECF4E3;
}
}
}
}
.text{
font-size: .18rem;
font-weight: 400;
color: #606266;
line-height: .32rem;
margin-top: .6rem;
padding: .4rem;
}
}
// ------------------
}

View File

@ -0,0 +1,231 @@
<template>
<div class="it-container">
<div class="it-temp1">
<img v-lazy="imgUrl.bg" />
<div class="title">某知名运动品牌</div>
</div>
<!-- <div class="breadcrumb">
<van-breadcrumb separator-class="van-icon-arrow-right">
<van-breadcrumb-item :to="{ path: '/apply' }"
>应用案例</van-breadcrumb-item
>
<van-breadcrumb-item>某知名运动品牌</van-breadcrumb-item>
</van-breadcrumb>
</div> -->
<div class="container-centent">
<div class="it-temp2">
<div class="temp2-text">
随着该公司在中国的经营不断扩大品牌店铺在中国境内最多总数达到8255间在中国几乎每个县级以上的城市都有该品牌的销售网点由于业务的迅速发展IT支持和管理模式已经无法满足当前用户需求依靠该企业自身的IT团队已不足以支持全国IT治理成为该公司战略治理中关键的一个方面
</div>
<!-- <img v-lazy="imgUrl.img1" alt=""> -->
</div>
<div class="it-temp3">
<div class="title-sub">
<span></span>
服务方案
<span></span>
</div>
<div class="temp2-text">
根据该企业的IT现状及业务模式护航科技将在IT基础架构的运营维护中建立起标准化终端的IT服务管理项目实施流程制定服务管理外包实施
</div>
<div class="pro-flex">
<van-row :gutter="0">
<van-col :span="24">
<div class="item">
<div class="content">
<div class="icon">
<span> <img v-lazy="imgUrl.img1" alt="" /> </span>1
</div>
<div class="title">新店开店支持服务</div>
<div class="text">
针对全国门店网络的不断扩大
护航在集团总部建立了呼叫中心
实现了需求和故障的统一受理和
统一支持
</div>
</div>
</div>
</van-col>
<van-col :span="24">
<div class="item">
<div class="content">
<div class="icon icon2">
<span> <img v-lazy="imgUrl.img2" alt="" /> </span>2
</div>
<div class="title">EPOS 系统全国推广服务</div>
<div class="text">
该企业门店系统共升级了三次
从起初的POS系统到EPOS1
EPOS2和EPOS3代系统
护航负责了全国门店从POS到
EPOS3代系统的升级切换工作
</div>
</div>
</div>
</van-col>
<van-col :span="24">
<div class="item">
<div class="content">
<div class="icon">
<span> <img v-lazy="imgUrl.img3" alt="" /> </span>3
</div>
<div class="title">EPOS全国门店运营支持服务</div>
<div class="text">
为了确保全国门店IT系统的稳定运行
避免由于销售系统故障影响店面销售
并在销售高峰期能够保障全国门店得
到高质量的支持护航利用MSP平台
增加了服务模式的弹性有效确保了
销售高峰期时段服务支持效率
</div>
</div>
</div>
</van-col>
</van-row>
</div>
<div class="img">
<img v-lazy="imgUrl.img4" alt="" />
</div>
</div>
<div class="it-temp5">
<div class="title-sub">
<span></span>
护航科技服务价值
<span></span>
</div>
<van-row :gutter="0">
<van-col :span="12">
<div class="item">
<div class="title">
<div class="title1"><span></span>1</div>
<span
>保证了IT基础设施桌面及<br />后台应用系统的稳定运行</span
>
</div>
</div>
</van-col>
<van-col :span="12">
<div class="item">
<div class="title">
<div class="title2"><span></span>2</div>
<span
>建立并完善了服务流程<br />大的改善了IT服务的高安全<br />性和高可用性</span
>
</div>
</div>
</van-col>
<van-col :span="12">
<div class="item">
<div class="title">
<div class="title2"><span></span>3</div>
<span
>建立了规范的IT监控管理平<br />台与服务管理平台根据业<br />务部门提出的服务级别<br />灵活性和成本目标来优<br />化IT资源</span
>
</div>
</div>
</van-col>
<van-col :span="12">
<div class="item">
<div class="title">
<div class="title1"><span></span>4</div>
<span
>为IT投资决策提供精确的成<br />本信息, 有利于提高IT资源的<br />利用效率,
并提高投入产出<br />成本可预见</span
>
</div>
</div>
</van-col>
</van-row>
<van-row :gutter="0">
<van-col :span="12">
<div class="item">
<div class="title">
<div class="title1"><span></span>5</div>
<span style="min-height: 1.6rem;"
>保证了新门店IT基础设施<br />桌面和EPOS能够在<br />规定时间内完成部署<br />线和培训从而保障了门<br />店的如期开业</span
>
</div>
</div>
</van-col>
<van-col :span="12">
<div class="item">
<div class="title">
<div class="title2"><span></span>6</div>
<span style="min-height: 1.6rem;"
>将现有的各地业务部门的<br />IT支持人员进行整合<br />化人员编制降低IT运营<br />成本
20%</span
>
</div>
</div>
</van-col>
<van-col :span="12">
<div class="item">
<div class="title">
<div class="title2"><span></span>7</div>
<span
style="min-height: 1.6rem;">使繁杂的IT管理变得标准<br />而有序并从以往的被动<br />式服务转向主动式服务<br />有效提升IT服务运作效率</span
>
</div>
</div>
</van-col>
<van-col :span="12">
<div class="item">
<div class="title">
<div class="title1"><span></span>8</div>
<span
style="min-height: 1.6rem;">帮助企业IT管理者掌握IT<br />服务管理为企业提供卓<br />完善超值的IT全方<br />位规模服务</span
>
</div>
</div>
</van-col>
</van-row>
</div>
</div>
</div>
</template>
<script>
import bg from "./images/bg.png";
import img1 from "./images/img1.png";
import img2 from "./images/img2.png";
import img3 from "./images/img3.png";
import img4 from "./images/img4.png";
export default {
data() {
return {
cateList: [
"虚拟化",
"双机热备",
"邮件系统",
"监控系统",
"数据库建设",
"ERP系统",
],
cateList2: [
"方案咨询",
"设计和建档维护",
"现场应急救援",
"按需例行巡检",
"主机系统安装",
"备份与升级",
"性能及操作系统优化",
"数据库配置",
"系统日常运维管理规范",
],
imgUrl: {
bg: bg,
img1: img1,
img2: img2,
img3: img3,
img4: img4,
},
};
},
};
</script>
<style lang="less" scoped>
@import "./index.less";
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

View File

@ -0,0 +1,149 @@
.it-container {
.it-temp1 {
img{
width: 100%;
z-index: 0;
}
.title{
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
display: flex;
justify-content: center;
align-items: center;
div{
font-size: .36rem;
font-weight: 500;
color: #FFFFFF;
background-color: rgba(0, 39, 59, 0.2);
height: .88rem;
line-height: .88rem;
border-radius: .26rem;
padding: 0 .24rem;
z-index: 1;
text-align: center;
}
}
}
.it-temp2 {
// padding-top: .3rem;
position: relative;
z-index: 1;
.temp2-text {
font-size: 0.26rem;
font-weight: 400;
color: #606266;
line-height: 0.4rem;
text-align: justify;
padding: .4rem .2rem;
}
}
.it-temp3 {
position: relative;
.img{
img{
display: block;
width: 100%;
margin: auto;
margin-top: .2rem;
}
}
}
.it-temp4{
position: relative;
margin-top: .3rem;
.text{
font-size: 0.26rem;
font-weight: 400;
color: #606266;
line-height: 0.4rem;
text-align: justify;
padding: .4rem .2rem;
}
.img{
img{
display: block;
width: 100%;
margin: auto;
margin-top: .2rem;
}
}
}
.it-temp5{
// padding-bottom: 0;
position: relative;
margin-top: .4rem;
.item{
margin-bottom: .5rem;
.title{
line-height: .32rem;
// text-align: center;
position: relative;
padding-top: .5rem;
div{
position: absolute;
width: 100%;
left: .38rem;
top: 0;
// text-align: center;
font-size: 1.40rem;
font-weight: bold;
color: #EEF2FB;
z-index: 0;
span{
width: 1rem;
height: 1rem;
border-radius: .5rem;
display: inline-block;
}
}
& > span{
position: relative;
z-index: 1;
font-size: .24rem;
font-weight: 500;
color: #606266;
left: .56rem;
}
.title1{
color:#E1EAFD;
span{
background-color: #E1EAFD;
}
}
.title2{
color:#ECF4E3;
span{
background-color: #ECF4E3;
}
}
}
}
.text{
font-size: .18rem;
font-weight: 400;
color: #606266;
line-height: .32rem;
margin-top: .6rem;
padding: .4rem;
}
}
// ------------------
}

View File

@ -0,0 +1,113 @@
<template>
<div class="it-container">
<div class="it-temp1">
<img v-lazy="imgUrl.bg" />
<div class="title"><div>某大型互联网教育集团</div></div>
</div>
<!-- <div class="breadcrumb">
<van-breadcrumb separator-class="van-icon-arrow-right">
<van-breadcrumb-item :to="{ path: '/apply' }"
>应用案例</van-breadcrumb-item
>
<van-breadcrumb-item>某大型互联网教育集团</van-breadcrumb-item>
</van-breadcrumb>
</div> -->
<div class="container-centent">
<div class="it-temp2">
<div class="temp2-text">
该集团以语言培训为核心拥有短期培训系统基础教育系统文化传播系统科技产业系统咨询服务系统等多个发展平台是一家集教育培训教育产品研发教育服务等于一体的大型综合性教育科技集团该集团于2006年9月7日在美国纽约证券交易所成功上市成为中国大陆首家海外上市的教育培训机构
<br />护航科技为该集团及全国分支提供应用系统及桌面支持服务集中式服务台支持服务桌面运维支持及数据录入服务
</div>
<!-- <img v-lazy="imgUrl.img1" alt=""> -->
</div>
<div class="it-temp3">
<div class="title-sub">
<span></span>
管理机制
<span></span>
</div>
<div class="img">
<img v-lazy="imgUrl.img1" alt="" />
</div>
</div>
<div class="it-temp4">
<div class="title-sub">
<span></span>
整体服务方案设计
<span></span>
<div class="text">
为了确保服务质量首先对服务交付模式进行调整建立400热线为基础的统一服务支持模式在服务交付稳定的基础上将服务台由北京迁移至武汉
优化现有的服务流程并将服务策略落地到ITSM系统中将ITSM系统与呼叫系统对接形成统一的服务支持平台提升服务解决效率
配备符合标准的服务团队提供驻场支持配备一名专属的服务经理进行管控
</div>
</div>
<div class="img">
<img v-lazy="imgUrl.img2" alt="" />
</div>
</div>
<div class="it-temp5">
<div class="title-sub">
<span></span>
服务价值
<span></span>
</div>
<van-row :gutter="0">
<van-col :span="12">
<div class="item">
<div class="title">
<div class="title1"><span></span>1</div>
<span>专属备份人员确保不空岗</span>
</div>
</div>
</van-col>
<van-col :span="12">
<div class="item">
<div class="title">
<div class="title2"><span></span>2</div>
<span>专业技术平台保证系统的<br />实用性</span>
</div>
</div>
</van-col>
<van-col :span="12">
<div class="item">
<div class="title">
<div class="title2"><span></span>3</div>
<span>为项目定期进行流程优化</span>
</div>
</div>
</van-col>
<van-col :span="12">
<div class="item">
<div class="title">
<div class="title1"><span></span>4</div>
<span>公司级质量管理中心定期<br />进行质量检查</span>
</div>
</div>
</van-col>
</van-row>
</div>
</div>
</div>
</template>
<script>
import bg from "./images/bg.png";
import img1 from "./images/img1.png";
import img2 from "./images/img2.png";
export default {
data() {
return {
imgUrl: {
bg: bg,
img1: img1,
img2: img2,
},
};
},
};
</script>
<style lang="less" scoped>
@import "./index.less";
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

View File

@ -0,0 +1,384 @@
.it-container {
.it-temp1 {
img {
width: 100%;
z-index: 0;
}
.title {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
display: flex;
justify-content: center;
align-items: center;
div {
font-size: .36rem;
font-weight: 500;
color: #FFFFFF;
background-color: rgba(0, 39, 59, 0.2);
height: .88rem;
line-height: .88rem;
border-radius: .26rem;
padding: 0 .24rem;
z-index: 1;
text-align: center;
}
}
}
.it-temp2 {
// padding-top: .3rem;
position: relative;
z-index: 1;
.temp2-text {
font-size: 0.26rem;
font-weight: 400;
color: #606266;
line-height: 0.4rem;
text-align: justify;
padding: .4rem .2rem;
padding-bottom: .2rem;
}
}
.it-temp3 {
position: relative;
.temp2-text {
font-size: 0.26rem;
font-weight: 400;
color: #606266;
line-height: 0.4rem;
text-align: justify;
padding: 0rem .2rem;
margin-bottom: .2rem;
}
.img {
img {
display: block;
width: 88%;
margin: auto;
margin-top: .2rem;
}
}
}
.it-temp3 {
position: relative;
z-index: 1;
margin-top: .4rem;
.temp2-text {
font-size: 0.26rem;
font-weight: 400;
color: #606266;
line-height: 0.4rem;
text-align: justify;
padding: 0rem .2rem;
margin-bottom: .2rem;
}
.text-sub {
font-size: 0.18rem;
font-weight: 400;
color: #606266;
line-height: 0.24rem;
text-align: center;
margin-bottom: 0.8rem;
}
.bg-img {
position: absolute;
width: 8.48rem;
height: auto;
top: 0;
right: 0;
}
.bg-img2 {
position: absolute;
width: 7.14rem;
left: 0;
top: 11rem;
}
.content-list {
margin-bottom: 1rem;
img {
width: 100%;
// height: 2.4rem;
}
}
.content-item {
position: relative;
padding-left: 0.66rem;
display: flex;
align-items: center;
height: 100%;
.box {
position: relative;
}
.setp {
position: absolute;
right: 0.2rem;
width: 0.24rem;
height: 100%;
span {
display: block;
width: 0.24rem;
height: 0.24rem;
margin-bottom: 0.12rem;
&:first-child {
background-color: #008cd5;
}
&:last-child {
background-color: #ecf4e3;
}
}
}
.num {
position: absolute;
top: -0.66rem;
left: -0.64rem;
font-size: 0.72rem;
font-weight: 500;
color: #001d2d;
opacity: 0.06;
}
.title {
font-size: 0.36rem;
font-weight: 400;
color: #001d2d;
line-height: 0.24rem;
letter-spacing: 0.01rem;
margin-bottom: 0.2rem;
}
.sub-title {
font-size: 0.2rem;
font-weight: 400;
color: #606266;
line-height: 0.32rem;
width: 80%;
}
}
.content-item2 {
padding-left: 1.8rem;
.setp {
position: absolute;
left: 0.2rem;
right: auto;
span {
display: block;
width: 0.24rem;
height: 0.24rem;
margin-bottom: 0.12rem;
&:first-child {
background-color: #6eb92c;
}
&:last-child {
background-color: #e1eafd;
}
}
}
.num {
left: -0.6rem;
}
}
}
.it-temp5 {
// padding-bottom: 0;
position: relative;
margin-top: .4rem;
.temp2-text {
font-size: 0.26rem;
font-weight: 400;
color: #606266;
line-height: 0.4rem;
text-align: justify;
padding: 0rem .2rem;
margin-bottom: .2rem;
}
.pro-flex {
padding-left: .3rem;
.item {
// margin-bottom: 0.2rem;
.content {
// line-height: 0.32rem;
// text-align: center;
position: relative;
// padding-top: .5rem;
overflow: hidden;
.icon {
// position: absolute;
float: left;
font-size: 1.4rem;
font-weight: bold;
color: #eef2fb;
z-index: 0;
span {
position: relative;
top: -0.2rem;
width: 1rem;
height: 1rem;
border-radius: 0.5rem;
display: inline-flex;
// line-height: 1rem;
// text-align: center;
justify-content: center;
align-items: center;
img {
width: 0.6rem;
height: 0.6rem;
display: block;
}
}
}
// & > span {
// position: relative;
// z-index: 1;
// font-size: 0.18rem;
//
// font-weight: 500;
// color: #001d2d;
// text-align: left;
// // padding-left: 1.3rem;
// // padding-right: .6rem;
// display: block;
// top: -0.3rem;
// line-height: 0.32rem;
// }
.icon {
position: relative;
z-index: 0;
color: #e1eafd;
span {
background-color: #e1eafd;
}
}
.icon2 {
color: #ecf4e3;
span {
background-color: #ecf4e3;
}
}
.icon3 {
color: #e1eafd;
span {
background-color: #e1eafd;
}
}
// .title {
// margin-top: -.2rem;
// font-size: 0.24rem;
//
// font-weight: 500;
// color: #001d2d;
// margin-bottom: .2rem;
// margin-left: .3rem;
// }
.text {
position: relative;
z-index: 1;
// top: -.3rem;
display: block;
padding-top: .4rem;
font-size: .28rem;
float: left;
font-weight: 400;
color: #606266;
line-height: .44rem;
margin-left: .3rem;
span {
font-size: .24rem;
font-weight: 500;
color: #001D2D;
line-height: .44rem;
}
}
}
}
}
.img {
img {
width:100%;
display: block;
margin: auto;
}
}
.content-div {
.title {
text-align: center;
font-size: .36rem;
font-weight: 500;
color: #001D2D;
margin: .6rem 0 .3rem 0;
}
.text {
font-size: 0.26rem;
font-weight: 400;
color: #606266;
line-height: 0.4rem;
text-align: justify;
padding: 0rem .2rem;
margin-bottom: .2rem;
}
}
}
// ------------------
}

View File

@ -0,0 +1,126 @@
<template>
<div class="it-container">
<div class="it-temp1">
<img v-lazy="imgUrl.bg" />
<div class="title"><div>全球500强大型制造型企业</div></div>
</div>
<div class="container-centent">
<div class="it-temp2">
<div class="temp2-text">
经过多年的快速发展该企业迄今在中国已拥有27家本地企业在60个主要城市设有销售与服务分公司和1.5万名员工并且业务涵盖研发生产销售服务等多个维度2008年该企业在中国的订单额超过45亿美元销售额约41亿美元
</div>
<!-- <img v-lazy="imgUrl.img1" alt=""> -->
</div>
<div class="it-temp3">
<div class="title-sub">
<span></span>
服务方案
<span></span>
</div>
<div class="temp2-text">
护航科技股份有限公司简称护航科技帮助该企业在厦门建立了集中式呼叫中心实现IT服务从过去的分布式管理完全转变到先进高效的集中式管理模式该企业员工可以便捷的通过IT服务管理系统邮件电话即时通讯工具等便捷方式获取IT技术支持
</div>
<div class="img">
<img v-lazy="imgUrl.img1" alt="" />
</div>
</div>
<div class="it-temp5">
<div class="title-sub">
<span></span>
服务成果
<span></span>
</div>
<div class="temp2-text">
护航科技帮助该企业(中国)实现IT服务从过去的分布式管理完全转变到更为先进高效的集中式管理模式
</div>
<div class="pro-flex">
<van-row :gutter="0">
<van-col :span="24">
<div class="item">
<div class="content">
<div class="icon">
<span> <img v-lazy="imgUrl.img2" alt="" /> </span>1
</div>
<div class="text">
服务终端用户数已超过<br />
<span>11000 </span>
</div>
</div>
</div>
</van-col>
<van-col :span="24">
<div class="item">
<div class="content">
<div class="icon icon2">
<span> <img v-lazy="imgUrl.img3" alt="" /> </span>2
</div>
<div class="text">
日均case处理量超过<br />
<span>700 </span>
</div>
</div>
</div>
</van-col>
<van-col :span="24">
<div class="item">
<div class="content">
<div class="icon">
<span> <img v-lazy="imgUrl.img4" alt="" /> </span>3
</div>
<div class="text">
一线解决率<br />
<span>>85%</span>
</div>
</div>
</div>
</van-col>
</van-row>
</div>
<div class="img">
<img v-lazy="imgUrl.img5" alt="" />
</div>
<div class="content-div">
<div class="title">极虎病毒事件</div>
<div class="text">
2010年3月底该企业公司暴发了一次大规模的网络病毒短期内上海天津西安武汉青岛重庆南京等多个分公司和生产基地的计算机
网络服务受到影响面对这突如其来的异常护航科技的技术团队调用全国十几个城市的资源对各个可能有问题的办事处进行电脑检查查杀感
染病毒的机器22护航协调了十六名工程师到上海办事处帮忙查杀病毒
22日到24日增加了全国巡检最大程度降低了病毒对用户的影响
另一方面项目经理带领热线支持团队大力配合各地区病毒的查杀各Team
Leader都加班加点协调各项工作22电话量剧增高峰期一小时
打进400多个电话全天电话量近1300个面对如此多的电话热线团队表现出了良好的专业素质将掉线率控制在较低水平保证了服务水平
短短时间内护航完成了几乎不可能完成的任务把病毒带来的影响降到了最低程度此重大故障的及时响应及时解决得到了该企业中国
公司客户的高度认可
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import bg from "./images/bg.png";
import img1 from "./images/img1.png";
import img2 from "./images/img2.png";
import img3 from "./images/img3.png";
import img4 from "./images/img4.png";
import img5 from "./images/img5.png";
export default {
// components: { ArrowRight },
data() {
return {
imgUrl: {
bg: bg,
img1: img1,
img2: img2,
img3: img3,
img4: img4,
img5: img5,
},
};
},
};
</script>
<style lang="less" scoped>
@import "./index.less";
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

View File

@ -0,0 +1,288 @@
.it-container {
.it-temp1 {
position: relative;
img {
width: 100%;
}
.title {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
display: flex;
justify-content: center;
align-items: center;
div {
font-size: .36rem;
font-weight: 500;
color: #FFFFFF;
background-color: rgba(0, 39, 59, 0.2);
height: .88rem;
line-height: .88rem;
border-radius: .26rem;
padding: 0 .24rem;
z-index: 1;
text-align: center;
}
}
}
.it-temp2 {
position: relative;
z-index: 1;
.temp2-text {
font-size: 0.26rem;
font-weight: 400;
color: #606266;
line-height: 0.4rem;
text-align: justify;
padding: .4rem .2rem;
}
img {
display: block;
width: 9.65rem;
margin: auto;
}
}
.it-temp3 {
position: relative;
padding: 0 .2rem;
.temp2-text {
font-size: 0.26rem;
font-weight: 400;
color: #606266;
line-height: 0.4rem;
text-align: justify;
padding: 0rem .2rem;
margin-bottom: .4rem;
}
.item{
margin-bottom: .5rem;
.title{
line-height: .32rem;
// text-align: center;
position: relative;
// padding-top: .88rem;
overflow: hidden;
div{
// position: absolute;
// width: 100%;
// left: .38rem;
// top: 0;
// text-align: center;
font-size: 1.20rem;
font-weight: bold;
color: #EEF2FB;
z-index: 0;
overflow: hidden;
line-height: 1rem;
span{
width: 1.3rem;
height: 1.3rem;
border-radius: .7rem;
display: flex;
justify-content: center;
align-items: center;
text-align: center;
// line-height: 1rem;
float: left;
img{
width: 0.6rem;
}
}
}
& > span{
position: relative;
z-index: 1;
font-size: .30rem;
float: left;
width: calc(100% - 1.3rem);
display: block;
font-weight: 500;
color: #606266;
// left: .56rem;
padding:0 .2rem;
line-height: .44rem;
.text{
font-size: .24rem;
font-weight: 400;
color: #606266;
line-height: .2rem;
}
}
.title1{
color:#E1EAFD;
float: left;
span{
background-color: #E1EAFD;
}
}
.title2{
color:#ECF4E3;
span{
background-color: #ECF4E3;
}
}
.title3{
color:#E1EAFD;
span{
background-color: #E1EAFD;
}
}
.title4{
color:#ECF4E3;
span{
background-color: #ECF4E3;
}
}
}
}
}
.it-temp4{
position: relative;
.temp2-text {
font-size: 0.26rem;
font-weight: 400;
color: #606266;
line-height: 0.4rem;
text-align: justify;
padding: 0rem .2rem;
margin-bottom: .4rem;
}
.img{
img{
display: block;
width: 100%;
margin: auto;
margin-top: .2rem;
margin-bottom: .4rem;
}
}
// .text{
// margin-top: .3rem;
// font-size: .18rem;
// font-weight: 400;
// color: #606266;
// line-height: .32rem;
// }
}
.it-temp5{
position: relative;
.item{
margin-bottom: .5rem;
padding: 0 .24rem;
.title{
line-height: .32rem;
// text-align: center;
position: relative;
// padding-top: .88rem;
overflow: hidden;
div{
// position: absolute;
// width: 100%;
// left: .38rem;
// top: 0;
// text-align: center;
font-size: 1.20rem;
font-weight: bold;
color: #EEF2FB;
z-index: 0;
overflow: hidden;
line-height: 1rem;
span{
width: 1rem;
height: 1rem;
border-radius: .7rem;
display: flex;
justify-content: center;
align-items: center;
text-align: center;
// line-height: 1rem;
float: left;
img{
width: 0.6rem;
}
}
}
& > span{
position: relative;
z-index: 1;
font-size: .26rem;
float: left;
width: calc(100% - 1.8rem);
display: block;
font-weight: 500;
color: #606266;
// left: .56rem;
padding:0 .3rem;
line-height: .44rem;
// .text{
// font-size: .24rem;
// font-weight: 400;
// color: #606266;
// line-height: .2rem;
// }
}
.title1{
color:#E1EAFD;
float: left;
span{
background-color: #E1EAFD;
}
}
.title2{
color:#ECF4E3;
span{
background-color: #ECF4E3;
}
}
.title3{
color:#E1EAFD;
span{
background-color: #E1EAFD;
}
}
.title4{
color:#ECF4E3;
span{
background-color: #ECF4E3;
}
}
}
}
// .text{
// font-size: .24rem;
// font-weight: 400;
// color: #606266;
// line-height: .32rem;
// margin-top: .6rem;
// padding: .4rem;
// }
}
// ------------------
}

View File

@ -0,0 +1,216 @@
<template>
<div class="it-container">
<div class="it-temp1">
<img v-lazy="imgUrl.bg" />
<div class="title"><div>某大型综合类央企</div></div>
</div>
<div class="container-centent">
<div class="it-temp2">
<div class="temp2-text">
该企业成立于1949年经过多年的努力从最初的粮油食品贸易公司发展成为中国领先的农产品食品领域多元化产品和服务供应商致力打造从田间到餐桌的全产业链粮油食品企业建设全服务链的城市综合体利用不断再生的自然资源为人类提供营养健康的食品高品质的生活空间及生活服务贡献于民众生活的富足和社会的繁荣稳定
</div>
<!-- <img v-lazy="imgUrl.img1" alt=""> -->
</div>
<div class="it-temp3">
<div class="title-sub">
<span></span>
项目背景
<span></span>
</div>
<div class="temp2-text">
根据该企业桌面运维服务外包的特殊性及本次项目需求特点护航结合以往典型客户服务经验在运维过程中着重关注以下几个方面
</div>
<van-row :gutter="10">
<van-col :span="24">
<div class="item">
<div class="title">
<div class="title1">
<span><img src="./images/icon1.png" /></span>
</div>
<span>
运维交接平滑过渡<br />
<span class="text"
>保证项目的平滑交接通过保障手段来降低由于交接可能导致的服务质量不稳定的情况</span
>
</span>
</div>
</div>
</van-col>
<van-col :span="24">
<div class="item">
<div class="title">
<div class="title1 title2" style="float: right">
<span><img src="./images/icon2.png" /></span>
</div>
<span style="float: right; text-align: right;"
>量化 IT 服务<br />
<span class="text"
>针对IT请求和故障设立不同级别的响应和解决处理时间制定人员流程KPI考核体系依据SLA服务级别协议进行交付服务管理</span
></span
>
</div>
</div>
</van-col>
<van-col :span="24">
<div class="item">
<div class="title">
<div class="title1">
<span><img src="./images/icon3.png" /></span>
</div>
<span
>服务团队人员稳定<br />
<span class="text"
>通过运维数据分析故障变化趋势对高发故障进行针对性管理与培训减少故障发生</span
></span
>
</div>
</div>
</van-col>
</van-row>
<van-row :gutter="10">
<van-col :span="24">
<div class="item">
<div class="title">
<div class="title1 title2" style="float: right; text-align: right;">
<span><img src="./images/icon4.png" /></span>
</div>
<span style="float: right; text-align: right;"
>服务团队人员稳定<br />
<span class="text"
>形成关键岗位组内AB角色备份的策略同时公司对项目团队人员进行备份双重保障确保服务连续性</span
></span
>
</div>
</div>
</van-col>
<van-col :span="24">
<div class="item">
<div class="title">
<div class="title1">
<span><img src="./images/icon5.png" /></span>
</div>
<span
>运维服务可视化<br />
<span class="text"
>充分利用IT服务管理工具进行日常管理使得管理人员能够实时掌握当前的服务状态做到及时干预及时调整并提高管理效率运维服务可视化</span
></span
>
</div>
</div>
</van-col>
<van-col :span="24">
<div class="item">
<div class="title">
<div class="title1 title2" style="float: right; text-align: right;">
<span><img src="./images/icon6.png" /></span>
</div>
<span style="float: right; text-align: right;"
>提高一线解决率<br />
<span class="text"
>不断总结和分享知识利用知识提高解决效率</span
></span
>
</div>
</div>
</van-col>
</van-row>
</div>
<div class="it-temp4">
<div class="title-sub">
<span></span>
服务方案
<span></span>
</div>
<div class="temp2-text">
为保障服务及时响应并得到解决同时能够确保重大故障和VIP服务需求得到及时解决设计了如下的服务模式
</div>
<div class="img">
<img v-lazy="imgUrl.img1" alt="" />
</div>
<div class="temp2-text">
在充分理解该企业运维服务项目需求的基础上结合护航科技的服务经验为了能够做到及时响应及时处理设计统一热线服务台充分响应用户需求
遵循以ITIL为核心思想的IT服务管理并以ISO20000ISO27001和ISO9001为参考标准进行服务
</div>
</div>
<div class="it-temp5">
<div class="title-sub">
<span></span>
服务价值
<span></span>
</div>
<van-row :gutter="0">
<van-col :span="24">
<div class="item">
<div class="title">
<div class="title1"><span></span>1</div>
<span>有效保障了该集团桌面<br />环境的稳定</span>
</div>
</div>
</van-col>
<van-col :span="24">
<div class="item">
<div class="title">
<div class="title1" style="float: right"><span></span>2</div>
<span style="float: right; text-align: right"
>有效融入了护航科技的IT<br />服务管理理念和管理方法<br />
促进了双方的IT服务管理效率</span
>
</div>
</div>
</van-col>
<van-col :span="24">
<div class="item">
<div class="title">
<div class="title1 title2"><span></span>3</div>
<span>有效克服了信息部门一<br />线人员的瓶颈问题</span>
</div>
</div>
</van-col>
<van-col :span="24">
<div class="item">
<div class="title">
<div class="title1 title2" style="float: right"><span></span>4</div>
<span style="float: right; text-align: right"
>及时解决信息系统的运行故障保障了信息系统安全可靠高效的运行降低了财政信息化建设运营的成本和风险</span
>
</div>
</div>
</van-col>
<van-col :span="24">
<div class="item">
<div class="title">
<div class="title1"><span></span>5</div>
<span>整合了的信息资源优化了IT系统架构</span>
</div>
</div>
</van-col>
</van-row>
</div>
</div>
</div>
</template>
<script>
import bg from "./images/bg.png";
import img1 from "./images/img1.png";
export default {
// components: { ArrowRight },
data() {
return {
imgUrl: {
bg: bg,
img1: img1,
},
};
},
};
</script>
<style lang="less" scoped>
@import "./index.less";
</style>

View File

@ -0,0 +1,29 @@
<template>
<div class="contact-us">
<Form />
</div>
</template>
<script>
import Form from '@/components/Form.vue';
export default {
data() {
return {
};
},
computed: {},
watch: {},
methods: {},
mounted() {
},
components: { Form }
};
</script>
<style lang="less" scoped>
.contact-us{
height: 100%;
background: #fff;
}
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 815 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Some files were not shown because too many files have changed in this diff Show More