初始化网站代码
12
.babelrc
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"presets": [
|
||||
["env", {
|
||||
"modules": false,
|
||||
"targets": {
|
||||
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
|
||||
}
|
||||
}],
|
||||
"stage-2"
|
||||
],
|
||||
"plugins": ["transform-vue-jsx", "transform-runtime"]
|
||||
}
|
||||
9
.editorconfig
Normal file
@@ -0,0 +1,9 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
14
.gitignore
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
.DS_Store
|
||||
node_modules/
|
||||
/dist/
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# Editor directories and files
|
||||
.idea
|
||||
.vscode
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
10
.postcssrc.js
Normal file
@@ -0,0 +1,10 @@
|
||||
// https://github.com/michael-ciniawsky/postcss-load-config
|
||||
|
||||
module.exports = {
|
||||
"plugins": {
|
||||
"postcss-import": {},
|
||||
"postcss-url": {},
|
||||
// to edit target browsers: use "browserslist" field in package.json
|
||||
"autoprefixer": {}
|
||||
}
|
||||
}
|
||||
121
LICENSE
Normal file
@@ -0,0 +1,121 @@
|
||||
木兰宽松许可证, 第1版
|
||||
|
||||
木兰宽松许可证, 第1版
|
||||
2019年8月 http://license.coscl.org.cn/MulanPSL
|
||||
|
||||
您对“软件”的复制、使用、修改及分发受木兰宽松许可证,第1版(“本许可证”)的如下条款的约束:
|
||||
|
||||
0. 定义
|
||||
|
||||
“软件”是指由“贡献”构成的许可在“本许可证”下的程序和相关文档的集合。
|
||||
|
||||
“贡献者”是指将受版权法保护的作品许可在“本许可证”下的自然人或“法人实体”。
|
||||
|
||||
“法人实体”是指提交贡献的机构及其“关联实体”。
|
||||
|
||||
“关联实体”是指,对“本许可证”下的一方而言,控制、受控制或与其共同受控制的机构,此处的控制是指有受控方或共同受控方至少50%直接或间接的投票权、资金或其他有价证券。
|
||||
|
||||
“贡献”是指由任一“贡献者”许可在“本许可证”下的受版权法保护的作品。
|
||||
|
||||
1. 授予版权许可
|
||||
|
||||
每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的版权许可,您可以复制、使用、修改、分发其“贡献”,不论修改与否。
|
||||
|
||||
2. 授予专利许可
|
||||
|
||||
每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的(根据本条规定撤销除外)专利许可,供您制造、委托制造、使用、许诺销售、销售、进口其“贡献”或以其他方式转移其“贡献”。前述专利许可仅限于“贡献者”现在或将来拥有或控制的其“贡献”本身或其“贡献”与许可“贡献”时的“软件”结合而将必然会侵犯的专利权利要求,不包括仅因您或他人修改“贡献”或其他结合而将必然会侵犯到的专利权利要求。如您或您的“关联实体”直接或间接地(包括通过代理、专利被许可人或受让人),就“软件”或其中的“贡献”对任何人发起专利侵权诉讼(包括反诉或交叉诉讼)或其他专利维权行动,指控其侵犯专利权,则“本许可证”授予您对“软件”的专利许可自您提起诉讼或发起维权行动之日终止。
|
||||
|
||||
3. 无商标许可
|
||||
|
||||
“本许可证”不提供对“贡献者”的商品名称、商标、服务标志或产品名称的商标许可,但您为满足第4条规定的声明义务而必须使用除外。
|
||||
|
||||
4. 分发限制
|
||||
|
||||
您可以在任何媒介中将“软件”以源程序形式或可执行形式重新分发,不论修改与否,但您必须向接收者提供“本许可证”的副本,并保留“软件”中的版权、商标、专利及免责声明。
|
||||
|
||||
5. 免责声明与责任限制
|
||||
|
||||
“软件”及其中的“贡献”在提供时不带任何明示或默示的担保。在任何情况下,“贡献者”或版权所有者不对任何人因使用“软件”或其中的“贡献”而引发的任何直接或间接损失承担责任,不论因何种原因导致或者基于何种法律理论,即使其曾被建议有此种损失的可能性。
|
||||
|
||||
条款结束。
|
||||
|
||||
如何将木兰宽松许可证,第1版,应用到您的软件
|
||||
|
||||
如果您希望将木兰宽松许可证,第1版,应用到您的新软件,为了方便接收者查阅,建议您完成如下三步:
|
||||
|
||||
1, 请您补充如下声明中的空白,包括软件名、软件的首次发表年份以及您作为版权人的名字;
|
||||
|
||||
2, 请您在软件包的一级目录下创建以“LICENSE”为名的文件,将整个许可证文本放入该文件中;
|
||||
|
||||
3, 请将如下声明文本放入每个源文件的头部注释中。
|
||||
|
||||
Copyright (c) [2019] [name of copyright holder]
|
||||
[Software Name] is licensed under the Mulan PSL v1.
|
||||
You can use this software according to the terms and conditions of the Mulan PSL v1.
|
||||
You may obtain a copy of Mulan PSL v1 at:
|
||||
http://license.coscl.org.cn/MulanPSL
|
||||
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
|
||||
PURPOSE.
|
||||
See the Mulan PSL v1 for more details.
|
||||
|
||||
|
||||
Mulan Permissive Software License,Version 1
|
||||
|
||||
Mulan Permissive Software License,Version 1 (Mulan PSL v1)
|
||||
August 2019 http://license.coscl.org.cn/MulanPSL
|
||||
|
||||
Your reproduction, use, modification and distribution of the Software shall be subject to Mulan PSL v1 (this License) with following terms and conditions:
|
||||
|
||||
0. Definition
|
||||
|
||||
Software means the program and related documents which are comprised of those Contribution and licensed under this License.
|
||||
|
||||
Contributor means the Individual or Legal Entity who licenses its copyrightable work under this License.
|
||||
|
||||
Legal Entity means the entity making a Contribution and all its Affiliates.
|
||||
|
||||
Affiliates means entities that control, or are controlled by, or are under common control with a party to this License, ‘control’ means direct or indirect ownership of at least fifty percent (50%) of the voting power, capital or other securities of controlled or commonly controlled entity.
|
||||
|
||||
Contribution means the copyrightable work licensed by a particular Contributor under this License.
|
||||
|
||||
1. Grant of Copyright License
|
||||
|
||||
Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable copyright license to reproduce, use, modify, or distribute its Contribution, with modification or not.
|
||||
|
||||
2. Grant of Patent License
|
||||
|
||||
Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable (except for revocation under this Section) patent license to make, have made, use, offer for sale, sell, import or otherwise transfer its Contribution where such patent license is only limited to the patent claims owned or controlled by such Contributor now or in future which will be necessarily infringed by its Contribution alone, or by combination of the Contribution with the Software to which the Contribution was contributed, excluding of any patent claims solely be infringed by your or others’ modification or other combinations. If you or your Affiliates directly or indirectly (including through an agent, patent licensee or assignee), institute patent litigation (including a cross claim or counterclaim in a litigation) or other patent enforcement activities against any individual or entity by alleging that the Software or any Contribution in it infringes patents, then any patent license granted to you under this License for the Software shall terminate as of the date such litigation or activity is filed or taken.
|
||||
|
||||
3. No Trademark License
|
||||
|
||||
No trademark license is granted to use the trade names, trademarks, service marks, or product names of Contributor, except as required to fulfill notice requirements in section 4.
|
||||
|
||||
4. Distribution Restriction
|
||||
|
||||
You may distribute the Software in any medium with or without modification, whether in source or executable forms, provided that you provide recipients with a copy of this License and retain copyright, patent, trademark and disclaimer statements in the Software.
|
||||
|
||||
5. Disclaimer of Warranty and Limitation of Liability
|
||||
|
||||
The Software and Contribution in it are provided without warranties of any kind, either express or implied. In no event shall any Contributor or copyright holder be liable to you for any damages, including, but not limited to any direct, or indirect, special or consequential damages arising from your use or inability to use the Software or the Contribution in it, no matter how it’s caused or based on which legal theory, even if advised of the possibility of such damages.
|
||||
|
||||
End of the Terms and Conditions
|
||||
|
||||
How to apply the Mulan Permissive Software License,Version 1 (Mulan PSL v1) to your software
|
||||
|
||||
To apply the Mulan PSL v1 to your work, for easy identification by recipients, you are suggested to complete following three steps:
|
||||
|
||||
i. Fill in the blanks in following statement, including insert your software name, the year of the first publication of your software, and your name identified as the copyright owner;
|
||||
ii. Create a file named “LICENSE” which contains the whole context of this License in the first directory of your software package;
|
||||
iii. Attach the statement to the appropriate annotated syntax at the beginning of each source file.
|
||||
|
||||
Copyright (c) [2019] [name of copyright holder]
|
||||
[Software Name] is licensed under the Mulan PSL v1.
|
||||
You can use this software according to the terms and conditions of the Mulan PSL v1.
|
||||
You may obtain a copy of Mulan PSL v1 at:
|
||||
http://license.coscl.org.cn/MulanPSL
|
||||
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
|
||||
PURPOSE.
|
||||
|
||||
See the Mulan PSL v1 for more details.
|
||||
38
README.md
Normal file
@@ -0,0 +1,38 @@
|
||||
安装说明:
|
||||
npm install
|
||||
npm run dev
|
||||
npm run build
|
||||
|
||||
|
||||
**此处修改为http,不是https了**
|
||||
http://demo.hyxdsoft.com/
|
||||
|
||||
|
||||

|
||||

|
||||

|
||||
|
||||
## 新版vue3 ts pinia 上线 访问地址:http://demo.hyxdsoft.com/
|
||||
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
## 智慧党建模板 访问地址:http://demo.hyxdsoft.com/
|
||||
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
## vue3+ts+pinia大气政府门户pc端 http://demo.hyxdsoft.com/
|
||||

|
||||

|
||||

|
||||

|
||||
|
||||
自适应模板
|
||||

|
||||

