diff --git a/.browserslistrc b/.browserslistrc
new file mode 100644
index 0000000..d6471a3
--- /dev/null
+++ b/.browserslistrc
@@ -0,0 +1,2 @@
+> 1%
+last 2 versions
diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..a1879fc
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,5 @@
+[*.{js,jsx,ts,tsx,vue}]
+indent_style = space
+indent_size = 4
+trim_trailing_whitespace = true
+insert_final_newline = true
diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 0000000..ff99e80
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,27 @@
+module.exports = {
+ root: true,
+ env: {
+ node: true
+ },
+ 'extends': [
+ 'plugin:vue/essential',
+ '@vue/standard'
+ ],
+ rules: {
+ 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
+ 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
+ 'no-trailing-spaces': ["error", {"skipBlankLines": true}],
+ 'space-before-function-paren': ['error', 'never'],
+ 'indent': 'off',
+ 'vue/script-indent': [
+ 'error',
+ 4,
+ {
+ 'baseIndent': 1
+ }
+ ]
+ },
+ parserOptions: {
+ parser: 'babel-eslint'
+ }
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..7f44722
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,24 @@
+.DS_Store
+node_modules
+/dist
+/bu
+、
+
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/babel.config.js b/babel.config.js
new file mode 100644
index 0000000..0542595
--- /dev/null
+++ b/babel.config.js
@@ -0,0 +1,13 @@
+module.exports = {
+ presets: [
+ '@vue/app'
+ ],
+ plugins: [
+ [
+ '@babel/plugin-transform-modules-commonjs',
+ {
+ allowTopLevelThis: true,
+ },
+ ]
+ ]
+}
diff --git a/console.js b/console.js
new file mode 100644
index 0000000..f9c55c0
--- /dev/null
+++ b/console.js
@@ -0,0 +1,34 @@
+/**
+ * 重写console.log方法
+ * 通过设置isLog来控制是否输出日志
+ * 对于object,array引用类型已进行深拷贝,确保打印出的值是执行时的值
+ * 重写后在整个程序的生命周期都有效,在程序的所有地方都可以调用
+ * 可在程序的第一行就调用,确保后续的console.log改写后的
+ * 如:vue在main.js中引入,小程序可在app.js第一行引入
+ * dev: isLog = true
+ * prod: isLog = false
+ * console.trace()为打印程序调用的堆栈,因为改写后打印的值是在改写后的堆栈中
+ * 如果觉得太长可设置isLogStack = false
+ */
+
+console.log = (function (logFunc, isLog = true, isLogStack = false) {
+ return function () {
+ if (!isLog) {
+ return
+ }
+ try {
+ let arr = []
+ arr.push(...arguments)
+ arr.forEach((item, index) => {
+ if (Object.prototype.toString.call(item) === '[object Object]' ||
+ Object.prototype.toString.call(item) === '[object Array]') {
+ arr[index] = JSON.parse(JSON.stringify(item))
+ }
+ })
+ logFunc.call(console, ...arr)
+ isLogStack ? console.trace() : null
+ } catch (e) {
+ console.log(`a log error: ${e}`)
+ }
+ }
+})(console.log)
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..0ce512f
--- /dev/null
+++ b/package.json
@@ -0,0 +1,34 @@
+{
+ "name": "cat-mall",
+ "version": "0.1.0",
+ "private": true,
+ "scripts": {
+ "serve": "vue-cli-service serve",
+ "build": "vue-cli-service build",
+ "lint": "vue-cli-service lint"
+ },
+ "dependencies": {
+ "btoa": "^1.2.1",
+ "btoa-atob": "^0.1.2",
+ "core-js": "^2.6.5",
+ "element-china-area-data": "^4.1.2",
+ "element-ui": "^2.13.0",
+ "vue": "^2.6.10",
+ "vue-infinite-scroll": "^2.0.2",
+ "vue-router": "^3.0.3",
+ "vuex": "^3.0.1"
+ },
+ "devDependencies": {
+ "@vue/cli-plugin-babel": "^3.11.0",
+ "@vue/cli-plugin-eslint": "^3.11.0",
+ "@vue/cli-service": "^3.11.0",
+ "@vue/eslint-config-standard": "^4.0.0",
+ "axios": "^0.19.0",
+ "babel-eslint": "^10.0.1",
+ "eslint": "^5.16.0",
+ "eslint-plugin-vue": "^5.0.0",
+ "sass": "^1.18.0",
+ "sass-loader": "^7.1.0",
+ "vue-template-compiler": "^2.6.10"
+ }
+}
diff --git a/postcss.config.js b/postcss.config.js
new file mode 100644
index 0000000..961986e
--- /dev/null
+++ b/postcss.config.js
@@ -0,0 +1,5 @@
+module.exports = {
+ plugins: {
+ autoprefixer: {}
+ }
+}
diff --git a/public/audio/cat-01.mp3 b/public/audio/cat-01.mp3
new file mode 100644
index 0000000..ce9a24d
Binary files /dev/null and b/public/audio/cat-01.mp3 differ
diff --git a/public/data.js b/public/data.js
new file mode 100644
index 0000000..f31a26b
--- /dev/null
+++ b/public/data.js
@@ -0,0 +1,409 @@
+// const goods = [
+// {
+// goodsId: '100001',
+// goodsName: '缅因猫',
+// masterImg: 'https://img.alicdn.com/imgextra/i3/3360749321/O1CN01i5Su1Z2Ij4IHLfckK_!!3360749321.jpg',
+// intro: '宠爱天下 俄血缅因猫 进口幼猫 银虎斑 纯种猫咪活体宠物猫',
+// imgList: [
+// 'https://img.alicdn.com/imgextra/i3/3360749321/O1CN01i5Su1Z2Ij4IHLfckK_!!3360749321.jpg',
+// 'https://img.alicdn.com/imgextra/i1/3360749321/O1CN01qkHNe02Ij4IBVMFTU_!!3360749321.jpg',
+// 'https://img.alicdn.com/imgextra/i1/3360749321/O1CN01g86grv2Ij4ILgdVC8_!!3360749321.jpg',
+// 'https://img.alicdn.com/imgextra/i3/3360749321/O1CN01PTZIe12Ij4INEX4So_!!3360749321.jpg',
+// 'https://img.alicdn.com/imgextra/i3/3360749321/O1CN01LPlcCB2Ij4IJEuXBq_!!3360749321.jpg'
+// ],
+// address: '四川成都'
+// },
+// {
+// goodsId: '100002',
+// goodsName: '布偶猫',
+// masterImg: 'https://img.alicdn.com/imgextra/i2/3360749321/O1CN018kbTKx2Ij4EovJglw_!!3360749321.jpg',
+// intro: '宠爱天下 布偶猫活体猫咪幼猫 纯种双色布偶猫活体',
+// imgList: [
+// 'https://img.alicdn.com/imgextra/i2/3360749321/O1CN018kbTKx2Ij4EovJglw_!!3360749321.jpg',
+// 'https://img.alicdn.com/imgextra/i1/3360749321/O1CN01wdVF8E2Ij4ErmcymR_!!3360749321.jpg',
+// 'https://img.alicdn.com/imgextra/i2/3360749321/O1CN01Y3Qkyd2Ij4ErVSI9c_!!3360749321.jpg',
+// 'https://img.alicdn.com/imgextra/i3/3360749321/O1CN01PTZIe12Ij4INEX4So_!!3360749321.jpg',
+// 'https://img.alicdn.com/imgextra/i2/3360749321/O1CN0171x5Zh2Ij4EqzAbta_!!3360749321.jpg'
+// ],
+// address: '河北廊坊'
+// },
+// {
+// goodsId: '100003',
+// goodsName: '短尾猫',
+// masterImg: 'https://img.alicdn.com/imgextra/i4/3360749321/O1CN01QIoQwr2Ij4JQztbKQ_!!0-item_pic.jpg',
+// intro: '宠爱天下英短蓝白猫咪活体幼猫纯种英国短毛猫宠物猫幼崽活体ZY',
+// imgList: [
+// 'https://img.alicdn.com/imgextra/i4/3360749321/O1CN01QIoQwr2Ij4JQztbKQ_!!0-item_pic.jpg',
+// 'https://img.alicdn.com/imgextra/i4/3360749321/O1CN01SeR5Jj2Ij4GkI0DrG_!!3360749321.jpg',
+// 'https://img.alicdn.com/imgextra/i4/3360749321/O1CN01vzCbbE2Ij4Gcrlsig_!!3360749321.jpg',
+// ],
+// address: '北京'
+// },
+// {
+// goodsId: '100004',
+// goodsName: '短毛猫',
+// masterImg: 'https://img.alicdn.com/imgextra/i4/3360749321/O1CN01qcuaeT2Ij4HlIZXGU_!!0-item_pic.jpg_60x60q90.jpg',
+// intro: '宠爱天下 纯种英国短毛猫咪幼崽幼蓝金英短金渐层纯种活体',
+// imgList: [
+// 'https://img.alicdn.com/imgextra/i4/3360749321/O1CN01qcuaeT2Ij4HlIZXGU_!!0-item_pic.jpg_60x60q90.jpg',
+// 'https://img.alicdn.com/imgextra/i4/3360749321/O1CN01nQPVsJ2Ij4HlRykMP_!!3360749321.jpg_60x60q90.jpg',
+// 'https://img.alicdn.com/imgextra/i2/3360749321/O1CN01QvGTkO2Ij4Hp1pXAi_!!3360749321.jpg_60x60q90.jpg',
+// ],
+// address: '上海'
+// },
+// {
+// goodsId: '100005',
+// goodsName: '矮脚猫',
+// masterImg: 'https://img.alicdn.com/imgextra/i1/3360749321/O1CN01m0JZp32Ij4JdJtpJw_!!0-item_pic.jpg_60x60q90.jpg',
+// intro: '英短蓝猫美短加白宠物活体物金银渐层毛纯种猫咪幼猫矮脚曼基康',
+// imgList: [
+// 'https://img.alicdn.com/imgextra/i1/3360749321/O1CN01m0JZp32Ij4JdJtpJw_!!0-item_pic.jpg_60x60q90.jpg',
+// 'https://img.alicdn.com/imgextra/i3/3360749321/O1CN01aPSE1d2Ij4Jec5o7G_!!3360749321.png_60x60q90.jpg',
+// 'https://img.alicdn.com/imgextra/i2/3360749321/O1CN01FtBHEG2Ij4Ji5e1Ry_!!3360749321.jpg_60x60q90.jpg',
+// ],
+// address: '广州'
+// },
+// {
+// goodsId: '100006',
+// goodsName: '猫仙',
+// masterImg: 'https://img.alicdn.com/imgextra/i1/3360749321/O1CN01KFqGSQ2Ij4JSKJH5D_!!0-item_pic.jpg',
+// intro: '宠爱天下布偶猫幼猫纯种活体宠物猫仙女猫布偶猫双色幼猫活体ZY',
+// imgList: [
+// 'https://img.alicdn.com/imgextra/i1/3360749321/O1CN01m0JZp32Ij4JdJtpJw_!!0-item_pic.jpg',
+// 'https://img.alicdn.com/imgextra/i3/3360749321/O1CN010KwG1U2Ij4IvLvDNt_!!3360749321.jpg',
+// 'https://img.alicdn.com/imgextra/i3/3360749321/O1CN01D1kzdn2Ij4GX22X6Q_!!3360749321.jpg',
+// ],
+// address: '北京'
+// },
+// ]
+
+const goods = [
+ {
+ goodsId: '100001',
+ goodsName: '英短蓝猫',
+ originalPrice: 2500,
+ discountPrice: 1500,
+ memberPrice: 1499,
+ masterImg: 'https://gd2.alicdn.com/imgextra/i3/2200828121620/O1CN018Anp4u1Nq0BYAaqyv_!!2200828121620.jpg_50x50.jpg_.webp',
+ intro: '纯种英国短毛猫蓝猫猫咪活物幼猫宠物猫 上海可实地挑选',
+ imgList: [
+ 'https://gd2.alicdn.com/imgextra/i3/2200828121620/O1CN018Anp4u1Nq0BYAaqyv_!!2200828121620.jpg_50x50.jpg_.webp',
+ 'https://gd4.alicdn.com/imgextra/i4/2200828121620/O1CN01sqP54e1Nq0BW6v1Y8_!!2200828121620.jpg_50x50.jpg_.webp',
+ 'https://gd3.alicdn.com/imgextra/i3/2200828121620/O1CN01yxZFXi1Nq0BYAbBsY_!!2200828121620.jpg_50x50.jpg_.webp',
+ 'https://gd2.alicdn.com/imgextra/i2/2200828121620/O1CN0189cqJN1Nq0BQMGA4i_!!2200828121620.jpg_50x50.jpg_.webp',
+ ],
+ address: '上海'
+ },
+ {
+ goodsId: '100002',
+ goodsName: '蓝猫',
+ originalPrice: 1500,
+ discountPrice: 300,
+ memberPrice: 299,
+ masterImg: 'https://gd3.alicdn.com/imgextra/i3/3630267353/O1CN01hJTdzB24BipU3nyN5_!!3630267353.jpg_50x50.jpg_.webp',
+ intro: '英短活体蓝猫纯种短毛猫英国短毛蓝猫幼猫猫崽蓝胖子宠物家养猫咪',
+ imgList: [
+ 'https://gd3.alicdn.com/imgextra/i3/3630267353/O1CN01hJTdzB24BipU3nyN5_!!3630267353.jpg_50x50.jpg_.webp',
+ 'https://gd4.alicdn.com/imgextra/i4/3630267353/O1CN01efFiWP24BipcahzmF_!!3630267353.jpg_50x50.jpg_.webp',
+ 'https://gd3.alicdn.com/imgextra/i3/3630267353/O1CN01w0N0oa24Bipd7x1ce_!!3630267353.jpg_50x50.jpg_.webp',
+ 'https://gd3.alicdn.com/imgextra/i3/3630267353/O1CN01N5EPLK24BipfVeuUu_!!3630267353.jpg_50x50.jpg_.webp',
+ 'https://gd2.alicdn.com/imgextra/i2/3630267353/O1CN0190grUR24BipfVcpcj_!!3630267353.jpg_50x50.jpg_.webp'
+ ],
+ address: '江苏苏州'
+ },
+ {
+ goodsId: '100003',
+ goodsName: '金渐层幼猫',
+ originalPrice: 6800,
+ discountPrice: 680,
+ memberPrice: 599,
+ masterImg: 'https://gd2.alicdn.com/imgextra/i3/2200735262068/O1CN01ckuOuX1R9Bdhdjx7A_!!2200735262068.png_50x50.jpg_.webp',
+ intro: '纯种金渐层 英短金渐层 金渐层幼猫 金渐层幼猫 上海可上门挑选',
+ imgList: [
+ 'https://gd2.alicdn.com/imgextra/i3/2200735262068/O1CN01ckuOuX1R9Bdhdjx7A_!!2200735262068.png_50x50.jpg_.webp',
+ 'https://gd1.alicdn.com/imgextra/i1/2200735262068/O1CN010O46dM1R9BdiRZceM_!!2200735262068.png_50x50.jpg_.webp',
+ 'https://gd4.alicdn.com/imgextra/i4/2200735262068/O1CN01Azh1nh1R9Bdi9Xp3Z_!!2200735262068.png_50x50.jpg_.webp',
+ 'https://gd4.alicdn.com/imgextra/i4/2200735262068/O1CN01eUtmM81R9BdlJjnmF_!!2200735262068.png_50x50.jpg_.webp',
+ 'https://gd1.alicdn.com/imgextra/i1/2200735262068/O1CN01bHTohu1R9Bdi9caRo_!!2200735262068.png_50x50.jpg_.webp'
+ ],
+ address: '上海'
+ },
+ {
+ goodsId: '100004',
+ goodsName: '海豹猫',
+ originalPrice: 8800,
+ discountPrice: 1099,
+ memberPrice: 888,
+ masterImg: 'https://gd3.alicdn.com/imgextra/i1/2200735262068/O1CN01Y6FJ8o1R9Bcnyingg_!!2200735262068.png_50x50.jpg_.webp',
+ intro: '纯种蓝双色布偶猫幼猫 活体宠物 海豹双色布偶猫 上海可实体挑选',
+ imgList: [
+ 'https://gd3.alicdn.com/imgextra/i1/2200735262068/O1CN01Y6FJ8o1R9Bcnyingg_!!2200735262068.png_50x50.jpg_.webp',
+ 'https://gd1.alicdn.com/imgextra/i1/2200735262068/O1CN01yLLWBY1R9BcpbHJjC_!!2200735262068.png_50x50.jpg_.webp',
+ 'https://gd1.alicdn.com/imgextra/i1/2200735262068/O1CN0112Eqnx1R9BcqlVamM_!!2200735262068.png_50x50.jpg_.webp',
+ 'https://gd3.alicdn.com/imgextra/i3/2200735262068/O1CN01awJxQD1R9BcrL1sFp_!!2200735262068.png_50x50.jpg_.webp',
+ 'https://gd4.alicdn.com/imgextra/i4/2200735262068/O1CN01RuntwE1R9Bctj3EEo_!!2200735262068.png_50x50.jpg_.webp'
+ ],
+ address: '上海'
+ },
+ {
+ goodsId: '100005',
+ goodsName: '布偶猫咪',
+ originalPrice: 688,
+ discountPrice: 288,
+ memberPrice: 199,
+ masterImg: 'https://gd2.alicdn.com/imgextra/i2/2200735262068/O1CN01Qr6YlD1R9BcAIn9zA_!!2200735262068.jpg_50x50.jpg_.webp',
+ intro: '纯种布偶猫咪海豹双色蓝双山猫色宠物活体幼猫 上海可实地挑选',
+ imgList: [
+ 'https://gd2.alicdn.com/imgextra/i2/2200735262068/O1CN01Qr6YlD1R9BcAIn9zA_!!2200735262068.jpg_50x50.jpg_.webp',
+ 'https://gd4.alicdn.com/imgextra/i4/2200735262068/O1CN01uchTAD1R9BcACeUug_!!2200735262068.jpg_50x50.jpg_.webp',
+ 'https://gd3.alicdn.com/imgextra/i3/2200735262068/O1CN01iJHQRh1R9Bc2cKC5B_!!2200735262068.jpg_50x50.jpg_.webp',
+ 'https://gd4.alicdn.com/imgextra/i4/2200735262068/O1CN01PdmR0w1R9BcDiZwAp_!!2200735262068.jpg_50x50.jpg_.webp',
+ 'https://gd2.alicdn.com/imgextra/i2/2200735262068/O1CN01SvAkdd1R9BcCqHsbF_!!2200735262068.jpg_50x50.jpg_.webp'
+ ],
+ address: '上海'
+ },
+ {
+ goodsId: '100006',
+ goodsName: '小奶猫',
+ originalPrice: 800,
+ discountPrice: 399,
+ memberPrice: 149,
+ masterImg: 'https://gd1.alicdn.com/imgextra/i3/3968164891/O1CN01t6RFQd1m07kRE7I0C_!!3968164891.jpg_50x50.jpg_.webp',
+ intro: '英短银渐层小奶猫宠物幼崽渐层猫咪活物纯种英国短毛小型可爱蓝猫',
+ imgList: [
+ 'https://gd1.alicdn.com/imgextra/i3/3968164891/O1CN01t6RFQd1m07kRE7I0C_!!3968164891.jpg_50x50.jpg_.webp',
+ 'https://gd4.alicdn.com/imgextra/i4/3968164891/O1CN01UbXnPm1m07kQr1Il7_!!3968164891.jpg_50x50.jpg_.webp',
+ 'https://gd4.alicdn.com/imgextra/i4/3968164891/O1CN01YFsYgm1m07kRE85ul_!!3968164891.jpg_50x50.jpg_.webp',
+ 'https://gd4.alicdn.com/imgextra/i4/3968164891/O1CN01D5PzRS1m07kV3Ua5j_!!3968164891.jpg_50x50.jpg_.webp',
+ ],
+ address: '苏州'
+ },
+ {
+ goodsId: '100007',
+ goodsName: '幼猫',
+ originalPrice: 1500,
+ discountPrice: 809,
+ memberPrice: 666,
+ masterImg: 'https://gd1.alicdn.com/imgextra/i1/2200775366029/O1CN014CT6gN1uPKPsmcGNu_!!2200775366029.jpg_50x50.jpg_.webp',
+ intro: '纯种英短银渐层猫幼猫活体折耳宠物猫咪 基地繁殖',
+ imgList: [
+ 'https://gd1.alicdn.com/imgextra/i1/2200775366029/O1CN014CT6gN1uPKPsmcGNu_!!2200775366029.jpg_50x50.jpg_.webp',
+ 'https://gd2.alicdn.com/imgextra/i2/2200775366029/O1CN01I90NqK1uPKPwwBMCY_!!2200775366029.jpg_50x50.jpg_.webp',
+ 'https://gd3.alicdn.com/imgextra/i3/2200775366029/O1CN01Gwnysh1uPKPwFDewo_!!2200775366029.jpg_50x50.jpg_.webp',
+ 'https://gd1.alicdn.com/imgextra/i1/2200775366029/O1CN01rH54Wh1uPKPtiaiDV_!!2200775366029.jpg_50x50.jpg_.webp',
+ ],
+ address: '杭州'
+ },
+ {
+ goodsId: '100008',
+ goodsName: '小奶猫',
+ originalPrice: 5000,
+ discountPrice: 2999,
+ memberPrice: 2599,
+ masterImg: 'https://gd3.alicdn.com/imgextra/i4/3316892311/O1CN0169Mr9S1SwTtlhU49Y_!!3316892311.jpg_50x50.jpg_.webp',
+ intro: '英短金渐层猫活体幼猫宠物猫咪活物幼崽纯种小奶猫',
+ imgList: [
+ 'https://gd3.alicdn.com/imgextra/i4/3316892311/O1CN0169Mr9S1SwTtlhU49Y_!!3316892311.jpg_50x50.jpg_.webp',
+ 'https://gd1.alicdn.com/imgextra/i1/3316892311/O1CN01ILNXKo1SwTtj7nGlv_!!3316892311.jpg_50x50.jpg_.webp',
+ 'https://gd1.alicdn.com/imgextra/i1/3316892311/O1CN01cEEhEu1SwTtiki9m6_!!3316892311.jpg_50x50.jpg_.webp',
+ 'https://gd2.alicdn.com/imgextra/i2/3316892311/O1CN01HJUBkF1SwTthS4Jte_!!3316892311.jpg_50x50.jpg_.webp',
+ ],
+ address: '上海'
+ },
+ {
+ goodsId: '100009',
+ goodsName: '布偶猫',
+ originalPrice: 460,
+ discountPrice: 99,
+ memberPrice: 88,
+ masterImg: 'https://gd3.alicdn.com/imgextra/i4/3382216290/O1CN01IsyuFJ1wKrojBEdhU_!!3382216290.jpg_50x50.jpg_.webp',
+ intro: '纯种布偶猫活体幼猫宠物猫咪活物 上海杭州苏州武汉 可实地挑选',
+ imgList: [
+ 'https://gd3.alicdn.com/imgextra/i4/3382216290/O1CN01IsyuFJ1wKrojBEdhU_!!3382216290.jpg_50x50.jpg_.webp',
+ 'https://gd2.alicdn.com/imgextra/i2/3382216290/O1CN01fddKsT1wKrohJts8A_!!3382216290.jpg_50x50.jpg_.webp',
+ 'https://gd4.alicdn.com/imgextra/i4/3382216290/O1CN01L858kp1wKrohWzOfp_!!3382216290.jpg_50x50.jpg_.webp',
+ 'https://gd4.alicdn.com/imgextra/i4/3382216290/O1CN01XBaKsy1wKrojcdcOh_!!3382216290.jpg_50x50.jpg_.webp',
+ 'https://gd1.alicdn.com/imgextra/i1/3382216290/O1CN01wlV4Um1wKrokwXbRB_!!3382216290.jpg_50x50.jpg_.webp'
+ ],
+ address: '武汉'
+ },
+ {
+ goodsId: '100010',
+ goodsName: '黑猫',
+ originalPrice: 800,
+ discountPrice: 500,
+ memberPrice: 400,
+ masterImg: 'https://gd4.alicdn.com/imgextra/i1/2201241610038/O1CN01vNPAAD1C9RbQIR2iD_!!2201241610038.jpg_50x50.jpg_.webp',
+ intro: '纯种孟买猫活体 宠物猫咪活体黑猫 可爱幼猫辟邪招财玄猫幼崽猫咪',
+ imgList: [
+ 'https://gd4.alicdn.com/imgextra/i1/2201241610038/O1CN01vNPAAD1C9RbQIR2iD_!!2201241610038.jpg_50x50.jpg_.webp',
+ 'https://gd3.alicdn.com/imgextra/i3/2201241610038/O1CN015Tq77w1C9RbSSbQmQ_!!2201241610038.jpg_50x50.jpg_.webp',
+ 'https://gd2.alicdn.com/imgextra/i2/2201241610038/O1CN01zdvn2B1C9RbSSfFqK_!!2201241610038.jpg_50x50.jpg_.webp',
+ ],
+ address: '广州'
+ },
+ {
+ goodsId: '100011',
+ goodsName: '加菲猫',
+ originalPrice: 12000,
+ discountPrice: 100,
+ memberPrice: 88,
+ masterImg: 'https://gd3.alicdn.com/imgextra/i2/2207264875257/O1CN01j7mLYX1ohkhnEM8Mi_!!2207264875257.jpg_50x50.jpg_.webp',
+ intro: '布偶猫幼猫纯种海双蓝双幼崽加菲暹罗金吉拉折耳猫矮脚小猫咪活物',
+ imgList: [
+ 'https://gd3.alicdn.com/imgextra/i2/2207264875257/O1CN01j7mLYX1ohkhnEM8Mi_!!2207264875257.jpg_50x50.jpg_.webp',
+ 'https://gd3.alicdn.com/imgextra/i3/2207264875257/O1CN01Q3FiQz1ohkhw1ZGrF_!!2207264875257.jpg_50x50.jpg_.webp',
+ 'https://gd2.alicdn.com/imgextra/i2/2207264875257/O1CN01TADEPU1ohkhszIJl5_!!2207264875257.jpg_50x50.jpg_.webp',
+ 'https://gd3.alicdn.com/imgextra/i3/2207264875257/O1CN01KKWepM1ohkhwEsLaJ_!!2207264875257.jpg_50x50.jpg_.webp',
+ 'https://gd3.alicdn.com/imgextra/i3/2207264875257/O1CN01lr3gJS1ohkhuS6Drh_!!2207264875257.jpg_50x50.jpg_.webp'
+ ],
+ address: '浙江'
+ },
+ {
+ goodsId: '100012',
+ goodsName: '米粒猫',
+ originalPrice: 7660,
+ discountPrice: 3888,
+ memberPrice: 3588,
+ masterImg: 'https://gd1.alicdn.com/imgextra/i2/2201499782317/O1CN01IDRfHj1SzEE9XNujF_!!2201499782317.jpg_50x50.jpg_.webp',
+ intro: '布偶猫幼猫布偶猫活体布偶猫纯种CFA认证海双蓝双布偶双血统认证',
+ imgList: [
+ 'https://gd1.alicdn.com/imgextra/i2/2201499782317/O1CN01IDRfHj1SzEE9XNujF_!!2201499782317.jpg_50x50.jpg_.webp',
+ 'https://gd2.alicdn.com/imgextra/i2/2201499782317/O1CN01BhPHK51SzEE5jmutu_!!2201499782317.jpg_50x50.jpg_.webp',
+ 'https://gd4.alicdn.com/imgextra/i4/2201499782317/O1CN01fY80Io1SzEE9XPnF4_!!2201499782317.jpg_50x50.jpg_.webp',
+ 'https://gd4.alicdn.com/imgextra/i4/2201499782317/O1CN01EGqnTs1SzEE6ciiOb_!!2201499782317.jpg_50x50.jpg_.webp',
+ 'https://gd4.alicdn.com/imgextra/i4/2201499782317/O1CN01I3kqSP1SzEDxMIXTn_!!2201499782317.jpg_50x50.jpg_.webp'
+ ],
+ address: '广州'
+ },
+ {
+ goodsId: '100013',
+ goodsName: '暹罗猫',
+ originalPrice: 3000,
+ discountPrice: 2000,
+ memberPrice: 1999,
+ masterImg: 'https://gd1.alicdn.com/imgextra/i2/2201203844242/O1CN01xkIEgb1hCshCOdb6j_!!2201203844242.jpg_50x50.jpg_.webp',
+ intro: '纯种泰国暹罗猫活体幼猫挖煤猫家养幼猫蓝眼睛重点色暹罗宠物猫咪',
+ imgList: [
+ 'https://gd1.alicdn.com/imgextra/i2/2201203844242/O1CN01xkIEgb1hCshCOdb6j_!!2201203844242.jpg_50x50.jpg_.webp',
+ 'https://gd4.alicdn.com/imgextra/i4/2201203844242/O1CN01kr7BEX1hCshEEsZ6A_!!2201203844242.jpg_50x50.jpg_.webp',
+ 'https://gd2.alicdn.com/imgextra/i2/2201203844242/O1CN019NGZ3k1hCshEEshQO_!!2201203844242.png_50x50.jpg_.webp',
+ ],
+ address: '四川成都'
+ },
+ {
+ goodsId: '100014',
+ goodsName: '包子猫',
+ originalPrice: 1500,
+ discountPrice: 500,
+ memberPrice: 388,
+ masterImg: 'https://gd1.alicdn.com/imgextra/i4/2201438747449/O1CN01OurXfM24tgsglcyQr_!!2201438747449.jpg_50x50.jpg_.webp',
+ intro: '英短蓝猫幼猫活体宠物猫正宗包子脸幼崽英短矮脚蓝猫猫咪活体宠物',
+ imgList: [
+ 'https://gd1.alicdn.com/imgextra/i4/2201438747449/O1CN01OurXfM24tgsglcyQr_!!2201438747449.jpg_50x50.jpg_.webp',
+ 'https://gd3.alicdn.com/imgextra/i3/2201438747449/O1CN01QVg66824tgsfqtzkq_!!2201438747449.jpg_50x50.jpg_.webp',
+ 'https://gd2.alicdn.com/imgextra/i2/2201438747449/O1CN01QnfBeC24tgshacfpG_!!2201438747449.jpg_50x50.jpg_.webp',
+ 'https://gd2.alicdn.com/imgextra/i2/2201438747449/O1CN012TlCMx24tgsfqsaT7_!!2201438747449.jpg_50x50.jpg_.webp',
+ 'https://gd3.alicdn.com/imgextra/i3/2201438747449/O1CN01m79Yys24tgsXbRBHr_!!2201438747449.jpg_50x50.jpg_.webp'
+ ],
+ address: '西藏拉萨'
+ },
+ {
+ goodsId: '100015',
+ goodsName: '仙女猫',
+ originalPrice: 9800,
+ discountPrice: 1800,
+ memberPrice: 1699,
+ masterImg: 'https://gd4.alicdn.com/imgextra/i2/1974944047/O1CN01kWWKrL1flZT6NQiUP_!!1974944047.jpg_50x50.jpg_.webp',
+ intro: '布偶猫幼猫宠物猫幼崽活体活物拿破仑猫咪小奶猫波斯纯种猫咪仙女',
+ imgList: [
+ 'https://gd4.alicdn.com/imgextra/i2/1974944047/O1CN01kWWKrL1flZT6NQiUP_!!1974944047.jpg_50x50.jpg_.webp',
+ 'https://gd2.alicdn.com/imgextra/i2/1974944047/O1CN01exUmWT1flZT1fw8js_!!1974944047.jpg_50x50.jpg_.webp',
+ 'https://gd1.alicdn.com/imgextra/i1/1974944047/O1CN01p7LvVl1flZT9YVmyf_!!1974944047.jpg_50x50.jpg_.webp',
+ 'https://gd2.alicdn.com/imgextra/i2/1974944047/O1CN01LdCb4B1flZTAt16yR_!!1974944047.jpg_50x50.jpg_.webp',
+ 'https://gd4.alicdn.com/imgextra/i4/1974944047/O1CN01d4CPHb1flZT9YV7P9_!!1974944047.jpg_50x50.jpg_.webp'
+ ],
+ address: '北京'
+ },
+ {
+ goodsId: '100016',
+ goodsName: '波斯猫',
+ originalPrice: 9800,
+ discountPrice: 6800,
+ memberPrice: 5799,
+ masterImg: 'https://gd1.alicdn.com/imgextra/i2/0/TB1o.g9a_1z01JjSZFCXXXY.XXa_!!0-item_pic.jpg_50x50.jpg_.webp',
+ intro: '梵娅宠物猫咪活体 纯白色异国短毛猫加菲猫 高地波斯猫布偶猫幼猫',
+ imgList: [
+ 'https://gd1.alicdn.com/imgextra/i2/0/TB1o.g9a_1z01JjSZFCXXXY.XXa_!!0-item_pic.jpg_50x50.jpg_.webp',
+ 'https://gd4.alicdn.com/imgextra/i4/3387833466/TB2rz8ifvNNTKJjSspfXXbXIFXa_!!3387833466.jpg_50x50.jpg_.webp',
+ 'https://gd4.alicdn.com/imgextra/i4/3387833466/TB2z0chlwn.PuJjSZFkXXc_lpXa_!!3387833466.jpg_50x50.jpg_.webp',
+ 'https://gd2.alicdn.com/imgextra/i2/3387833466/TB2FaHWool7MKJjSZFDXXaOEpXa_!!3387833466.jpg_50x50.jpg_.webp',
+ 'https://gd1.alicdn.com/imgextra/i1/3387833466/TB22sxBklUSMeJjy1zjXXc0dXXa_!!3387833466.jpg_50x50.jpg_.webp'
+ ],
+ address: '北京'
+ },
+ {
+ goodsId: '100017',
+ goodsName: '小胖猫',
+ originalPrice: 2000,
+ discountPrice: 199,
+ memberPrice: 168,
+ masterImg: 'https://gd3.alicdn.com/imgextra/i2/1868725912/O1CN01JWp9d81tXk7UdOsZE_!!1868725912.png_50x50.jpg_.webp',
+ intro: '纯种加菲猫宠物猫异国短毛猫幼崽猫咪活体纯白红小胖净梵加菲猫咪',
+ imgList: [
+ 'https://gd3.alicdn.com/imgextra/i2/1868725912/O1CN01JWp9d81tXk7UdOsZE_!!1868725912.png_50x50.jpg_.webp',
+ 'https://gd4.alicdn.com/imgextra/i4/1868725912/O1CN01qcNkNG1tXk7S82kpx_!!1868725912.png_50x50.jpg_.webp',
+ 'https://gd3.alicdn.com/imgextra/i3/1868725912/O1CN01biPHKu1tXk7SHoNMC_!!1868725912.jpg_50x50.jpg_.webp',
+ 'https://gd2.alicdn.com/imgextra/i2/1868725912/O1CN01bi4jzO1tXk7UbMCIL_!!1868725912.png_50x50.jpg_.webp',
+ ],
+ address: '广东深圳'
+ },
+ {
+ goodsId: '100018',
+ goodsName: '折耳猫',
+ originalPrice: 3888,
+ discountPrice: 1200,
+ memberPrice: 1108,
+ masterImg: 'https://gd1.alicdn.com/imgextra/i2/2207264875257/O1CN01TADEPU1ohkhszIJl5_!!2207264875257.jpg_50x50.jpg_.webp',
+ intro: '蓝白幼猫纯种英短蓝猫银渐层折耳猫幼崽曼基康矮脚宠物小猫咪活物',
+ imgList: [
+ 'https://gd1.alicdn.com/imgextra/i2/2207264875257/O1CN01TADEPU1ohkhszIJl5_!!2207264875257.jpg_50x50.jpg_.webp',
+ 'https://gd3.alicdn.com/imgextra/i3/2207264875257/O1CN01DaWGPm1ohkhrfvhWx_!!2207264875257.jpg_50x50.jpg_.webp',
+ 'https://gd3.alicdn.com/imgextra/i3/2207264875257/O1CN01KKWepM1ohkhwEsLaJ_!!2207264875257.jpg_50x50.jpg_.webp',
+ 'https://gd1.alicdn.com/imgextra/i1/2207264875257/O1CN01qWZItZ1ohkhwEsgQi_!!2207264875257.jpg_50x50.jpg_.webp',
+ 'https://gd1.alicdn.com/imgextra/i1/2207264875257/O1CN01moQGTq1ohkhtjBY3t_!!2207264875257.jpg_50x50.jpg_.webp'
+ ],
+ address: '上海'
+ },
+ {
+ goodsId: '100019',
+ goodsName: '纯种蓝猫活体蓝猫幼猫英短蓝猫 蓝猫英短英国短毛猫 蓝猫宠物猫咪',
+ originalPrice: 800,
+ discountPrice: 403,
+ memberPrice: 203,
+ masterImg: 'https://gd4.alicdn.com/imgextra/i4/2206709760453/O1CN01QR4SxS1FDVzv9CxEb_!!2206709760453.jpg_50x50.jpg_.webp',
+ intro: '',
+ imgList: [
+ 'https://gd4.alicdn.com/imgextra/i4/2206709760453/O1CN01QR4SxS1FDVzv9CxEb_!!2206709760453.jpg_50x50.jpg_.webp',
+ 'https://gd1.alicdn.com/imgextra/i1/2206709760453/O1CN0183wzWY1FDVzr7uqX0_!!2206709760453.jpg_50x50.jpg_.webp',
+ 'https://gd3.alicdn.com/imgextra/i3/2206709760453/O1CN01VmnGzR1FDVzvI5GH9_!!2206709760453.jpg_50x50.jpg_.webp',
+ ],
+ address: '四川成都'
+ },
+ {
+ goodsId: '100020',
+ goodsName: '蓝眼猫',
+ originalPrice: 2300,
+ discountPrice: 1799,
+ memberPrice: 1599,
+ masterImg: 'https://gd1.alicdn.com/imgextra/i1/3435629636/O1CN01uyLDbu2L3L1k30L1b_!!3435629636.png_50x50.jpg_.webp',
+ intro: '天津实体猫舍英短蓝猫宠物猫 CFA专业认证纯种双血统包健康可上门',
+ imgList: [
+ 'https://gd1.alicdn.com/imgextra/i1/3435629636/O1CN01uyLDbu2L3L1k30L1b_!!3435629636.png_50x50.jpg_.webp',
+ 'https://gd3.alicdn.com/imgextra/i3/3435629636/O1CN01Pgthek2L3L1k6oBMo_!!3435629636.png_50x50.jpg_.webp',
+ 'https://gd4.alicdn.com/imgextra/i4/3435629636/O1CN01ERtZgQ2L3L1k6o7C9_!!3435629636.png_50x50.jpg_.webp',
+ 'https://gd3.alicdn.com/imgextra/i3/3435629636/O1CN01FmnNmF2L3L1kufKDz_!!3435629636.png_50x50.jpg_.webp',
+ ],
+ address: '天津'
+ },
+]
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000..df36fcf
Binary files /dev/null and b/public/favicon.ico differ
diff --git a/public/font/DFPHaiBaoW12-GB.ttf b/public/font/DFPHaiBaoW12-GB.ttf
new file mode 100644
index 0000000..c482ed6
Binary files /dev/null and b/public/font/DFPHaiBaoW12-GB.ttf differ
diff --git a/public/font/FZMiaoWuS-GB.ttf b/public/font/FZMiaoWuS-GB.ttf
new file mode 100644
index 0000000..335c354
Binary files /dev/null and b/public/font/FZMiaoWuS-GB.ttf differ
diff --git a/public/images/banner/banner_01.png b/public/images/banner/banner_01.png
new file mode 100644
index 0000000..c5804b2
Binary files /dev/null and b/public/images/banner/banner_01.png differ
diff --git a/public/images/banner/banner_02.png b/public/images/banner/banner_02.png
new file mode 100644
index 0000000..32d9552
Binary files /dev/null and b/public/images/banner/banner_02.png differ
diff --git a/public/images/banner/banner_03.png b/public/images/banner/banner_03.png
new file mode 100644
index 0000000..d034596
Binary files /dev/null and b/public/images/banner/banner_03.png differ
diff --git a/public/images/cart/del-active.png b/public/images/cart/del-active.png
new file mode 100644
index 0000000..5290417
Binary files /dev/null and b/public/images/cart/del-active.png differ
diff --git a/public/images/cart/del.png b/public/images/cart/del.png
new file mode 100644
index 0000000..d43373f
Binary files /dev/null and b/public/images/cart/del.png differ
diff --git a/public/images/cart/discount-btn.png b/public/images/cart/discount-btn.png
new file mode 100644
index 0000000..a158b58
Binary files /dev/null and b/public/images/cart/discount-btn.png differ
diff --git a/public/images/cart/discount.png b/public/images/cart/discount.png
new file mode 100644
index 0000000..7c702db
Binary files /dev/null and b/public/images/cart/discount.png differ
diff --git a/public/images/cart/left.png b/public/images/cart/left.png
new file mode 100644
index 0000000..57786ca
Binary files /dev/null and b/public/images/cart/left.png differ
diff --git a/public/images/cart/none-data.svg b/public/images/cart/none-data.svg
new file mode 100644
index 0000000..435a94a
--- /dev/null
+++ b/public/images/cart/none-data.svg
@@ -0,0 +1 @@
+
diff --git a/public/images/cart/right.png b/public/images/cart/right.png
new file mode 100644
index 0000000..3a69422
Binary files /dev/null and b/public/images/cart/right.png differ
diff --git a/public/images/cart/sort.png b/public/images/cart/sort.png
new file mode 100644
index 0000000..f3b18a8
Binary files /dev/null and b/public/images/cart/sort.png differ
diff --git a/public/images/cart/trumpet.svg b/public/images/cart/trumpet.svg
new file mode 100644
index 0000000..d6c50fb
--- /dev/null
+++ b/public/images/cart/trumpet.svg
@@ -0,0 +1 @@
+
diff --git a/public/images/cart/up.png b/public/images/cart/up.png
new file mode 100644
index 0000000..62f938d
Binary files /dev/null and b/public/images/cart/up.png differ
diff --git a/public/images/cat/cat1/cat1_1.jpg b/public/images/cat/cat1/cat1_1.jpg
new file mode 100644
index 0000000..23efb1b
Binary files /dev/null and b/public/images/cat/cat1/cat1_1.jpg differ
diff --git a/public/images/cat/cat1/cat1_2.jpg b/public/images/cat/cat1/cat1_2.jpg
new file mode 100644
index 0000000..fca43a9
Binary files /dev/null and b/public/images/cat/cat1/cat1_2.jpg differ
diff --git a/public/images/cat/cat1/cat1_3.jpg b/public/images/cat/cat1/cat1_3.jpg
new file mode 100644
index 0000000..f441dc0
Binary files /dev/null and b/public/images/cat/cat1/cat1_3.jpg differ
diff --git a/public/images/cat/cat1/cat1_4.jpg b/public/images/cat/cat1/cat1_4.jpg
new file mode 100644
index 0000000..0a7b4a4
Binary files /dev/null and b/public/images/cat/cat1/cat1_4.jpg differ
diff --git a/public/images/cat/cat1/cat1_5.jpg b/public/images/cat/cat1/cat1_5.jpg
new file mode 100644
index 0000000..322b096
Binary files /dev/null and b/public/images/cat/cat1/cat1_5.jpg differ
diff --git a/public/images/cat/cat_01.png b/public/images/cat/cat_01.png
new file mode 100644
index 0000000..d84cbc8
Binary files /dev/null and b/public/images/cat/cat_01.png differ
diff --git a/public/images/cat/cat_02.png b/public/images/cat/cat_02.png
new file mode 100644
index 0000000..f411bcf
Binary files /dev/null and b/public/images/cat/cat_02.png differ
diff --git a/public/images/detail/comment.png b/public/images/detail/comment.png
new file mode 100644
index 0000000..70c3433
Binary files /dev/null and b/public/images/detail/comment.png differ
diff --git a/public/images/detail/crown.png b/public/images/detail/crown.png
new file mode 100644
index 0000000..fc67e61
Binary files /dev/null and b/public/images/detail/crown.png differ
diff --git a/public/images/detail/edit.png b/public/images/detail/edit.png
new file mode 100644
index 0000000..2f453a4
Binary files /dev/null and b/public/images/detail/edit.png differ
diff --git a/public/images/detail/no-comment.png b/public/images/detail/no-comment.png
new file mode 100644
index 0000000..5d2991c
Binary files /dev/null and b/public/images/detail/no-comment.png differ
diff --git a/public/images/detail/star-0.png b/public/images/detail/star-0.png
new file mode 100644
index 0000000..261e67d
Binary files /dev/null and b/public/images/detail/star-0.png differ
diff --git a/public/images/detail/star-1.png b/public/images/detail/star-1.png
new file mode 100644
index 0000000..5dc7c8d
Binary files /dev/null and b/public/images/detail/star-1.png differ
diff --git a/public/images/detail/star-2.png b/public/images/detail/star-2.png
new file mode 100644
index 0000000..51ddd69
Binary files /dev/null and b/public/images/detail/star-2.png differ
diff --git a/public/images/detail/star-3.png b/public/images/detail/star-3.png
new file mode 100644
index 0000000..6576230
Binary files /dev/null and b/public/images/detail/star-3.png differ
diff --git a/public/images/detail/vip.png b/public/images/detail/vip.png
new file mode 100644
index 0000000..42a7d52
Binary files /dev/null and b/public/images/detail/vip.png differ
diff --git a/public/images/detail/zan-down-1.svg b/public/images/detail/zan-down-1.svg
new file mode 100644
index 0000000..599cf85
--- /dev/null
+++ b/public/images/detail/zan-down-1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/images/detail/zan-up-1.svg b/public/images/detail/zan-up-1.svg
new file mode 100644
index 0000000..8eb6b3b
--- /dev/null
+++ b/public/images/detail/zan-up-1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/images/home/member.png b/public/images/home/member.png
new file mode 100644
index 0000000..0a9014f
Binary files /dev/null and b/public/images/home/member.png differ
diff --git a/public/images/home/sort-btn.png b/public/images/home/sort-btn.png
new file mode 100644
index 0000000..a5aac55
Binary files /dev/null and b/public/images/home/sort-btn.png differ
diff --git a/public/images/home/sort-btn.svg b/public/images/home/sort-btn.svg
new file mode 100644
index 0000000..4d81f3c
--- /dev/null
+++ b/public/images/home/sort-btn.svg
@@ -0,0 +1 @@
+
diff --git a/public/images/my/circle.png b/public/images/my/circle.png
new file mode 100644
index 0000000..8e358fb
Binary files /dev/null and b/public/images/my/circle.png differ
diff --git a/public/images/my/comment.png b/public/images/my/comment.png
new file mode 100644
index 0000000..4cf1bd6
Binary files /dev/null and b/public/images/my/comment.png differ
diff --git a/public/images/my/man.png b/public/images/my/man.png
new file mode 100644
index 0000000..ff03640
Binary files /dev/null and b/public/images/my/man.png differ
diff --git a/public/images/my/none-data.svg b/public/images/my/none-data.svg
new file mode 100644
index 0000000..3ba61da
--- /dev/null
+++ b/public/images/my/none-data.svg
@@ -0,0 +1 @@
+
diff --git a/public/images/my/reload.png b/public/images/my/reload.png
new file mode 100644
index 0000000..a302c4d
Binary files /dev/null and b/public/images/my/reload.png differ
diff --git a/public/images/my/select_0.png b/public/images/my/select_0.png
new file mode 100644
index 0000000..48266b6
Binary files /dev/null and b/public/images/my/select_0.png differ
diff --git a/public/images/my/select_1.png b/public/images/my/select_1.png
new file mode 100644
index 0000000..64a02a9
Binary files /dev/null and b/public/images/my/select_1.png differ
diff --git a/public/images/my/woman.png b/public/images/my/woman.png
new file mode 100644
index 0000000..8ed1ce9
Binary files /dev/null and b/public/images/my/woman.png differ
diff --git a/public/images/order/border-0.png b/public/images/order/border-0.png
new file mode 100644
index 0000000..5216ece
Binary files /dev/null and b/public/images/order/border-0.png differ
diff --git a/public/images/order/border-1.png b/public/images/order/border-1.png
new file mode 100644
index 0000000..47073a3
Binary files /dev/null and b/public/images/order/border-1.png differ
diff --git a/public/images/order/border-add.png b/public/images/order/border-add.png
new file mode 100644
index 0000000..4896dcc
Binary files /dev/null and b/public/images/order/border-add.png differ
diff --git a/public/images/order/cancel.svg b/public/images/order/cancel.svg
new file mode 100644
index 0000000..2a6a922
--- /dev/null
+++ b/public/images/order/cancel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/images/order/down-more.png b/public/images/order/down-more.png
new file mode 100644
index 0000000..d9d0936
Binary files /dev/null and b/public/images/order/down-more.png differ
diff --git a/public/images/order/edit.svg b/public/images/order/edit.svg
new file mode 100644
index 0000000..2816a5d
--- /dev/null
+++ b/public/images/order/edit.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/images/order/head-photo.png b/public/images/order/head-photo.png
new file mode 100644
index 0000000..0788f09
Binary files /dev/null and b/public/images/order/head-photo.png differ
diff --git a/public/images/order/location.svg b/public/images/order/location.svg
new file mode 100644
index 0000000..676a2b3
--- /dev/null
+++ b/public/images/order/location.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/images/order/order-success.png b/public/images/order/order-success.png
new file mode 100644
index 0000000..c933c25
Binary files /dev/null and b/public/images/order/order-success.png differ
diff --git a/public/images/order/phone.svg b/public/images/order/phone.svg
new file mode 100644
index 0000000..d8b1de8
--- /dev/null
+++ b/public/images/order/phone.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/images/public/default.png b/public/images/public/default.png
new file mode 100644
index 0000000..563b45f
Binary files /dev/null and b/public/images/public/default.png differ
diff --git a/public/images/public/edit.png b/public/images/public/edit.png
new file mode 100644
index 0000000..4de3ef9
Binary files /dev/null and b/public/images/public/edit.png differ
diff --git a/public/images/public/email.png b/public/images/public/email.png
new file mode 100644
index 0000000..4659059
Binary files /dev/null and b/public/images/public/email.png differ
diff --git a/public/images/public/github.png b/public/images/public/github.png
new file mode 100644
index 0000000..52a1e76
Binary files /dev/null and b/public/images/public/github.png differ
diff --git a/public/images/public/github1.png b/public/images/public/github1.png
new file mode 100644
index 0000000..a799b1e
Binary files /dev/null and b/public/images/public/github1.png differ
diff --git a/public/images/public/head-photo.png b/public/images/public/head-photo.png
new file mode 100644
index 0000000..0788f09
Binary files /dev/null and b/public/images/public/head-photo.png differ
diff --git a/public/images/public/login.png b/public/images/public/login.png
new file mode 100644
index 0000000..2023c4c
Binary files /dev/null and b/public/images/public/login.png differ
diff --git a/public/images/public/pwd.png b/public/images/public/pwd.png
new file mode 100644
index 0000000..e9b5a93
Binary files /dev/null and b/public/images/public/pwd.png differ
diff --git a/public/images/public/qq.png b/public/images/public/qq.png
new file mode 100644
index 0000000..79f9833
Binary files /dev/null and b/public/images/public/qq.png differ
diff --git a/public/images/public/qrcode.png b/public/images/public/qrcode.png
new file mode 100644
index 0000000..2a5e539
Binary files /dev/null and b/public/images/public/qrcode.png differ
diff --git a/public/images/public/register.png b/public/images/public/register.png
new file mode 100644
index 0000000..a984148
Binary files /dev/null and b/public/images/public/register.png differ
diff --git a/public/images/public/showfalse.png b/public/images/public/showfalse.png
new file mode 100644
index 0000000..cd71e45
Binary files /dev/null and b/public/images/public/showfalse.png differ
diff --git a/public/images/public/showtrue.png b/public/images/public/showtrue.png
new file mode 100644
index 0000000..dd3db3a
Binary files /dev/null and b/public/images/public/showtrue.png differ
diff --git a/public/images/public/wx.png b/public/images/public/wx.png
new file mode 100644
index 0000000..014b207
Binary files /dev/null and b/public/images/public/wx.png differ
diff --git a/public/index.html b/public/index.html
new file mode 100644
index 0000000..e9a2efc
--- /dev/null
+++ b/public/index.html
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+ cat-mall
+
+
+
+
+
+
+
diff --git a/public/svgs/add.svg b/public/svgs/add.svg
new file mode 100644
index 0000000..fc20eee
--- /dev/null
+++ b/public/svgs/add.svg
@@ -0,0 +1 @@
+
diff --git a/public/svgs/cart.svg b/public/svgs/cart.svg
new file mode 100644
index 0000000..0ad0573
--- /dev/null
+++ b/public/svgs/cart.svg
@@ -0,0 +1 @@
+
diff --git a/public/svgs/like_0.svg b/public/svgs/like_0.svg
new file mode 100644
index 0000000..7acf95d
--- /dev/null
+++ b/public/svgs/like_0.svg
@@ -0,0 +1 @@
+
diff --git a/public/svgs/like_1.svg b/public/svgs/like_1.svg
new file mode 100644
index 0000000..fc8a9f7
--- /dev/null
+++ b/public/svgs/like_1.svg
@@ -0,0 +1 @@
+
diff --git a/public/svgs/minus.svg b/public/svgs/minus.svg
new file mode 100644
index 0000000..56ae5ac
--- /dev/null
+++ b/public/svgs/minus.svg
@@ -0,0 +1 @@
+
diff --git a/src/App.vue b/src/App.vue
new file mode 100644
index 0000000..b82c9de
--- /dev/null
+++ b/src/App.vue
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
diff --git a/src/assets/conf/routerList.js b/src/assets/conf/routerList.js
new file mode 100644
index 0000000..2d1c86e
--- /dev/null
+++ b/src/assets/conf/routerList.js
@@ -0,0 +1,27 @@
+export default {
+ '/': {
+ name: '首页',
+ path: '/',
+ fullPath: '/'
+ },
+ '/cart': {
+ name: '购物车',
+ path: '/cart',
+ fullPath: ''
+ },
+ '/detail': {
+ name: '宠物详情',
+ path: '/detail',
+ fullPath: ''
+ },
+ '/order': {
+ name: '下单',
+ path: '/order',
+ fullPath: ''
+ },
+ '/my': {
+ name: '我的',
+ path: '/my',
+ fullPath: ''
+ }
+}
diff --git a/src/assets/loading-svg/dual-ball-gray.svg b/src/assets/loading-svg/dual-ball-gray.svg
new file mode 100644
index 0000000..f9bca21
--- /dev/null
+++ b/src/assets/loading-svg/dual-ball-gray.svg
@@ -0,0 +1,13 @@
+
+
diff --git a/src/assets/loading-svg/dual-ball.svg b/src/assets/loading-svg/dual-ball.svg
new file mode 100644
index 0000000..f8313d5
--- /dev/null
+++ b/src/assets/loading-svg/dual-ball.svg
@@ -0,0 +1,13 @@
+
+
diff --git a/src/assets/loading-svg/loading-balls.svg b/src/assets/loading-svg/loading-balls.svg
new file mode 100644
index 0000000..9f3d96d
--- /dev/null
+++ b/src/assets/loading-svg/loading-balls.svg
@@ -0,0 +1,14 @@
+
diff --git a/src/assets/loading-svg/loading-bars.svg b/src/assets/loading-svg/loading-bars.svg
new file mode 100644
index 0000000..614f7d8
--- /dev/null
+++ b/src/assets/loading-svg/loading-bars.svg
@@ -0,0 +1,17 @@
+
diff --git a/src/assets/loading-svg/loading-bubbles.svg b/src/assets/loading-svg/loading-bubbles.svg
new file mode 100644
index 0000000..75a1e3e
--- /dev/null
+++ b/src/assets/loading-svg/loading-bubbles.svg
@@ -0,0 +1,14 @@
+
diff --git a/src/assets/loading-svg/loading-cubes.svg b/src/assets/loading-svg/loading-cubes.svg
new file mode 100644
index 0000000..850bdab
--- /dev/null
+++ b/src/assets/loading-svg/loading-cubes.svg
@@ -0,0 +1,14 @@
+
diff --git a/src/assets/loading-svg/loading-cylon-red.svg b/src/assets/loading-svg/loading-cylon-red.svg
new file mode 100644
index 0000000..67140a4
--- /dev/null
+++ b/src/assets/loading-svg/loading-cylon-red.svg
@@ -0,0 +1,11 @@
+
diff --git a/src/assets/loading-svg/loading-cylon.svg b/src/assets/loading-svg/loading-cylon.svg
new file mode 100644
index 0000000..dc8f122
--- /dev/null
+++ b/src/assets/loading-svg/loading-cylon.svg
@@ -0,0 +1,11 @@
+
diff --git a/src/assets/loading-svg/loading-spin.svg b/src/assets/loading-svg/loading-spin.svg
new file mode 100644
index 0000000..328c75f
--- /dev/null
+++ b/src/assets/loading-svg/loading-spin.svg
@@ -0,0 +1,6 @@
+
diff --git a/src/assets/loading-svg/loading-spinning-bubbles.svg b/src/assets/loading-svg/loading-spinning-bubbles.svg
new file mode 100644
index 0000000..8cbf326
--- /dev/null
+++ b/src/assets/loading-svg/loading-spinning-bubbles.svg
@@ -0,0 +1,29 @@
+
diff --git a/src/assets/loading-svg/loading-spokes.svg b/src/assets/loading-svg/loading-spokes.svg
new file mode 100644
index 0000000..b47a79c
--- /dev/null
+++ b/src/assets/loading-svg/loading-spokes.svg
@@ -0,0 +1,26 @@
+
diff --git a/src/assets/logo.png b/src/assets/logo.png
new file mode 100644
index 0000000..f3d2503
Binary files /dev/null and b/src/assets/logo.png differ
diff --git a/src/assets/scss/css/font-awesome.css b/src/assets/scss/css/font-awesome.css
new file mode 100644
index 0000000..ee906a8
--- /dev/null
+++ b/src/assets/scss/css/font-awesome.css
@@ -0,0 +1,2337 @@
+/*!
+ * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+/* FONT PATH
+ * -------------------------- */
+@font-face {
+ font-family: 'FontAwesome';
+ src: url('../fonts/fontawesome-webfont.eot?v=4.7.0');
+ src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');
+ font-weight: normal;
+ font-style: normal;
+}
+.fa {
+ display: inline-block;
+ font: normal normal normal 14px/1 FontAwesome;
+ font-size: inherit;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+/* makes the font 33% larger relative to the icon container */
+.fa-lg {
+ font-size: 1.33333333em;
+ line-height: 0.75em;
+ vertical-align: -15%;
+}
+.fa-2x {
+ font-size: 2em;
+}
+.fa-3x {
+ font-size: 3em;
+}
+.fa-4x {
+ font-size: 4em;
+}
+.fa-5x {
+ font-size: 5em;
+}
+.fa-fw {
+ width: 1.28571429em;
+ text-align: center;
+}
+.fa-ul {
+ padding-left: 0;
+ margin-left: 2.14285714em;
+ list-style-type: none;
+}
+.fa-ul > li {
+ position: relative;
+}
+.fa-li {
+ position: absolute;
+ left: -2.14285714em;
+ width: 2.14285714em;
+ top: 0.14285714em;
+ text-align: center;
+}
+.fa-li.fa-lg {
+ left: -1.85714286em;
+}
+.fa-border {
+ padding: .2em .25em .15em;
+ border: solid 0.08em #eeeeee;
+ border-radius: .1em;
+}
+.fa-pull-left {
+ float: left;
+}
+.fa-pull-right {
+ float: right;
+}
+.fa.fa-pull-left {
+ margin-right: .3em;
+}
+.fa.fa-pull-right {
+ margin-left: .3em;
+}
+/* Deprecated as of 4.4.0 */
+.pull-right {
+ float: right;
+}
+.pull-left {
+ float: left;
+}
+.fa.pull-left {
+ margin-right: .3em;
+}
+.fa.pull-right {
+ margin-left: .3em;
+}
+.fa-spin {
+ -webkit-animation: fa-spin 2s infinite linear;
+ animation: fa-spin 2s infinite linear;
+}
+.fa-pulse {
+ -webkit-animation: fa-spin 1s infinite steps(8);
+ animation: fa-spin 1s infinite steps(8);
+}
+@-webkit-keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+@keyframes fa-spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+.fa-rotate-90 {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
+ -webkit-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ transform: rotate(90deg);
+}
+.fa-rotate-180 {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
+ -webkit-transform: rotate(180deg);
+ -ms-transform: rotate(180deg);
+ transform: rotate(180deg);
+}
+.fa-rotate-270 {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
+ -webkit-transform: rotate(270deg);
+ -ms-transform: rotate(270deg);
+ transform: rotate(270deg);
+}
+.fa-flip-horizontal {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
+ -webkit-transform: scale(-1, 1);
+ -ms-transform: scale(-1, 1);
+ transform: scale(-1, 1);
+}
+.fa-flip-vertical {
+ -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
+ -webkit-transform: scale(1, -1);
+ -ms-transform: scale(1, -1);
+ transform: scale(1, -1);
+}
+:root .fa-rotate-90,
+:root .fa-rotate-180,
+:root .fa-rotate-270,
+:root .fa-flip-horizontal,
+:root .fa-flip-vertical {
+ filter: none;
+}
+.fa-stack {
+ position: relative;
+ display: inline-block;
+ width: 2em;
+ height: 2em;
+ line-height: 2em;
+ vertical-align: middle;
+}
+.fa-stack-1x,
+.fa-stack-2x {
+ position: absolute;
+ left: 0;
+ width: 100%;
+ text-align: center;
+}
+.fa-stack-1x {
+ line-height: inherit;
+}
+.fa-stack-2x {
+ font-size: 2em;
+}
+.fa-inverse {
+ color: #ffffff;
+}
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+ readers do not read off random characters that represent icons */
+.fa-glass:before {
+ content: "\f000";
+}
+.fa-music:before {
+ content: "\f001";
+}
+.fa-search:before {
+ content: "\f002";
+}
+.fa-envelope-o:before {
+ content: "\f003";
+}
+.fa-heart:before {
+ content: "\f004";
+}
+.fa-star:before {
+ content: "\f005";
+}
+.fa-star-o:before {
+ content: "\f006";
+}
+.fa-user:before {
+ content: "\f007";
+}
+.fa-film:before {
+ content: "\f008";
+}
+.fa-th-large:before {
+ content: "\f009";
+}
+.fa-th:before {
+ content: "\f00a";
+}
+.fa-th-list:before {
+ content: "\f00b";
+}
+.fa-check:before {
+ content: "\f00c";
+}
+.fa-remove:before,
+.fa-close:before,
+.fa-times:before {
+ content: "\f00d";
+}
+.fa-search-plus:before {
+ content: "\f00e";
+}
+.fa-search-minus:before {
+ content: "\f010";
+}
+.fa-power-off:before {
+ content: "\f011";
+}
+.fa-signal:before {
+ content: "\f012";
+}
+.fa-gear:before,
+.fa-cog:before {
+ content: "\f013";
+}
+.fa-trash-o:before {
+ content: "\f014";
+}
+.fa-home:before {
+ content: "\f015";
+}
+.fa-file-o:before {
+ content: "\f016";
+}
+.fa-clock-o:before {
+ content: "\f017";
+}
+.fa-road:before {
+ content: "\f018";
+}
+.fa-download:before {
+ content: "\f019";
+}
+.fa-arrow-circle-o-down:before {
+ content: "\f01a";
+}
+.fa-arrow-circle-o-up:before {
+ content: "\f01b";
+}
+.fa-inbox:before {
+ content: "\f01c";
+}
+.fa-play-circle-o:before {
+ content: "\f01d";
+}
+.fa-rotate-right:before,
+.fa-repeat:before {
+ content: "\f01e";
+}
+.fa-refresh:before {
+ content: "\f021";
+}
+.fa-list-alt:before {
+ content: "\f022";
+}
+.fa-lock:before {
+ content: "\f023";
+}
+.fa-flag:before {
+ content: "\f024";
+}
+.fa-headphones:before {
+ content: "\f025";
+}
+.fa-volume-off:before {
+ content: "\f026";
+}
+.fa-volume-down:before {
+ content: "\f027";
+}
+.fa-volume-up:before {
+ content: "\f028";
+}
+.fa-qrcode:before {
+ content: "\f029";
+}
+.fa-barcode:before {
+ content: "\f02a";
+}
+.fa-tag:before {
+ content: "\f02b";
+}
+.fa-tags:before {
+ content: "\f02c";
+}
+.fa-book:before {
+ content: "\f02d";
+}
+.fa-bookmark:before {
+ content: "\f02e";
+}
+.fa-print:before {
+ content: "\f02f";
+}
+.fa-camera:before {
+ content: "\f030";
+}
+.fa-font:before {
+ content: "\f031";
+}
+.fa-bold:before {
+ content: "\f032";
+}
+.fa-italic:before {
+ content: "\f033";
+}
+.fa-text-height:before {
+ content: "\f034";
+}
+.fa-text-width:before {
+ content: "\f035";
+}
+.fa-align-left:before {
+ content: "\f036";
+}
+.fa-align-center:before {
+ content: "\f037";
+}
+.fa-align-right:before {
+ content: "\f038";
+}
+.fa-align-justify:before {
+ content: "\f039";
+}
+.fa-list:before {
+ content: "\f03a";
+}
+.fa-dedent:before,
+.fa-outdent:before {
+ content: "\f03b";
+}
+.fa-indent:before {
+ content: "\f03c";
+}
+.fa-video-camera:before {
+ content: "\f03d";
+}
+.fa-photo:before,
+.fa-image:before,
+.fa-picture-o:before {
+ content: "\f03e";
+}
+.fa-pencil:before {
+ content: "\f040";
+}
+.fa-map-marker:before {
+ content: "\f041";
+}
+.fa-adjust:before {
+ content: "\f042";
+}
+.fa-tint:before {
+ content: "\f043";
+}
+.fa-edit:before,
+.fa-pencil-square-o:before {
+ content: "\f044";
+}
+.fa-share-square-o:before {
+ content: "\f045";
+}
+.fa-check-square-o:before {
+ content: "\f046";
+}
+.fa-arrows:before {
+ content: "\f047";
+}
+.fa-step-backward:before {
+ content: "\f048";
+}
+.fa-fast-backward:before {
+ content: "\f049";
+}
+.fa-backward:before {
+ content: "\f04a";
+}
+.fa-play:before {
+ content: "\f04b";
+}
+.fa-pause:before {
+ content: "\f04c";
+}
+.fa-stop:before {
+ content: "\f04d";
+}
+.fa-forward:before {
+ content: "\f04e";
+}
+.fa-fast-forward:before {
+ content: "\f050";
+}
+.fa-step-forward:before {
+ content: "\f051";
+}
+.fa-eject:before {
+ content: "\f052";
+}
+.fa-chevron-left:before {
+ content: "\f053";
+}
+.fa-chevron-right:before {
+ content: "\f054";
+}
+.fa-plus-circle:before {
+ content: "\f055";
+}
+.fa-minus-circle:before {
+ content: "\f056";
+}
+.fa-times-circle:before {
+ content: "\f057";
+}
+.fa-check-circle:before {
+ content: "\f058";
+}
+.fa-question-circle:before {
+ content: "\f059";
+}
+.fa-info-circle:before {
+ content: "\f05a";
+}
+.fa-crosshairs:before {
+ content: "\f05b";
+}
+.fa-times-circle-o:before {
+ content: "\f05c";
+}
+.fa-check-circle-o:before {
+ content: "\f05d";
+}
+.fa-ban:before {
+ content: "\f05e";
+}
+.fa-arrow-left:before {
+ content: "\f060";
+}
+.fa-arrow-right:before {
+ content: "\f061";
+}
+.fa-arrow-up:before {
+ content: "\f062";
+}
+.fa-arrow-down:before {
+ content: "\f063";
+}
+.fa-mail-forward:before,
+.fa-share:before {
+ content: "\f064";
+}
+.fa-expand:before {
+ content: "\f065";
+}
+.fa-compress:before {
+ content: "\f066";
+}
+.fa-plus:before {
+ content: "\f067";
+}
+.fa-minus:before {
+ content: "\f068";
+}
+.fa-asterisk:before {
+ content: "\f069";
+}
+.fa-exclamation-circle:before {
+ content: "\f06a";
+}
+.fa-gift:before {
+ content: "\f06b";
+}
+.fa-leaf:before {
+ content: "\f06c";
+}
+.fa-fire:before {
+ content: "\f06d";
+}
+.fa-eye:before {
+ content: "\f06e";
+}
+.fa-eye-slash:before {
+ content: "\f070";
+}
+.fa-warning:before,
+.fa-exclamation-triangle:before {
+ content: "\f071";
+}
+.fa-plane:before {
+ content: "\f072";
+}
+.fa-calendar:before {
+ content: "\f073";
+}
+.fa-random:before {
+ content: "\f074";
+}
+.fa-comment:before {
+ content: "\f075";
+}
+.fa-magnet:before {
+ content: "\f076";
+}
+.fa-chevron-up:before {
+ content: "\f077";
+}
+.fa-chevron-down:before {
+ content: "\f078";
+}
+.fa-retweet:before {
+ content: "\f079";
+}
+.fa-shopping-cart:before {
+ content: "\f07a";
+}
+.fa-folder:before {
+ content: "\f07b";
+}
+.fa-folder-open:before {
+ content: "\f07c";
+}
+.fa-arrows-v:before {
+ content: "\f07d";
+}
+.fa-arrows-h:before {
+ content: "\f07e";
+}
+.fa-bar-chart-o:before,
+.fa-bar-chart:before {
+ content: "\f080";
+}
+.fa-twitter-square:before {
+ content: "\f081";
+}
+.fa-facebook-square:before {
+ content: "\f082";
+}
+.fa-camera-retro:before {
+ content: "\f083";
+}
+.fa-key:before {
+ content: "\f084";
+}
+.fa-gears:before,
+.fa-cogs:before {
+ content: "\f085";
+}
+.fa-comments:before {
+ content: "\f086";
+}
+.fa-thumbs-o-up:before {
+ content: "\f087";
+}
+.fa-thumbs-o-down:before {
+ content: "\f088";
+}
+.fa-star-half:before {
+ content: "\f089";
+}
+.fa-heart-o:before {
+ content: "\f08a";
+}
+.fa-sign-out:before {
+ content: "\f08b";
+}
+.fa-linkedin-square:before {
+ content: "\f08c";
+}
+.fa-thumb-tack:before {
+ content: "\f08d";
+}
+.fa-external-link:before {
+ content: "\f08e";
+}
+.fa-sign-in:before {
+ content: "\f090";
+}
+.fa-trophy:before {
+ content: "\f091";
+}
+.fa-github-square:before {
+ content: "\f092";
+}
+.fa-upload:before {
+ content: "\f093";
+}
+.fa-lemon-o:before {
+ content: "\f094";
+}
+.fa-phone:before {
+ content: "\f095";
+}
+.fa-square-o:before {
+ content: "\f096";
+}
+.fa-bookmark-o:before {
+ content: "\f097";
+}
+.fa-phone-square:before {
+ content: "\f098";
+}
+.fa-twitter:before {
+ content: "\f099";
+}
+.fa-facebook-f:before,
+.fa-facebook:before {
+ content: "\f09a";
+}
+.fa-github:before {
+ content: "\f09b";
+}
+.fa-unlock:before {
+ content: "\f09c";
+}
+.fa-credit-card:before {
+ content: "\f09d";
+}
+.fa-feed:before,
+.fa-rss:before {
+ content: "\f09e";
+}
+.fa-hdd-o:before {
+ content: "\f0a0";
+}
+.fa-bullhorn:before {
+ content: "\f0a1";
+}
+.fa-bell:before {
+ content: "\f0f3";
+}
+.fa-certificate:before {
+ content: "\f0a3";
+}
+.fa-hand-o-right:before {
+ content: "\f0a4";
+}
+.fa-hand-o-left:before {
+ content: "\f0a5";
+}
+.fa-hand-o-up:before {
+ content: "\f0a6";
+}
+.fa-hand-o-down:before {
+ content: "\f0a7";
+}
+.fa-arrow-circle-left:before {
+ content: "\f0a8";
+}
+.fa-arrow-circle-right:before {
+ content: "\f0a9";
+}
+.fa-arrow-circle-up:before {
+ content: "\f0aa";
+}
+.fa-arrow-circle-down:before {
+ content: "\f0ab";
+}
+.fa-globe:before {
+ content: "\f0ac";
+}
+.fa-wrench:before {
+ content: "\f0ad";
+}
+.fa-tasks:before {
+ content: "\f0ae";
+}
+.fa-filter:before {
+ content: "\f0b0";
+}
+.fa-briefcase:before {
+ content: "\f0b1";
+}
+.fa-arrows-alt:before {
+ content: "\f0b2";
+}
+.fa-group:before,
+.fa-users:before {
+ content: "\f0c0";
+}
+.fa-chain:before,
+.fa-link:before {
+ content: "\f0c1";
+}
+.fa-cloud:before {
+ content: "\f0c2";
+}
+.fa-flask:before {
+ content: "\f0c3";
+}
+.fa-cut:before,
+.fa-scissors:before {
+ content: "\f0c4";
+}
+.fa-copy:before,
+.fa-files-o:before {
+ content: "\f0c5";
+}
+.fa-paperclip:before {
+ content: "\f0c6";
+}
+.fa-save:before,
+.fa-floppy-o:before {
+ content: "\f0c7";
+}
+.fa-square:before {
+ content: "\f0c8";
+}
+.fa-navicon:before,
+.fa-reorder:before,
+.fa-bars:before {
+ content: "\f0c9";
+}
+.fa-list-ul:before {
+ content: "\f0ca";
+}
+.fa-list-ol:before {
+ content: "\f0cb";
+}
+.fa-strikethrough:before {
+ content: "\f0cc";
+}
+.fa-underline:before {
+ content: "\f0cd";
+}
+.fa-table:before {
+ content: "\f0ce";
+}
+.fa-magic:before {
+ content: "\f0d0";
+}
+.fa-truck:before {
+ content: "\f0d1";
+}
+.fa-pinterest:before {
+ content: "\f0d2";
+}
+.fa-pinterest-square:before {
+ content: "\f0d3";
+}
+.fa-google-plus-square:before {
+ content: "\f0d4";
+}
+.fa-google-plus:before {
+ content: "\f0d5";
+}
+.fa-money:before {
+ content: "\f0d6";
+}
+.fa-caret-down:before {
+ content: "\f0d7";
+}
+.fa-caret-up:before {
+ content: "\f0d8";
+}
+.fa-caret-left:before {
+ content: "\f0d9";
+}
+.fa-caret-right:before {
+ content: "\f0da";
+}
+.fa-columns:before {
+ content: "\f0db";
+}
+.fa-unsorted:before,
+.fa-sort:before {
+ content: "\f0dc";
+}
+.fa-sort-down:before,
+.fa-sort-desc:before {
+ content: "\f0dd";
+}
+.fa-sort-up:before,
+.fa-sort-asc:before {
+ content: "\f0de";
+}
+.fa-envelope:before {
+ content: "\f0e0";
+}
+.fa-linkedin:before {
+ content: "\f0e1";
+}
+.fa-rotate-left:before,
+.fa-undo:before {
+ content: "\f0e2";
+}
+.fa-legal:before,
+.fa-gavel:before {
+ content: "\f0e3";
+}
+.fa-dashboard:before,
+.fa-tachometer:before {
+ content: "\f0e4";
+}
+.fa-comment-o:before {
+ content: "\f0e5";
+}
+.fa-comments-o:before {
+ content: "\f0e6";
+}
+.fa-flash:before,
+.fa-bolt:before {
+ content: "\f0e7";
+}
+.fa-sitemap:before {
+ content: "\f0e8";
+}
+.fa-umbrella:before {
+ content: "\f0e9";
+}
+.fa-paste:before,
+.fa-clipboard:before {
+ content: "\f0ea";
+}
+.fa-lightbulb-o:before {
+ content: "\f0eb";
+}
+.fa-exchange:before {
+ content: "\f0ec";
+}
+.fa-cloud-download:before {
+ content: "\f0ed";
+}
+.fa-cloud-upload:before {
+ content: "\f0ee";
+}
+.fa-user-md:before {
+ content: "\f0f0";
+}
+.fa-stethoscope:before {
+ content: "\f0f1";
+}
+.fa-suitcase:before {
+ content: "\f0f2";
+}
+.fa-bell-o:before {
+ content: "\f0a2";
+}
+.fa-coffee:before {
+ content: "\f0f4";
+}
+.fa-cutlery:before {
+ content: "\f0f5";
+}
+.fa-file-text-o:before {
+ content: "\f0f6";
+}
+.fa-building-o:before {
+ content: "\f0f7";
+}
+.fa-hospital-o:before {
+ content: "\f0f8";
+}
+.fa-ambulance:before {
+ content: "\f0f9";
+}
+.fa-medkit:before {
+ content: "\f0fa";
+}
+.fa-fighter-jet:before {
+ content: "\f0fb";
+}
+.fa-beer:before {
+ content: "\f0fc";
+}
+.fa-h-square:before {
+ content: "\f0fd";
+}
+.fa-plus-square:before {
+ content: "\f0fe";
+}
+.fa-angle-double-left:before {
+ content: "\f100";
+}
+.fa-angle-double-right:before {
+ content: "\f101";
+}
+.fa-angle-double-up:before {
+ content: "\f102";
+}
+.fa-angle-double-down:before {
+ content: "\f103";
+}
+.fa-angle-left:before {
+ content: "\f104";
+}
+.fa-angle-right:before {
+ content: "\f105";
+}
+.fa-angle-up:before {
+ content: "\f106";
+}
+.fa-angle-down:before {
+ content: "\f107";
+}
+.fa-desktop:before {
+ content: "\f108";
+}
+.fa-laptop:before {
+ content: "\f109";
+}
+.fa-tablet:before {
+ content: "\f10a";
+}
+.fa-mobile-phone:before,
+.fa-mobile:before {
+ content: "\f10b";
+}
+.fa-circle-o:before {
+ content: "\f10c";
+}
+.fa-quote-left:before {
+ content: "\f10d";
+}
+.fa-quote-right:before {
+ content: "\f10e";
+}
+.fa-spinner:before {
+ content: "\f110";
+}
+.fa-circle:before {
+ content: "\f111";
+}
+.fa-mail-reply:before,
+.fa-reply:before {
+ content: "\f112";
+}
+.fa-github-alt:before {
+ content: "\f113";
+}
+.fa-folder-o:before {
+ content: "\f114";
+}
+.fa-folder-open-o:before {
+ content: "\f115";
+}
+.fa-smile-o:before {
+ content: "\f118";
+}
+.fa-frown-o:before {
+ content: "\f119";
+}
+.fa-meh-o:before {
+ content: "\f11a";
+}
+.fa-gamepad:before {
+ content: "\f11b";
+}
+.fa-keyboard-o:before {
+ content: "\f11c";
+}
+.fa-flag-o:before {
+ content: "\f11d";
+}
+.fa-flag-checkered:before {
+ content: "\f11e";
+}
+.fa-terminal:before {
+ content: "\f120";
+}
+.fa-code:before {
+ content: "\f121";
+}
+.fa-mail-reply-all:before,
+.fa-reply-all:before {
+ content: "\f122";
+}
+.fa-star-half-empty:before,
+.fa-star-half-full:before,
+.fa-star-half-o:before {
+ content: "\f123";
+}
+.fa-location-arrow:before {
+ content: "\f124";
+}
+.fa-crop:before {
+ content: "\f125";
+}
+.fa-code-fork:before {
+ content: "\f126";
+}
+.fa-unlink:before,
+.fa-chain-broken:before {
+ content: "\f127";
+}
+.fa-question:before {
+ content: "\f128";
+}
+.fa-info:before {
+ content: "\f129";
+}
+.fa-exclamation:before {
+ content: "\f12a";
+}
+.fa-superscript:before {
+ content: "\f12b";
+}
+.fa-subscript:before {
+ content: "\f12c";
+}
+.fa-eraser:before {
+ content: "\f12d";
+}
+.fa-puzzle-piece:before {
+ content: "\f12e";
+}
+.fa-microphone:before {
+ content: "\f130";
+}
+.fa-microphone-slash:before {
+ content: "\f131";
+}
+.fa-shield:before {
+ content: "\f132";
+}
+.fa-calendar-o:before {
+ content: "\f133";
+}
+.fa-fire-extinguisher:before {
+ content: "\f134";
+}
+.fa-rocket:before {
+ content: "\f135";
+}
+.fa-maxcdn:before {
+ content: "\f136";
+}
+.fa-chevron-circle-left:before {
+ content: "\f137";
+}
+.fa-chevron-circle-right:before {
+ content: "\f138";
+}
+.fa-chevron-circle-up:before {
+ content: "\f139";
+}
+.fa-chevron-circle-down:before {
+ content: "\f13a";
+}
+.fa-html5:before {
+ content: "\f13b";
+}
+.fa-css3:before {
+ content: "\f13c";
+}
+.fa-anchor:before {
+ content: "\f13d";
+}
+.fa-unlock-alt:before {
+ content: "\f13e";
+}
+.fa-bullseye:before {
+ content: "\f140";
+}
+.fa-ellipsis-h:before {
+ content: "\f141";
+}
+.fa-ellipsis-v:before {
+ content: "\f142";
+}
+.fa-rss-square:before {
+ content: "\f143";
+}
+.fa-play-circle:before {
+ content: "\f144";
+}
+.fa-ticket:before {
+ content: "\f145";
+}
+.fa-minus-square:before {
+ content: "\f146";
+}
+.fa-minus-square-o:before {
+ content: "\f147";
+}
+.fa-level-up:before {
+ content: "\f148";
+}
+.fa-level-down:before {
+ content: "\f149";
+}
+.fa-check-square:before {
+ content: "\f14a";
+}
+.fa-pencil-square:before {
+ content: "\f14b";
+}
+.fa-external-link-square:before {
+ content: "\f14c";
+}
+.fa-share-square:before {
+ content: "\f14d";
+}
+.fa-compass:before {
+ content: "\f14e";
+}
+.fa-toggle-down:before,
+.fa-caret-square-o-down:before {
+ content: "\f150";
+}
+.fa-toggle-up:before,
+.fa-caret-square-o-up:before {
+ content: "\f151";
+}
+.fa-toggle-right:before,
+.fa-caret-square-o-right:before {
+ content: "\f152";
+}
+.fa-euro:before,
+.fa-eur:before {
+ content: "\f153";
+}
+.fa-gbp:before {
+ content: "\f154";
+}
+.fa-dollar:before,
+.fa-usd:before {
+ content: "\f155";
+}
+.fa-rupee:before,
+.fa-inr:before {
+ content: "\f156";
+}
+.fa-cny:before,
+.fa-rmb:before,
+.fa-yen:before,
+.fa-jpy:before {
+ content: "\f157";
+}
+.fa-ruble:before,
+.fa-rouble:before,
+.fa-rub:before {
+ content: "\f158";
+}
+.fa-won:before,
+.fa-krw:before {
+ content: "\f159";
+}
+.fa-bitcoin:before,
+.fa-btc:before {
+ content: "\f15a";
+}
+.fa-file:before {
+ content: "\f15b";
+}
+.fa-file-text:before {
+ content: "\f15c";
+}
+.fa-sort-alpha-asc:before {
+ content: "\f15d";
+}
+.fa-sort-alpha-desc:before {
+ content: "\f15e";
+}
+.fa-sort-amount-asc:before {
+ content: "\f160";
+}
+.fa-sort-amount-desc:before {
+ content: "\f161";
+}
+.fa-sort-numeric-asc:before {
+ content: "\f162";
+}
+.fa-sort-numeric-desc:before {
+ content: "\f163";
+}
+.fa-thumbs-up:before {
+ content: "\f164";
+}
+.fa-thumbs-down:before {
+ content: "\f165";
+}
+.fa-youtube-square:before {
+ content: "\f166";
+}
+.fa-youtube:before {
+ content: "\f167";
+}
+.fa-xing:before {
+ content: "\f168";
+}
+.fa-xing-square:before {
+ content: "\f169";
+}
+.fa-youtube-play:before {
+ content: "\f16a";
+}
+.fa-dropbox:before {
+ content: "\f16b";
+}
+.fa-stack-overflow:before {
+ content: "\f16c";
+}
+.fa-instagram:before {
+ content: "\f16d";
+}
+.fa-flickr:before {
+ content: "\f16e";
+}
+.fa-adn:before {
+ content: "\f170";
+}
+.fa-bitbucket:before {
+ content: "\f171";
+}
+.fa-bitbucket-square:before {
+ content: "\f172";
+}
+.fa-tumblr:before {
+ content: "\f173";
+}
+.fa-tumblr-square:before {
+ content: "\f174";
+}
+.fa-long-arrow-down:before {
+ content: "\f175";
+}
+.fa-long-arrow-up:before {
+ content: "\f176";
+}
+.fa-long-arrow-left:before {
+ content: "\f177";
+}
+.fa-long-arrow-right:before {
+ content: "\f178";
+}
+.fa-apple:before {
+ content: "\f179";
+}
+.fa-windows:before {
+ content: "\f17a";
+}
+.fa-android:before {
+ content: "\f17b";
+}
+.fa-linux:before {
+ content: "\f17c";
+}
+.fa-dribbble:before {
+ content: "\f17d";
+}
+.fa-skype:before {
+ content: "\f17e";
+}
+.fa-foursquare:before {
+ content: "\f180";
+}
+.fa-trello:before {
+ content: "\f181";
+}
+.fa-female:before {
+ content: "\f182";
+}
+.fa-male:before {
+ content: "\f183";
+}
+.fa-gittip:before,
+.fa-gratipay:before {
+ content: "\f184";
+}
+.fa-sun-o:before {
+ content: "\f185";
+}
+.fa-moon-o:before {
+ content: "\f186";
+}
+.fa-archive:before {
+ content: "\f187";
+}
+.fa-bug:before {
+ content: "\f188";
+}
+.fa-vk:before {
+ content: "\f189";
+}
+.fa-weibo:before {
+ content: "\f18a";
+}
+.fa-renren:before {
+ content: "\f18b";
+}
+.fa-pagelines:before {
+ content: "\f18c";
+}
+.fa-stack-exchange:before {
+ content: "\f18d";
+}
+.fa-arrow-circle-o-right:before {
+ content: "\f18e";
+}
+.fa-arrow-circle-o-left:before {
+ content: "\f190";
+}
+.fa-toggle-left:before,
+.fa-caret-square-o-left:before {
+ content: "\f191";
+}
+.fa-dot-circle-o:before {
+ content: "\f192";
+}
+.fa-wheelchair:before {
+ content: "\f193";
+}
+.fa-vimeo-square:before {
+ content: "\f194";
+}
+.fa-turkish-lira:before,
+.fa-try:before {
+ content: "\f195";
+}
+.fa-plus-square-o:before {
+ content: "\f196";
+}
+.fa-space-shuttle:before {
+ content: "\f197";
+}
+.fa-slack:before {
+ content: "\f198";
+}
+.fa-envelope-square:before {
+ content: "\f199";
+}
+.fa-wordpress:before {
+ content: "\f19a";
+}
+.fa-openid:before {
+ content: "\f19b";
+}
+.fa-institution:before,
+.fa-bank:before,
+.fa-university:before {
+ content: "\f19c";
+}
+.fa-mortar-board:before,
+.fa-graduation-cap:before {
+ content: "\f19d";
+}
+.fa-yahoo:before {
+ content: "\f19e";
+}
+.fa-google:before {
+ content: "\f1a0";
+}
+.fa-reddit:before {
+ content: "\f1a1";
+}
+.fa-reddit-square:before {
+ content: "\f1a2";
+}
+.fa-stumbleupon-circle:before {
+ content: "\f1a3";
+}
+.fa-stumbleupon:before {
+ content: "\f1a4";
+}
+.fa-delicious:before {
+ content: "\f1a5";
+}
+.fa-digg:before {
+ content: "\f1a6";
+}
+.fa-pied-piper-pp:before {
+ content: "\f1a7";
+}
+.fa-pied-piper-alt:before {
+ content: "\f1a8";
+}
+.fa-drupal:before {
+ content: "\f1a9";
+}
+.fa-joomla:before {
+ content: "\f1aa";
+}
+.fa-language:before {
+ content: "\f1ab";
+}
+.fa-fax:before {
+ content: "\f1ac";
+}
+.fa-building:before {
+ content: "\f1ad";
+}
+.fa-child:before {
+ content: "\f1ae";
+}
+.fa-paw:before {
+ content: "\f1b0";
+}
+.fa-spoon:before {
+ content: "\f1b1";
+}
+.fa-cube:before {
+ content: "\f1b2";
+}
+.fa-cubes:before {
+ content: "\f1b3";
+}
+.fa-behance:before {
+ content: "\f1b4";
+}
+.fa-behance-square:before {
+ content: "\f1b5";
+}
+.fa-steam:before {
+ content: "\f1b6";
+}
+.fa-steam-square:before {
+ content: "\f1b7";
+}
+.fa-recycle:before {
+ content: "\f1b8";
+}
+.fa-automobile:before,
+.fa-car:before {
+ content: "\f1b9";
+}
+.fa-cab:before,
+.fa-taxi:before {
+ content: "\f1ba";
+}
+.fa-tree:before {
+ content: "\f1bb";
+}
+.fa-spotify:before {
+ content: "\f1bc";
+}
+.fa-deviantart:before {
+ content: "\f1bd";
+}
+.fa-soundcloud:before {
+ content: "\f1be";
+}
+.fa-database:before {
+ content: "\f1c0";
+}
+.fa-file-pdf-o:before {
+ content: "\f1c1";
+}
+.fa-file-word-o:before {
+ content: "\f1c2";
+}
+.fa-file-excel-o:before {
+ content: "\f1c3";
+}
+.fa-file-powerpoint-o:before {
+ content: "\f1c4";
+}
+.fa-file-photo-o:before,
+.fa-file-picture-o:before,
+.fa-file-image-o:before {
+ content: "\f1c5";
+}
+.fa-file-zip-o:before,
+.fa-file-archive-o:before {
+ content: "\f1c6";
+}
+.fa-file-sound-o:before,
+.fa-file-audio-o:before {
+ content: "\f1c7";
+}
+.fa-file-movie-o:before,
+.fa-file-video-o:before {
+ content: "\f1c8";
+}
+.fa-file-code-o:before {
+ content: "\f1c9";
+}
+.fa-vine:before {
+ content: "\f1ca";
+}
+.fa-codepen:before {
+ content: "\f1cb";
+}
+.fa-jsfiddle:before {
+ content: "\f1cc";
+}
+.fa-life-bouy:before,
+.fa-life-buoy:before,
+.fa-life-saver:before,
+.fa-support:before,
+.fa-life-ring:before {
+ content: "\f1cd";
+}
+.fa-circle-o-notch:before {
+ content: "\f1ce";
+}
+.fa-ra:before,
+.fa-resistance:before,
+.fa-rebel:before {
+ content: "\f1d0";
+}
+.fa-ge:before,
+.fa-empire:before {
+ content: "\f1d1";
+}
+.fa-git-square:before {
+ content: "\f1d2";
+}
+.fa-git:before {
+ content: "\f1d3";
+}
+.fa-y-combinator-square:before,
+.fa-yc-square:before,
+.fa-hacker-news:before {
+ content: "\f1d4";
+}
+.fa-tencent-weibo:before {
+ content: "\f1d5";
+}
+.fa-qq:before {
+ content: "\f1d6";
+}
+.fa-wechat:before,
+.fa-weixin:before {
+ content: "\f1d7";
+}
+.fa-send:before,
+.fa-paper-plane:before {
+ content: "\f1d8";
+}
+.fa-send-o:before,
+.fa-paper-plane-o:before {
+ content: "\f1d9";
+}
+.fa-history:before {
+ content: "\f1da";
+}
+.fa-circle-thin:before {
+ content: "\f1db";
+}
+.fa-header:before {
+ content: "\f1dc";
+}
+.fa-paragraph:before {
+ content: "\f1dd";
+}
+.fa-sliders:before {
+ content: "\f1de";
+}
+.fa-share-alt:before {
+ content: "\f1e0";
+}
+.fa-share-alt-square:before {
+ content: "\f1e1";
+}
+.fa-bomb:before {
+ content: "\f1e2";
+}
+.fa-soccer-ball-o:before,
+.fa-futbol-o:before {
+ content: "\f1e3";
+}
+.fa-tty:before {
+ content: "\f1e4";
+}
+.fa-binoculars:before {
+ content: "\f1e5";
+}
+.fa-plug:before {
+ content: "\f1e6";
+}
+.fa-slideshare:before {
+ content: "\f1e7";
+}
+.fa-twitch:before {
+ content: "\f1e8";
+}
+.fa-yelp:before {
+ content: "\f1e9";
+}
+.fa-newspaper-o:before {
+ content: "\f1ea";
+}
+.fa-wifi:before {
+ content: "\f1eb";
+}
+.fa-calculator:before {
+ content: "\f1ec";
+}
+.fa-paypal:before {
+ content: "\f1ed";
+}
+.fa-google-wallet:before {
+ content: "\f1ee";
+}
+.fa-cc-visa:before {
+ content: "\f1f0";
+}
+.fa-cc-mastercard:before {
+ content: "\f1f1";
+}
+.fa-cc-discover:before {
+ content: "\f1f2";
+}
+.fa-cc-amex:before {
+ content: "\f1f3";
+}
+.fa-cc-paypal:before {
+ content: "\f1f4";
+}
+.fa-cc-stripe:before {
+ content: "\f1f5";
+}
+.fa-bell-slash:before {
+ content: "\f1f6";
+}
+.fa-bell-slash-o:before {
+ content: "\f1f7";
+}
+.fa-trash:before {
+ content: "\f1f8";
+}
+.fa-copyright:before {
+ content: "\f1f9";
+}
+.fa-at:before {
+ content: "\f1fa";
+}
+.fa-eyedropper:before {
+ content: "\f1fb";
+}
+.fa-paint-brush:before {
+ content: "\f1fc";
+}
+.fa-birthday-cake:before {
+ content: "\f1fd";
+}
+.fa-area-chart:before {
+ content: "\f1fe";
+}
+.fa-pie-chart:before {
+ content: "\f200";
+}
+.fa-line-chart:before {
+ content: "\f201";
+}
+.fa-lastfm:before {
+ content: "\f202";
+}
+.fa-lastfm-square:before {
+ content: "\f203";
+}
+.fa-toggle-off:before {
+ content: "\f204";
+}
+.fa-toggle-on:before {
+ content: "\f205";
+}
+.fa-bicycle:before {
+ content: "\f206";
+}
+.fa-bus:before {
+ content: "\f207";
+}
+.fa-ioxhost:before {
+ content: "\f208";
+}
+.fa-angellist:before {
+ content: "\f209";
+}
+.fa-cc:before {
+ content: "\f20a";
+}
+.fa-shekel:before,
+.fa-sheqel:before,
+.fa-ils:before {
+ content: "\f20b";
+}
+.fa-meanpath:before {
+ content: "\f20c";
+}
+.fa-buysellads:before {
+ content: "\f20d";
+}
+.fa-connectdevelop:before {
+ content: "\f20e";
+}
+.fa-dashcube:before {
+ content: "\f210";
+}
+.fa-forumbee:before {
+ content: "\f211";
+}
+.fa-leanpub:before {
+ content: "\f212";
+}
+.fa-sellsy:before {
+ content: "\f213";
+}
+.fa-shirtsinbulk:before {
+ content: "\f214";
+}
+.fa-simplybuilt:before {
+ content: "\f215";
+}
+.fa-skyatlas:before {
+ content: "\f216";
+}
+.fa-cart-plus:before {
+ content: "\f217";
+}
+.fa-cart-arrow-down:before {
+ content: "\f218";
+}
+.fa-diamond:before {
+ content: "\f219";
+}
+.fa-ship:before {
+ content: "\f21a";
+}
+.fa-user-secret:before {
+ content: "\f21b";
+}
+.fa-motorcycle:before {
+ content: "\f21c";
+}
+.fa-street-view:before {
+ content: "\f21d";
+}
+.fa-heartbeat:before {
+ content: "\f21e";
+}
+.fa-venus:before {
+ content: "\f221";
+}
+.fa-mars:before {
+ content: "\f222";
+}
+.fa-mercury:before {
+ content: "\f223";
+}
+.fa-intersex:before,
+.fa-transgender:before {
+ content: "\f224";
+}
+.fa-transgender-alt:before {
+ content: "\f225";
+}
+.fa-venus-double:before {
+ content: "\f226";
+}
+.fa-mars-double:before {
+ content: "\f227";
+}
+.fa-venus-mars:before {
+ content: "\f228";
+}
+.fa-mars-stroke:before {
+ content: "\f229";
+}
+.fa-mars-stroke-v:before {
+ content: "\f22a";
+}
+.fa-mars-stroke-h:before {
+ content: "\f22b";
+}
+.fa-neuter:before {
+ content: "\f22c";
+}
+.fa-genderless:before {
+ content: "\f22d";
+}
+.fa-facebook-official:before {
+ content: "\f230";
+}
+.fa-pinterest-p:before {
+ content: "\f231";
+}
+.fa-whatsapp:before {
+ content: "\f232";
+}
+.fa-server:before {
+ content: "\f233";
+}
+.fa-user-plus:before {
+ content: "\f234";
+}
+.fa-user-times:before {
+ content: "\f235";
+}
+.fa-hotel:before,
+.fa-bed:before {
+ content: "\f236";
+}
+.fa-viacoin:before {
+ content: "\f237";
+}
+.fa-train:before {
+ content: "\f238";
+}
+.fa-subway:before {
+ content: "\f239";
+}
+.fa-medium:before {
+ content: "\f23a";
+}
+.fa-yc:before,
+.fa-y-combinator:before {
+ content: "\f23b";
+}
+.fa-optin-monster:before {
+ content: "\f23c";
+}
+.fa-opencart:before {
+ content: "\f23d";
+}
+.fa-expeditedssl:before {
+ content: "\f23e";
+}
+.fa-battery-4:before,
+.fa-battery:before,
+.fa-battery-full:before {
+ content: "\f240";
+}
+.fa-battery-3:before,
+.fa-battery-three-quarters:before {
+ content: "\f241";
+}
+.fa-battery-2:before,
+.fa-battery-half:before {
+ content: "\f242";
+}
+.fa-battery-1:before,
+.fa-battery-quarter:before {
+ content: "\f243";
+}
+.fa-battery-0:before,
+.fa-battery-empty:before {
+ content: "\f244";
+}
+.fa-mouse-pointer:before {
+ content: "\f245";
+}
+.fa-i-cursor:before {
+ content: "\f246";
+}
+.fa-object-group:before {
+ content: "\f247";
+}
+.fa-object-ungroup:before {
+ content: "\f248";
+}
+.fa-sticky-note:before {
+ content: "\f249";
+}
+.fa-sticky-note-o:before {
+ content: "\f24a";
+}
+.fa-cc-jcb:before {
+ content: "\f24b";
+}
+.fa-cc-diners-club:before {
+ content: "\f24c";
+}
+.fa-clone:before {
+ content: "\f24d";
+}
+.fa-balance-scale:before {
+ content: "\f24e";
+}
+.fa-hourglass-o:before {
+ content: "\f250";
+}
+.fa-hourglass-1:before,
+.fa-hourglass-start:before {
+ content: "\f251";
+}
+.fa-hourglass-2:before,
+.fa-hourglass-half:before {
+ content: "\f252";
+}
+.fa-hourglass-3:before,
+.fa-hourglass-end:before {
+ content: "\f253";
+}
+.fa-hourglass:before {
+ content: "\f254";
+}
+.fa-hand-grab-o:before,
+.fa-hand-rock-o:before {
+ content: "\f255";
+}
+.fa-hand-stop-o:before,
+.fa-hand-paper-o:before {
+ content: "\f256";
+}
+.fa-hand-scissors-o:before {
+ content: "\f257";
+}
+.fa-hand-lizard-o:before {
+ content: "\f258";
+}
+.fa-hand-spock-o:before {
+ content: "\f259";
+}
+.fa-hand-pointer-o:before {
+ content: "\f25a";
+}
+.fa-hand-peace-o:before {
+ content: "\f25b";
+}
+.fa-trademark:before {
+ content: "\f25c";
+}
+.fa-registered:before {
+ content: "\f25d";
+}
+.fa-creative-commons:before {
+ content: "\f25e";
+}
+.fa-gg:before {
+ content: "\f260";
+}
+.fa-gg-circle:before {
+ content: "\f261";
+}
+.fa-tripadvisor:before {
+ content: "\f262";
+}
+.fa-odnoklassniki:before {
+ content: "\f263";
+}
+.fa-odnoklassniki-square:before {
+ content: "\f264";
+}
+.fa-get-pocket:before {
+ content: "\f265";
+}
+.fa-wikipedia-w:before {
+ content: "\f266";
+}
+.fa-safari:before {
+ content: "\f267";
+}
+.fa-chrome:before {
+ content: "\f268";
+}
+.fa-firefox:before {
+ content: "\f269";
+}
+.fa-opera:before {
+ content: "\f26a";
+}
+.fa-internet-explorer:before {
+ content: "\f26b";
+}
+.fa-tv:before,
+.fa-television:before {
+ content: "\f26c";
+}
+.fa-contao:before {
+ content: "\f26d";
+}
+.fa-500px:before {
+ content: "\f26e";
+}
+.fa-amazon:before {
+ content: "\f270";
+}
+.fa-calendar-plus-o:before {
+ content: "\f271";
+}
+.fa-calendar-minus-o:before {
+ content: "\f272";
+}
+.fa-calendar-times-o:before {
+ content: "\f273";
+}
+.fa-calendar-check-o:before {
+ content: "\f274";
+}
+.fa-industry:before {
+ content: "\f275";
+}
+.fa-map-pin:before {
+ content: "\f276";
+}
+.fa-map-signs:before {
+ content: "\f277";
+}
+.fa-map-o:before {
+ content: "\f278";
+}
+.fa-map:before {
+ content: "\f279";
+}
+.fa-commenting:before {
+ content: "\f27a";
+}
+.fa-commenting-o:before {
+ content: "\f27b";
+}
+.fa-houzz:before {
+ content: "\f27c";
+}
+.fa-vimeo:before {
+ content: "\f27d";
+}
+.fa-black-tie:before {
+ content: "\f27e";
+}
+.fa-fonticons:before {
+ content: "\f280";
+}
+.fa-reddit-alien:before {
+ content: "\f281";
+}
+.fa-edge:before {
+ content: "\f282";
+}
+.fa-credit-card-alt:before {
+ content: "\f283";
+}
+.fa-codiepie:before {
+ content: "\f284";
+}
+.fa-modx:before {
+ content: "\f285";
+}
+.fa-fort-awesome:before {
+ content: "\f286";
+}
+.fa-usb:before {
+ content: "\f287";
+}
+.fa-product-hunt:before {
+ content: "\f288";
+}
+.fa-mixcloud:before {
+ content: "\f289";
+}
+.fa-scribd:before {
+ content: "\f28a";
+}
+.fa-pause-circle:before {
+ content: "\f28b";
+}
+.fa-pause-circle-o:before {
+ content: "\f28c";
+}
+.fa-stop-circle:before {
+ content: "\f28d";
+}
+.fa-stop-circle-o:before {
+ content: "\f28e";
+}
+.fa-shopping-bag:before {
+ content: "\f290";
+}
+.fa-shopping-basket:before {
+ content: "\f291";
+}
+.fa-hashtag:before {
+ content: "\f292";
+}
+.fa-bluetooth:before {
+ content: "\f293";
+}
+.fa-bluetooth-b:before {
+ content: "\f294";
+}
+.fa-percent:before {
+ content: "\f295";
+}
+.fa-gitlab:before {
+ content: "\f296";
+}
+.fa-wpbeginner:before {
+ content: "\f297";
+}
+.fa-wpforms:before {
+ content: "\f298";
+}
+.fa-envira:before {
+ content: "\f299";
+}
+.fa-universal-access:before {
+ content: "\f29a";
+}
+.fa-wheelchair-alt:before {
+ content: "\f29b";
+}
+.fa-question-circle-o:before {
+ content: "\f29c";
+}
+.fa-blind:before {
+ content: "\f29d";
+}
+.fa-audio-description:before {
+ content: "\f29e";
+}
+.fa-volume-control-phone:before {
+ content: "\f2a0";
+}
+.fa-braille:before {
+ content: "\f2a1";
+}
+.fa-assistive-listening-systems:before {
+ content: "\f2a2";
+}
+.fa-asl-interpreting:before,
+.fa-american-sign-language-interpreting:before {
+ content: "\f2a3";
+}
+.fa-deafness:before,
+.fa-hard-of-hearing:before,
+.fa-deaf:before {
+ content: "\f2a4";
+}
+.fa-glide:before {
+ content: "\f2a5";
+}
+.fa-glide-g:before {
+ content: "\f2a6";
+}
+.fa-signing:before,
+.fa-sign-language:before {
+ content: "\f2a7";
+}
+.fa-low-vision:before {
+ content: "\f2a8";
+}
+.fa-viadeo:before {
+ content: "\f2a9";
+}
+.fa-viadeo-square:before {
+ content: "\f2aa";
+}
+.fa-snapchat:before {
+ content: "\f2ab";
+}
+.fa-snapchat-ghost:before {
+ content: "\f2ac";
+}
+.fa-snapchat-square:before {
+ content: "\f2ad";
+}
+.fa-pied-piper:before {
+ content: "\f2ae";
+}
+.fa-first-order:before {
+ content: "\f2b0";
+}
+.fa-yoast:before {
+ content: "\f2b1";
+}
+.fa-themeisle:before {
+ content: "\f2b2";
+}
+.fa-google-plus-circle:before,
+.fa-google-plus-official:before {
+ content: "\f2b3";
+}
+.fa-fa:before,
+.fa-font-awesome:before {
+ content: "\f2b4";
+}
+.fa-handshake-o:before {
+ content: "\f2b5";
+}
+.fa-envelope-open:before {
+ content: "\f2b6";
+}
+.fa-envelope-open-o:before {
+ content: "\f2b7";
+}
+.fa-linode:before {
+ content: "\f2b8";
+}
+.fa-address-book:before {
+ content: "\f2b9";
+}
+.fa-address-book-o:before {
+ content: "\f2ba";
+}
+.fa-vcard:before,
+.fa-address-card:before {
+ content: "\f2bb";
+}
+.fa-vcard-o:before,
+.fa-address-card-o:before {
+ content: "\f2bc";
+}
+.fa-user-circle:before {
+ content: "\f2bd";
+}
+.fa-user-circle-o:before {
+ content: "\f2be";
+}
+.fa-user-o:before {
+ content: "\f2c0";
+}
+.fa-id-badge:before {
+ content: "\f2c1";
+}
+.fa-drivers-license:before,
+.fa-id-card:before {
+ content: "\f2c2";
+}
+.fa-drivers-license-o:before,
+.fa-id-card-o:before {
+ content: "\f2c3";
+}
+.fa-quora:before {
+ content: "\f2c4";
+}
+.fa-free-code-camp:before {
+ content: "\f2c5";
+}
+.fa-telegram:before {
+ content: "\f2c6";
+}
+.fa-thermometer-4:before,
+.fa-thermometer:before,
+.fa-thermometer-full:before {
+ content: "\f2c7";
+}
+.fa-thermometer-3:before,
+.fa-thermometer-three-quarters:before {
+ content: "\f2c8";
+}
+.fa-thermometer-2:before,
+.fa-thermometer-half:before {
+ content: "\f2c9";
+}
+.fa-thermometer-1:before,
+.fa-thermometer-quarter:before {
+ content: "\f2ca";
+}
+.fa-thermometer-0:before,
+.fa-thermometer-empty:before {
+ content: "\f2cb";
+}
+.fa-shower:before {
+ content: "\f2cc";
+}
+.fa-bathtub:before,
+.fa-s15:before,
+.fa-bath:before {
+ content: "\f2cd";
+}
+.fa-podcast:before {
+ content: "\f2ce";
+}
+.fa-window-maximize:before {
+ content: "\f2d0";
+}
+.fa-window-minimize:before {
+ content: "\f2d1";
+}
+.fa-window-restore:before {
+ content: "\f2d2";
+}
+.fa-times-rectangle:before,
+.fa-window-close:before {
+ content: "\f2d3";
+}
+.fa-times-rectangle-o:before,
+.fa-window-close-o:before {
+ content: "\f2d4";
+}
+.fa-bandcamp:before {
+ content: "\f2d5";
+}
+.fa-grav:before {
+ content: "\f2d6";
+}
+.fa-etsy:before {
+ content: "\f2d7";
+}
+.fa-imdb:before {
+ content: "\f2d8";
+}
+.fa-ravelry:before {
+ content: "\f2d9";
+}
+.fa-eercast:before {
+ content: "\f2da";
+}
+.fa-microchip:before {
+ content: "\f2db";
+}
+.fa-snowflake-o:before {
+ content: "\f2dc";
+}
+.fa-superpowers:before {
+ content: "\f2dd";
+}
+.fa-wpexplorer:before {
+ content: "\f2de";
+}
+.fa-meetup:before {
+ content: "\f2e0";
+}
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ border: 0;
+}
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+ position: static;
+ width: auto;
+ height: auto;
+ margin: 0;
+ overflow: visible;
+ clip: auto;
+}
diff --git a/src/assets/scss/css/font-awesome.min.css b/src/assets/scss/css/font-awesome.min.css
new file mode 100644
index 0000000..540440c
--- /dev/null
+++ b/src/assets/scss/css/font-awesome.min.css
@@ -0,0 +1,4 @@
+/*!
+ * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
diff --git a/src/assets/scss/font-awesome.min.css b/src/assets/scss/font-awesome.min.css
new file mode 100644
index 0000000..540440c
--- /dev/null
+++ b/src/assets/scss/font-awesome.min.css
@@ -0,0 +1,4 @@
+/*!
+ * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
diff --git a/src/assets/scss/fonts/FontAwesome.otf b/src/assets/scss/fonts/FontAwesome.otf
new file mode 100644
index 0000000..401ec0f
Binary files /dev/null and b/src/assets/scss/fonts/FontAwesome.otf differ
diff --git a/src/assets/scss/fonts/fontawesome-webfont.eot b/src/assets/scss/fonts/fontawesome-webfont.eot
new file mode 100644
index 0000000..e9f60ca
Binary files /dev/null and b/src/assets/scss/fonts/fontawesome-webfont.eot differ
diff --git a/src/assets/scss/fonts/fontawesome-webfont.svg b/src/assets/scss/fonts/fontawesome-webfont.svg
new file mode 100644
index 0000000..855c845
--- /dev/null
+++ b/src/assets/scss/fonts/fontawesome-webfont.svg
@@ -0,0 +1,2671 @@
+
+
+
diff --git a/src/assets/scss/fonts/fontawesome-webfont.ttf b/src/assets/scss/fonts/fontawesome-webfont.ttf
new file mode 100644
index 0000000..35acda2
Binary files /dev/null and b/src/assets/scss/fonts/fontawesome-webfont.ttf differ
diff --git a/src/assets/scss/fonts/fontawesome-webfont.woff b/src/assets/scss/fonts/fontawesome-webfont.woff
new file mode 100644
index 0000000..400014a
Binary files /dev/null and b/src/assets/scss/fonts/fontawesome-webfont.woff differ
diff --git a/src/assets/scss/fonts/fontawesome-webfont.woff2 b/src/assets/scss/fonts/fontawesome-webfont.woff2
new file mode 100644
index 0000000..4d13fc6
Binary files /dev/null and b/src/assets/scss/fonts/fontawesome-webfont.woff2 differ
diff --git a/src/assets/scss/media.scss b/src/assets/scss/media.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/assets/scss/public.scss b/src/assets/scss/public.scss
new file mode 100644
index 0000000..0ebc164
--- /dev/null
+++ b/src/assets/scss/public.scss
@@ -0,0 +1,127 @@
+html,body {
+ margin: 0;
+ padding: 0;
+}
+
+.container {
+ width: 1200px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin: 0 auto;
+}
+
+.x-center {
+ display: flex;
+ justify-content: center;
+}
+
+.y-center {
+ display: flex;
+ align-items: center;
+}
+
+//垂直方向居中
+.yx-center {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex-direction: column;
+}
+
+.xy-center {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.y-center__between {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+}
+
+
+.bottom-line {
+ width: 100%;
+ height: 3px;
+ background: #f2f2f2;
+}
+
+@font-face {
+ font-family: 'DFPHaiBaoW12-GB';
+ src: url("./../../../public/font/DFPHaiBaoW12-GB.ttf");
+}
+
+@font-face {
+ font-family: 'FZMiaoWuS-GB';
+ src: url("./../../../public/font/FZMiaoWuS-GB.ttf");
+}
+
+@keyframes fade {
+ from {
+ opacity: 1.0;
+ }
+ 50% {
+ opacity: .6;
+ }
+ to {
+ opacity: 1.0;
+ }
+}
+
+@-webkit-keyframes fade {
+ from {
+ opacity: 1.0;
+ }
+ 50% {
+ opacity: .6;
+ }
+ to {
+ opacity: 1.0;
+ }
+}
+
+// 选择180度
+@keyframes rotate-opposite {
+ from {
+ transform: rotate(0deg);
+ }
+
+ to {
+ transform: rotate(180deg);
+ }
+}
+
+@-webkit-keyframes rotate-opposite {
+ from {
+ transform: rotate(0deg);
+ }
+
+ to {
+ transform: rotate(180deg);
+ }
+}
+
+@font-face {
+ font-family: 'iconfont'; /* project id 1541787 */
+ src: url('//at.alicdn.com/t/font_1541787_5m1rtt5vyqq.eot');
+ src: url('//at.alicdn.com/t/font_1541787_5m1rtt5vyqq.eot?#iefix') format('embedded-opentype'),
+ url('//at.alicdn.com/t/font_1541787_5m1rtt5vyqq.woff2') format('woff2'),
+ url('//at.alicdn.com/t/font_1541787_5m1rtt5vyqq.woff') format('woff'),
+ url('//at.alicdn.com/t/font_1541787_5m1rtt5vyqq.ttf') format('truetype'),
+ url('//at.alicdn.com/t/font_1541787_5m1rtt5vyqq.svg#iconfont') format('svg');
+}
+
+.paying-tips {
+ background-color: #f0f9eb;
+ border-color: #e1f3d8;
+ color: #67C23A !important;
+
+ p {
+ margin-left: 15px;
+ }
+}
+
+
+
diff --git a/src/components/pages/cart/c-cart-total.vue b/src/components/pages/cart/c-cart-total.vue
new file mode 100644
index 0000000..6ec4451
--- /dev/null
+++ b/src/components/pages/cart/c-cart-total.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
普通商品1件
+
+