|
||||
41
build/build.js
Normal file
@@ -0,0 +1,41 @@
|
||||
'use strict'
|
||||
require('./check-versions')()
|
||||
|
||||
process.env.NODE_ENV = 'production'
|
||||
|
||||
const ora = require('ora')
|
||||
const rm = require('rimraf')
|
||||
const path = require('path')
|
||||
const chalk = require('chalk')
|
||||
const webpack = require('webpack')
|
||||
const config = require('../config')
|
||||
const webpackConfig = require('./webpack.prod.conf')
|
||||
|
||||
const spinner = ora('building for production...')
|
||||
spinner.start()
|
||||
|
||||
rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
|
||||
if (err) throw err
|
||||
webpack(webpackConfig, (err, stats) => {
|
||||
spinner.stop()
|
||||
if (err) throw err
|
||||
process.stdout.write(stats.toString({
|
||||
colors: true,
|
||||
modules: false,
|
||||
children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build.
|
||||
chunks: false,
|
||||
chunkModules: false
|
||||
}) + '\n\n')
|
||||
|
||||
if (stats.hasErrors()) {
|
||||
console.log(chalk.red(' Build failed with errors.\n'))
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
console.log(chalk.cyan(' Build complete.\n'))
|
||||
console.log(chalk.yellow(
|
||||
' Tip: built files are meant to be served over an HTTP server.\n' +
|
||||
' Opening index.html over file:// won\'t work.\n'
|
||||
))
|
||||
})
|
||||
})
|
||||
54
build/check-versions.js
Normal file
@@ -0,0 +1,54 @@
|
||||
'use strict'
|
||||
const chalk = require('chalk')
|
||||
const semver = require('semver')
|
||||
const packageConfig = require('../package.json')
|
||||
const shell = require('shelljs')
|
||||
|
||||
function exec (cmd) {
|
||||
return require('child_process').execSync(cmd).toString().trim()
|
||||
}
|
||||
|
||||
const versionRequirements = [
|
||||
{
|
||||
name: 'node',
|
||||
currentVersion: semver.clean(process.version),
|
||||
versionRequirement: packageConfig.engines.node
|
||||
}
|
||||
]
|
||||
|
||||
if (shell.which('npm')) {
|
||||
versionRequirements.push({
|
||||
name: 'npm',
|
||||
currentVersion: exec('npm --version'),
|
||||
versionRequirement: packageConfig.engines.npm
|
||||
})
|
||||
}
|
||||
|
||||
module.exports = function () {
|
||||
const warnings = []
|
||||
|
||||
for (let i = 0; i < versionRequirements.length; i++) {
|
||||
const mod = versionRequirements[i]
|
||||
|
||||
if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
|
||||
warnings.push(mod.name + ': ' +
|
||||
chalk.red(mod.currentVersion) + ' should be ' +
|
||||
chalk.green(mod.versionRequirement)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
if (warnings.length) {
|
||||
console.log('')
|
||||
console.log(chalk.yellow('To use this template, you must update following to modules:'))
|
||||
console.log()
|
||||
|
||||
for (let i = 0; i < warnings.length; i++) {
|
||||
const warning = warnings[i]
|
||||
console.log(' ' + warning)
|
||||
}
|
||||
|
||||
console.log()
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
BIN
build/logo.png
Normal file
|
After Width: | Height: | Size: 6.7 KiB |
101
build/utils.js
Normal file
@@ -0,0 +1,101 @@
|
||||
'use strict'
|
||||
const path = require('path')
|
||||
const config = require('../config')
|
||||
const ExtractTextPlugin = require('extract-text-webpack-plugin')
|
||||
const packageConfig = require('../package.json')
|
||||
|
||||
exports.assetsPath = function (_path) {
|
||||
const assetsSubDirectory = process.env.NODE_ENV === 'production'
|
||||
? config.build.assetsSubDirectory
|
||||
: config.dev.assetsSubDirectory
|
||||
|
||||
return path.posix.join(assetsSubDirectory, _path)
|
||||
}
|
||||
|
||||
exports.cssLoaders = function (options) {
|
||||
options = options || {}
|
||||
|
||||
const cssLoader = {
|
||||
loader: 'css-loader',
|
||||
options: {
|
||||
sourceMap: options.sourceMap
|
||||
}
|
||||
}
|
||||
|
||||
const postcssLoader = {
|
||||
loader: 'postcss-loader',
|
||||
options: {
|
||||
sourceMap: options.sourceMap
|
||||
}
|
||||
}
|
||||
|
||||
// generate loader string to be used with extract text plugin
|
||||
function generateLoaders (loader, loaderOptions) {
|
||||
const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]
|
||||
|
||||
if (loader) {
|
||||
loaders.push({
|
||||
loader: loader + '-loader',
|
||||
options: Object.assign({}, loaderOptions, {
|
||||
sourceMap: options.sourceMap
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// Extract CSS when that option is specified
|
||||
// (which is the case during production build)
|
||||
if (options.extract) {
|
||||
return ExtractTextPlugin.extract({
|
||||
use: loaders,
|
||||
fallback: 'vue-style-loader'
|
||||
})
|
||||
} else {
|
||||
return ['vue-style-loader'].concat(loaders)
|
||||
}
|
||||
}
|
||||
|
||||
// https://vue-loader.vuejs.org/en/configurations/extract-css.html
|
||||
return {
|
||||
css: generateLoaders(),
|
||||
postcss: generateLoaders(),
|
||||
less: generateLoaders('less'),
|
||||
sass: generateLoaders('sass', { indentedSyntax: true }),
|
||||
scss: generateLoaders('sass'),
|
||||
stylus: generateLoaders('stylus'),
|
||||
styl: generateLoaders('stylus')
|
||||
}
|
||||
}
|
||||
|
||||
// Generate loaders for standalone style files (outside of .vue)
|
||||
exports.styleLoaders = function (options) {
|
||||
const output = []
|
||||
const loaders = exports.cssLoaders(options)
|
||||
|
||||
for (const extension in loaders) {
|
||||
const loader = loaders[extension]
|
||||
output.push({
|
||||
test: new RegExp('\\.' + extension + '$'),
|
||||
use: loader
|
||||
})
|
||||
}
|
||||
|
||||
return output
|
||||
}
|
||||
|
||||
exports.createNotifierCallback = () => {
|
||||
const notifier = require('node-notifier')
|
||||
|
||||
return (severity, errors) => {
|
||||
if (severity !== 'error') return
|
||||
|
||||
const error = errors[0]
|
||||
const filename = error.file && error.file.split('!').pop()
|
||||
|
||||
notifier.notify({
|
||||
title: packageConfig.name,
|
||||
message: severity + ': ' + error.name,
|
||||
subtitle: filename || '',
|
||||
icon: path.join(__dirname, 'logo.png')
|
||||
})
|
||||
}
|
||||
}
|
||||
22
build/vue-loader.conf.js
Normal file
@@ -0,0 +1,22 @@
|
||||
'use strict'
|
||||
const utils = require('./utils')
|
||||
const config = require('../config')
|
||||
const isProduction = process.env.NODE_ENV === 'production'
|
||||
const sourceMapEnabled = isProduction
|
||||
? config.build.productionSourceMap
|
||||
: config.dev.cssSourceMap
|
||||
|
||||
module.exports = {
|
||||
loaders: utils.cssLoaders({
|
||||
sourceMap: sourceMapEnabled,
|
||||
extract: isProduction
|
||||
}),
|
||||
cssSourceMap: sourceMapEnabled,
|
||||
cacheBusting: config.dev.cacheBusting,
|
||||
transformToRequire: {
|
||||
video: ['src', 'poster'],
|
||||
source: 'src',
|
||||
img: 'src',
|
||||
image: 'xlink:href'
|
||||
}
|
||||
}
|
||||
82
build/webpack.base.conf.js
Normal file
@@ -0,0 +1,82 @@
|
||||
'use strict'
|
||||
const path = require('path')
|
||||
const utils = require('./utils')
|
||||
const config = require('../config')
|
||||
const vueLoaderConfig = require('./vue-loader.conf')
|
||||
|
||||
function resolve (dir) {
|
||||
return path.join(__dirname, '..', dir)
|
||||
}
|
||||
|
||||
|
||||
|
||||
module.exports = {
|
||||
context: path.resolve(__dirname, '../'),
|
||||
entry: {
|
||||
app: './src/main.js'
|
||||
},
|
||||
output: {
|
||||
path: config.build.assetsRoot,
|
||||
filename: '[name].js',
|
||||
publicPath: process.env.NODE_ENV === 'production'
|
||||
? config.build.assetsPublicPath
|
||||
: config.dev.assetsPublicPath
|
||||
},
|
||||
resolve: {
|
||||
extensions: ['.js', '.vue', '.json'],
|
||||
alias: {
|
||||
'vue$': 'vue/dist/vue.esm.js',
|
||||
'@': resolve('src'),
|
||||
}
|
||||
},
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.vue$/,
|
||||
loader: 'vue-loader',
|
||||
options: vueLoaderConfig
|
||||
},
|
||||
{
|
||||
test: /\.js$/,
|
||||
loader: 'babel-loader',
|
||||
include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
|
||||
},
|
||||
{
|
||||
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
|
||||
loader: 'url-loader',
|
||||
options: {
|
||||
limit: 10000,
|
||||
name: utils.assetsPath('img/[name].[hash:7].[ext]')
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
|
||||
loader: 'url-loader',
|
||||
options: {
|
||||
limit: 10000,
|
||||
name: utils.assetsPath('media/[name].[hash:7].[ext]')
|
||||
}
|
||||
},
|
||||
{
|
||||
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
|
||||
loader: 'url-loader',
|
||||
options: {
|
||||
limit: 10000,
|
||||
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
node: {
|
||||
// prevent webpack from injecting useless setImmediate polyfill because Vue
|
||||
// source contains it (although only uses it if it's native).
|
||||
setImmediate: false,
|
||||
// prevent webpack from injecting mocks to Node native modules
|
||||
// that does not make sense for the client
|
||||
dgram: 'empty',
|
||||
fs: 'empty',
|
||||
net: 'empty',
|
||||
tls: 'empty',
|
||||
child_process: 'empty'
|
||||
}
|
||||
}
|
||||
95
build/webpack.dev.conf.js
Normal file
@@ -0,0 +1,95 @@
|
||||
'use strict'
|
||||
const utils = require('./utils')
|
||||
const webpack = require('webpack')
|
||||
const config = require('../config')
|
||||
const merge = require('webpack-merge')
|
||||
const path = require('path')
|
||||
const baseWebpackConfig = require('./webpack.base.conf')
|
||||
const CopyWebpackPlugin = require('copy-webpack-plugin')
|
||||
const HtmlWebpackPlugin = require('html-webpack-plugin')
|
||||
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
|
||||
const portfinder = require('portfinder')
|
||||
|
||||
const HOST = process.env.HOST
|
||||
const PORT = process.env.PORT && Number(process.env.PORT)
|
||||
|
||||
const devWebpackConfig = merge(baseWebpackConfig, {
|
||||
module: {
|
||||
rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true })
|
||||
},
|
||||
// cheap-module-eval-source-map is faster for development
|
||||
devtool: config.dev.devtool,
|
||||
|
||||
// these devServer options should be customized in /config/index.js
|
||||
devServer: {
|
||||
clientLogLevel: 'warning',
|
||||
historyApiFallback: {
|
||||
rewrites: [
|
||||
{ from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') },
|
||||
],
|
||||
},
|
||||
hot: true,
|
||||
contentBase: false, // since we use CopyWebpackPlugin.
|
||||
compress: true,
|
||||
host: HOST || config.dev.host,
|
||||
port: PORT || config.dev.port,
|
||||
open: config.dev.autoOpenBrowser,
|
||||
overlay: config.dev.errorOverlay
|
||||
? { warnings: false, errors: true }
|
||||
: false,
|
||||
publicPath: config.dev.assetsPublicPath,
|
||||
proxy: config.dev.proxyTable,
|
||||
quiet: true, // necessary for FriendlyErrorsPlugin
|
||||
watchOptions: {
|
||||
poll: config.dev.poll,
|
||||
}
|
||||
},
|
||||
plugins: [
|
||||
new webpack.DefinePlugin({
|
||||
'process.env': require('../config/dev.env')
|
||||
}),
|
||||
new webpack.HotModuleReplacementPlugin(),
|
||||
new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update.
|
||||
new webpack.NoEmitOnErrorsPlugin(),
|
||||
// https://github.com/ampedandwired/html-webpack-plugin
|
||||
new HtmlWebpackPlugin({
|
||||
filename: 'index.html',
|
||||
template: 'index.html',
|
||||
inject: true
|
||||
}),
|
||||
// copy custom static assets
|
||||
new CopyWebpackPlugin([
|
||||
{
|
||||
from: path.resolve(__dirname, '../static'),
|
||||
to: config.dev.assetsSubDirectory,
|
||||
ignore: ['.*']
|
||||
}
|
||||
])
|
||||
]
|
||||
})
|
||||
|
||||
module.exports = new Promise((resolve, reject) => {
|
||||
portfinder.basePort = process.env.PORT || config.dev.port
|
||||
portfinder.getPort((err, port) => {
|
||||
if (err) {
|
||||
reject(err)
|
||||
} else {
|
||||
// publish the new Port, necessary for e2e tests
|
||||
process.env.PORT = port
|
||||
// add port to devServer config
|
||||
devWebpackConfig.devServer.port = port
|
||||
|
||||
// Add FriendlyErrorsPlugin
|
||||
devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({
|
||||
compilationSuccessInfo: {
|
||||
messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`],
|
||||
},
|
||||
onErrors: config.dev.notifyOnErrors
|
||||
? utils.createNotifierCallback()
|
||||
: undefined
|
||||
}))
|
||||
|
||||
resolve(devWebpackConfig)
|
||||
}
|
||||
})
|
||||
})
|
||||
145
build/webpack.prod.conf.js
Normal file
@@ -0,0 +1,145 @@
|
||||
'use strict'
|
||||
const path = require('path')
|
||||
const utils = require('./utils')
|
||||
const webpack = require('webpack')
|
||||
const config = require('../config')
|
||||
const merge = require('webpack-merge')
|
||||
const baseWebpackConfig = require('./webpack.base.conf')
|
||||
const CopyWebpackPlugin = require('copy-webpack-plugin')
|
||||
const HtmlWebpackPlugin = require('html-webpack-plugin')
|
||||
const ExtractTextPlugin = require('extract-text-webpack-plugin')
|
||||
const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
|
||||
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
|
||||
|
||||
const env = require('../config/prod.env')
|
||||
|
||||
const webpackConfig = merge(baseWebpackConfig, {
|
||||
module: {
|
||||
rules: utils.styleLoaders({
|
||||
sourceMap: config.build.productionSourceMap,
|
||||
extract: true,
|
||||
usePostCSS: true
|
||||
})
|
||||
},
|
||||
devtool: config.build.productionSourceMap ? config.build.devtool : false,
|
||||
output: {
|
||||
path: config.build.assetsRoot,
|
||||
filename: utils.assetsPath('js/[name].[chunkhash].js'),
|
||||
chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
|
||||
},
|
||||
plugins: [
|
||||
// http://vuejs.github.io/vue-loader/en/workflow/production.html
|
||||
new webpack.DefinePlugin({
|
||||
'process.env': env
|
||||
}),
|
||||
new UglifyJsPlugin({
|
||||
uglifyOptions: {
|
||||
compress: {
|
||||
warnings: false
|
||||
}
|
||||
},
|
||||
sourceMap: config.build.productionSourceMap,
|
||||
parallel: true
|
||||
}),
|
||||
// extract css into its own file
|
||||
new ExtractTextPlugin({
|
||||
filename: utils.assetsPath('css/[name].[contenthash].css'),
|
||||
// Setting the following option to `false` will not extract CSS from codesplit chunks.
|
||||
// Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack.
|
||||
// It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`,
|
||||
// increasing file size: https://github.com/vuejs-templates/webpack/issues/1110
|
||||
allChunks: true,
|
||||
}),
|
||||
// Compress extracted CSS. We are using this plugin so that possible
|
||||
// duplicated CSS from different components can be deduped.
|
||||
new OptimizeCSSPlugin({
|
||||
cssProcessorOptions: config.build.productionSourceMap
|
||||
? { safe: true, map: { inline: false } }
|
||||
: { safe: true }
|
||||
}),
|
||||
// generate dist index.html with correct asset hash for caching.
|
||||
// you can customize output by editing /index.html
|
||||
// see https://github.com/ampedandwired/html-webpack-plugin
|
||||
new HtmlWebpackPlugin({
|
||||
filename: config.build.index,
|
||||
template: 'index.html',
|
||||
inject: true,
|
||||
minify: {
|
||||
removeComments: true,
|
||||
collapseWhitespace: true,
|
||||
removeAttributeQuotes: true
|
||||
// more options:
|
||||
// https://github.com/kangax/html-minifier#options-quick-reference
|
||||
},
|
||||
// necessary to consistently work with multiple chunks via CommonsChunkPlugin
|
||||
chunksSortMode: 'dependency'
|
||||
}),
|
||||
// keep module.id stable when vendor modules does not change
|
||||
new webpack.HashedModuleIdsPlugin(),
|
||||
// enable scope hoisting
|
||||
new webpack.optimize.ModuleConcatenationPlugin(),
|
||||
// split vendor js into its own file
|
||||
new webpack.optimize.CommonsChunkPlugin({
|
||||
name: 'vendor',
|
||||
minChunks (module) {
|
||||
// any required modules inside node_modules are extracted to vendor
|
||||
return (
|
||||
module.resource &&
|
||||
/\.js$/.test(module.resource) &&
|
||||
module.resource.indexOf(
|
||||
path.join(__dirname, '../node_modules')
|
||||
) === 0
|
||||
)
|
||||
}
|
||||
}),
|
||||
// extract webpack runtime and module manifest to its own file in order to
|
||||
// prevent vendor hash from being updated whenever app bundle is updated
|
||||
new webpack.optimize.CommonsChunkPlugin({
|
||||
name: 'manifest',
|
||||
minChunks: Infinity
|
||||
}),
|
||||
// This instance extracts shared chunks from code splitted chunks and bundles them
|
||||
// in a separate chunk, similar to the vendor chunk
|
||||
// see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk
|
||||
new webpack.optimize.CommonsChunkPlugin({
|
||||
name: 'app',
|
||||
async: 'vendor-async',
|
||||
children: true,
|
||||
minChunks: 3
|
||||
}),
|
||||
|
||||
// copy custom static assets
|
||||
new CopyWebpackPlugin([
|
||||
{
|
||||
from: path.resolve(__dirname, '../static'),
|
||||
to: config.build.assetsSubDirectory,
|
||||
ignore: ['.*']
|
||||
}
|
||||
])
|
||||
]
|
||||
})
|
||||
|
||||
if (config.build.productionGzip) {
|
||||
const CompressionWebpackPlugin = require('compression-webpack-plugin')
|
||||
|
||||
webpackConfig.plugins.push(
|
||||
new CompressionWebpackPlugin({
|
||||
asset: '[path].gz[query]',
|
||||
algorithm: 'gzip',
|
||||
test: new RegExp(
|
||||
'\\.(' +
|
||||
config.build.productionGzipExtensions.join('|') +
|
||||
')$'
|
||||
),
|
||||
threshold: 10240,
|
||||
minRatio: 0.8
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
if (config.build.bundleAnalyzerReport) {
|
||||
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
|
||||
webpackConfig.plugins.push(new BundleAnalyzerPlugin())
|
||||
}
|
||||
|
||||
module.exports = webpackConfig
|
||||
7
config/dev.env.js
Normal file
@@ -0,0 +1,7 @@
|
||||
'use strict'
|
||||
const merge = require('webpack-merge')
|
||||
const prodEnv = require('./prod.env')
|
||||
|
||||
module.exports = merge(prodEnv, {
|
||||
NODE_ENV: '"development"'
|
||||
})
|
||||
69
config/index.js
Normal file
@@ -0,0 +1,69 @@
|
||||
'use strict'
|
||||
// Template version: 1.3.1
|
||||
// see http://vuejs-templates.github.io/webpack for documentation.
|
||||
|
||||
const path = require('path')
|
||||
|
||||
module.exports = {
|
||||
dev: {
|
||||
|
||||
// Paths
|
||||
assetsSubDirectory: 'static',
|
||||
assetsPublicPath: '/',
|
||||
proxyTable: {},
|
||||
|
||||
// Various Dev Server settings
|
||||
host: 'localhost', // can be overwritten by process.env.HOST
|
||||
port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
|
||||
autoOpenBrowser: false,
|
||||
errorOverlay: true,
|
||||
notifyOnErrors: true,
|
||||
poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
|
||||
|
||||
|
||||
/**
|
||||
* Source Maps
|
||||
*/
|
||||
|
||||
// https://webpack.js.org/configuration/devtool/#development
|
||||
devtool: 'cheap-module-eval-source-map',
|
||||
|
||||
// If you have problems debugging vue-files in devtools,
|
||||
// set this to false - it *may* help
|
||||
// https://vue-loader.vuejs.org/en/options.html#cachebusting
|
||||
cacheBusting: true,
|
||||
|
||||
cssSourceMap: true
|
||||
},
|
||||
|
||||
build: {
|
||||
// Template for index.html
|
||||
index: path.resolve(__dirname, '../dist/index.html'),
|
||||
|
||||
// Paths
|
||||
assetsRoot: path.resolve(__dirname, '../dist'),
|
||||
assetsSubDirectory: 'static',
|
||||
assetsPublicPath: '/',
|
||||
|
||||
/**
|
||||
* Source Maps
|
||||
*/
|
||||
|
||||
productionSourceMap: true,
|
||||
// https://webpack.js.org/configuration/devtool/#production
|
||||
devtool: '#source-map',
|
||||
|
||||
// Gzip off by default as many popular static hosts such as
|
||||
// Surge or Netlify already gzip all static assets for you.
|
||||
// Before setting to `true`, make sure to:
|
||||
// npm install --save-dev compression-webpack-plugin
|
||||
productionGzip: false,
|
||||
productionGzipExtensions: ['js', 'css'],
|
||||
|
||||
// Run the build command with an extra argument to
|
||||
// View the bundle analyzer report after build finishes:
|
||||
// `npm run build --report`
|
||||
// Set to `true` or `false` to always turn it on or off
|
||||
bundleAnalyzerReport: process.env.npm_config_report
|
||||
}
|
||||
}
|
||||
4
config/prod.env.js
Normal file
@@ -0,0 +1,4 @@
|
||||
'use strict'
|
||||
module.exports = {
|
||||
NODE_ENV: '"production"'
|
||||
}
|
||||
20
index.html
Normal file
@@ -0,0 +1,20 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-Hans-CN">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<meta name="Keywords" content="记账,健康档案,负债,信用卡,储蓄卡,刷卡"/>
|
||||
<meta name="Description"
|
||||
content="智聪记账、健康档案管理平台、负债记账、储蓄记账、健康档案管理"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"/>
|
||||
<meta name="apple-mobile-web-app-capable" content="yes"/>
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
|
||||
<meta name="format-detection" content="telephone=no,email=no"/>
|
||||
<meta http-equiv="x-dns-prefetch-control" content="on"/>
|
||||
<link rel="dns-prefetch" href="http://www.zhichou.com"/>
|
||||
<title>智聪科技——记账平台、健康档案管理</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<!-- built files will be auto injected -->
|
||||
</body>
|
||||
</html>
|
||||
27417
package-lock.json
generated
Normal file
68
package.json
Normal file
@@ -0,0 +1,68 @@
|
||||
{
|
||||
"name": "com_web",
|
||||
"version": "1.0.0",
|
||||
"description": "A Vue.js project",
|
||||
"author": "kaka212000@163.com",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
|
||||
"start": "npm run dev",
|
||||
"build": "node build/build.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"jsonp": "^0.2.1",
|
||||
"vue": "^2.7.15",
|
||||
"vue-carousel": "^0.18.0",
|
||||
"vue-droplist": "^1.0.6",
|
||||
"vue-router": "^3.0.1",
|
||||
"vue-template-compiler": "^2.7.15",
|
||||
"vuex": "^3.3.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"autoprefixer": "^7.1.2",
|
||||
"babel-core": "^6.22.1",
|
||||
"babel-helper-vue-jsx-merge-props": "^2.0.3",
|
||||
"babel-loader": "^7.1.1",
|
||||
"babel-plugin-syntax-jsx": "^6.18.0",
|
||||
"babel-plugin-transform-runtime": "^6.22.0",
|
||||
"babel-plugin-transform-vue-jsx": "^3.5.0",
|
||||
"babel-preset-env": "^1.3.2",
|
||||
"babel-preset-stage-2": "^6.22.0",
|
||||
"chalk": "^2.0.1",
|
||||
"copy-webpack-plugin": "^4.0.1",
|
||||
"css-loader": "^0.28.0",
|
||||
"extract-text-webpack-plugin": "^3.0.0",
|
||||
"file-loader": "^1.1.4",
|
||||
"friendly-errors-webpack-plugin": "^1.6.1",
|
||||
"html-webpack-plugin": "^2.30.1",
|
||||
"less": "^3.9.0",
|
||||
"less-loader": "^5.0.0",
|
||||
"node-notifier": "^5.1.2",
|
||||
"optimize-css-assets-webpack-plugin": "^3.2.0",
|
||||
"ora": "^1.2.0",
|
||||
"portfinder": "^1.0.13",
|
||||
"postcss-import": "^11.0.0",
|
||||
"postcss-loader": "^2.0.8",
|
||||
"postcss-url": "^7.2.1",
|
||||
"rimraf": "^2.6.0",
|
||||
"semver": "^5.3.0",
|
||||
"shelljs": "^0.7.6",
|
||||
"uglifyjs-webpack-plugin": "^1.1.1",
|
||||
"url-loader": "^0.5.8",
|
||||
"vue-loader": "^13.3.0",
|
||||
"vue-style-loader": "^3.0.1",
|
||||
"webpack": "^3.6.0",
|
||||
"webpack-bundle-analyzer": "^2.9.0",
|
||||
"webpack-dev-server": "^2.9.1",
|
||||
"webpack-merge": "^4.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 6.0.0",
|
||||
"npm": ">= 3.0.0"
|
||||
},
|
||||
"browserslist": [
|
||||
"> 1%",
|
||||
"last 2 versions",
|
||||
"not ie <= 8"
|
||||
]
|
||||
}
|
||||
20
src/Util.js
Normal file
@@ -0,0 +1,20 @@
|
||||
/**
|
||||
* 常用函数工具类
|
||||
*/
|
||||
'use strict'
|
||||
|
||||
const userAgent = navigator.userAgent
|
||||
export default class Util {
|
||||
static os = {
|
||||
trident: userAgent.indexOf('Trident') > -1, // IE内核
|
||||
presto: userAgent.indexOf('Presto') > -1, // opera内核
|
||||
webKit: userAgent.indexOf('AppleWebKit') > -1, // 苹果、谷歌内核
|
||||
gecko: userAgent.indexOf('Gecko') > -1 && userAgent.indexOf('KHTML') === -1, // 火狐内核
|
||||
ios: !!userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), // ios终端
|
||||
android: userAgent.indexOf('Android') > -1 || userAgent.indexOf('Linux') > -1, // android终端或者uc浏览器
|
||||
iPhone: userAgent.indexOf('iPhone') > -1, // 是否为iPhone
|
||||
iPad: userAgent.indexOf('iPad') > -1, // 是否iPad
|
||||
webApp: userAgent.indexOf('Safari') === -1, // 是否web应该程序,没有头部与底部
|
||||
wechat: userAgent.indexOf('MicroMessenger') > -1
|
||||
}
|
||||
}
|
||||
19
src/assets/css/common.css
Normal file
@@ -0,0 +1,19 @@
|
||||
/* 全局样式 */
|
||||
.m-0-auto {
|
||||
margin: 0 auto;
|
||||
}
|
||||
.m-0 {
|
||||
margin: 0;
|
||||
}
|
||||
.m-r-5 {
|
||||
margin-right: 5px;
|
||||
}
|
||||
.m-t-5 {
|
||||
margin-top: 5px;
|
||||
}
|
||||
.p-0 {
|
||||
padding: 0;
|
||||
}
|
||||
.w-100pct {
|
||||
width: 100%;
|
||||
}
|
||||
1
src/assets/css/vivify.min.css
vendored
Normal file
BIN
src/assets/img/feature1.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
src/assets/img/feature2.png
Normal file
|
After Width: | Height: | Size: 9.3 KiB |
BIN
src/assets/img/feature3.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
src/assets/img/feature4.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
475
src/assets/less/normalize.less
vendored
Normal file
@@ -0,0 +1,475 @@
|
||||
// =============================================================================
|
||||
// Normalize.less based on Nicolas Gallagher and Jonathan Neal's
|
||||
// normalize.css v3.0.1 | MIT License | github.com/necolas/normalize.css
|
||||
// =============================================================================
|
||||
|
||||
//
|
||||
// Variables
|
||||
// ====================================================================
|
||||
|
||||
// Base font-family
|
||||
@base-font-family: sans-serif;
|
||||
|
||||
// The base font size
|
||||
@base-font-size: 16px;
|
||||
|
||||
// The base line height determines the basic unit of vertical rhythm.
|
||||
@base-line-height: 24px;
|
||||
|
||||
// Heading sizes
|
||||
@h1-size: 36px;
|
||||
|
||||
|
||||
//
|
||||
// Mixins
|
||||
// ====================================================================
|
||||
|
||||
//
|
||||
// Passing in a single value will create font-sizing in
|
||||
// pixels, rems as well as a proper line-height.
|
||||
//
|
||||
// `.font-size(24px, false);`
|
||||
//
|
||||
|
||||
.font-size(@font-size, @line-height: true) {
|
||||
@px-value: (@font-size);
|
||||
@rem-value: (@font-size / @base-font-size) * 1rem;
|
||||
@line-height-value: ceil(@font-size / @base-line-height) * (@base-line-height / @font-size);
|
||||
|
||||
font-size: ~"@{px-value}";
|
||||
font-size: @rem-value;
|
||||
|
||||
.line-height(@boolean) when (@boolean = true) {
|
||||
line-height: unit(@line-height-value);
|
||||
}
|
||||
|
||||
.line-height(@line-height);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// 1. Set default font family to sans-serif.
|
||||
// 2. Prevent iOS and IE text size adjust after device orientation change,
|
||||
// without disabling user zoom.
|
||||
//
|
||||
|
||||
html {
|
||||
font-size: 100%; // 1 //
|
||||
-ms-text-size-adjust: 100%; // 2 //
|
||||
-webkit-text-size-adjust: 100%; // 2 //
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Remove default margin.
|
||||
//
|
||||
|
||||
body { margin: 0; }
|
||||
|
||||
|
||||
//
|
||||
// HTML5 display definitions
|
||||
// ====================================================================
|
||||
|
||||
//
|
||||
// Correct `block` display not defined for any HTML5 element in IE 8/9.
|
||||
// Correct `block` display not defined for `details` or `summary` in IE 10/11
|
||||
// and Firefox.
|
||||
// Correct `block` display not defined for `main` in IE 11.
|
||||
//
|
||||
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
menu,
|
||||
main,
|
||||
nav,
|
||||
section,
|
||||
summary { display: block; }
|
||||
|
||||
|
||||
//
|
||||
// 1. Correct `inline-block` display not defined in IE 8/9.
|
||||
// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
|
||||
//
|
||||
|
||||
audio,
|
||||
canvas,
|
||||
progress,
|
||||
video {
|
||||
display: inline-block; // 1 //
|
||||
vertical-align: baseline; // 2 //
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Prevent modern browsers from displaying `audio` without controls.
|
||||
// Remove excess height in iOS 5 devices.
|
||||
//
|
||||
|
||||
audio:not([controls]) {
|
||||
display: none;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Address `[hidden]` styling not present in IE 8/9/10.
|
||||
// Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.
|
||||
//
|
||||
|
||||
[hidden],
|
||||
template { display: none; }
|
||||
|
||||
|
||||
//
|
||||
// Links
|
||||
// ====================================================================
|
||||
|
||||
//
|
||||
// Remove the gray background color from active links in IE 10.
|
||||
//
|
||||
|
||||
a {
|
||||
background-color: transparent;
|
||||
|
||||
|
||||
//
|
||||
// Improve readability of focused elements when they are also in an
|
||||
// active/hover state.
|
||||
//
|
||||
|
||||
&:focus { outline: thin dotted; }
|
||||
|
||||
&:active,
|
||||
&:hover { outline: 0; }
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Text-level semantics
|
||||
// ====================================================================
|
||||
|
||||
//
|
||||
// Address styling not present in IE 8/9/10/11, Safari, and Chrome.
|
||||
//
|
||||
|
||||
abbr[title] { border-bottom: 1px dotted; }
|
||||
|
||||
|
||||
//
|
||||
// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
|
||||
//
|
||||
|
||||
b,
|
||||
strong { font-weight: bold; }
|
||||
|
||||
|
||||
//
|
||||
// Address styling not present in Safari and Chrome.
|
||||
//
|
||||
|
||||
dfn { font-style: italic; }
|
||||
|
||||
|
||||
//
|
||||
// Address variable `h1` font-size and margin within `section` and `article`
|
||||
// contexts in Firefox 4+, Safari, and Chrome.
|
||||
//
|
||||
|
||||
h1 {
|
||||
.font-size(@h1-size);
|
||||
margin: 0.67em 0;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Address styling not present in IE 8/9.
|
||||
//
|
||||
|
||||
mark {
|
||||
background: #ff0;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Address inconsistent and variable font size in all browsers.
|
||||
//
|
||||
|
||||
small { font-size: 80%; }
|
||||
|
||||
|
||||
//
|
||||
// Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
||||
//
|
||||
|
||||
sub,
|
||||
sup {
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sup { top: -0.5em; }
|
||||
|
||||
sub { bottom: -0.25em; }
|
||||
|
||||
|
||||
//
|
||||
// Embedded content
|
||||
// ====================================================================
|
||||
|
||||
//
|
||||
// Remove border when inside `a` element in IE 8/9/10.
|
||||
//
|
||||
|
||||
img { border: 0; }
|
||||
|
||||
|
||||
//
|
||||
// Correct overflow not hidden in IE 9/10/11.
|
||||
//
|
||||
|
||||
svg:not(:root) { overflow: hidden; }
|
||||
|
||||
|
||||
//
|
||||
// Grouping content
|
||||
// ====================================================================
|
||||
|
||||
//
|
||||
// Address margin not present in IE 8/9 and Safari.
|
||||
//
|
||||
|
||||
figure { margin: 1em 40px; }
|
||||
|
||||
|
||||
//
|
||||
// Address differences between Firefox and other browsers.
|
||||
//
|
||||
|
||||
hr {
|
||||
box-sizing: content-box;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Contain overflow in all browsers.
|
||||
//
|
||||
|
||||
pre { overflow: auto; }
|
||||
|
||||
|
||||
//
|
||||
// Address odd `em`-unit font size rendering in all browsers.
|
||||
//
|
||||
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp {
|
||||
font-family: monospace, monospace;
|
||||
.font-size(@base-font-size);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//
|
||||
// Forms
|
||||
// ====================================================================
|
||||
|
||||
//
|
||||
// Known limitation: by default, Chrome and Safari on OS X allow very limited
|
||||
// styling of `select`, unless a `border` property is set.
|
||||
//
|
||||
|
||||
//
|
||||
// 1. Correct color not being inherited.
|
||||
// Known issue: affects color of disabled elements.
|
||||
// 2. Correct font properties not being inherited.
|
||||
// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
|
||||
//
|
||||
|
||||
button,
|
||||
input,
|
||||
optgroup,
|
||||
select,
|
||||
textarea {
|
||||
color: inherit; // 1 //
|
||||
font: inherit; // 1 //
|
||||
margin: 0; // 1 //
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Address `overflow` set to `hidden` in IE 8/9/10/11.
|
||||
//
|
||||
|
||||
button { overflow: visible; }
|
||||
|
||||
|
||||
//
|
||||
// Address inconsistent `text-transform` inheritance for `button` and `select`.
|
||||
// All other form control elements do not inherit `text-transform` values.
|
||||
// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
|
||||
// Correct `select` style inheritance in Firefox.
|
||||
//
|
||||
|
||||
button,
|
||||
select { text-transform: none; }
|
||||
|
||||
|
||||
//
|
||||
// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
||||
// and `video` controls.
|
||||
// 2. Correct inability to style clickable `input` types in iOS.
|
||||
// 3. Improve usability and consistency of cursor style between image-type
|
||||
// `input` and others.
|
||||
//
|
||||
|
||||
button,
|
||||
html input[type="button"], // 1 //
|
||||
input[type="reset"],
|
||||
input[type="submit"] {
|
||||
-webkit-appearance: button; // 2 //
|
||||
cursor: pointer; // 3 //
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Re-set default cursor for disabled elements.
|
||||
//
|
||||
|
||||
button[disabled],
|
||||
html input[disabled] { cursor: default; }
|
||||
|
||||
|
||||
//
|
||||
// Remove inner padding and border in Firefox 4+.
|
||||
//
|
||||
|
||||
button::-moz-focus-inner,
|
||||
input::-moz-focus-inner {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Address Firefox 4+ setting `line-height` on `input` using `!important` in
|
||||
// the UA stylesheet.
|
||||
//
|
||||
|
||||
input {
|
||||
line-height: normal;
|
||||
|
||||
|
||||
//
|
||||
// It's recommended that you don't attempt to style these elements.
|
||||
// Firefox's implementation doesn't respect box-sizing, padding, or width.
|
||||
//
|
||||
// 1. Address box sizing set to `content-box` in IE 8/9/10.
|
||||
// 2. Remove excess padding in IE 8/9/10.
|
||||
//
|
||||
|
||||
&[type="checkbox"],
|
||||
&[type="radio"] {
|
||||
box-sizing: border-box; // 1 //
|
||||
padding: 0; // 2 //
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Fix the cursor style for Chrome's increment/decrement buttons. For certain
|
||||
// `font-size` values of the `input`, it causes the cursor style of the
|
||||
// decrement button to change from `default` to `text`.
|
||||
//
|
||||
|
||||
&[type="number"] {
|
||||
&::-webkit-inner-spin-button,
|
||||
&::-webkit-outer-spin-button { height: auto; }
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// 1. Address `appearance` set to `searchfield` in Safari and Chrome.
|
||||
// 2. Address `box-sizing` set to `border-box` in Safari and Chrome.
|
||||
//
|
||||
|
||||
&[type="search"] {
|
||||
-webkit-appearance: textfield; // 1 //
|
||||
box-sizing: content-box; // 2 //
|
||||
|
||||
|
||||
//
|
||||
// Remove inner padding and search cancel button in Safari and Chrome on OS X.
|
||||
// Safari (but not Chrome) clips the cancel button when the search input has
|
||||
// padding (and `textfield` appearance).
|
||||
//
|
||||
|
||||
&::-webkit-search-cancel-button,
|
||||
&::-webkit-search-decoration { -webkit-appearance: none; }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Define consistent border, margin, and padding.
|
||||
//
|
||||
|
||||
fieldset {
|
||||
border: 1px solid #c0c0c0;
|
||||
margin: 0 2px;
|
||||
padding: 0.35em 0.625em 0.75em;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// 1. Correct `color` not being inherited in IE 8/9/10/11.
|
||||
// 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
||||
//
|
||||
|
||||
legend {
|
||||
border: 0; // 1 //
|
||||
padding: 0; // 2 //
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Remove default vertical scrollbar in IE 8/9/10/11.
|
||||
//
|
||||
|
||||
textarea { overflow: auto; }
|
||||
|
||||
|
||||
//
|
||||
// Don't inherit the `font-weight` (applied by a rule above).
|
||||
// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
|
||||
//
|
||||
|
||||
optgroup { font-weight: bold; }
|
||||
|
||||
|
||||
//
|
||||
// Tables
|
||||
// ====================================================================
|
||||
|
||||
//
|
||||
// Remove most spacing between table cells.
|
||||
//
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
td,
|
||||
th { padding: 0; }
|
||||
BIN
src/assets/logo.png
Normal file
|
After Width: | Height: | Size: 6.7 KiB |
525
src/assets/scss/normalize.scss
vendored
Normal file
@@ -0,0 +1,525 @@
|
||||
// =============================================================================
|
||||
// Normalize.scss based on Nicolas Gallagher and Jonathan Neal's
|
||||
// normalize.css v2.1.3 | MIT License | git.io/normalize
|
||||
// =============================================================================
|
||||
|
||||
// =============================================================================
|
||||
// Normalize.scss settings
|
||||
// =============================================================================
|
||||
|
||||
|
||||
// Set to true if you want to add support for IE6 and IE7
|
||||
// Notice: setting to true might render some elements
|
||||
// slightly differently than when set to false
|
||||
$legacy_support_for_ie: false !default; // Used also in Compass
|
||||
|
||||
|
||||
// Set the default font family here so you don't have to override it later
|
||||
$normalized_font_family: sans-serif !default;
|
||||
|
||||
$normalize_headings: true !default;
|
||||
|
||||
$h1_font_size: 2em !default;
|
||||
$h2_font_size: 1.5em !default;
|
||||
$h3_font_size: 1.17em !default;
|
||||
$h4_font_size: 1em !default;
|
||||
$h5_font_size: 0.83em !default;
|
||||
$h6_font_size: 0.75em !default;
|
||||
|
||||
$h1_margin: 0.67em 0 !default;
|
||||
$h2_margin: 0.83em 0 !default;
|
||||
$h3_margin: 1em 0 !default;
|
||||
$h4_margin: 1.33em 0 !default;
|
||||
$h5_margin: 1.67em 0 !default;
|
||||
$h6_margin: 2.33em 0 !default;
|
||||
|
||||
$background: #fff !default;
|
||||
$color: #000 !default;
|
||||
|
||||
// =============================================================================
|
||||
// HTML5 display definitions
|
||||
// =============================================================================
|
||||
|
||||
// Corrects block display not defined in IE6/7/8/9 & FF3
|
||||
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
nav,
|
||||
section,
|
||||
summary {
|
||||
display: block;
|
||||
}
|
||||
|
||||
// Corrects inline-block display not defined in IE6/7/8/9 & FF3
|
||||
|
||||
audio,
|
||||
canvas,
|
||||
video {
|
||||
display: inline-block;
|
||||
@if $legacy_support_for_ie {
|
||||
*display: inline;
|
||||
*zoom: 1;
|
||||
}
|
||||
}
|
||||
|
||||
// 1. Prevents modern browsers from displaying 'audio' without controls
|
||||
// 2. Remove excess height in iOS5 devices
|
||||
|
||||
audio:not([controls]) {
|
||||
display: none; // 1
|
||||
height: 0; // 2
|
||||
}
|
||||
|
||||
//
|
||||
// Address `[hidden]` styling not present in IE 8/9.
|
||||
// Hide the `template` element in IE, Safari, and Firefox < 22.
|
||||
//
|
||||
|
||||
[hidden], template {
|
||||
display: none;
|
||||
}
|
||||
|
||||
// =============================================================================
|
||||
// Base
|
||||
// =============================================================================
|
||||
|
||||
// 1. Corrects text resizing oddly in IE6/7 when body font-size is set using em units
|
||||
// http://clagnut.com/blog/348/#c790
|
||||
// 2. Prevents iOS text size adjust after orientation change, without disabling user zoom
|
||||
// www.456bereastreet.com/archive/201012/controlling_text_size_in_safari_for_ios_without_disabling_user_zoom/
|
||||
|
||||
html {
|
||||
@if $legacy_support_for_ie {
|
||||
font-size: 100%; // 1
|
||||
}
|
||||
background: $background;
|
||||
color: $color;
|
||||
-webkit-text-size-adjust: 100%; // 2
|
||||
-ms-text-size-adjust: 100%; // 2
|
||||
}
|
||||
|
||||
// Addresses font-family inconsistency between 'textarea' and other form elements.
|
||||
|
||||
html,
|
||||
button,
|
||||
input,
|
||||
select,
|
||||
textarea {
|
||||
font-family: $normalized_font_family;
|
||||
}
|
||||
|
||||
// Addresses margins handled incorrectly in IE6/7
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
// =============================================================================
|
||||
// Links
|
||||
// =============================================================================
|
||||
|
||||
// 1. Remove the gray background color from active links in IE 10.
|
||||
// 2. Addresses outline displayed oddly in Chrome
|
||||
// 3. Improves readability when focused and also mouse hovered in all browsers
|
||||
// people.opera.com/patrickl/experiments/keyboard/test
|
||||
|
||||
a {
|
||||
// 1
|
||||
|
||||
background: transparent;
|
||||
|
||||
// 2
|
||||
|
||||
&:focus {
|
||||
outline: thin dotted;
|
||||
}
|
||||
|
||||
// 3
|
||||
|
||||
&:hover,
|
||||
&:active {
|
||||
outline: 0;
|
||||
}
|
||||
}
|
||||
|
||||
// =============================================================================
|
||||
// Typography
|
||||
// =============================================================================
|
||||
|
||||
// Addresses font sizes and margins set differently in IE6/7
|
||||
// Addresses font sizes within 'section' and 'article' in FF4+, Chrome, S5
|
||||
|
||||
@if $normalize_headings == true {
|
||||
h1 {
|
||||
font-size: $h1_font_size;
|
||||
margin: $h1_margin;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: $h2_font_size;
|
||||
margin: $h2_margin;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: $h3_font_size;
|
||||
margin: $h3_margin;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: $h4_font_size;
|
||||
margin: $h4_margin;
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: $h5_font_size;
|
||||
margin: $h5_margin;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: $h6_font_size;
|
||||
margin: $h6_margin;
|
||||
}
|
||||
}
|
||||
|
||||
// Addresses styling not present in IE 8/9, S5, Chrome
|
||||
|
||||
abbr[title] {
|
||||
border-bottom: 1px dotted;
|
||||
}
|
||||
|
||||
// Addresses style set to 'bolder' in FF3+, S4/5, Chrome
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
@if $legacy_support_for_ie {
|
||||
blockquote {
|
||||
margin: 1em 40px;
|
||||
}
|
||||
}
|
||||
|
||||
// Addresses styling not present in S5, Chrome
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
// Addresses styling not present in IE6/7/8/9
|
||||
|
||||
mark {
|
||||
background: #ff0;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
// Addresses margins set differently in IE6/7
|
||||
@if $legacy_support_for_ie {
|
||||
p,
|
||||
pre {
|
||||
margin: 1em 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Corrects font family set oddly in IE6, S4/5, Chrome
|
||||
// en.wikipedia.org/wiki/User:Davidgothberg/Test59
|
||||
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp {
|
||||
font-family: monospace, serif;
|
||||
@if $legacy_support_for_ie {
|
||||
_font-family: 'courier new', monospace;
|
||||
}
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
// Improves readability of pre-formatted text in all browsers
|
||||
|
||||
pre {
|
||||
white-space: pre;
|
||||
white-space: pre-wrap;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
// Set consistent quote types.
|
||||
|
||||
q {
|
||||
quotes: "\201C" "\201D" "\2018" "\2019";
|
||||
}
|
||||
|
||||
// 1. Addresses CSS quotes not supported in IE6/7
|
||||
// 2. Addresses quote property not supported in S4
|
||||
|
||||
// 1
|
||||
@if $legacy_support_for_ie {
|
||||
q {
|
||||
quotes: none;
|
||||
}
|
||||
}
|
||||
|
||||
// 2
|
||||
q {
|
||||
&:before,
|
||||
&:after {
|
||||
content: '';
|
||||
content: none;
|
||||
}
|
||||
}
|
||||
|
||||
// Address inconsistent and variable font size in all browsers.
|
||||
|
||||
small {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
// Prevents sub and sup affecting line-height in all browsers
|
||||
// gist.github.com/413930
|
||||
|
||||
sub,
|
||||
sup {
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
// =============================================================================
|
||||
// Lists
|
||||
// =============================================================================
|
||||
|
||||
// Addresses margins set differently in IE6/7
|
||||
@if $legacy_support_for_ie {
|
||||
dl,
|
||||
menu,
|
||||
ol,
|
||||
ul {
|
||||
margin: 1em 0;
|
||||
}
|
||||
}
|
||||
|
||||
@if $legacy_support_for_ie {
|
||||
dd {
|
||||
margin: 0 0 0 40px;
|
||||
}
|
||||
}
|
||||
|
||||
// Addresses paddings set differently in IE6/7
|
||||
@if $legacy_support_for_ie {
|
||||
menu,
|
||||
ol,
|
||||
ul {
|
||||
padding: 0 0 0 40px;
|
||||
}
|
||||
}
|
||||
|
||||
// Corrects list images handled incorrectly in IE7
|
||||
|
||||
nav {
|
||||
ul,
|
||||
ol {
|
||||
@if $legacy_support_for_ie {
|
||||
list-style-image: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// =============================================================================
|
||||
// Embedded content
|
||||
// =============================================================================
|
||||
|
||||
// 1. Removes border when inside 'a' element in IE6/7/8/9, FF3
|
||||
// 2. Improves image quality when scaled in IE7
|
||||
// code.flickr.com/blog/2008/11/12/on-ui-quality-the-little-things-client-side-image-resizing/
|
||||
|
||||
img {
|
||||
border: 0; // 1
|
||||
@if $legacy_support_for_ie {
|
||||
-ms-interpolation-mode: bicubic; // 2
|
||||
}
|
||||
}
|
||||
|
||||
// Corrects overflow displayed oddly in IE9
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
// =============================================================================
|
||||
// Figures
|
||||
// =============================================================================
|
||||
|
||||
// Addresses margin not present in IE6/7/8/9, S5, O11
|
||||
|
||||
figure {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
// =============================================================================
|
||||
// Forms
|
||||
// =============================================================================
|
||||
|
||||
// Corrects margin displayed oddly in IE6/7
|
||||
@if $legacy_support_for_ie {
|
||||
form {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Define consistent border, margin, and padding
|
||||
|
||||
fieldset {
|
||||
border: 1px solid #c0c0c0;
|
||||
margin: 0 2px;
|
||||
padding: 0.35em 0.625em 0.75em;
|
||||
}
|
||||
|
||||
// 1. Corrects color not being inherited in IE6/7/8/9
|
||||
// 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
||||
// 3. Corrects text not wrapping in FF3
|
||||
// 4. Corrects alignment displayed oddly in IE6/7
|
||||
|
||||
legend {
|
||||
border: 0; // 1
|
||||
padding: 0; // 2
|
||||
white-space: normal; // 3
|
||||
@if $legacy_support_for_ie {
|
||||
*margin-left: -7px; // 4
|
||||
}
|
||||
}
|
||||
|
||||
// 1. Correct font family not being inherited in all browsers.
|
||||
// 2. Corrects font size not being inherited in all browsers
|
||||
// 3. Addresses margins set differently in IE6/7, FF3+, S5, Chrome
|
||||
// 4. Improves appearance and consistency in all browsers
|
||||
|
||||
button,
|
||||
input,
|
||||
select,
|
||||
textarea {
|
||||
font-family: inherit; // 1
|
||||
font-size: 100%; // 2
|
||||
margin: 0; // 3
|
||||
vertical-align: baseline; // 4
|
||||
@if $legacy_support_for_ie {
|
||||
*vertical-align: middle; // 4
|
||||
}
|
||||
}
|
||||
|
||||
// Addresses FF3/4 setting line-height on 'input' using !important in the UA stylesheet
|
||||
|
||||
button, input {
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
// Address inconsistent `text-transform` inheritance for `button` and `select`.
|
||||
// All other form control elements do not inherit `text-transform` values.
|
||||
// Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+.
|
||||
// Correct `select` style inheritance in Firefox 4+ and Opera.
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
||||
// and `video` controls
|
||||
// 2. Corrects inability to style clickable 'input' types in iOS
|
||||
// 3. Improves usability and consistency of cursor style between image-type
|
||||
// 'input' and others
|
||||
// 4. Removes inner spacing in IE7 without affecting normal text inputs
|
||||
// Known issue: inner spacing remains in IE6
|
||||
|
||||
button,
|
||||
html input[type="button"], // 1
|
||||
input[type="reset"],
|
||||
input[type="submit"] {
|
||||
-webkit-appearance: button; // 2
|
||||
cursor: pointer; // 3
|
||||
@if $legacy_support_for_ie {
|
||||
*overflow: visible; // 4
|
||||
}
|
||||
}
|
||||
|
||||
// Re-set default cursor for disabled elements
|
||||
|
||||
button[disabled],
|
||||
input[disabled] {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
// Removes inner padding and border in FF3+
|
||||
// www.sitepen.com/blog/2008/05/14/the-devils-in-the-details-fixing-dojos-toolbar-buttons/
|
||||
|
||||
button, input {
|
||||
&::-moz-focus-inner {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
// 1. Removes default vertical scrollbar in IE6/7/8/9
|
||||
// 2. Improves readability and alignment in all browsers
|
||||
|
||||
textarea {
|
||||
overflow: auto; // 1
|
||||
vertical-align: top; // 2
|
||||
}
|
||||
|
||||
// =============================================================================
|
||||
// Tables
|
||||
// =============================================================================
|
||||
|
||||
// Remove most spacing between table cells
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
input {
|
||||
// 1. Addresses appearance set to searchfield in S5, Chrome
|
||||
// 2. Addresses box-sizing set to border-box in S5, Chrome (include -moz to future-proof)
|
||||
&[type="search"] {
|
||||
-webkit-appearance: textfield; // 1
|
||||
-moz-box-sizing: content-box;
|
||||
-webkit-box-sizing: content-box; // 2
|
||||
box-sizing: content-box;
|
||||
|
||||
// Remove inner padding and search cancel button in Safari 5 and Chrome
|
||||
// on OS X.
|
||||
&::-webkit-search-cancel-button,
|
||||
&::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
}
|
||||
|
||||
// 1. Address box sizing set to `content-box` in IE 8/9/10.
|
||||
// 2. Remove excess padding in IE 8/9/10.
|
||||
// 3. Removes excess padding in IE7
|
||||
// Known issue: excess padding remains in IE6
|
||||
&[type="checkbox"],
|
||||
&[type="radio"] {
|
||||
box-sizing: border-box; // 1
|
||||
padding: 0; // 2
|
||||
@if $legacy_support_for_ie {
|
||||
*height: 13px; // 3
|
||||
*width: 13px; // 3
|
||||
}
|
||||
}
|
||||
}
|
||||
6
src/components/App.vue
Normal file
@@ -0,0 +1,6 @@
|
||||
<template>
|
||||
<router-view></router-view>
|
||||
</template>
|
||||
<script>
|
||||
export default {}
|
||||
</script>
|
||||
15
src/components/Button.vue
Normal file
@@ -0,0 +1,15 @@
|
||||
<template>
|
||||
<button class="zui-button" @click="onClick">
|
||||
<slot></slot>
|
||||
</button>
|
||||
</template>
|
||||
<script>
|
||||
import './less/button.less'
|
||||
export default {
|
||||
methods: {
|
||||
onClick (e) {
|
||||
this.$emit('click', e)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
151
src/components/CaseLogo.vue
Normal file
@@ -0,0 +1,151 @@
|
||||
<template>
|
||||
<!-- <img alt="zhichou" class="zui-logo" :src="src" @click="onClick"/> -->
|
||||
<img alt="zhichou" class="zui-logo" :src="src" />
|
||||
</template>
|
||||
<script>
|
||||
import './less/logo.less'
|
||||
import case1 from './img/case1.png'
|
||||
import case2 from './img/case2.png'
|
||||
import case3 from './img/case3.png'
|
||||
import case4 from './img/case4.png'
|
||||
import case5 from './img/case5.png'
|
||||
import case6 from './img/case6.png'
|
||||
import case7 from './img/case7.png'
|
||||
import case8 from './img/case8.png'
|
||||
import case9 from './img/case9.png'
|
||||
import case10 from './img/case10.png'
|
||||
import case11 from './img/case11.png'
|
||||
import case12 from './img/case12.png'
|
||||
import case13 from './img/case13.png'
|
||||
import case14 from './img/case14.png'
|
||||
import case15 from './img/case15.png'
|
||||
|
||||
import mcase1 from './img/mcase1.png'
|
||||
import mcase2 from './img/mcase2.png'
|
||||
import mcase3 from './img/mcase3.png'
|
||||
import mcase4 from './img/mcase4.png'
|
||||
import mcase5 from './img/mcase5.png'
|
||||
import mcase6 from './img/mcase6.png'
|
||||
import mcase7 from './img/mcase7.png'
|
||||
import mcase8 from './img/mcase8.png'
|
||||
import mcase9 from './img/mcase9.png'
|
||||
import mcase10 from './img/mcase10.png'
|
||||
import mcase11 from './img/mcase11.png'
|
||||
import mcase12 from './img/mcase12.png'
|
||||
import mcase13 from './img/mcase13.png'
|
||||
import mcase14 from './img/mcase14.png'
|
||||
import mcase15 from './img/mcase15.png'
|
||||
|
||||
export default {
|
||||
name: 'CaseLogo',
|
||||
props: {
|
||||
type: {
|
||||
default: 'case1'
|
||||
},
|
||||
href: {
|
||||
default: '/'
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
src: function () {
|
||||
if (this.type === 'case1') {
|
||||
return case1
|
||||
}
|
||||
if (this.type === 'case2') {
|
||||
return case2
|
||||
}
|
||||
if (this.type === 'case3') {
|
||||
return case3
|
||||
}
|
||||
if (this.type === 'case4') {
|
||||
return case4
|
||||
}
|
||||
if (this.type === 'case5') {
|
||||
return case5
|
||||
}
|
||||
if (this.type === 'case6') {
|
||||
return case6
|
||||
}
|
||||
if (this.type === 'case7') {
|
||||
return case7
|
||||
}
|
||||
if (this.type === 'case8') {
|
||||
return case8
|
||||
}
|
||||
if (this.type === 'case9') {
|
||||
return case9
|
||||
}
|
||||
if (this.type === 'case10') {
|
||||
return case10
|
||||
}
|
||||
if (this.type === 'case11') {
|
||||
return case11
|
||||
}
|
||||
if (this.type === 'case12') {
|
||||
return case12
|
||||
}
|
||||
if (this.type === 'case13') {
|
||||
return case13
|
||||
}
|
||||
if (this.type === 'case14') {
|
||||
return case14
|
||||
}
|
||||
if (this.type === 'case15') {
|
||||
return case15
|
||||
}
|
||||
|
||||
|
||||
if (this.type === 'mcase1') {
|
||||
return mcase1
|
||||
}
|
||||
if (this.type === 'mcase2') {
|
||||
return mcase2
|
||||
}
|
||||
if (this.type === 'mcase3') {
|
||||
return mcase3
|
||||
}
|
||||
if (this.type === 'mcase4') {
|
||||
return mcase4
|
||||
}
|
||||
if (this.type === 'mcase5') {
|
||||
return mcase5
|
||||
}
|
||||
if (this.type === 'mcase6') {
|
||||
return mcase6
|
||||
}
|
||||
if (this.type === 'mcase7') {
|
||||
return mcase7
|
||||
}
|
||||
if (this.type === 'mcase8') {
|
||||
return mcase8
|
||||
}
|
||||
if (this.type === 'mcase9') {
|
||||
return mcase9
|
||||
}
|
||||
if (this.type === 'mcase10') {
|
||||
return mcase10
|
||||
}
|
||||
if (this.type === 'mcase11') {
|
||||
return mcase11
|
||||
}
|
||||
if (this.type === 'mcase12') {
|
||||
return mcase12
|
||||
}
|
||||
if (this.type === 'mcase13') {
|
||||
return mcase13
|
||||
}
|
||||
if (this.type === 'mcase14') {
|
||||
return mcase14
|
||||
}
|
||||
if (this.type === 'mcase15') {
|
||||
return mcase15
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onClick: function (e) {
|
||||
location.assign(this.href)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
10
src/components/CustomerCase.vue
Normal file
@@ -0,0 +1,10 @@
|
||||
<template>
|
||||
<div class="customer-case">
|
||||
<slot></slot>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import './less/customer-case.less'
|
||||
export default {
|
||||
}
|
||||
</script>
|
||||
17
src/components/Footer.vue
Normal file
@@ -0,0 +1,17 @@
|
||||
<template>
|
||||
<footer class="zui-footer">
|
||||
<div class="links">
|
||||
2024 © 智聪科技 Copyright
|
||||
<a href="https://beian.miit.gov.cn/" target="_blank"> 鲁ICP备2024118666号-1</a>
|
||||
</div>
|
||||
<p class="copy-right">
|
||||
|
||||
<br>
|
||||
|
||||
</p>
|
||||
</footer>
|
||||
</template>
|
||||
<script>
|
||||
import './less/footer.less'
|
||||
export default {}
|
||||
</script>
|
||||
15
src/components/FormItem.vue
Normal file
@@ -0,0 +1,15 @@
|
||||
<template>
|
||||
<div class="zui-form-item">
|
||||
<label class="zui-form-label">{{label}}</label>
|
||||
<slot></slot>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
label: {
|
||||
default: ''
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
17
src/components/Header.vue
Normal file
@@ -0,0 +1,17 @@
|
||||
<template>
|
||||
<header class="zui-header">
|
||||
<slot></slot>
|
||||
</header>
|
||||
</template>
|
||||
<script>
|
||||
import './less/header.less'
|
||||
import Logo from './Logo'
|
||||
export default {
|
||||
props: {
|
||||
logoType: {
|
||||
default: 'zhichou'
|
||||
}
|
||||
},
|
||||
components: {Logo}
|
||||
}
|
||||
</script>
|
||||
10
src/components/Label.vue
Normal file
@@ -0,0 +1,10 @@
|
||||
<template>
|
||||
<label class="zui-label">
|
||||
<slot></slot>
|
||||
<span class="zui-label-triangle"></span>
|
||||
</label>
|
||||
</template>
|
||||
<script>
|
||||
import './less/label.less'
|
||||
export default {}
|
||||
</script>
|
||||
15
src/components/Loading.vue
Normal file
@@ -0,0 +1,15 @@
|
||||
<template>
|
||||
<div class="zui-loading">
|
||||
<div class="zui-loading-content">
|
||||
<div class="zui-loading-dot white"></div>
|
||||
<div class="zui-loading-dot"></div>
|
||||
<div class="zui-loading-dot"></div>
|
||||
<div class="zui-loading-dot"></div>
|
||||
<div class="zui-loading-dot"></div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import './less/loading.less'
|
||||
export default {}
|
||||
</script>
|
||||
56
src/components/Logo.vue
Normal file
@@ -0,0 +1,56 @@
|
||||
<template>
|
||||
<img alt="xiaoyanyun" class="zui-logo" :src="src" @click="onClick"/>
|
||||
</template>
|
||||
<script>
|
||||
import './less/logo.less'
|
||||
import logo from './img/logo.png'
|
||||
import zlogo from './img/zlogo.png'
|
||||
import hrLogo from './img/hr-logo.png'
|
||||
import plusLogo from './img/plus-logo.png'
|
||||
import mlogo from './img/m-logo.png'
|
||||
import mhrLogo from './img/m-hr-logo.png'
|
||||
import mplusLogo from './img/m-plus-logo.png'
|
||||
export default {
|
||||
name: 'Logo',
|
||||
props: {
|
||||
type: {
|
||||
default: 'xiaoyanyun'
|
||||
},
|
||||
href: {
|
||||
default: '/'
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
src: function () {
|
||||
if (this.type === 'xiaoyanyun') {
|
||||
return logo
|
||||
}
|
||||
if (this.type === 'zhongtai') {
|
||||
return zlogo
|
||||
}
|
||||
if (this.type === 'mzhichou') {
|
||||
return mlogo
|
||||
}
|
||||
if (this.type === 'hr') {
|
||||
return hrLogo
|
||||
}
|
||||
if (this.type === 'mhr') {
|
||||
return mhrLogo
|
||||
}
|
||||
if (this.type === 'plus') {
|
||||
return plusLogo
|
||||
}
|
||||
if (this.type === 'mplus') {
|
||||
return mplusLogo
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onClick: function (e) {
|
||||
if(this.type==="xiaoyanyun"){
|
||||
location.assign(this.href)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
38
src/components/Page.vue
Normal file
@@ -0,0 +1,38 @@
|
||||
<template>
|
||||
<div :class="cls">
|
||||
<slot></slot>
|
||||
<zui-toast v-if="toastText!==''">
|
||||
{{toastText}}
|
||||
</zui-toast>
|
||||
<zui-loading v-if="loadingVisible"/>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import './less/page.less'
|
||||
import '../assets/css/vivify.min.css'
|
||||
import ZuiToast from './Toast'
|
||||
import ZuiLoading from './Loading'
|
||||
import Util from '../Util'
|
||||
|
||||
export default {
|
||||
props: {
|
||||
title: '智聪'
|
||||
},
|
||||
components: {
|
||||
ZuiToast,
|
||||
ZuiLoading
|
||||
},
|
||||
computed: {
|
||||
cls () {
|
||||
const cls = (Util.os.android || Util.os.iPhone) ? '' : 'min-1200'
|
||||
return 'zui-page ' + cls
|
||||
},
|
||||
toastText () {
|
||||
return this.$store.state.toastText
|
||||
},
|
||||
loadingVisible () {
|
||||
return this.$store.state.loadingVisible
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
9
src/components/Toast.vue
Normal file
@@ -0,0 +1,9 @@
|
||||
<template>
|
||||
<div class="zui-toast">
|
||||
<slot></slot>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import './less/toast.less'
|
||||
export default {}
|
||||
</script>
|
||||
BIN
src/components/img/hr-logo.png
Normal file
|
After Width: | Height: | Size: 64 KiB |
BIN
src/components/img/logo.png
Normal file
|
After Width: | Height: | Size: 92 KiB |
BIN
src/components/img/m-hr-logo.png
Normal file
|
After Width: | Height: | Size: 55 KiB |
BIN
src/components/img/m-logo.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
src/components/img/m-plus-logo.png
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
src/components/img/plus-logo.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
src/components/img/zlogo.png
Normal file
|
After Width: | Height: | Size: 60 KiB |
0
src/components/less/app.less
Normal file
11
src/components/less/button.less
Normal file
@@ -0,0 +1,11 @@
|
||||
@import "./mixin";
|
||||
|
||||
.@{prefix}-button{
|
||||
color: #fff;
|
||||
font-size: 14px;
|
||||
line-height: 50px;
|
||||
border-radius: 6px;
|
||||
background: #F7931E;
|
||||
min-width: 190px;
|
||||
.cursor();
|
||||
}
|
||||
126
src/components/less/customer-case.less
Normal file
@@ -0,0 +1,126 @@
|
||||
.customer-case {
|
||||
margin: 0 auto;
|
||||
max-width: 1120px;
|
||||
padding: 90px 0 100px 0;
|
||||
h2 {
|
||||
color: #F7931E;
|
||||
font-size: 40px;
|
||||
text-align: center;
|
||||
}
|
||||
p {
|
||||
color: #808080;
|
||||
font-size: 20px;
|
||||
text-align: center;
|
||||
margin-top: 15px;
|
||||
}
|
||||
.customer-case-carousel {
|
||||
margin-top: 35px;
|
||||
.customer-case-carousel-item {
|
||||
float: left;
|
||||
max-width: 540px;
|
||||
min-height: 320px;
|
||||
margin: 10px;
|
||||
padding: 20px 0;
|
||||
background: #DEF0EF;
|
||||
border: 2px dashed #6AC2B5;
|
||||
position: relative;
|
||||
&:after {
|
||||
clear: both;
|
||||
content: '';
|
||||
display: table;
|
||||
}
|
||||
h3 {
|
||||
font-size: 30px;
|
||||
text-align: center;
|
||||
margin: 0 50px;
|
||||
padding: 0 0 10px 0;
|
||||
border-bottom: 3px solid #6AC2B5;
|
||||
}
|
||||
h5{
|
||||
color: #808080;
|
||||
font-size: 20px;
|
||||
text-align: center;
|
||||
font-weight: normal;
|
||||
margin-top: 10px;
|
||||
}
|
||||
.labels{
|
||||
position: relative;
|
||||
.zui-label {
|
||||
top: -5px;
|
||||
left: 20px;
|
||||
display: block;
|
||||
min-width: 116px;
|
||||
position: absolute;
|
||||
&:nth-child(2){
|
||||
top: 50px;
|
||||
}
|
||||
}
|
||||
p {
|
||||
color: #000;
|
||||
font-size: 25px;
|
||||
text-align: left;
|
||||
padding: 0 30px 0 165px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 420px) {
|
||||
.customer-case{
|
||||
max-width: 100%;
|
||||
padding: 25px 10px;
|
||||
h2{
|
||||
font-size:24px;
|
||||
}
|
||||
p{
|
||||
font-size: 12px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
.customer-case-carousel{
|
||||
margin-top: 25px;
|
||||
.customer-case-carousel-item{
|
||||
margin: 10px 0;
|
||||
padding: 10px 0;
|
||||
min-width: 100%;
|
||||
min-height: auto;
|
||||
h3{
|
||||
font-size: 16px;
|
||||
margin: 0 20px;
|
||||
}
|
||||
h5{
|
||||
font-size: 12px;
|
||||
}
|
||||
.labels{
|
||||
.zui-label{
|
||||
top: -5px;
|
||||
left: 20px;
|
||||
font-size: 12px;
|
||||
min-width: 85px;
|
||||
&:nth-child(2){
|
||||
top: 30px;
|
||||
}
|
||||
}
|
||||
p{
|
||||
font-size: 14px;
|
||||
margin: 10px 0 0 0;
|
||||
padding: 0 20px 0 125px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.VueCarousel-pagination{
|
||||
.VueCarousel-dot-container{
|
||||
.VueCarousel-dot{
|
||||
margin-top: 0!important;
|
||||
padding: 5px!important;
|
||||
.VueCarousel-dot-inner{
|
||||
width: 8px!important;
|
||||
height: 8px!important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
38
src/components/less/flag.less
Normal file
@@ -0,0 +1,38 @@
|
||||
.zui-flag {
|
||||
padding: 20px 20px 0 20px;
|
||||
width: 170px;
|
||||
margin-bottom: 85px;
|
||||
background: #32ADC6;
|
||||
position: relative;
|
||||
.zui-flag-border{
|
||||
color: #fff;
|
||||
font-size: 14px;
|
||||
line-height: 40px;
|
||||
width: 130px;
|
||||
height: 117px;
|
||||
border-top: 3px solid #fff;
|
||||
border-left: 3px solid #fff;
|
||||
border-right: 3px solid #fff;
|
||||
display: inline-block;
|
||||
}
|
||||
.zui-label-triangle {
|
||||
width: 0;
|
||||
height: 0;
|
||||
border-left: 85px solid transparent;
|
||||
border-right: 85px solid transparent;
|
||||
border-top: 80px solid #32ADC6;
|
||||
bottom: -80px;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
}
|
||||
.zui-label-small-triangle {
|
||||
width: 0;
|
||||
height: 0;
|
||||
border-left: 85px solid transparent;
|
||||
border-right: 85px solid transparent;
|
||||
border-top: 80px solid #32ADC6;
|
||||
bottom: -80px;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
}
|
||||
}
|
||||
56
src/components/less/footer.less
Normal file
@@ -0,0 +1,56 @@
|
||||
@import './mixin';
|
||||
|
||||
.@{prefix}-footer {
|
||||
width: 100%;
|
||||
min-height: 125px;
|
||||
background: #646464;
|
||||
padding: 40px 0 0 0;
|
||||
.links {
|
||||
color: #fff;
|
||||
font-size: 16px;
|
||||
text-align: center;
|
||||
a {
|
||||
color: #fff;
|
||||
&:after {
|
||||
content: '|';
|
||||
margin: 0 10px;
|
||||
}
|
||||
&:last-child:after {
|
||||
content: '';
|
||||
}
|
||||
&:hover {
|
||||
color: #35A3BA;
|
||||
&:after {
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
br {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
.copy-right {
|
||||
color: #fff;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
margin: 8px 0 0 0;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 420px) {
|
||||
.@{prefix}-footer {
|
||||
.links {
|
||||
a {
|
||||
margin: 0 5px;
|
||||
font-size: 12px;
|
||||
&:after {
|
||||
content: none;
|
||||
}
|
||||
}
|
||||
br {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
57
src/components/less/form.less
Normal file
@@ -0,0 +1,57 @@
|
||||
.zui-form {
|
||||
.zui-form-item {
|
||||
font-size: 0;
|
||||
margin: 15px 0;
|
||||
.zui-form-label {
|
||||
font-size: 16px;
|
||||
min-width: 95px;
|
||||
text-align: right;
|
||||
display: inline-block;
|
||||
padding: 10px 30px 10px 0;
|
||||
}
|
||||
.zui-form-input{
|
||||
min-width: 610px;
|
||||
font-size: 16px;
|
||||
line-height: 50px;
|
||||
padding: 0 10px;
|
||||
border: 1px solid #B3B3B3;
|
||||
background: #F2F2F2;
|
||||
&:focus{
|
||||
border-color: #F7931E;
|
||||
}
|
||||
}
|
||||
.zui-button{
|
||||
min-width: 610px;
|
||||
}
|
||||
}
|
||||
}
|
||||
@media (max-width: 420px) {
|
||||
.zui-form{
|
||||
padding: 20px;
|
||||
.zui-form-item{
|
||||
margin: 10px 0;
|
||||
position: relative;
|
||||
.zui-form-label{
|
||||
padding: 0;
|
||||
text-align: left;
|
||||
line-height: 25px;
|
||||
top: 2px;
|
||||
left: 5px;
|
||||
position: absolute;
|
||||
}
|
||||
.zui-form-input{
|
||||
width: 100%;
|
||||
min-width: 100px;
|
||||
line-height: 25px;
|
||||
padding-left: 75px;
|
||||
text-align: right;
|
||||
}
|
||||
.zui-button{
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
min-width: 100px;
|
||||
line-height: 30px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
80
src/components/less/header.less
Normal file
@@ -0,0 +1,80 @@
|
||||
@import "./mixin.less";
|
||||
|
||||
.@{prefix}-header {
|
||||
width: 100%;
|
||||
height: 100px;
|
||||
.float-clear;
|
||||
.@{prefix}-logo{
|
||||
width: 160px;
|
||||
height: 100px;
|
||||
margin: 0 0 0 20px;
|
||||
float: left;
|
||||
}
|
||||
.@{prefix}-logo-text{
|
||||
float: left;
|
||||
height: 100px;
|
||||
color: #36A4BB;
|
||||
font-size: 16px;
|
||||
padding-top: 28px;
|
||||
margin: 0 0 0 10px;
|
||||
}
|
||||
.@{prefix}-button{
|
||||
float: right;
|
||||
line-height: 40px;
|
||||
background: #236579;
|
||||
margin: 30px 30px 0 0;
|
||||
min-width: 100px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
.@{prefix}-rightcol{
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
.@{prefix}-logo-line {
|
||||
width: 1px;
|
||||
height: 45px;
|
||||
top: 30px;
|
||||
left: 10px;
|
||||
float: left;
|
||||
position: relative;
|
||||
background: #32adc6;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 420px) {
|
||||
.@{prefix}-header{
|
||||
height: 60px;
|
||||
.zui-logo{
|
||||
height: 60px;
|
||||
width: 100px;
|
||||
margin: 0 0 0 10px;
|
||||
}
|
||||
.@{prefix}-logo-text{
|
||||
padding-top: 14px;
|
||||
font-size: 12px;
|
||||
height: 60px;
|
||||
}
|
||||
.@{prefix}-button{
|
||||
display: none;
|
||||
}
|
||||
.@{prefix}-rightcol{
|
||||
display: flex;
|
||||
float: right;
|
||||
line-height: 30px;
|
||||
margin: 15px 10px 0 0;
|
||||
min-width: 50px;
|
||||
font-weight: bold;
|
||||
color: #32adc6;
|
||||
}
|
||||
.@{prefix}-logo-line {
|
||||
width: 1px;
|
||||
height: 30px;
|
||||
background: #32adc6;
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
top: 15px;
|
||||
left: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
35
src/components/less/label.less
Normal file
@@ -0,0 +1,35 @@
|
||||
.zui-label {
|
||||
color: #fff;
|
||||
font-size: 14px;
|
||||
line-height: 40px;
|
||||
text-align: center;
|
||||
padding: 0 20px;
|
||||
margin-right: 20px;
|
||||
background: #6AC2B5;
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
.zui-label-triangle {
|
||||
width: 0;
|
||||
height: 0;
|
||||
border-top: 20px solid transparent;
|
||||
border-left: 20px solid #6AC2B5;
|
||||
border-bottom: 20px solid transparent;
|
||||
right: -20px;
|
||||
top: 0;
|
||||
position: absolute;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 420px) {
|
||||
.zui-label{
|
||||
line-height: 25px;
|
||||
padding: 0 10px;
|
||||
min-width: 85px;
|
||||
.zui-label-triangle{
|
||||
border-top: 11px solid transparent;
|
||||
border-left: 12px solid #6AC2B5;
|
||||
border-bottom: 15px solid transparent;
|
||||
right: -11px;
|
||||
}
|
||||
}
|
||||
}
|
||||
151
src/components/less/loading.less
Normal file
@@ -0,0 +1,151 @@
|
||||
@import './mixin';
|
||||
|
||||
.@{prefix}-loading {
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 1;
|
||||
width: 3em;
|
||||
height: 3em;
|
||||
margin: auto;
|
||||
position: fixed;
|
||||
|
||||
-webkit-animation: rotate .8s linear infinite;
|
||||
-moz-animation: rotate .8s linear infinite;
|
||||
-o-animation: rotate .8s linear infinite;
|
||||
animation: rotate .8s linear infinite;
|
||||
.@{prefix}-loading-content{
|
||||
.@{prefix}-loading-dot{
|
||||
position: absolute;
|
||||
margin: auto;
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
border-radius: 100%;
|
||||
|
||||
-webkit-transition: all .8s ease;
|
||||
-moz-transition: all .8s ease;
|
||||
-o-transition: all .8s ease;
|
||||
transition: all .8s ease;
|
||||
|
||||
&.white {
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
background: white;
|
||||
opacity: 0;
|
||||
|
||||
-webkit-animation: flash .8s linear infinite;
|
||||
-moz-animation: flash .8s linear infinite;
|
||||
-o-animation: flash .8s linear infinite;
|
||||
animation: flash .8s linear infinite;
|
||||
}
|
||||
&:nth-child(2) {
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
background: #FF4444;
|
||||
|
||||
-webkit-animation: dotsY .8s linear infinite;
|
||||
-moz-animation: dotsY .8s linear infinite;
|
||||
-o-animation: dotsY .8s linear infinite;
|
||||
animation: dotsY .8s linear infinite;
|
||||
}
|
||||
&:nth-child(3) {
|
||||
left: 0;
|
||||
right: 0;
|
||||
top: 0;
|
||||
background: #FFBB33;
|
||||
|
||||
-webkit-animation: dotsX .8s linear infinite;
|
||||
-moz-animation: dotsX .8s linear infinite;
|
||||
-o-animation: dotsX .8s linear infinite;
|
||||
animation: dotsX .8s linear infinite;
|
||||
}
|
||||
&:nth-child(4) {
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
background: #99CC00;
|
||||
|
||||
-webkit-animation: dotsY .8s linear infinite;
|
||||
-moz-animation: dotsY .8s linear infinite;
|
||||
-o-animation: dotsY .8s linear infinite;
|
||||
animation: dotsY .8s linear infinite;
|
||||
}
|
||||
&:nth-child(5) {
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: #33B5E5;
|
||||
|
||||
-webkit-animation: dotsX .8s linear infinite;
|
||||
-moz-animation: dotsX .8s linear infinite;
|
||||
-o-animation: dotsX .8s linear infinite;
|
||||
animation: dotsX .8s linear infinite;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes rotate {
|
||||
0% {
|
||||
-webkit-transform: rotate(0);
|
||||
-moz-transform: rotate(0);
|
||||
-o-transform: rotate(0);
|
||||
transform: rotate(0);
|
||||
}
|
||||
10% {
|
||||
width: 3em;
|
||||
height: 3em;
|
||||
}
|
||||
66% {
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
-moz-transform: rotate(360deg);
|
||||
-o-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
width: 3em;
|
||||
height: 3em;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes dotsY {
|
||||
66% {
|
||||
opacity: .1;
|
||||
width: 1em;
|
||||
}
|
||||
77% {
|
||||
opacity: 1;
|
||||
width: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes dotsX {
|
||||
66% {
|
||||
opacity: .1;
|
||||
height: 1em;
|
||||
}
|
||||
77% {
|
||||
opacity: 1;
|
||||
height: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes flash {
|
||||
33% {
|
||||
opacity: 0;
|
||||
border-radius: 0%;
|
||||
}
|
||||
55% {
|
||||
opacity: .6;
|
||||
border-radius: 100%;
|
||||
}
|
||||
66% {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
5
src/components/less/logo.less
Normal file
@@ -0,0 +1,5 @@
|
||||
.zui-logo {
|
||||
width: 150px;
|
||||
height: 52px;
|
||||
cursor: pointer;
|
||||
}
|
||||
280
src/components/less/mixin.less
Normal file
@@ -0,0 +1,280 @@
|
||||
.transform(@t) {
|
||||
-webkit-transform: @t;
|
||||
transform: @t;
|
||||
}
|
||||
|
||||
.transform-origin(@to) {
|
||||
-webkit-transform-origin: @to;
|
||||
transform-origin: @to;
|
||||
}
|
||||
|
||||
.transition(@value) {
|
||||
-webkit-transition: @value;
|
||||
}
|
||||
|
||||
.hairline-top(@color) {
|
||||
&:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
bottom: auto;
|
||||
right: auto;
|
||||
height: 2px;
|
||||
width: 100%;
|
||||
background-color: transparent;
|
||||
border-top: 1px solid @color;
|
||||
display: block;
|
||||
z-index: 15;
|
||||
.transform-origin(50% 0%);
|
||||
html.pixel-ratio-2 & {
|
||||
.transform(scaleY(0.5));
|
||||
}
|
||||
html.pixel-ratio-3 & {
|
||||
.transform(scaleY(0.33));
|
||||
}
|
||||
html.pixel-ratio-4 & {
|
||||
.transform(scaleY(0.25));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.hairline-left(@color) {
|
||||
&:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
bottom: auto;
|
||||
right: auto;
|
||||
width: 1px;
|
||||
height: 100%;
|
||||
background-color: @color;
|
||||
display: block;
|
||||
z-index: 15;
|
||||
.transform-origin(0% 50%);
|
||||
html.pixel-ratio-2 & {
|
||||
.transform(scaleX(0.5));
|
||||
}
|
||||
html.pixel-ratio-3 & {
|
||||
.transform(scaleX(0.33));
|
||||
}
|
||||
html.pixel-ratio-4 & {
|
||||
.transform(scaleX(0.25));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.hairline-bottom(@color, @left:0) {
|
||||
&:after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: @left;
|
||||
bottom: 0;
|
||||
right: auto;
|
||||
top: auto;
|
||||
height: 2px;
|
||||
width: 100%;
|
||||
background-color: transparent;
|
||||
border-bottom: 1px solid @color;
|
||||
display: block;
|
||||
z-index: 15;
|
||||
.transform-origin(50% 100%);
|
||||
html.pixel-ratio-2 & {
|
||||
.transform(scaleY(0.5));
|
||||
}
|
||||
html.pixel-ratio-3 & {
|
||||
.transform(scaleY(0.33));
|
||||
}
|
||||
html.pixel-ratio-4 & {
|
||||
.transform(scaleY(0.25));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.hairline-right(@color) {
|
||||
&:after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
left: auto;
|
||||
bottom: auto;
|
||||
width: 1px;
|
||||
height: 100%;
|
||||
background-color: @color;
|
||||
display: block;
|
||||
z-index: 15;
|
||||
.transform-origin(100% 50%);
|
||||
html.pixel-ratio-2 & {
|
||||
.transform(scaleX(0.5));
|
||||
}
|
||||
html.pixel-ratio-3 & {
|
||||
.transform(scaleX(0.33));
|
||||
}
|
||||
html.pixel-ratio-4 & {
|
||||
.transform(scaleX(0.25));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// For right and bottom
|
||||
.hairline-remove-right-bottom {
|
||||
&:after {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
// For left and top
|
||||
.hairline-remove-left-top {
|
||||
&:before {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
// Encoded SVG Background
|
||||
.encoded-svg-background(@svg) {
|
||||
@url: `encodeURIComponent(@{svg})`;
|
||||
background-image: url("data:image/svg+xml;charset=utf-8,@{url}");
|
||||
}
|
||||
|
||||
.align-self(@as) {
|
||||
-ms-flex-item-align: @as;
|
||||
-webkit-align-self: @as;
|
||||
align-self: @as;
|
||||
}
|
||||
|
||||
.ellipsis() {
|
||||
width: auto;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.backgroundSize(@width,@height) {
|
||||
-webkit-background-size: @width @height;
|
||||
}
|
||||
|
||||
.display-box() {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.flex-direction(@direction: row) {
|
||||
flex-direction: @direction;
|
||||
}
|
||||
|
||||
.flex-wrap(@wrap: nowrap) {
|
||||
flex-wrap: @wrap;
|
||||
}
|
||||
|
||||
.flex-justify(@justify: flex-start) {
|
||||
justify-content: @justify;
|
||||
}
|
||||
|
||||
.box-align(@align: center) {
|
||||
align-items: @align;
|
||||
}
|
||||
|
||||
.box-align-content(@alignContent: stretch) {
|
||||
align-content: @alignContent;
|
||||
}
|
||||
|
||||
.box-flex(@scale: 1) {
|
||||
flex: @scale;
|
||||
}
|
||||
|
||||
.border-radius(@radius: 0) {
|
||||
border-top-left-radius: @radius;
|
||||
border-top-right-radius: @radius;
|
||||
border-bottom-left-radius: @radius;
|
||||
border-bottom-right-radius: @radius;
|
||||
-webkit-background-clip: padding-box;
|
||||
}
|
||||
|
||||
.background(@start: #ffffff, @end: #000000) {
|
||||
background: @end;
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(@start), to(@end)); /* Saf4+, Chrome */
|
||||
background-image: linear-gradient(@start, @end);
|
||||
}
|
||||
|
||||
.border-1px-bottom(@color: #d2d2d2) {
|
||||
background: left bottom repeat-x;
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(.5, transparent), color-stop(.5, @color), to(@color));
|
||||
background-image: linear-gradient(left top, left bottom, color-stop(.5, transparent), color-stop(.5, @color), to(@color));
|
||||
-webkit-background-size: 100% 1px;
|
||||
background-size: 100% 1px;
|
||||
}
|
||||
|
||||
.border-1px-top(@color: #d2d2d2) {
|
||||
background: left top repeat-x;
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(@color), color-stop(.5, @color), color-stop(.5, transparent));
|
||||
background-image: linear-gradient(left top, left bottom, from(@color), color-stop(.5, @color), color-stop(.5, transparent));
|
||||
-webkit-background-size: 100% 1px;
|
||||
background-size: 100% 1px;
|
||||
}
|
||||
|
||||
.border-1px-both(@color: #d2d2d2) {
|
||||
background-position: left top, left bottom;
|
||||
background-repeat: repeat-x, repeat-x;
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(@color), color-stop(.5, @color), color-stop(.5, transparent)), -webkit-gradient(linear, left top, left bottom, color-stop(.5, transparent), color-stop(.5, @color), to(@color));
|
||||
background-image: linear-gradient(left top, left bottom, from(@color), color-stop(.5, @color), color-stop(.5, transparent)), linear-gradient(left top, left bottom, color-stop(.5, transparent), color-stop(.5, @color), to(@color));
|
||||
-webkit-background-size: 100% 1px, 100% 1px;
|
||||
background-size: 100% 1px, 100% 1px;
|
||||
}
|
||||
|
||||
.border-1px-scale(@color: #d2d2d2) {
|
||||
position: relative;
|
||||
&:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
bottom: -1px;
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
border-bottom: 1px solid @color;
|
||||
-webkit-transform: scaleY(.5);
|
||||
-webkit-transform-origin: 0px 0px;
|
||||
}
|
||||
}
|
||||
|
||||
.box-sizing(@sizing: border-box) {
|
||||
-webkit-box-sizing: @sizing;
|
||||
}
|
||||
|
||||
.box-shadow(@value) {
|
||||
-webkit-box-shadow: @value;
|
||||
}
|
||||
|
||||
.box-shadow(@value1, @value2) {
|
||||
-webkit-box-shadow: @value1, @value2;
|
||||
}
|
||||
|
||||
.ellipsis(@w:auto) {
|
||||
width: @w;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
word-wrap: normal;
|
||||
}
|
||||
|
||||
.float-clear() {
|
||||
&:after {
|
||||
visibility: hidden;
|
||||
display: block;
|
||||
font-size: 0px;
|
||||
content: ' ';
|
||||
clear: both;
|
||||
height: 0px;
|
||||
}
|
||||
}
|
||||
|
||||
.cursor() {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.overflow-scroll() {
|
||||
overflow-y: scroll;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
||||
@colorMain: #6ac2b6;
|
||||
@prefix: zui;
|
||||
20
src/components/less/page.less
Normal file
@@ -0,0 +1,20 @@
|
||||
@import './reset.less';
|
||||
|
||||
.zui-page {
|
||||
width: 100%;
|
||||
min-height: 100%;
|
||||
margin: 0 auto;
|
||||
font-family: "微软雅黑", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
&.min-1200 {
|
||||
min-width: 1200px;
|
||||
}
|
||||
a:hover {
|
||||
color: #35A3BA;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.clear:after {
|
||||
content: '';
|
||||
display: table;
|
||||
clear: both;
|
||||
}
|
||||
}
|
||||
84
src/components/less/reset.less
Normal file
@@ -0,0 +1,84 @@
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
-moz-box-sizing: border-box;
|
||||
-webkit-box-sizing: border-box;
|
||||
-o-box-sizing: border-box;
|
||||
-ms-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
html {
|
||||
-ms-touch-action: none;
|
||||
}
|
||||
|
||||
html, body {
|
||||
-webkit-text-size-adjust: none;
|
||||
margin: 0;
|
||||
height: 100%;
|
||||
font-size: 14px !important;
|
||||
::-webkit-scrollbar {
|
||||
width: 0;
|
||||
}
|
||||
}
|
||||
|
||||
ul,
|
||||
ol {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #32ADC6;
|
||||
text-decoration: none;
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
button {
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
input, button, textarea {
|
||||
-webkit-appearance: none;
|
||||
appearance: none;
|
||||
border: none;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
input:active, textarea:active, select:active {
|
||||
border: none;
|
||||
}
|
||||
|
||||
input, textarea, select {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
img {
|
||||
border: none;
|
||||
}
|
||||
|
||||
input::-webkit-input-placeholder, textarea::-webkit-input-placeholder {
|
||||
/* WebKit browsers */
|
||||
color: #999;
|
||||
}
|
||||
|
||||
input:-moz-placeholder, textarea:-moz-placeholder {
|
||||
/* Mozilla Firefox 4 to 18 */
|
||||
color: #999;
|
||||
}
|
||||
|
||||
input::-moz-placeholder, textarea::-moz-placeholder {
|
||||
/* Mozilla Firefox 19+ */
|
||||
color: #999;
|
||||
}
|
||||
|
||||
input:-ms-input-placeholder, textarea:-ms-input-placeholder {
|
||||
/* Internet Explorer 10+ */
|
||||
color: #999;
|
||||
}
|
||||
|
||||
/*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/
|
||||
::-webkit-scrollbar {
|
||||
width: 0;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
23
src/components/less/toast.less
Normal file
@@ -0,0 +1,23 @@
|
||||
@import "./mixin";
|
||||
|
||||
.@{prefix}-toast{
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
width: 250px;
|
||||
padding: 20px;
|
||||
position: fixed;
|
||||
color: #fff;
|
||||
font-size: 16px;
|
||||
text-align: center;
|
||||
border-radius: 10px;
|
||||
background: rgba(0,0,0,.7);
|
||||
animation: toastScaleIn .2s ease forwards;
|
||||
@keyframes toastScaleIn {
|
||||
0%{
|
||||
transform: scale(.8, .8) translate(-50%, -50%);
|
||||
}
|
||||
100%{
|
||||
transform: scale(1, 1) translate(-50%, -50%);
|
||||
}
|
||||
}
|
||||
}
|
||||
44
src/components/less/var.css
Normal file
@@ -0,0 +1,44 @@
|
||||
$color-blue: #26a2ff;
|
||||
$color-white: #fff;
|
||||
$color-grey: #d9d9d9;
|
||||
$border-color: #c8c8cd;
|
||||
$success-color: #4caf50;
|
||||
$error-color: #f44336;
|
||||
$warning-color: #ffc107;
|
||||
|
||||
/* Cell Component */
|
||||
$cell-value-color: #888;
|
||||
|
||||
/* Header Component */
|
||||
$header-height: 40px;
|
||||
|
||||
/* Button Component */
|
||||
$button-default-color: #656b79;
|
||||
$button-default-background-color: #f6f8fa;
|
||||
$button-default-plain-color: #5a5a5a;
|
||||
$button-default-box-shadow: 0 0 1px #b8bbbf;
|
||||
$button-primary-color: #fff;
|
||||
$button-primary-background-color: #26a2ff;
|
||||
$button-danger-color: #fff;
|
||||
$button-danger-background-color: #ef4f4f;
|
||||
|
||||
/* Tab Item Component */
|
||||
$tab-item-font-size: 12px;
|
||||
|
||||
/* Tabbar Component */
|
||||
$tabbar-background-color: #fafafa;
|
||||
$tabbar-tab-item-selected-background-color: #eaeaea;
|
||||
$tabbar-tab-item-selected-color: $color-blue;
|
||||
|
||||
/* Navbar Component */
|
||||
$navbar-background-color: #fafafa;
|
||||
$tabbar-tab-item-selected-background-color: #eaeaea;
|
||||
|
||||
/* Checklist Component */
|
||||
$checklist-title-color: #888;
|
||||
|
||||
/* Radio Component */
|
||||
$radio-title-color: #888;
|
||||
|
||||
/* z-index */
|
||||
$z-index-normal: 1;
|
||||
12
src/main.js
Normal file
@@ -0,0 +1,12 @@
|
||||
import Vue from 'vue'
|
||||
import store from './store'
|
||||
import router from './router'
|
||||
import App from './components/App'
|
||||
|
||||
new Vue({
|
||||
router,
|
||||
store,
|
||||
template: '<App/>',
|
||||
components: { App }
|
||||
}).$mount('#app')
|
||||
|
||||
29
src/router/index.js
Normal file
@@ -0,0 +1,29 @@
|
||||
import Vue from 'vue'
|
||||
import VueRouter from 'vue-router'
|
||||
|
||||
Vue.use(VueRouter)
|
||||
const HomePage = () => import('../views/HomePage')
|
||||
|
||||
|
||||
const router = new VueRouter({
|
||||
mode: 'history',
|
||||
base: __dirname,
|
||||
routes: [{
|
||||
path: '/',
|
||||
component: HomePage
|
||||
},
|
||||
{
|
||||
path: '/callus',
|
||||
component: () => import('@/views/callus'),
|
||||
hidden: true
|
||||
},
|
||||
{
|
||||
path: '/resource',
|
||||
component: () => import('@/views/resource'),
|
||||
hidden: true
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
|
||||
export default router;
|
||||
81
src/services/BaseService.js
Normal file
@@ -0,0 +1,81 @@
|
||||
'use strict'
|
||||
import jsonp from 'jsonp'
|
||||
import store from '../store'
|
||||
|
||||
const buildQuery = (data) => {
|
||||
let query = ''
|
||||
for (let i in data) {
|
||||
let queryItem = ''
|
||||
if (Object.prototype.toString.call(data[i]) === '[object Array]') {
|
||||
queryItem = data[i].map((item, key) => {
|
||||
return i + '[' + key + ']=' + item
|
||||
}).join('&')
|
||||
} else {
|
||||
queryItem = i + '=' + encodeURIComponent(data[i])
|
||||
}
|
||||
query += queryItem + '&'
|
||||
}
|
||||
return query.substr(0, query.length - 1)
|
||||
}
|
||||
|
||||
const buildUrl = (path, data) => {
|
||||
const protocol = location.href.indexOf('https') === -1 ? 'http://' : 'https://'
|
||||
const host = path.indexOf('//') === -1 ? protocol + process.env.API_HOST + '/' : ''
|
||||
const query = data ? '?' + buildQuery(data) : ''
|
||||
return host + path + query
|
||||
}
|
||||
|
||||
const beforeSend = (data) => {
|
||||
if (data && data.loading === false) {
|
||||
store.commit('loading', false)
|
||||
} else {
|
||||
store.commit('loading', true)
|
||||
window.ajaxnum = (window.ajaxnum || 0) + 1
|
||||
}
|
||||
}
|
||||
|
||||
const afterSend = (data) => {
|
||||
store.commit('loading', false)
|
||||
window.ajaxnum = (window.ajaxnum || 0) + 1
|
||||
}
|
||||
|
||||
const onStatusError = (res) => {
|
||||
if (res.status === 40001) {
|
||||
store.commit('requireLogin')
|
||||
return false
|
||||
}
|
||||
store.commit('toast', res.message || '请求错误, 请稍候重试')
|
||||
}
|
||||
|
||||
const onRequestError = (err) => {
|
||||
store.commit('requestError', err)
|
||||
}
|
||||
|
||||
export default class BaseService {
|
||||
/**
|
||||
* send jsonp request
|
||||
* @param url
|
||||
* @param data
|
||||
* @param onSuccess
|
||||
* @param onError
|
||||
*/
|
||||
static jsonp = (url, data, onSuccess, onError) => {
|
||||
beforeSend(data)
|
||||
jsonp(buildUrl(url, data), {
|
||||
timeout: 10000
|
||||
}, (err, res) => {
|
||||
afterSend(res)
|
||||
|
||||
if (err != null) {
|
||||
onRequestError(err)
|
||||
return false
|
||||
}
|
||||
if (res.status !== 0 && res.status !== 40006 && res.status !== 80001) {
|
||||
onStatusError(res)
|
||||
return false
|
||||
}
|
||||
|
||||
onSuccess && onSuccess(res)
|
||||
})
|
||||
}
|
||||
}
|
||||
7
src/services/FeedbackService.js
Normal file
@@ -0,0 +1,7 @@
|
||||
import BaseService from './BaseService'
|
||||
|
||||
export default class FeedbackService {
|
||||
static create = (data, success) => {
|
||||
BaseService.jsonp('feedback/create', data, success)
|
||||
}
|
||||
}
|
||||
7
src/services/UserService.js
Normal file
@@ -0,0 +1,7 @@
|
||||
import BaseService from './BaseService'
|
||||
|
||||
export default class UserService {
|
||||
static feedback = (data, success) => {
|
||||
BaseService.jsonp('user/feedback', data, success)
|
||||
}
|
||||
}
|
||||
28
src/store/index.js
Normal file
@@ -0,0 +1,28 @@
|
||||
import Vue from 'vue'
|
||||
import Vuex from 'vuex'
|
||||
|
||||
Vue.use(Vuex)
|
||||
export default new Vuex.Store({
|
||||
state: {
|
||||
toastText: '',
|
||||
loadingVisible: false
|
||||
},
|
||||
mutations: {
|
||||
increment (state) {
|
||||
state.count++
|
||||
},
|
||||
toast (state, text) {
|
||||
state.toastText = text
|
||||
setTimeout(() => {
|
||||
state.toastText = ''
|
||||
}, 2000)
|
||||
},
|
||||
loading (state, loadingVisible) {
|
||||
state.loadingVisible = loadingVisible
|
||||
},
|
||||
requireLogin (state) {
|
||||
const host = process.env.NODE_ENV === 'development' ? 'wxtest.zhichou.com' : 'wx.zhichou.com'
|
||||
location.assign('http://' + host + '/#/me/login?rurl=' + encodeURIComponent(location.href))
|
||||
}
|
||||
}
|
||||
})
|
||||
168
src/views/HomePage.vue
Normal file
@@ -0,0 +1,168 @@
|
||||
<template>
|
||||
<page class="home-page">
|
||||
<zui-header>
|
||||
<logo type="xiaoyanyun" href="/"></logo>
|
||||
<h4 class="zui-logo-text">
|
||||
| 记账专家
|
||||
<br/>| 健康帮手
|
||||
</h4>
|
||||
<div class="zui-rightcol" @click="openMenu" style="color: #0b8ba5;">◄目录►</div>
|
||||
<drop-list :config="configData" ref="droplist"></drop-list>
|
||||
<zui-button @click="onButtonClick('callus')">联系我们</zui-button>
|
||||
<zui-button @click="onButtonClick('resource')">资料下载</zui-button>
|
||||
<zui-button @click="onButtonClick('health')">健康档案</zui-button>
|
||||
<zui-button @click="onButtonClick('invest')">记账平台</zui-button>
|
||||
<zui-button @click="onButtonClick('home')">首页</zui-button>
|
||||
</zui-header>
|
||||
<div class="banner vivify fadeIn">
|
||||
<h1 class="vivify popIn">
|
||||
<span class="br"></span>科学记账、量入为出,健康档案、守护未来
|
||||
</h1>
|
||||
<h3 class="vivify popIn">技术引领,服务为基础,科技为核心</h3>
|
||||
</div>
|
||||
<div class="nav clear">
|
||||
<a class="zhichou vivify popIn">
|
||||
<div class="watermark blue">记账</div>
|
||||
<logo type="zhongtai"></logo>
|
||||
<logo class="mobile" type="mzhichou"></logo>
|
||||
<h3>解决个人记账难题</h3>
|
||||
<h4>好用·易用·终生免费>></h4>
|
||||
</a>
|
||||
<a class="hr vivify popIn delay-200">
|
||||
<div class="watermark green">服务</div>
|
||||
<logo type="hr"></logo>
|
||||
<logo class="mobile" type="mhr"></logo>
|
||||
<h3>健康档案管理专家</h3>
|
||||
<h4>专业·准确·高效>></h4>
|
||||
</a>
|
||||
<a class="plus vivify popIn delay-400">
|
||||
<div class="watermark blue">使用</div>
|
||||
<logo type="plus"></logo>
|
||||
<logo class="mobile" type="mplus"></logo>
|
||||
<h3>保障平台无间断运营</h3>
|
||||
<h4>后顾无忧·持续创新>></h4>
|
||||
</a>
|
||||
</div>
|
||||
<div class="service">
|
||||
<h1>
|
||||
您身边的资产记账专家、健康档案好帮手
|
||||
</h1>
|
||||
<h3>
|
||||
专业、高效,满足您的记账需求、健康记录
|
||||
</h3>
|
||||
<h4>
|
||||
无需下载,永久免费!
|
||||
</h4>
|
||||
</div>
|
||||
<div class="features">
|
||||
<ul>
|
||||
<li>
|
||||
<img :src="feature1"/>
|
||||
<h4>记账管理</h4>
|
||||
<p>为您提供最专业的记账服务。</p>
|
||||
</li>
|
||||
<li>
|
||||
<img :src="feature2"/>
|
||||
<h4>健康档案</h4>
|
||||
<p>满足健康档案记录迫切需求。</p>
|
||||
</li>
|
||||
<li>
|
||||
<img :src="feature3"/>
|
||||
<h4>专业团队</h4>
|
||||
<p>专业的研发团队,系统可靠。</p>
|
||||
</li>
|
||||
<li>
|
||||
<img :src="feature4"/>
|
||||
<h4>产品服务</h4>
|
||||
<p>为您提供24小时不间断服务。</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- <div class="customer-case-logo">
|
||||
<img :src="companyLogo"/>
|
||||
<img class="mobile" :src="mcompanyLogo"/>
|
||||
</div> -->
|
||||
<div class="apply-hr">
|
||||
<h2>
|
||||
智聪科技,优享服务
|
||||
</h2>
|
||||
<h4>
|
||||
提供个人记账、健康档案系统解决方案
|
||||
</h4>
|
||||
</div>
|
||||
<zui-footer/>
|
||||
</page>
|
||||
</template>
|
||||
<script>
|
||||
import './less/home-page.less'
|
||||
import Logo from '../components/Logo'
|
||||
import Page from '../components/Page'
|
||||
import ZuiHeader from '../components/Header'
|
||||
import ZuiFooter from '../components/Footer'
|
||||
import ZuiButton from '../components/Button'
|
||||
import feature1 from '../assets/img/feature1.png'
|
||||
import feature2 from '../assets/img/feature2.png'
|
||||
import feature3 from '../assets/img/feature3.png'
|
||||
import feature4 from '../assets/img/feature4.png'
|
||||
import Util from '../Util'
|
||||
import DropList from 'vue-droplist'
|
||||
export default{
|
||||
components: {Page, Logo, ZuiHeader, ZuiFooter,ZuiButton,DropList},
|
||||
data () {
|
||||
return {
|
||||
feature1: feature1,
|
||||
feature2: feature2,
|
||||
feature3: feature3,
|
||||
feature4: feature4,
|
||||
carouselPerPage: (Util.os.android || Util.os.iPhone) ? 1 : 2,
|
||||
configData : {
|
||||
position: { // 设置显示位置,position
|
||||
top: '60px',
|
||||
right: '15px',
|
||||
bottom: '',
|
||||
left: ''
|
||||
},
|
||||
width: '40%', // 设置宽度
|
||||
list: [ // 设置下拉列表数据和对应的点击事件
|
||||
{text: '首页', action: this.gocallus},
|
||||
{text: '记账平台', action: this.goinvest},
|
||||
{text: '健康档案', action: this.gohealth},
|
||||
{text: '资料下载', action: this.goresource},
|
||||
{text: '联系我们', action: this.gocallus}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onButtonClick: function (e) {
|
||||
if(e=="callus"){
|
||||
this.$router.push({path:'/callus'})
|
||||
}else if(e=="invest"){
|
||||
window.open("http://152.136.151.187:8080/admin/", '_blank');
|
||||
}else if(e=="health"){
|
||||
window.open("http://152.136.151.187:81/intc/login", '_blank');
|
||||
}else if(e=="resource"){
|
||||
this.$router.push({path:'/resource'})
|
||||
}else{
|
||||
this.$router.push({path:'/'})
|
||||
}
|
||||
},
|
||||
openMenu: function () {
|
||||
this.$refs.droplist.show()
|
||||
},
|
||||
gocallus: function () {
|
||||
this.$router.push({path:'/'})
|
||||
},
|
||||
goinvest: function () {
|
||||
window.open("http://152.136.151.187:82/#/", '_blank');
|
||||
},
|
||||
goresource: function () {
|
||||
this.$router.push({path:'/resource'})
|
||||
},
|
||||
gohealth: function () {
|
||||
window.open("http://152.136.151.187:81/#/", '_blank');
|
||||
},
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
114
src/views/callus.vue
Normal file
@@ -0,0 +1,114 @@
|
||||
<template>
|
||||
<page class="home-page">
|
||||
<zui-header>
|
||||
<logo type="xiaoyanyun" href="/"></logo>
|
||||
<h4 class="zui-logo-text">
|
||||
| 记账专家
|
||||
<br/>| 健康帮手
|
||||
</h4>
|
||||
<div class="zui-rightcol" @click="openMenu" style="color: #0b8ba5;">◄目录►</div>
|
||||
<drop-list :config="configData" ref="droplist"></drop-list>
|
||||
<zui-button @click="onButtonClick('callus')">联系我们</zui-button>
|
||||
<zui-button @click="onButtonClick('resource')">资料下载</zui-button>
|
||||
<zui-button @click="onButtonClick('health')">健康档案</zui-button>
|
||||
<zui-button @click="onButtonClick('invest')">记账平台</zui-button>
|
||||
<zui-button @click="onButtonClick('home')">首页</zui-button>
|
||||
</zui-header>
|
||||
<div class="service">
|
||||
<h1>
|
||||
联系我们->注册账号->免费使用
|
||||
</h1>
|
||||
<h3>
|
||||
专业、高效,满足您的记账需求、健康记录
|
||||
</h3>
|
||||
</div>
|
||||
<div class="features">
|
||||
<ul>
|
||||
<li>
|
||||
<img :src="feature1"/>
|
||||
<h4>联系方式</h4>
|
||||
<p>17753252359</p>
|
||||
</li>
|
||||
<li>
|
||||
<img :src="feature2"/>
|
||||
<h4>微信</h4>
|
||||
<p>intcqd</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<zui-footer/>
|
||||
</page>
|
||||
</template>
|
||||
<script>
|
||||
import './less/home-page.less'
|
||||
import Logo from '../components/Logo'
|
||||
import Page from '../components/Page'
|
||||
import ZuiHeader from '../components/Header'
|
||||
import ZuiFooter from '../components/Footer'
|
||||
import ZuiButton from '../components/Button'
|
||||
import feature1 from '../assets/img/feature1.png'
|
||||
import feature2 from '../assets/img/feature2.png'
|
||||
import feature3 from '../assets/img/feature3.png'
|
||||
import feature4 from '../assets/img/feature4.png'
|
||||
import Util from '../Util'
|
||||
import DropList from 'vue-droplist'
|
||||
export default{
|
||||
components: {Page, Logo, ZuiHeader, ZuiFooter,ZuiButton,DropList},
|
||||
data () {
|
||||
return {
|
||||
feature1: feature1,
|
||||
feature2: feature2,
|
||||
feature3: feature3,
|
||||
feature4: feature4,
|
||||
carouselPerPage: (Util.os.android || Util.os.iPhone) ? 1 : 2,
|
||||
configData : {
|
||||
position: { // 设置显示位置,position
|
||||
top: '60px',
|
||||
right: '15px',
|
||||
bottom: '',
|
||||
left: ''
|
||||
},
|
||||
width: '40%', // 设置宽度
|
||||
list: [ // 设置下拉列表数据和对应的点击事件
|
||||
{text: '首页', action: this.gocallus},
|
||||
{text: '记账平台', action: this.goinvest},
|
||||
{text: '健康档案', action: this.gohealth},
|
||||
{text: '资料下载', action: this.goresource},
|
||||
{text: '联系我们', action: this.gocallus}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onButtonClick: function (e) {
|
||||
if(e=="callus"){
|
||||
this.$router.push({path:'/callus'})
|
||||
}else if(e=="invest"){
|
||||
window.open("http://152.136.151.187:8080/admin/", '_blank');
|
||||
}else if(e=="health"){
|
||||
window.open("http://152.136.151.187:81/intc/login", '_blank');
|
||||
}else if(e=="resource"){
|
||||
this.$router.push({path:'/resource'})
|
||||
}else{
|
||||
this.$router.push({path:'/'})
|
||||
}
|
||||
},
|
||||
openMenu: function () {
|
||||
this.$refs.droplist.show()
|
||||
},
|
||||
gocallus: function () {
|
||||
this.$router.push({path:'/'})
|
||||
},
|
||||
goinvest: function () {
|
||||
window.open("http://152.136.151.187:82/#/", '_blank');
|
||||
},
|
||||
goresource: function () {
|
||||
this.$router.push({path:'/resource'})
|
||||
},
|
||||
gohealth: function () {
|
||||
window.open("http://152.136.151.187:81/#/", '_blank');
|
||||
},
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
BIN
src/views/img/case-banner.jpg
Normal file
|
After Width: | Height: | Size: 141 KiB |
BIN
src/views/img/feature10.png
Normal file
|
After Width: | Height: | Size: 8.6 KiB |
BIN
src/views/img/feature11.png
Normal file
|
After Width: | Height: | Size: 9.1 KiB |
BIN
src/views/img/feature12.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
src/views/img/feature13.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
src/views/img/feature14.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
src/views/img/feature8.png
Normal file
|
After Width: | Height: | Size: 9.2 KiB |
BIN
src/views/img/feature9.png
Normal file
|
After Width: | Height: | Size: 4.4 KiB |
BIN
src/views/img/link-banner.jpg
Normal file
|
After Width: | Height: | Size: 130 KiB |
BIN
src/views/img/plan-banner-mobile.jpg
Normal file
|
After Width: | Height: | Size: 126 KiB |
BIN
src/views/img/plan-banner.jpg
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
src/views/img/plus-banner-mobile.png
Normal file
|
After Width: | Height: | Size: 444 KiB |
BIN
src/views/img/plus-banner.jpg
Normal file
|
After Width: | Height: | Size: 100 KiB |
BIN
src/views/img/service-banner.jpg
Normal file
|
After Width: | Height: | Size: 70 KiB |
BIN
src/views/img/zhichou-banner.jpg
Normal file
|
After Width: | Height: | Size: 92 KiB |
283
src/views/less/home-page.less
Normal file
@@ -0,0 +1,283 @@
|
||||
.home-page {
|
||||
.banner {
|
||||
text-align: center;
|
||||
padding: 180px 20px;
|
||||
background: url('../img/zhichou-banner.jpg') center no-repeat;
|
||||
background-size: cover;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
img {
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
margin: 0 auto;
|
||||
position: absolute;
|
||||
}
|
||||
h1 {
|
||||
color: #fff;
|
||||
font-size: 42px;
|
||||
margin: 0;
|
||||
}
|
||||
h3 {
|
||||
color: #fff;
|
||||
font-size: 24px;
|
||||
margin-top: 28px;
|
||||
}
|
||||
}
|
||||
.nav {
|
||||
padding-left: 0;
|
||||
list-style: none;
|
||||
max-width: 1065px;
|
||||
margin: 20px auto 0 auto;
|
||||
a {
|
||||
float: left;
|
||||
margin: 17px;
|
||||
width: 320px;
|
||||
color: #32ADC6;
|
||||
text-align: center;
|
||||
display: block;
|
||||
padding: 60px 0 40px 0;
|
||||
border: 1px solid #32ADC6;
|
||||
position: relative;
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
.watermark {
|
||||
color: #fff !important;
|
||||
}
|
||||
.zui-logo {
|
||||
display: none;
|
||||
}
|
||||
.zui-logo.mobile {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
&.zhichou:hover {
|
||||
color: #fff;
|
||||
background: #35A3BA;
|
||||
}
|
||||
&.hr:hover {
|
||||
color: #fff;
|
||||
background: #6AC2B5;
|
||||
}
|
||||
&.plus:hover {
|
||||
color: #fff;
|
||||
background: #35A3BA;
|
||||
}
|
||||
.watermark {
|
||||
top: 0;
|
||||
left: 0;
|
||||
opacity: .1;
|
||||
font-size: 70px;
|
||||
line-height: 70px;
|
||||
position: absolute;
|
||||
&.blue {
|
||||
color: #35A3BA;
|
||||
}
|
||||
&.green {
|
||||
color: #00d6b2;
|
||||
}
|
||||
}
|
||||
.zui-logo {
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.zui-logo.mobile {
|
||||
display: none;
|
||||
}
|
||||
h3 {
|
||||
font-size: 24px;
|
||||
margin-top: 15px;
|
||||
}
|
||||
p {
|
||||
font-size: 18px;
|
||||
margin-top: 14px;
|
||||
}
|
||||
&.hr {
|
||||
color: #6AC2B5;
|
||||
border-bolor: #6AC2B5;
|
||||
}
|
||||
&.plus {
|
||||
color: #35A3BA;
|
||||
border-color: #35A3BA;
|
||||
}
|
||||
}
|
||||
}
|
||||
.join-zhichou {
|
||||
color: #32ADC6;
|
||||
font-size: 16px;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
display: block;
|
||||
margin: 30px 0 165px 0;
|
||||
}
|
||||
.service {
|
||||
padding: 72px 0;
|
||||
text-align: center;
|
||||
h1 {
|
||||
color: #6AC2B5;
|
||||
font-size: 52px;
|
||||
line-height: 70px;
|
||||
}
|
||||
h3 {
|
||||
color: #000;
|
||||
font-size: 40px;
|
||||
margin-top: 15px;
|
||||
}
|
||||
h4 {
|
||||
font-size: 29px;
|
||||
line-height: 32px;
|
||||
font-weight: normal;
|
||||
margin-top: 40px;
|
||||
}
|
||||
}
|
||||
|
||||
.apply-hr {
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
background: #6AC2B5;
|
||||
padding: 49px 0 50px 0;
|
||||
h2 {
|
||||
font-size: 39px;
|
||||
}
|
||||
h4 {
|
||||
font-size: 29px;
|
||||
font-weight: normal;
|
||||
margin-top: 20px;
|
||||
}
|
||||
}
|
||||
.features {
|
||||
background: #DEF0EF;
|
||||
padding: 50px 0;
|
||||
ul{
|
||||
max-width: 500px;
|
||||
margin: 0 auto;
|
||||
li {
|
||||
margin-top: 20px;
|
||||
padding: 10px 0 10px 100px;
|
||||
position: relative;
|
||||
img {
|
||||
width: 60px;
|
||||
top: 15px;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
}
|
||||
h4 {
|
||||
font-size: 25px;
|
||||
font-weight: bold;
|
||||
}
|
||||
p {
|
||||
font-size: 25px;
|
||||
font-weight: normal;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 420px) {
|
||||
.home-page {
|
||||
.banner {
|
||||
padding: 80px 20px;
|
||||
h1 {
|
||||
font-size: 24px;
|
||||
.br {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
h3 {
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
.nav {
|
||||
margin: 35px auto 0 auto;
|
||||
a {
|
||||
float: none;
|
||||
width: 270px;
|
||||
margin: 25px auto;
|
||||
padding: 32px 20px;
|
||||
&.zhichou {
|
||||
color: #fff;
|
||||
background: #32ADC6;
|
||||
}
|
||||
&.hr {
|
||||
color: #fff;
|
||||
background: #6AC2B5;
|
||||
}
|
||||
&.plus {
|
||||
color: #fff;
|
||||
background: #236579;
|
||||
}
|
||||
.watermark {
|
||||
color: #fff !important;
|
||||
}
|
||||
.zui-logo {
|
||||
width: 110px;
|
||||
display: none;
|
||||
}
|
||||
.zui-logo.mobile {
|
||||
display: block;
|
||||
}
|
||||
h3 {
|
||||
font-size: 16px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
h4 {
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.join-zhichou {
|
||||
margin: 0 0 30px 0;
|
||||
}
|
||||
.service{
|
||||
padding: 36px 0;
|
||||
h1{
|
||||
font-size: 24px;
|
||||
line-height: 35px;
|
||||
}
|
||||
h3{
|
||||
font-size: 18px;
|
||||
}
|
||||
h4{
|
||||
font-size: 14px;
|
||||
line-height: 24px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
}
|
||||
.features{
|
||||
padding: 32px 0;
|
||||
ul{
|
||||
max-width: 300px;
|
||||
li{
|
||||
margin-top: 0;
|
||||
padding-left: 55px;
|
||||
img{
|
||||
width: 35px;
|
||||
}
|
||||
h4{
|
||||
font-size: 18px;
|
||||
}
|
||||
p{
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.apply-hr{
|
||||
padding: 25px 0;
|
||||
h2{
|
||||
font-size: 20px;
|
||||
}
|
||||
h4{
|
||||
font-size: 14px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
}
|
||||
.apply-hr-form{
|
||||
padding: 20px 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
121
src/views/resource.vue
Normal file
@@ -0,0 +1,121 @@
|
||||
<template>
|
||||
<page class="home-page">
|
||||
<zui-header>
|
||||
<logo type="xiaoyanyun" href="/"></logo>
|
||||
<h4 class="zui-logo-text">
|
||||
| 记账专家
|
||||
<br/>| 健康帮手
|
||||
</h4>
|
||||
<div class="zui-rightcol" @click="openMenu" style="color: #0b8ba5;">◄目录►</div>
|
||||
<drop-list :config="configData" ref="droplist"></drop-list>
|
||||
<zui-button @click="onButtonClick('callus')">联系我们</zui-button>
|
||||
<zui-button @click="onButtonClick('resource')">资料下载</zui-button>
|
||||
<zui-button @click="onButtonClick('health')">健康档案</zui-button>
|
||||
<zui-button @click="onButtonClick('invest')">记账平台</zui-button>
|
||||
<zui-button @click="onButtonClick('home')">首页</zui-button>
|
||||
</zui-header>
|
||||
<div class="service">
|
||||
<h1>
|
||||
资料下载->系统介绍->使用手册
|
||||
</h1>
|
||||
<h3>
|
||||
专业、高效,满足您的记账需求、健康记录
|
||||
</h3>
|
||||
</div>
|
||||
<div class="features">
|
||||
<ul>
|
||||
<li>
|
||||
<img :src="feature3"/>
|
||||
<h4>记账平台</h4>
|
||||
<p>
|
||||
<a href="/" target="_blank">系统介绍</a>
|
||||
<a href="/" target="_blank">使用手册下载</a>
|
||||
</p>
|
||||
</li>
|
||||
<li>
|
||||
<img :src="feature4"/>
|
||||
<h4>健康档案</h4>
|
||||
<p>
|
||||
<a href="/" target="_blank">系统介绍</a>
|
||||
<a href="/" target="_blank">使用手册下载</a>
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<zui-footer/>
|
||||
</page>
|
||||
</template>
|
||||
<script>
|
||||
import './less/home-page.less'
|
||||
import Logo from '../components/Logo'
|
||||
import Page from '../components/Page'
|
||||
import ZuiHeader from '../components/Header'
|
||||
import ZuiFooter from '../components/Footer'
|
||||
import ZuiButton from '../components/Button'
|
||||
import feature1 from '../assets/img/feature1.png'
|
||||
import feature2 from '../assets/img/feature2.png'
|
||||
import feature3 from '../assets/img/feature3.png'
|
||||
import feature4 from '../assets/img/feature4.png'
|
||||
import Util from '../Util'
|
||||
import DropList from 'vue-droplist'
|
||||
export default{
|
||||
components: {Page, Logo, ZuiHeader, ZuiFooter,ZuiButton,DropList},
|
||||
data () {
|
||||
return {
|
||||
feature1: feature1,
|
||||
feature2: feature2,
|
||||
feature3: feature3,
|
||||
feature4: feature4,
|
||||
carouselPerPage: (Util.os.android || Util.os.iPhone) ? 1 : 2,
|
||||
configData : {
|
||||
position: { // 设置显示位置,position
|
||||
top: '60px',
|
||||
right: '15px',
|
||||
bottom: '',
|
||||
left: ''
|
||||
},
|
||||
width: '40%', // 设置宽度
|
||||
list: [ // 设置下拉列表数据和对应的点击事件
|
||||
{text: '首页', action: this.gocallus},
|
||||
{text: '首页', action: this.gocallus},
|
||||
{text: '记账平台', action: this.goinvest},
|
||||
{text: '健康档案', action: this.gohealth},
|
||||
{text: '资料下载', action: this.goresource},
|
||||
{text: '联系我们', action: this.gocallus}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onButtonClick: function (e) {
|
||||
if(e=="callus"){
|
||||
this.$router.push({path:'/callus'})
|
||||
}else if(e=="invest"){
|
||||
window.open("http://152.136.151.187:8080/admin/", '_blank');
|
||||
}else if(e=="health"){
|
||||
window.open("http://152.136.151.187:81/intc/login", '_blank');
|
||||
}else if(e=="resource"){
|
||||
this.$router.push({path:'/resource'})
|
||||
}else{
|
||||
this.$router.push({path:'/'})
|
||||
}
|
||||
},
|
||||
openMenu: function () {
|
||||
this.$refs.droplist.show()
|
||||
},
|
||||
gocallus: function () {
|
||||
this.$router.push({path:'/callus'})
|
||||
},
|
||||
goinvest: function () {
|
||||
window.open("http://152.136.151.187:82/#/", '_blank');
|
||||
},
|
||||
goresource: function () {
|
||||
this.$router.push({path:'/resource'})
|
||||
},
|
||||
gohealth: function () {
|
||||
window.open("http://152.136.151.187:89/#/", '_blank');
|
||||
},
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||