+

+
+
+ 手动激活
+
+
+
+
+
+
+
diff --git a/src/components/pages/cart/c-discount.vue b/src/components/pages/cart/c-discount.vue
new file mode 100644
index 0000000..ff78e96
--- /dev/null
+++ b/src/components/pages/cart/c-discount.vue
@@ -0,0 +1,143 @@
+
+
+
+
+
+

+
已领取{{ownDiscount}}张优惠券,有新优惠券可以领取
+
+
+
+

+
+
+ 30元优惠券 满199减30
+ 2019.08.09-2019.09.30
+
+
+
领取成功
+
+
+ 优惠券
+
+
+
+
+
+
+
diff --git a/src/components/pages/cart/c-good-list-item.vue b/src/components/pages/cart/c-good-list-item.vue
new file mode 100644
index 0000000..5e365c8
--- /dev/null
+++ b/src/components/pages/cart/c-good-list-item.vue
@@ -0,0 +1,515 @@
+
+
+
+
+
+
+
+
+

+
2019-11-10
+
订单号:546942055123390795
+
+

+
+
+
+
+
+
+
+
+
+
+ {{item.goodsName}}
+
+
+
+
+
+
+
+
+
+ {{item.goodsNum}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
普通商品 {{checkedGoods.length}} 件
+
+
+
+
+
全选
+
+
+
+
已选商品 {{checkedGoods.length}} 件
+

+
+
+
+ 合计:
+
+
+
结算
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/pages/cart/c-good-list.vue b/src/components/pages/cart/c-good-list.vue
new file mode 100644
index 0000000..83c7e03
--- /dev/null
+++ b/src/components/pages/cart/c-good-list.vue
@@ -0,0 +1,102 @@
+
+
+
+
+
+

+
+
+
+
+
+ 宠物信息
+
+
+ 单价
+
+
+ 数量
+
+
+ 金额
+
+
+ 编辑
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/pages/detail/c-barrage.vue b/src/components/pages/detail/c-barrage.vue
new file mode 100644
index 0000000..934c2f3
--- /dev/null
+++ b/src/components/pages/detail/c-barrage.vue
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/pages/detail/c-comment-container.vue b/src/components/pages/detail/c-comment-container.vue
new file mode 100644
index 0000000..7a9878f
--- /dev/null
+++ b/src/components/pages/detail/c-comment-container.vue
@@ -0,0 +1,284 @@
+
+
+
+
+
+
+
+
diff --git a/src/components/pages/detail/c-comment-item.vue b/src/components/pages/detail/c-comment-item.vue
new file mode 100644
index 0000000..caaafc2
--- /dev/null
+++ b/src/components/pages/detail/c-comment-item.vue
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
diff --git a/src/components/pages/detail/c-comment-modal.vue b/src/components/pages/detail/c-comment-modal.vue
new file mode 100644
index 0000000..2cb55a9
--- /dev/null
+++ b/src/components/pages/detail/c-comment-modal.vue
@@ -0,0 +1,214 @@
+
+
+
+
+
+
+
diff --git a/src/components/pages/detail/c-image-picker.vue b/src/components/pages/detail/c-image-picker.vue
new file mode 100644
index 0000000..73b1c0c
--- /dev/null
+++ b/src/components/pages/detail/c-image-picker.vue
@@ -0,0 +1,60 @@
+
+
+
+
![]()
+
+
+
![]()
+
+
+
+
+
+
+
diff --git a/src/components/pages/detail/c-input-tag.vue b/src/components/pages/detail/c-input-tag.vue
new file mode 100644
index 0000000..8b23065
--- /dev/null
+++ b/src/components/pages/detail/c-input-tag.vue
@@ -0,0 +1,164 @@
+
+
+
+
+
+
+
diff --git a/src/components/pages/detail/c-like-pro.vue b/src/components/pages/detail/c-like-pro.vue
new file mode 100644
index 0000000..4e31025
--- /dev/null
+++ b/src/components/pages/detail/c-like-pro.vue
@@ -0,0 +1,187 @@
+
+
+
+
+

+
{{this.tempLikeNum}}
+
+
+
+

+
{{this.tempUnLikeNum}}
+
+
+
+
+
+
+
diff --git a/src/components/pages/detail/c-progress.vue b/src/components/pages/detail/c-progress.vue
new file mode 100644
index 0000000..2eb49ff
--- /dev/null
+++ b/src/components/pages/detail/c-progress.vue
@@ -0,0 +1,197 @@
+
+
+
+
+
+
+
diff --git a/src/components/pages/detail/c-see-more.vue b/src/components/pages/detail/c-see-more.vue
new file mode 100644
index 0000000..31f4f9e
--- /dev/null
+++ b/src/components/pages/detail/c-see-more.vue
@@ -0,0 +1,166 @@
+
+
+
+ 看了又看
+
+
+
+
没有更多数据了
+
![]()
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/pages/detail/c-star.vue b/src/components/pages/detail/c-star.vue
new file mode 100644
index 0000000..f57747b
--- /dev/null
+++ b/src/components/pages/detail/c-star.vue
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
diff --git a/src/components/pages/detail/c-tag.vue b/src/components/pages/detail/c-tag.vue
new file mode 100644
index 0000000..aba6859
--- /dev/null
+++ b/src/components/pages/detail/c-tag.vue
@@ -0,0 +1,141 @@
+
+
+ {{`${detail.brief}(${detail.likeNum})`}}
+
+
+
+
+
+
diff --git a/src/components/pages/home/c-good-item.vue b/src/components/pages/home/c-good-item.vue
new file mode 100644
index 0000000..aa6bb5b
--- /dev/null
+++ b/src/components/pages/home/c-good-item.vue
@@ -0,0 +1,225 @@
+
+
+
+
+
![]()
+
+
+
+ {{goodsInfo.goodsName}}
+ 包邮
+
+
+
+
+
+
+
+
+

+
会员价
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/pages/home/c-paging.vue b/src/components/pages/home/c-paging.vue
new file mode 100644
index 0000000..572045a
--- /dev/null
+++ b/src/components/pages/home/c-paging.vue
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/pages/home/c-price-range.vue b/src/components/pages/home/c-price-range.vue
new file mode 100644
index 0000000..cfa68b0
--- /dev/null
+++ b/src/components/pages/home/c-price-range.vue
@@ -0,0 +1,128 @@
+
+
+ 价格范围
+
+ {{item.label}}
+
+
+
+
+
+
+
diff --git a/src/components/pages/home/c-sort-btn.vue b/src/components/pages/home/c-sort-btn.vue
new file mode 100644
index 0000000..840b6bf
--- /dev/null
+++ b/src/components/pages/home/c-sort-btn.vue
@@ -0,0 +1,45 @@
+
+
+ 排序
+
+
+
+
+
+
+
diff --git a/src/components/pages/my-tab-container/c-address-container.vue b/src/components/pages/my-tab-container/c-address-container.vue
new file mode 100644
index 0000000..9767548
--- /dev/null
+++ b/src/components/pages/my-tab-container/c-address-container.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/pages/my/c-address-popover.vue b/src/components/pages/my/c-address-popover.vue
new file mode 100644
index 0000000..bab1881
--- /dev/null
+++ b/src/components/pages/my/c-address-popover.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
{{address.name || '杨绍昕'}}
+
{{address.completedAddress|| '广东省茂名市电白区麻岗镇牛林村'}}
+
{{address.phone || 15217808825}}
+
+ 物流信息
+
+
+
+
+
+
+
diff --git a/src/components/pages/my/c-edit-address.vue b/src/components/pages/my/c-edit-address.vue
new file mode 100644
index 0000000..c310c80
--- /dev/null
+++ b/src/components/pages/my/c-edit-address.vue
@@ -0,0 +1,255 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/pages/my/c-edit-info.vue b/src/components/pages/my/c-edit-info.vue
new file mode 100644
index 0000000..338f503
--- /dev/null
+++ b/src/components/pages/my/c-edit-info.vue
@@ -0,0 +1,287 @@
+
+
+
+
+
+ 编辑昵称:
+
+
+
+
+
+
头像:
+
+
+
+
+
+
头像预览
+
+
![]()
+
![]()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/pages/my/c-order-container.vue b/src/components/pages/my/c-order-container.vue
new file mode 100644
index 0000000..30a217d
--- /dev/null
+++ b/src/components/pages/my/c-order-container.vue
@@ -0,0 +1,124 @@
+
+
+
+ 宝贝
+ 单价
+ 数量
+ 实付款
+ 订单状态
+
+
+
+

+
暂无订单数据,赶快去下单吧~
+
+
+

+
+
+
+
+
+
+
diff --git a/src/components/pages/my/c-order-item.vue b/src/components/pages/my/c-order-item.vue
new file mode 100644
index 0000000..4f0d002
--- /dev/null
+++ b/src/components/pages/my/c-order-item.vue
@@ -0,0 +1,291 @@
+
+
+
+
+
+
+
+
+
+
+
+
![]()
+
+
+ {{item.goodsName}}
+ {{item.intro || '锐舞iPhone11钢化膜X苹果11手机iPhoneX全屏XS覆盖XM'}}
+
+
+
+
+
+
+
+
+
+
+ {{item.purchaseNum}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/pages/my/c-statistics.vue b/src/components/pages/my/c-statistics.vue
new file mode 100644
index 0000000..a844fbe
--- /dev/null
+++ b/src/components/pages/my/c-statistics.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
diff --git a/src/components/pages/my/c-tab.vue b/src/components/pages/my/c-tab.vue
new file mode 100644
index 0000000..c91ed3c
--- /dev/null
+++ b/src/components/pages/my/c-tab.vue
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+
+
+
+ {{tabList[2]}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/pages/my/c-upload.vue b/src/components/pages/my/c-upload.vue
new file mode 100644
index 0000000..086c5c0
--- /dev/null
+++ b/src/components/pages/my/c-upload.vue
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/pages/my/c-user-info.vue b/src/components/pages/my/c-user-info.vue
new file mode 100644
index 0000000..d82ca28
--- /dev/null
+++ b/src/components/pages/my/c-user-info.vue
@@ -0,0 +1,128 @@
+
+
+
+

+
![]()
+
{{getTimeStr()}}
+
{{getUserInfo.nickName | formatString}}
+
+
+ {{item}}
+
+
+
+
+
+
+
+
+
diff --git a/src/components/pages/order/c-new-address.vue b/src/components/pages/order/c-new-address.vue
new file mode 100644
index 0000000..67277ca
--- /dev/null
+++ b/src/components/pages/order/c-new-address.vue
@@ -0,0 +1,39 @@
+
+
+ 添加新地址
+
+
+
+
+
+
+
diff --git a/src/components/pages/order/c-order-success.vue b/src/components/pages/order/c-order-success.vue
new file mode 100644
index 0000000..8028fb9
--- /dev/null
+++ b/src/components/pages/order/c-order-success.vue
@@ -0,0 +1,76 @@
+
+
+

+
恭喜您!
+
{{isPayed ? '您已成功支付' : '您已成功下单,请支付'}}
+
+
+ 订单号:
+ {{orderId}}
+
+
+ 待支付:
+
+
+
+
+
+
+
+
+
diff --git a/src/components/pages/order/c-timeline.vue b/src/components/pages/order/c-timeline.vue
new file mode 100644
index 0000000..7cec938
--- /dev/null
+++ b/src/components/pages/order/c-timeline.vue
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
diff --git a/src/components/public/c-address.vue b/src/components/public/c-address.vue
new file mode 100644
index 0000000..a15e617
--- /dev/null
+++ b/src/components/public/c-address.vue
@@ -0,0 +1,141 @@
+
+
+
+
+

+
{{address.name || ''}}
+
+
+

+

+
+
+
+
+

+
{{address.completedAddress | formatString(14)}}
+
+
+

+
{{address.phone || ''}}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/public/c-banner.vue b/src/components/public/c-banner.vue
new file mode 100644
index 0000000..9a8befa
--- /dev/null
+++ b/src/components/public/c-banner.vue
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/public/c-bread.vue b/src/components/public/c-bread.vue
new file mode 100644
index 0000000..f00770b
--- /dev/null
+++ b/src/components/public/c-bread.vue
@@ -0,0 +1,75 @@
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
diff --git a/src/components/public/c-cart.vue b/src/components/public/c-cart.vue
new file mode 100644
index 0000000..ec4b303
--- /dev/null
+++ b/src/components/public/c-cart.vue
@@ -0,0 +1,55 @@
+
+
+

+
{{getCartLength}}
+
+
+
+
+
+
diff --git a/src/components/public/c-foot.vue b/src/components/public/c-foot.vue
new file mode 100644
index 0000000..85654a5
--- /dev/null
+++ b/src/components/public/c-foot.vue
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+
diff --git a/src/components/public/c-head.vue b/src/components/public/c-head.vue
new file mode 100644
index 0000000..40bc20c
--- /dev/null
+++ b/src/components/public/c-head.vue
@@ -0,0 +1,142 @@
+
+
+
+
+

+
+ CXM
+ cxmmao.com
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/public/c-header-image.vue b/src/components/public/c-header-image.vue
new file mode 100644
index 0000000..84d65c6
--- /dev/null
+++ b/src/components/public/c-header-image.vue
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
diff --git a/src/components/public/c-input-number.vue b/src/components/public/c-input-number.vue
new file mode 100644
index 0000000..27033a1
--- /dev/null
+++ b/src/components/public/c-input-number.vue
@@ -0,0 +1,108 @@
+
+
+
+ {{getNum}}
+
+
+
+
+
+
+
diff --git a/src/components/public/c-like.vue b/src/components/public/c-like.vue
new file mode 100644
index 0000000..32bff65
--- /dev/null
+++ b/src/components/public/c-like.vue
@@ -0,0 +1,53 @@
+
+
+
![]()
+
{{likeNum | formatLikeNum}}
+
+
+
+
+
+
+
+
diff --git a/src/components/public/c-login.vue b/src/components/public/c-login.vue
new file mode 100644
index 0000000..fe452b1
--- /dev/null
+++ b/src/components/public/c-login.vue
@@ -0,0 +1,331 @@
+
+
+
+
+
+
+
+
+ 邮箱格式不正确
+
+
+
+
+
+
+ 账号密码格式不正确
+
+
+
+
+
+
+ 两次密码不一致
+
+
+
+ 获取验证码
+ {{time}}秒再次获取
+
+
+ 验证码格式不正确
+
+
+ {{isLogin ? '登录' : isResetPassword ? '重置密码' : '注册'}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/public/c-modal.vue b/src/components/public/c-modal.vue
new file mode 100644
index 0000000..001e5c2
--- /dev/null
+++ b/src/components/public/c-modal.vue
@@ -0,0 +1,262 @@
+
+
+
+
+
+ {{title}}
+
+
{{context}}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/public/c-money.vue b/src/components/public/c-money.vue
new file mode 100644
index 0000000..5b82432
--- /dev/null
+++ b/src/components/public/c-money.vue
@@ -0,0 +1,94 @@
+
+
+ ¥
+ {{money | formatMoney}}
+
+
+
+
+
+
diff --git a/src/components/public/c-pay-modal.vue b/src/components/public/c-pay-modal.vue
new file mode 100644
index 0000000..e0b416a
--- /dev/null
+++ b/src/components/public/c-pay-modal.vue
@@ -0,0 +1,384 @@
+
+
+
+
+
+
+
diff --git a/src/components/public/c-recharge-item.vue b/src/components/public/c-recharge-item.vue
new file mode 100644
index 0000000..e24be9b
--- /dev/null
+++ b/src/components/public/c-recharge-item.vue
@@ -0,0 +1,41 @@
+
+
+ 100
+ 元
+
+
+
+
+
+
diff --git a/src/components/public/c-recharge-modal.vue b/src/components/public/c-recharge-modal.vue
new file mode 100644
index 0000000..424c596
--- /dev/null
+++ b/src/components/public/c-recharge-modal.vue
@@ -0,0 +1,255 @@
+
+
+
+
+
+
+
diff --git a/src/js/console.js b/src/js/console.js
new file mode 100644
index 0000000..4ccebe8
--- /dev/null
+++ b/src/js/console.js
@@ -0,0 +1,55 @@
+/**
+ * 重写console.log方法
+ * 通过设置isLog来控制是否输出日志
+ * 对于object,array引用类型已进行深拷贝,确保打印出的值是执行时的值
+ * 重写后在整个程序的生命周期都有效,在程序的所有地方都可以调用
+ * 可在程序的第一行就调用,确保后续的console.log改写后的
+ * 如:vue在main.js中引入,小程序可在app.js第一行引入
+ * dev: isLog = true
+ * prod: isLog = false
+ * console.trace()为打印程序调用的堆栈,因为改写后打印的值是在改写后的堆栈中
+ * 如果觉得太长可设置isLogStack = false
+ */
+
+const getStackTrace = function () {
+ var obj = {}
+ Error.captureStackTrace(obj, getStackTrace)
+ let stackArr = obj.stack.split('\n')
+ let str = stackArr[2]
+ // 数组分割后,第二个堆栈才是console,log调用的堆栈
+ // str =
+ // try {
+ // // 判断是否是浏览器环境
+ // if (window) {
+ // str = stackArr[2].substring(stackArr[2].indexOf('http://'), stackArr[2].length)
+ // }
+ // }catch (e) {
+ // // 非浏览器环境,即为node.js环境
+ // str = stackArr[2].substring(stackArr[2].indexOf('('), stackArr[2].indexOf(')'))
+ // }
+ // str = str.replace('(','').replace(')','')
+ return 'Stack: ' + str
+}
+
+console.log = ((logFunc, isLog = true, isLogStack = true) => {
+ return function () {
+ if (!isLog) {
+ return
+ }
+ try {
+ let arr = []
+ arr.push(...arguments)
+ arr.forEach((item, index) => {
+ // 引用类型深拷贝
+ if (Object.prototype.toString.call(item) === '[object Object]' ||
+ Object.prototype.toString.call(item) === '[object Array]') {
+ arr[index] = JSON.parse(JSON.stringify(item))
+ }
+ })
+ logFunc.call(console, ...arr)
+ logFunc.call(console, getStackTrace())
+ } catch (e) {
+ console.error(`a log error: ${e}`)
+ }
+ }
+})(console.log)
diff --git a/src/js/const-table.js b/src/js/const-table.js
new file mode 100644
index 0000000..36e5feb
--- /dev/null
+++ b/src/js/const-table.js
@@ -0,0 +1,56 @@
+export const tipType = Object.freeze({
+ INFO: 'info',
+ SUCCESS: 'success',
+ WARNING: 'warning',
+ ERROR: 'error'
+})
+
+// export const PRICE_RANGE = Object.freeze({
+// ALL: 'ALL',
+// CHEEPER: 'CHEEPER',
+// CHEEP: 'CHEEP',
+// EXPENSIVE: 'EXPENSIVE',
+// EXPENSIVER: 'EXPENSIVER'
+// })
+
+const MAX_PRICE = 1000000000
+export const PRICE_RANGE = Object.freeze({
+ ALL: {
+ start: 0,
+ limit: MAX_PRICE,
+ label: 'ALL',
+ value: 'ALL'
+ },
+ CHEEPER: {
+ start: 0,
+ limit: 100,
+ label: '0.00 - 100.00',
+ value: 'CHEEPER'
+ },
+ CHEEP: {
+ start: 100,
+ limit: 500,
+ label: '100.00 - 500.00',
+ value: 'CHEEP'
+ },
+ EXPENSIVE: {
+ start: 500,
+ limit: 1000,
+ label: '500.00 - 1000.00',
+ value: 'EXPENSIVE'
+ },
+ EXPENSIVER: {
+ start: 1000,
+ limit: MAX_PRICE,
+ label: '1000+',
+ value: 'EXPENSIVER'
+ }
+})
+
+export const SORT_TYPE = Object.freeze({
+ ASC: 'ASC',
+ DESC: 'DESC'
+})
+
+export const PAGE_SIZE = 6
+
diff --git a/src/js/data-store.js b/src/js/data-store.js
new file mode 100644
index 0000000..ad502d6
--- /dev/null
+++ b/src/js/data-store.js
@@ -0,0 +1,57 @@
+class DataStore {
+ static getInstance() {
+ if (!DataStore.instance) {
+ DataStore.instance = new DataStore()
+ }
+ return DataStore.instance
+ }
+
+ constructor() {
+ this.token = this._getTokenFromLocal()
+ this.userInfo = this._getUserInfoFromLocal()
+ }
+
+ // 保存token
+ saveToken(token) {
+ localStorage.setItem('token', token)
+ this.token = token
+ }
+
+ saveUserInfo(userInfo) {
+ localStorage.setItem('userInfo', JSON.stringify(userInfo))
+ this.userInfo = userInfo
+ }
+
+ // 删除token
+ deleteToken() {
+ localStorage.removeItem('token')
+ localStorage.removeItem('userInfo')
+ this.token = ''
+ this.userInfo = {}
+ }
+
+ // 保存token
+ getToken() {
+ return this.token
+ }
+
+ // 获取用户信息
+ getUserInfo() {
+ console.log(this.userInfo)
+ return this.userInfo
+ }
+
+ // 从缓存中取token
+ _getTokenFromLocal() {
+ return localStorage.getItem('token')
+ }
+
+ // 缓存中取用户信息
+ _getUserInfoFromLocal() {
+ const temp = localStorage.getItem('userInfo')
+ return temp ? JSON.parse(temp) : null
+ }
+}
+
+const dataStore = DataStore.getInstance()
+export default dataStore
diff --git a/src/js/filters.js b/src/js/filters.js
new file mode 100644
index 0000000..e23392b
--- /dev/null
+++ b/src/js/filters.js
@@ -0,0 +1,74 @@
+import { HTTP_CONFIG } from './http/config'
+/**
+ * 过滤器
+ */
+
+// 格式化钱
+const formatMoney = function(money) {
+ money = String(money)
+ money = money.split('')
+ money = money.reverse()
+ let pointIndex = money.indexOf('.')
+ if (pointIndex === -1) {
+ money.unshift('0', '0', '.')
+ }
+ if (pointIndex === 1) {
+ money.unshift('0')
+ }
+ pointIndex = money.indexOf('.')
+ const length = money.length - pointIndex
+ let current = pointIndex
+ for (let i = 1; i < length / 3; i++) {
+ current = i * 3 + i + pointIndex
+ money.splice(current, 0, ',')
+ }
+ if (money[money.length - 1] === ',') {
+ --money.length
+ }
+ return money.reverse().join('')
+}
+
+// 格式化点赞数量
+const formatLikeNum = function(likeNum) {
+ if (likeNum < 1000) {
+ return likeNum
+ }
+ return (likeNum / 1000) + 'k'
+}
+
+// 格式化超过长度的字符串
+const formatString = function(str, maxLength = 20) {
+ if (str.length <= maxLength) {
+ return str
+ }
+ // 从中间截取
+ const midLength = Math.floor(maxLength / 2)
+ // maxLength + 2 为 '**' 的长度
+ return str.substring(0, midLength) + '**' + str.substring(str.length - (midLength - 2))
+}
+
+// 格式化日期
+const formatDate = (dateStr) => {
+ const date = new Date(dateStr)
+ return `${date.getFullYear()}-${String(date.getMonth() + 1).addZero()}-${String(date.getDate()).addZero()} ${String(date.getHours()).addZero()}:${String(date.getMinutes()).addZero()}:${String(date.getSeconds()).addZero()}`
+
+}
+
+// 格式化昵称,保护用户的隐私
+const formatNickName = (nickName) => {
+ return `${nickName.substring(0,1)}***${nickName.substring(nickName.length - 1)}`
+}
+
+// 照片路径加上前缀
+const addImagePrefix = (imgUrl) => {
+ return HTTP_CONFIG.IMAGE_BASE_URL + imgUrl
+}
+
+module.exports = {
+ formatMoney,
+ formatLikeNum,
+ formatString,
+ formatDate,
+ formatNickName,
+ addImagePrefix
+}
diff --git a/src/js/http/api.js b/src/js/http/api.js
new file mode 100644
index 0000000..6ac813a
--- /dev/null
+++ b/src/js/http/api.js
@@ -0,0 +1,159 @@
+import {get, post, put, del} from './http'
+
+const login = params => post('/user/login', params, {
+ showTip: true,
+ tipMsg: '登录成功'
+})
+
+const register = params => post('/user/register', params, {
+ showTip: true,
+ tipMsg: '注册成功,请重新登录'
+})
+
+const getVerifyCode = params => post('/public/get-verify-code', params)
+
+const resetPassword = params => post('/user/reset-password', params, {
+ showTip: true,
+ tipMsg: '修改密码成功'
+})
+
+const checkFieldCanUse = params => post('/user/check-field-can-use', params)
+
+const updateUserInfo = params => post('/user/update-user-info', params, {
+ showTip: true,
+ tipMsg: '更新资料成功'
+})
+
+const addAddress = params => post('/user/address', params, {
+ showTip: true,
+ tipMsg: '新增地址成功'
+})
+
+const getAddress = () => get('/user/address')
+
+const updateAddress = params => put('/user/address', params, {
+ showTip: true,
+ tipMsg: '修改地址成功'
+})
+
+const deleteAddress = params => del('/user/address', params, {
+ showTip: true,
+ tipMsg: '删除地址成功'
+})
+
+const getGoodsList = params => get('/goods/goods-list', params)
+
+const getGoodsDetail = params => get('/goods/goods-detail', params)
+
+const getMoreGoods = params => get('/goods/get-more-goods-list', params)
+
+const createOrder = params => post('/order/create-order', params)
+
+const payForOrder = params => post('/order/pay-for-order', params)
+
+const getGoodsInfoList = params => get('/goods/goods-info-list', params)
+
+const getBalance = () => get('/account/balance')
+
+const getOrderList = params => get('order/order-list', params)
+
+const getCartList = params => get('/cart/cart', params)
+
+const addToCart = params => post('/cart/cart', params)
+
+const updateCart = params => put('/cart/cart', params)
+
+const deleteFromCart = params => del('/cart/cart', params, {
+ showTip: true,
+ tipMsg: '删除购物车成功'
+})
+
+// 批量获取商品信息
+const batchGetGoodsInfo = params => get('/goods/goods-info-list', params)
+
+const getGoodsLikeList = () => get('/user/goods-like-list')
+
+// 给商店点赞
+const likeForGoods = params => post('/user/goods-like', params)
+
+// 短评
+const getBriefList = params => get('/comment/brief-list', params)
+
+const writeBrief = params => post('/comment/write-brief', params)
+
+const likeForBrief = params => post('/comment/like-for-brief', params)
+
+// 评论
+const getCommentList = params => get('/comment/comment-list', params)
+
+const writeComment = params => post('/comment/write-comment', params, {
+ showTip: true,
+ tipMsg: '评论成功'
+})
+
+const likeForComment = params => post('/comment/like-for-comment', params)
+
+const getCommentLikeList = () => get('/user/comment-like-list')
+
+const deleteOrder = params => del('/order/order', params,{
+ showTip: true,
+ tipMsg: '删除订单成功'
+})
+
+const getRechargeList = () => get('/account/recharge-list')
+
+const recharge = params => put('/account/recharge', params, {
+ showTip: true,
+ tipMsg: '充值成功'
+})
+
+const checkHasPaykey = () => get('/account/check-has-paykey')
+
+const updatePaykey = params => put('/account/paykey', params, {
+ showTip: true,
+ tipMsg: '设置支付密码成功'
+})
+
+const getCartLength = () => get('/cart/cart-length')
+
+export default {
+ login,
+ register,
+ getVerifyCode,
+ resetPassword,
+ checkFieldCanUse,
+ updateUserInfo,
+ addAddress,
+ getAddress,
+ updateAddress,
+ deleteAddress,
+ getGoodsList,
+ getGoodsDetail,
+ getMoreGoods,
+ createOrder,
+ getGoodsInfoList,
+ payForOrder,
+ getBalance,
+ getOrderList,
+ getCartList,
+ addToCart,
+ updateCart,
+ deleteFromCart,
+ batchGetGoodsInfo,
+ getGoodsLikeList,
+ likeForGoods,
+ getBriefList,
+ writeBrief,
+ likeForBrief,
+ getCommentList,
+ writeComment,
+ likeForComment,
+ getCommentLikeList,
+ deleteOrder,
+ getRechargeList,
+ recharge,
+ checkHasPaykey,
+ updatePaykey,
+ getCartLength
+}
+
diff --git a/src/js/http/base.js b/src/js/http/base.js
new file mode 100644
index 0000000..501f2a9
--- /dev/null
+++ b/src/js/http/base.js
@@ -0,0 +1,79 @@
+import axios from 'axios'
+import { HTTP_CONFIG } from './config'
+import { tEmptyParam, tInvalidParam, tErrorTip } from '../tips'
+import dataStore from '../data-store'
+import Vue from './../../main'
+
+// 不拦截的路由列表
+const unLessList = [
+ '/user/goods-like-list'
+]
+
+const httpInstance = axios.create({
+ timeout: 10 * 1000,
+ baseURL: HTTP_CONFIG.BASE_URL,
+ headers: {
+ 'content-type': 'application/json;charset=UTF-8'
+ }
+})
+
+httpInstance.interceptors.request.use(config => {
+ console.log({
+ url: config.url,
+ data: config.data || config.params
+ })
+ config.headers['Authorization'] = dataStore.getToken() || ''
+ return config
+}, error => {
+ console.log(error)
+})
+
+httpInstance.interceptors.response.use(response => {
+ // data里面的数据要解析,而params里的则不用
+ const reqData = JSON.parse(response.config.data || null) || response.config.params
+ const resData = response.data
+ console.log({
+ url: response.config.url,
+ req: reqData,
+ res: response.data,
+ resDetail: resData.data
+ })
+ console.log(response.status)
+ if (response.status === 200) {
+ console.log(resData)
+ if (resData.code === HTTP_CONFIG.SUCCESS_CODE) {
+ return resData.data
+ }
+ switch (resData.code) {
+ case HTTP_CONFIG.EMPTY_PARAM_CODE:
+ tEmptyParam(resData.data.detail)
+ break
+ case HTTP_CONFIG.INVALID_PARAM_CODE:
+ tInvalidParam(resData.data.detail)
+ break
+ default:
+ tErrorTip(resData.msg)
+ }
+ return Promise.reject(resData)
+ }
+ return response.data
+}, error => {
+ console.log(error.response)
+ const response = error.response
+ if (response.status === 401) {
+ console.log(unLessList.includes(response.config.url))
+ if(unLessList.includes(response.config.url)) {
+ console.log('存在')
+ return Promise.reject(response.data)
+ }
+ tErrorTip('您还未登录或登录已过期,请重新登录')
+ if(Vue.$route.path !== '/') {
+ Vue.$router.replace('/')
+ }
+ // console.log('token已过期,请重新登录')
+ dataStore.deleteToken()
+ return Promise.reject(response.data)
+ }
+})
+
+export default httpInstance
diff --git a/src/js/http/config.js b/src/js/http/config.js
new file mode 100644
index 0000000..a95b1ff
--- /dev/null
+++ b/src/js/http/config.js
@@ -0,0 +1,8 @@
+export const HTTP_CONFIG = Object.freeze({
+ BASE_URL: 'https://mall.cxmmao.com/api-mall',
+ IMAGE_BASE_URL: 'https://mall.cxmmao.com/cat-mall-images/',
+ SUCCESS_CODE: 10000,
+ FAIL_CODE: 40999, // 未知错误
+ INVALID_PARAM_CODE: 40099, // 参数不合法
+ EMPTY_PARAM_CODE: 40009 // 请求参数不能为空
+})
diff --git a/src/js/http/http.js b/src/js/http/http.js
new file mode 100644
index 0000000..582faa1
--- /dev/null
+++ b/src/js/http/http.js
@@ -0,0 +1,92 @@
+import httpInstance from './base'
+import { tipType } from './../const-table'
+import { tCommon } from './../tips'
+
+const extendOptions = Object.seal({
+ showTip: false,
+ tipMsg: '',
+ tipType: tipType.SUCCESS
+})
+
+export const get = (url, params, configOptions = null) => {
+ return new Promise((resolve, reject) => {
+ httpInstance.get(url, {
+ params
+ }).then(res => {
+ resolve(res)
+ if (configOptions) {
+ _executeExtend(configOptions)
+ }
+ }).catch(reject)
+ })
+}
+
+export const post = (url, params, configOptions = null) => {
+ return new Promise((resolve, reject) => {
+ httpInstance.post(url, params).then(res => {
+ resolve(res)
+ if (configOptions) {
+ _executeExtend(configOptions)
+ }
+ }).catch(err => {
+ reject(err)
+ })
+ })
+}
+
+export const put = (url, params, configOptions = null) => {
+ return new Promise((resolve, reject) => {
+ httpInstance.put(url, params).then(res => {
+ resolve(res)
+ if (configOptions) {
+ _executeExtend(configOptions)
+ }
+ }).catch(err => {
+ reject(err)
+ })
+ })
+}
+
+export const del = (url, params, configOptions = null) => {
+ return new Promise((resolve, reject) => {
+ httpInstance.delete(url, {
+ data: params
+ }).then(res => {
+ resolve(res)
+ if (configOptions) {
+ _executeExtend(configOptions)
+ }
+ }).catch(err => {
+ reject(err)
+ })
+ })
+}
+
+/**
+ * 合并扩展数据
+ * @param configOptions // 请求的扩展选项,合并了就相当于赋值默认参数
+ * @returns {{}}
+ * @private
+ */
+const _mergeExtendOptions = (configOptions) => {
+ const temp = {}
+ for (let key in extendOptions) {
+ temp[key] = configOptions[key] || extendOptions[key]
+ }
+ return temp
+}
+
+const _executeExtend = (configOptions) => {
+ configOptions = _mergeExtendOptions(configOptions)
+ console.log(configOptions)
+ if (configOptions.showTip) {
+ tCommon(configOptions.tipMsg, configOptions.tipType)
+ }
+}
+
+export default {
+ get,
+ post,
+ put,
+ del
+}
diff --git a/src/js/http/param.js b/src/js/http/param.js
new file mode 100644
index 0000000..109f5d3
--- /dev/null
+++ b/src/js/http/param.js
@@ -0,0 +1,182 @@
+/**
+ * 请求参数列表
+ * 用object.seal来约束请求参数
+ * 防止在代码中对请求参数添加其他数据
+ * 请求参数以p开头
+ * 即params的意思
+ */
+
+export const pLogin = Object.seal({
+ email: '',
+ password: ''
+})
+
+export const pRegister = Object.seal({
+ email: '',
+ password: '',
+ verifyCode: ''
+})
+
+export const pGetVerifyCode = Object.seal({
+ email: ''
+})
+
+export const pResetPassword = Object.seal({
+ email: '',
+ password: '',
+ verifyCode: ''
+})
+
+export const pCheckFieldCanUse = Object.seal({
+ field: '',
+ value: ''
+})
+
+export const pUpdateUserInfo = Object.seal({
+ nickName: '',
+ gender: 0, // 0:男,1:女
+ avatarUrl: ''
+})
+
+export const pAddAddress = {
+ name: '',
+ phone: '',
+ detailedAddress: '',
+ completedAddress: '',
+ regionList: [],
+ addressTable: {
+ province: {
+ value: '',
+ label: ''
+ },
+ city: {
+ value: '',
+ label: ''
+ },
+ area: {
+ value: '',
+ label: ''
+ }
+ }
+}
+
+export const pDeleteAddress = Object.seal({
+ addressId: ''
+})
+
+export const pGetGoodsList = Object.seal({
+ priceRange: "ALL",
+ currentPage: 0,
+ pagingSize: 6,
+ sortType: "ASC"
+})
+
+export const pGetGoodsDetail = Object.seal({
+ goodsId: ''
+})
+
+export const pGetMoreGoods = Object.seal({
+ maxLength: 6
+})
+
+export const pCreateOrder = Object.seal({
+ addressId: '',
+ orderList: []
+})
+
+export const pCreateOrderItem = Object.seal({
+ goodsId: '',
+ purchaseNum: 0
+})
+
+export const pGetGoodsInfoList = Object.seal({
+ goodsIdList: []
+})
+
+export const pPayForOrder = Object.seal({
+ orderId: '',
+ paykey: ''
+})
+
+export const pAddToCart = Object.seal({
+ goodsId: '',
+ goodsNum: null
+})
+
+export const pUpdateCart = Object.seal({
+ goodsId: '',
+ goodsNum: null
+})
+
+export const pDeleteFromCart = Object.seal(({
+ goodsId: ''
+}))
+
+export const pBatchGoodsInfo = Object.seal({
+ goodsIdList: []
+})
+
+export const pGetCartList = Object.seal({
+ pageSize: 6,
+ curPage: 0
+})
+
+export const pLikeForGoods = Object.seal({
+ goodsId: ''
+})
+
+// 短评
+export const pGetBriefList = Object.seal({
+ goodsId: '',
+})
+
+export const pWriteBrief = Object.seal({
+ goodsId: '',
+ brief: '',
+ color: ''
+})
+
+export const pLikeForBrief = Object.seal({
+ goodsId: '',
+ briefId: '',
+})
+
+
+export const pGetCommentList = Object.seal({
+ goodsId: '',
+ pageSize: null,
+ curPage: null
+})
+
+export const pWriteComment = Object.seal({
+ goodsId: '',
+ comment: '',
+ rate: null
+})
+
+export const pLikeForComment = Object.seal({
+ goodsId: '',
+ commentId: '',
+ commentListId: '',
+ likeState: null
+})
+
+export const pGetOrderList = Object.seal({
+ currentPage: 0,
+ pageSize: 6
+})
+
+export const pDeleteOrder = Object.seal({
+ orderId: ''
+})
+
+export const pRecharge = Object.seal({
+ rechargeKey: '',
+ verifyCode: ''
+})
+
+export const pUpdatePaykey = Object.seal({
+ email: '',
+ paykey: '',
+ verifyCode: ''
+})
diff --git a/src/js/model/card-model.js b/src/js/model/card-model.js
new file mode 100644
index 0000000..e69de29
diff --git a/src/js/model/detail-model.js b/src/js/model/detail-model.js
new file mode 100644
index 0000000..e69de29
diff --git a/src/js/model/home-model.js b/src/js/model/home-model.js
new file mode 100644
index 0000000..e69de29
diff --git a/src/js/model/my-model.js b/src/js/model/my-model.js
new file mode 100644
index 0000000..e69de29
diff --git a/src/js/model/order-model.js b/src/js/model/order-model.js
new file mode 100644
index 0000000..e69de29
diff --git a/src/js/model/public-model.js b/src/js/model/public-model.js
new file mode 100644
index 0000000..e69de29
diff --git a/src/js/prototype.js b/src/js/prototype.js
new file mode 100644
index 0000000..86683c1
--- /dev/null
+++ b/src/js/prototype.js
@@ -0,0 +1,7 @@
+Object.deepCopy = function(obj) {
+ return JSON.parse(JSON.stringify(obj))
+}
+
+String.prototype.addZero = function() {
+ return this >= 10 ? this : '0' + this
+}
diff --git a/src/js/resize.js b/src/js/resize.js
new file mode 100644
index 0000000..fc0c592
--- /dev/null
+++ b/src/js/resize.js
@@ -0,0 +1,14 @@
+// 监听屏幕的变化
+export default (function (doc, win) {
+ const docEl = doc.documentElement
+ const resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize'
+ const recalc = function () {
+ var clientWidth = docEl.clientWidth
+ if (!clientWidth) return
+ console.log(clientWidth)
+ docEl.style.fontSize = 32 * (clientWidth / 1920) + 'px'
+ }
+ if (!doc.addEventListener) return
+ win.addEventListener(resizeEvt, recalc, false)
+ doc.addEventListener('DOMContentLoaded', recalc, false)
+})(document, window)
diff --git a/src/js/tips.js b/src/js/tips.js
new file mode 100644
index 0000000..99a2905
--- /dev/null
+++ b/src/js/tips.js
@@ -0,0 +1,81 @@
+import { Message } from 'element-ui'
+import { tipType } from './const-table'
+
+const tCommon = (message, type = tipType.SUCCESS) => {
+ Message({
+ message,
+ type,
+ duration: 3000
+ })
+}
+
+const tSuccess = message => tCommon(message)
+
+const tWarn = message => tCommon(message, tipType.WARNING)
+
+const tError = message => tCommon(message, tipType.ERROR)
+
+const tEmptyParam = message => {
+ return Message({
+ message,
+ type: tipType.ERROR,
+ duration: 5000
+ })
+}
+
+const tInvalidParam = message => {
+ return Message({
+ message,
+ type: tipType.ERROR,
+ duration: 5000
+ })
+}
+
+const tErrorTip = message => {
+ return Message({
+ message,
+ type: tipType.ERROR,
+ duration: 3000
+ })
+}
+
+const tSendVerifyCode = () => {
+ return Message({
+ message: '验证码已发送至您的邮箱,请注意查收',
+ type: tipType.WARNING,
+ duration: 3000
+ })
+}
+
+const tLoading = (message) => {
+ return Message({
+ message,
+ type: tipType.SUCCESS,
+ duration: 3000000,
+ iconClass: 'el-icon-loading',
+ customClass: 'paying-tips'
+ })
+}
+
+
+// export default {
+// tCommon,
+// tSuccess,
+// tErrorTip,
+// tError,
+// tEmptyParam,
+// tInvalidParam,
+// tSendVerifyCode
+// }
+
+module.exports = {
+ tCommon,
+ tSuccess,
+ tWarn,
+ tErrorTip,
+ tError,
+ tEmptyParam,
+ tInvalidParam,
+ tSendVerifyCode,
+ tLoading
+}
diff --git a/src/js/utils.js b/src/js/utils.js
new file mode 100644
index 0000000..cbdeeee
--- /dev/null
+++ b/src/js/utils.js
@@ -0,0 +1,32 @@
+// 验证邮箱
+export const testEmail = (email) => {
+ const reg = /[\w]+(\.[\w]+)*@[\w]+(\.[\w])+/
+ return reg.test(email)
+}
+
+// 验证密码
+export const testPassword = (password) => {
+ const reg = /^(\w){6,20}$/
+ return reg.test(password)
+}
+
+// 验证验证码
+export const testVerifyCode = (verifyCode)=> {
+ const reg = /^[0-9]{6}$/
+ return reg.test(verifyCode)
+}
+
+// 保存token
+export const saveToken = token => {
+ localStorage.setItem('token', token)
+}
+
+// 删除token
+export const deleteToken = () => {
+ localStorage.removeItem('token')
+}
+
+// 保存token
+export const getToken = () => {
+ return localStorage.getItem('token')
+}
diff --git a/src/main.js b/src/main.js
new file mode 100644
index 0000000..3dd0bcb
--- /dev/null
+++ b/src/main.js
@@ -0,0 +1,73 @@
+import Vue from 'vue'
+import App from './App.vue'
+import './js/prototype'
+import router from './router'
+// import './js/console'
+import store from './store'
+import './assets/scss/css/font-awesome.min.css'
+import ElementUI from 'element-ui'
+import 'element-ui/lib/theme-chalk/index.css'
+import './assets/scss/public.scss'
+import './js/resize'
+import axios from 'axios'
+import {
+ formatMoney,
+ formatLikeNum,
+ formatString,
+ formatDate,
+ formatNickName,
+ addImagePrefix
+} from './js/filters.js'
+import api from './js/http/api'
+import tips from './js/tips'
+import tokenInstance from './js/data-store'
+const infiniteScroll = require('vue-infinite-scroll')
+
+Vue.config.productionTip = false
+Vue.prototype.$api = api
+Vue.prototype.$tips = tips
+Vue.prototype.bus = new Vue()
+Vue.use(ElementUI)
+Vue.filter('formatMoney', formatMoney)
+Vue.filter('formatLikeNum', formatLikeNum)
+Vue.filter('formatString', formatString)
+Vue.filter('formatDate', formatDate)
+Vue.filter('formatNickName', formatNickName)
+Vue.filter('addImagePrefix', addImagePrefix)
+Vue.use(infiniteScroll)
+
+const vue = new Vue({
+ router,
+ store,
+ // 监听路由的变化,有变化就加入path数组里面
+ watch: {
+ $route(to, from) {
+ console.log(to.path, from.path)
+ console.log(this.$route)
+ store.dispatch('changeRouter', {
+ to: to.path,
+ from: from.path,
+ fullPath: this.$route.fullPath
+ })
+ }
+ },
+ methods: {
+ getCartList() {
+ this.$api.getCartLength().then(res => {
+ this.$store.dispatch('saveUserInfo', {...res})
+ }).catch(err => {
+ console.error(err)
+ })
+ }
+ },
+ mounted() {
+ this.$store.dispatch('saveUserInfo', tokenInstance.getUserInfo())
+ this.getCartList()
+ this.bus.$on('updateCartLength', () => {
+ this.getCartList()
+ })
+ },
+ render: h => h(App)
+}).$mount('#app')
+
+export default vue
diff --git a/src/mixins/mLike.js b/src/mixins/mLike.js
new file mode 100644
index 0000000..6a34ba5
--- /dev/null
+++ b/src/mixins/mLike.js
@@ -0,0 +1,42 @@
+// m代表mixins
+import { pLikeForGoods } from './../js/http/param'
+export const mLike = {
+ data() {
+ return {
+ likeList: []
+ }
+ },
+ computed: {
+ checkIsLike() {
+ this.likeList = this.$store.getters.getGoodsLikeList
+ // 为了和详情区分开
+ const goodsId = this.goodsInfo ? this.goodsInfo.goodsId : this.goodsDetail.goodsId
+ return this.likeList.includes(goodsId)
+ }
+ },
+ methods: {
+ likeForGoods(goodsId) {
+ console.log('开始点赞')
+ pLikeForGoods.goodsId = goodsId
+ this.$api.likeForGoods(pLikeForGoods).then(res => {
+ console.log(res)
+ if(this.goodsInfo) {
+ this.goodsInfo.likeNum = res.likeNum
+ }else {
+ this.goodsDetail.likeNum = res.likeNum
+ }
+ this._updateLikeList(goodsId, res.likeState)
+ }).catch(err => {
+ console.error(err)
+ })
+ },
+ // 更新点赞列表
+ _updateLikeList(goodsId, likeState) {
+ if(likeState) {
+ this.likeList.push(goodsId)
+ }else {
+ this.likeList.splice(this.likeList.indexOf(goodsId))
+ }
+ }
+ }
+}
diff --git a/src/router.js b/src/router.js
new file mode 100644
index 0000000..79df48f
--- /dev/null
+++ b/src/router.js
@@ -0,0 +1,41 @@
+import Vue from 'vue'
+import Router from 'vue-router'
+import home from './views/home.vue'
+import cart from './views/cart'
+import detail from './views/detail'
+import my from './views/my'
+import order from './views/order'
+
+Vue.use(Router)
+
+export default new Router({
+ mode: 'hash',
+ base: process.env.BASE_URL,
+ routes: [
+ {
+ path: '/',
+ name: 'home',
+ component: home
+ },
+ {
+ path: '/cart',
+ name: 'cart',
+ component: cart
+ },
+ {
+ path: '/detail',
+ name: 'detail',
+ component: detail
+ },
+ {
+ path: '/order',
+ name: 'order',
+ component: order
+ },
+ {
+ path: '/my',
+ name: 'my',
+ component: my
+ }
+ ]
+})
diff --git a/src/store.js b/src/store.js
new file mode 100644
index 0000000..af4e18c
--- /dev/null
+++ b/src/store.js
@@ -0,0 +1,96 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import routerList from './assets/conf/routerList'
+import dataStore from './js/data-store'
+
+const defaultRouter = {
+ path: '/',
+ name: '宠物列表',
+ query: {}
+}
+
+Vue.use(Vuex)
+
+export default new Vuex.Store({
+ state: {
+ routerList: [routerList['/'], defaultRouter],
+ userInfo: {},
+ goodsInfoList: [],
+ goodsLikeList: []
+ },
+ mutations: {
+ changeRouter(state, list) {
+ state.routerList = list
+ console.log(list)
+ },
+ saveUserInfo(state, data) {
+ // 用了微信的setData,这样子设置值的时候不必再传整个对象进来
+ // 没有数据时则是清空对象
+ console.log(data)
+ if(!data) {
+ state.userInfo = {}
+ }else {
+ state.userInfo = {
+ ...state.userInfo,
+ ...data
+ }
+ }
+ dataStore.saveUserInfo(state.userInfo)
+ },
+ setGoodsInfoList(state, goodsInfoList) {
+ state.goodsInfoList = goodsInfoList
+ },
+ setGoodsLikeList(state, goodsLikeList) {
+ state.goodsLikeList = goodsLikeList
+ }
+ },
+ getters: {
+ getRouters: state => {
+ return state.routerList
+ },
+ getUserInfo: state => {
+ return state.userInfo
+ },
+ getGoodsInfoList: state => {
+ return state.goodsInfoList
+ },
+ getGoodsLikeList: state => {
+ return state.goodsLikeList
+ }
+ },
+ actions: {
+ changeRouter(context, params) {
+ let arr = this.state.routerList
+ if (arr[1].path === '/') {
+ arr[1] = routerList[params.to]
+ } else {
+ let isExit = false
+ for (let i = 0; i < arr.length; i++) {
+ if (arr[i].path === params.to) {
+ isExit = true
+ arr.splice(i + 1, arr.length - i)
+ break
+ }
+ }
+ if (!isExit) {
+ console.log(routerList[params.to])
+ arr.push(routerList[params.to])
+ }
+ }
+ if (params.to === '/') {
+ arr = [routerList['/'], defaultRouter]
+ }
+ routerList[params.to].fullPath = params.fullPath
+ context.commit('changeRouter', arr)
+ },
+ saveUserInfo(context, data) {
+ context.commit('saveUserInfo', data)
+ },
+ setGoodsInfoList(context, goodsInfoList) {
+ context.commit('setGoodsInfoList', goodsInfoList)
+ },
+ setGoodsLikeList(context, goodsLikeList) {
+ context.commit('setGoodsLikeList', goodsLikeList)
+ }
+ }
+})
diff --git a/src/views/cart.vue b/src/views/cart.vue
new file mode 100644
index 0000000..e5dbd91
--- /dev/null
+++ b/src/views/cart.vue
@@ -0,0 +1,176 @@
+
+
+
+
+
+
+
+

+
购物车暂无数据,赶快去逛逛吧~
+
+
+
+

+
+
+
+
+
+
+
+
diff --git a/src/views/detail.vue b/src/views/detail.vue
new file mode 100644
index 0000000..7717d96
--- /dev/null
+++ b/src/views/detail.vue
@@ -0,0 +1,394 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{goodsDetail.goodsName}}
+
+ {{goodsDetail.goodsInfo.intro}}
+
+
+
+
+
+
+ 价格:
+
+
+
+ 促销价:
+
+
+
+ 优惠券:
+
+
+
+
+ {{goodsDetail.goodsInfo.address}}
+ 至
+ 北京
+
+
|
+
运费:{{goodsDetail.goodsInfo.postage}}元
+
+
+
+ 库存:{{goodsDetail.inventory}}
+
+
+
+
+ 总销量
+ {{goodsDetail.saleVolume}}
+
+
+

+
{{totalCommentNum}}
+
+
+
+
+
+
+ 立即购买
+ 加入购物车
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/home.vue b/src/views/home.vue
new file mode 100644
index 0000000..fa44244
--- /dev/null
+++ b/src/views/home.vue
@@ -0,0 +1,239 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/my.vue b/src/views/my.vue
new file mode 100644
index 0000000..69794d7
--- /dev/null
+++ b/src/views/my.vue
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
diff --git a/src/views/order.vue b/src/views/order.vue
new file mode 100644
index 0000000..99f71b5
--- /dev/null
+++ b/src/views/order.vue
@@ -0,0 +1,432 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
更多地址
+

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/vue.config.js b/vue.config.js
new file mode 100644
index 0000000..6e453cb
--- /dev/null
+++ b/vue.config.js
@@ -0,0 +1,14 @@
+module.exports = {
+ configureWebpack: {
+ resolve: {
+ alias: {
+ '@assets': '@/assets',
+ '@components': '@/components',
+ '@common': '@/common',
+ '@views': '@/views',
+ '@images': '/public/images'
+ }
+ }
+ },
+ publicPath: './', // 公共路径
+}
暂时没有评论哦,赶快来抢沙发吧~
+