c581f236 by joe

备份

1 parent a5fe4200
......@@ -1942,6 +1942,13 @@
"integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
"dev": true
},
"asap": {
"version": "2.0.6",
"resolved": "https://registry.npm.taobao.org/asap/download/asap-2.0.6.tgz",
"integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
"dev": true,
"optional": true
},
"asn1": {
"version": "0.2.4",
"resolved": "http://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz",
......@@ -5412,7 +5419,8 @@
"ansi-regex": {
"version": "2.1.1",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"aproba": {
"version": "1.2.0",
......@@ -5433,12 +5441,14 @@
"balanced-match": {
"version": "1.0.0",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"brace-expansion": {
"version": "1.1.11",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
......@@ -5453,17 +5463,20 @@
"code-point-at": {
"version": "1.1.0",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"concat-map": {
"version": "0.0.1",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"console-control-strings": {
"version": "1.1.0",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"core-util-is": {
"version": "1.0.2",
......@@ -5580,7 +5593,8 @@
"inherits": {
"version": "2.0.3",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"ini": {
"version": "1.3.5",
......@@ -5592,6 +5606,7 @@
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"number-is-nan": "^1.0.0"
}
......@@ -5606,6 +5621,7 @@
"version": "3.0.4",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"brace-expansion": "^1.1.7"
}
......@@ -5613,12 +5629,14 @@
"minimist": {
"version": "0.0.8",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"minipass": {
"version": "2.3.5",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"safe-buffer": "^5.1.2",
"yallist": "^3.0.0"
......@@ -5637,6 +5655,7 @@
"version": "0.5.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"minimist": "0.0.8"
}
......@@ -5717,7 +5736,8 @@
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"object-assign": {
"version": "4.1.1",
......@@ -5729,6 +5749,7 @@
"version": "1.4.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"wrappy": "1"
}
......@@ -5814,7 +5835,8 @@
"safe-buffer": {
"version": "5.1.2",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"safer-buffer": {
"version": "2.1.2",
......@@ -5850,6 +5872,7 @@
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
......@@ -5869,6 +5892,7 @@
"version": "3.0.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
......@@ -5912,12 +5936,14 @@
"wrappy": {
"version": "1.0.2",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"yallist": {
"version": "3.0.3",
"bundled": true,
"dev": true
"dev": true,
"optional": true
}
}
},
......@@ -6673,6 +6699,13 @@
"integrity": "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=",
"dev": true
},
"image-size": {
"version": "0.5.5",
"resolved": "https://registry.npm.taobao.org/image-size/download/image-size-0.5.5.tgz",
"integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
"dev": true,
"optional": true
},
"import-cwd": {
"version": "2.1.0",
"resolved": "https://registry.npm.taobao.org/import-cwd/download/import-cwd-2.1.0.tgz",
......@@ -7385,6 +7418,64 @@
"invert-kv": "^2.0.0"
}
},
"less": {
"version": "3.9.0",
"resolved": "https://registry.npm.taobao.org/less/download/less-3.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fless%2Fdownload%2Fless-3.9.0.tgz",
"integrity": "sha1-t1EcQ/N89X3Iff/ZiD7BISibFHQ=",
"dev": true,
"requires": {
"clone": "^2.1.2",
"errno": "^0.1.1",
"graceful-fs": "^4.1.2",
"image-size": "~0.5.0",
"mime": "^1.4.1",
"mkdirp": "^0.5.0",
"promise": "^7.1.1",
"request": "^2.83.0",
"source-map": "~0.6.0"
},
"dependencies": {
"clone": {
"version": "2.1.2",
"resolved": "https://registry.npm.taobao.org/clone/download/clone-2.1.2.tgz",
"integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
"dev": true
},
"mime": {
"version": "1.6.0",
"resolved": "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz?cache=0&sync_timestamp=1560034758817&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-1.6.0.tgz",
"integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=",
"dev": true,
"optional": true
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
"integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
"dev": true,
"optional": true
}
}
},
"less-loader": {
"version": "5.0.0",
"resolved": "https://registry.npm.taobao.org/less-loader/download/less-loader-5.0.0.tgz",
"integrity": "sha1-SY3eOmxsT4h0WO6e0/CGoSrRtGY=",
"dev": true,
"requires": {
"clone": "^2.1.1",
"loader-utils": "^1.1.0",
"pify": "^4.0.1"
},
"dependencies": {
"clone": {
"version": "2.1.2",
"resolved": "https://registry.npm.taobao.org/clone/download/clone-2.1.2.tgz",
"integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
"dev": true
}
}
},
"levn": {
"version": "0.3.0",
"resolved": "https://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz",
......@@ -9733,6 +9824,16 @@
"integrity": "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=",
"dev": true
},
"promise": {
"version": "7.3.1",
"resolved": "https://registry.npm.taobao.org/promise/download/promise-7.3.1.tgz",
"integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=",
"dev": true,
"optional": true,
"requires": {
"asap": "~2.0.3"
}
},
"promise-inflight": {
"version": "1.0.1",
"resolved": "https://registry.npm.taobao.org/promise-inflight/download/promise-inflight-1.0.1.tgz",
......@@ -10520,7 +10621,8 @@
"version": "4.0.8",
"resolved": "https://registry.npm.taobao.org/rx-lite/download/rx-lite-4.0.8.tgz",
"integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
"dev": true
"dev": true,
"optional": true
},
"rx-lite-aggregates": {
"version": "4.0.8",
......
......@@ -34,6 +34,8 @@
"babel-plugin-import": "^1.12.0",
"eslint": "^5.16.0",
"eslint-plugin-vue": "^5.0.0",
"less": "^3.9.0",
"less-loader": "^5.0.0",
"node-sass": "^4.12.0",
"sass-loader": "^7.1.0",
"vue-template-compiler": "^2.6.10"
......
......@@ -8,7 +8,7 @@
<meta name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title>vue-cli3-framework</title>
<title></title>
</head>
<body>
......
......@@ -4,12 +4,13 @@
<router-link to="/">Home</router-link> |
<router-link to="/about">About</router-link>
</div>-->
<router-view/>
<router-view />
</div>
</template>
<style lang="scss">
@import './styles/support.scss';
@import "./styles/support.scss";
#app {
/* font-family: 'Avenir', Helvetica, Arial, sans-serif;
......@@ -30,6 +31,10 @@ div {
padding: 0;
}
body {
background-color: #74cb35;
}
.app__width {
width: 750px;
}
......@@ -83,5 +88,51 @@ div {
position: relative;
}
.sys-btn {
width: 430px;
height: 128px;
background: url(./assets/imgs/btn.png) no-repeat;
background-size: 100%;
text-align: center;
line-height: 118px;
color: #fff;
font-size: 50px;
font-weight: 600;
margin: auto;
}
.sys-btn-02 {
width: 342px;
height: 110px;
background: url(./assets/imgs/btn2.png) no-repeat;
background-size: 100%;
text-align: center;
line-height: 100px;
color: #fff;
font-size: 40px;
font-weight: 600;
margin: auto;
}
.sys-container-panel {
margin: auto;
width: 692px;
background-color: #fff;
border-radius: 50px;
box-shadow: 5px 5px 15px #8bc263;
position: relative;
.container-title {
width: 505px;
height: 84px;
line-height: 104px;
background: url(./assets/imgs/title-bg.png) no-repeat;
background-size: 100%;
position: absolute;
left: 93.5px;
top: -42px;
font-size: 38px;
font-weight: 600;
color: #e8e8e8;
}
}
</style>
......
export default {
province_list: {
110000: '北京市',
120000: '天津市',
130000: '河北省',
140000: '山西省',
150000: '内蒙古自治区',
210000: '辽宁省',
220000: '吉林省',
230000: '黑龙江省',
310000: '上海市',
320000: '江苏省',
330000: '浙江省',
340000: '安徽省',
350000: '福建省',
360000: '江西省',
370000: '山东省',
410000: '河南省',
420000: '湖北省',
430000: '湖南省',
440000: '广东省',
450000: '广西壮族自治区',
460000: '海南省',
500000: '重庆市',
510000: '四川省',
520000: '贵州省',
530000: '云南省',
540000: '西藏自治区',
610000: '陕西省',
620000: '甘肃省',
630000: '青海省',
640000: '宁夏回族自治区',
650000: '新疆维吾尔自治区',
710000: '台湾省',
810000: '香港特别行政区',
820000: '澳门特别行政区',
900000: '海外'
},
city_list: {
110100: '北京市',
120100: '天津市',
130100: '石家庄市',
130200: '唐山市',
130300: '秦皇岛市',
130400: '邯郸市',
130500: '邢台市',
130600: '保定市',
130700: '张家口市',
130800: '承德市',
130900: '沧州市',
131000: '廊坊市',
131100: '衡水市',
140100: '太原市',
140200: '大同市',
140300: '阳泉市',
140400: '长治市',
140500: '晋城市',
140600: '朔州市',
140700: '晋中市',
140800: '运城市',
140900: '忻州市',
141000: '临汾市',
141100: '吕梁市',
150100: '呼和浩特市',
150200: '包头市',
150300: '乌海市',
150400: '赤峰市',
150500: '通辽市',
150600: '鄂尔多斯市',
150700: '呼伦贝尔市',
150800: '巴彦淖尔市',
150900: '乌兰察布市',
152200: '兴安盟',
152500: '锡林郭勒盟',
152900: '阿拉善盟',
210100: '沈阳市',
210200: '大连市',
210300: '鞍山市',
210400: '抚顺市',
210500: '本溪市',
210600: '丹东市',
210700: '锦州市',
210800: '营口市',
210900: '阜新市',
211000: '辽阳市',
211100: '盘锦市',
211200: '铁岭市',
211300: '朝阳市',
211400: '葫芦岛市',
220100: '长春市',
220200: '吉林市',
220300: '四平市',
220400: '辽源市',
220500: '通化市',
220600: '白山市',
220700: '松原市',
220800: '白城市',
222400: '延边朝鲜族自治州',
230100: '哈尔滨市',
230200: '齐齐哈尔市',
230300: '鸡西市',
230400: '鹤岗市',
230500: '双鸭山市',
230600: '大庆市',
230700: '伊春市',
230800: '佳木斯市',
230900: '七台河市',
231000: '牡丹江市',
231100: '黑河市',
231200: '绥化市',
232700: '大兴安岭地区',
310100: '上海市',
320100: '南京市',
320200: '无锡市',
320300: '徐州市',
320400: '常州市',
320500: '苏州市',
320600: '南通市',
320700: '连云港市',
320800: '淮安市',
320900: '盐城市',
321000: '扬州市',
321100: '镇江市',
321200: '泰州市',
321300: '宿迁市',
330100: '杭州市',
330200: '宁波市',
330300: '温州市',
330400: '嘉兴市',
330500: '湖州市',
330600: '绍兴市',
330700: '金华市',
330800: '衢州市',
330900: '舟山市',
331000: '台州市',
331100: '丽水市',
340100: '合肥市',
340200: '芜湖市',
340300: '蚌埠市',
340400: '淮南市',
340500: '马鞍山市',
340600: '淮北市',
340700: '铜陵市',
340800: '安庆市',
341000: '黄山市',
341100: '滁州市',
341200: '阜阳市',
341300: '宿州市',
341500: '六安市',
341600: '亳州市',
341700: '池州市',
341800: '宣城市',
350100: '福州市',
350200: '厦门市',
350300: '莆田市',
350400: '三明市',
350500: '泉州市',
350600: '漳州市',
350700: '南平市',
350800: '龙岩市',
350900: '宁德市',
360100: '南昌市',
360200: '景德镇市',
360300: '萍乡市',
360400: '九江市',
360500: '新余市',
360600: '鹰潭市',
360700: '赣州市',
360800: '吉安市',
360900: '宜春市',
361000: '抚州市',
361100: '上饶市',
370100: '济南市',
370200: '青岛市',
370300: '淄博市',
370400: '枣庄市',
370500: '东营市',
370600: '烟台市',
370700: '潍坊市',
370800: '济宁市',
370900: '泰安市',
371000: '威海市',
371100: '日照市',
371200: '莱芜市',
371300: '临沂市',
371400: '德州市',
371500: '聊城市',
371600: '滨州市',
371700: '菏泽市',
410100: '郑州市',
410200: '开封市',
410300: '洛阳市',
410400: '平顶山市',
410500: '安阳市',
410600: '鹤壁市',
410700: '新乡市',
410800: '焦作市',
410900: '濮阳市',
411000: '许昌市',
411100: '漯河市',
411200: '三门峡市',
411300: '南阳市',
411400: '商丘市',
411500: '信阳市',
411600: '周口市',
411700: '驻马店市',
419000: '省直辖县',
420100: '武汉市',
420200: '黄石市',
420300: '十堰市',
420500: '宜昌市',
420600: '襄阳市',
420700: '鄂州市',
420800: '荆门市',
420900: '孝感市',
421000: '荆州市',
421100: '黄冈市',
421200: '咸宁市',
421300: '随州市',
422800: '恩施土家族苗族自治州',
429000: '省直辖县',
430100: '长沙市',
430200: '株洲市',
430300: '湘潭市',
430400: '衡阳市',
430500: '邵阳市',
430600: '岳阳市',
430700: '常德市',
430800: '张家界市',
430900: '益阳市',
431000: '郴州市',
431100: '永州市',
431200: '怀化市',
431300: '娄底市',
433100: '湘西土家族苗族自治州',
440100: '广州市',
440200: '韶关市',
440300: '深圳市',
440400: '珠海市',
440500: '汕头市',
440600: '佛山市',
440700: '江门市',
440800: '湛江市',
440900: '茂名市',
441200: '肇庆市',
441300: '惠州市',
441400: '梅州市',
441500: '汕尾市',
441600: '河源市',
441700: '阳江市',
441800: '清远市',
441900: '东莞市',
442000: '中山市',
445100: '潮州市',
445200: '揭阳市',
445300: '云浮市',
450100: '南宁市',
450200: '柳州市',
450300: '桂林市',
450400: '梧州市',
450500: '北海市',
450600: '防城港市',
450700: '钦州市',
450800: '贵港市',
450900: '玉林市',
451000: '百色市',
451100: '贺州市',
451200: '河池市',
451300: '来宾市',
451400: '崇左市',
460100: '海口市',
460200: '三亚市',
460300: '三沙市',
460400: '儋州市',
469000: '省直辖县',
500100: '重庆市',
500200: '县',
510100: '成都市',
510300: '自贡市',
510400: '攀枝花市',
510500: '泸州市',
510600: '德阳市',
510700: '绵阳市',
510800: '广元市',
510900: '遂宁市',
511000: '内江市',
511100: '乐山市',
511300: '南充市',
511400: '眉山市',
511500: '宜宾市',
511600: '广安市',
511700: '达州市',
511800: '雅安市',
511900: '巴中市',
512000: '资阳市',
513200: '阿坝藏族羌族自治州',
513300: '甘孜藏族自治州',
513400: '凉山彝族自治州',
520100: '贵阳市',
520200: '六盘水市',
520300: '遵义市',
520400: '安顺市',
520500: '毕节市',
520600: '铜仁市',
522300: '黔西南布依族苗族自治州',
522600: '黔东南苗族侗族自治州',
522700: '黔南布依族苗族自治州',
530100: '昆明市',
530300: '曲靖市',
530400: '玉溪市',
530500: '保山市',
530600: '昭通市',
530700: '丽江市',
530800: '普洱市',
530900: '临沧市',
532300: '楚雄彝族自治州',
532500: '红河哈尼族彝族自治州',
532600: '文山壮族苗族自治州',
532800: '西双版纳傣族自治州',
532900: '大理白族自治州',
533100: '德宏傣族景颇族自治州',
533300: '怒江傈僳族自治州',
533400: '迪庆藏族自治州',
540100: '拉萨市',
540200: '日喀则市',
540300: '昌都市',
540400: '林芝市',
540500: '山南市',
540600: '那曲市',
542500: '阿里地区',
610100: '西安市',
610200: '铜川市',
610300: '宝鸡市',
610400: '咸阳市',
610500: '渭南市',
610600: '延安市',
610700: '汉中市',
610800: '榆林市',
610900: '安康市',
611000: '商洛市',
620100: '兰州市',
620200: '嘉峪关市',
620300: '金昌市',
620400: '白银市',
620500: '天水市',
620600: '武威市',
620700: '张掖市',
620800: '平凉市',
620900: '酒泉市',
621000: '庆阳市',
621100: '定西市',
621200: '陇南市',
622900: '临夏回族自治州',
623000: '甘南藏族自治州',
630100: '西宁市',
630200: '海东市',
632200: '海北藏族自治州',
632300: '黄南藏族自治州',
632500: '海南藏族自治州',
632600: '果洛藏族自治州',
632700: '玉树藏族自治州',
632800: '海西蒙古族藏族自治州',
640100: '银川市',
640200: '石嘴山市',
640300: '吴忠市',
640400: '固原市',
640500: '中卫市',
650100: '乌鲁木齐市',
650200: '克拉玛依市',
650400: '吐鲁番市',
650500: '哈密市',
652300: '昌吉回族自治州',
652700: '博尔塔拉蒙古自治州',
652800: '巴音郭楞蒙古自治州',
652900: '阿克苏地区',
653000: '克孜勒苏柯尔克孜自治州',
653100: '喀什地区',
653200: '和田地区',
654000: '伊犁哈萨克自治州',
654200: '塔城地区',
654300: '阿勒泰地区',
659000: '自治区直辖县级行政区划',
710100: '台北市',
710200: '高雄市',
710300: '台南市',
710400: '台中市',
710500: '金门县',
710600: '南投县',
710700: '基隆市',
710800: '新竹市',
710900: '嘉义市',
711100: '新北市',
711200: '宜兰县',
711300: '新竹县',
711400: '桃园县',
711500: '苗栗县',
711700: '彰化县',
711900: '嘉义县',
712100: '云林县',
712400: '屏东县',
712500: '台东县',
712600: '花莲县',
712700: '澎湖县',
712800: '连江县',
810100: '香港岛',
810200: '九龙',
810300: '新界',
820100: '澳门半岛',
820200: '离岛',
900400: '阿富汗',
900800: '阿尔巴尼亚',
901000: '南极洲',
901200: '阿尔及利亚',
901600: '美属萨摩亚',
902000: '安道尔',
902400: '安哥拉',
902800: '安提瓜和巴布达',
903100: '阿塞拜疆',
903200: '阿根廷',
903600: '澳大利亚',
904000: '奥地利',
904400: '巴哈马',
904800: '巴林',
905000: '孟加拉',
905100: '亚美尼亚',
905200: '巴巴多斯',
905600: '比利时',
906000: '百慕大',
906400: '不丹',
906800: '玻利维亚',
907000: '波黑',
907200: '博茨瓦纳',
907400: '布韦岛',
907600: '巴西',
908400: '伯利兹',
908600: '英属印度洋领地',
909000: '所罗门群岛',
909200: '英属维尔京群岛',
909600: '文莱',
910000: '保加利亚',
910400: '缅甸',
910800: '布隆迪',
911200: '白俄罗斯',
911600: '柬埔寨',
912000: '喀麦隆',
912400: '加拿大',
913200: '佛得角',
913600: '开曼群岛',
914000: '中非',
914400: '斯里兰卡',
914800: '乍得',
915200: '智利',
916200: '圣诞岛',
916600: '科科斯群岛',
917000: '哥伦比亚',
917400: '科摩罗',
917500: '马约特',
917800: '刚果(布)',
918000: '刚果(金)',
918400: '库克群岛',
918800: '哥斯达黎加',
919100: '克罗地亚',
919200: '古巴',
919600: '塞浦路斯',
920300: '捷克',
920400: '贝宁',
920800: '丹麦',
921200: '多米尼克',
921400: '多米尼加',
921800: '厄瓜多尔',
922200: '萨尔瓦多',
922600: '赤道几内亚',
923100: '埃塞俄比亚',
923200: '厄立特里亚',
923300: '爱沙尼亚',
923400: '法罗群岛',
923800: '马尔维纳斯群岛( 福克兰)',
923900: '南乔治亚岛和南桑威奇群岛',
924200: '斐济群岛',
924600: '芬兰',
924800: '奥兰群岛',
925000: '法国',
925400: '法属圭亚那',
925800: '法属波利尼西亚',
926000: '法属南部领地',
926200: '吉布提',
926600: '加蓬',
926800: '格鲁吉亚',
927000: '冈比亚',
927500: '巴勒斯坦',
927600: '德国',
928800: '加纳',
929200: '直布罗陀',
929600: '基里巴斯',
930000: '希腊',
930400: '格陵兰',
930800: '格林纳达',
931200: '瓜德罗普',
931600: '关岛',
932000: '危地马拉',
932400: '几内亚',
932800: '圭亚那',
933200: '海地',
933400: '赫德岛和麦克唐纳群岛',
933600: '梵蒂冈',
934000: '洪都拉斯',
934800: '匈牙利',
935200: '冰岛',
935600: '印度',
936000: '印尼',
936400: '伊朗',
936800: '伊拉克',
937200: '爱尔兰',
937600: '以色列',
938000: '意大利',
938400: '科特迪瓦',
938800: '牙买加',
939200: '日本',
939800: '哈萨克斯坦',
940000: '约旦',
940400: '肯尼亚',
940800: '朝鲜 北朝鲜',
941000: '韩国',
941400: '科威特',
941700: '吉尔吉斯斯坦',
941800: '老挝',
942200: '黎巴嫩',
942600: '莱索托',
942800: '拉脱维亚',
943000: '利比里亚',
943400: '利比亚',
943800: '列支敦士登',
944000: '立陶宛',
944200: '卢森堡',
945000: '马达加斯加',
945400: '马拉维',
945800: '马来西亚',
946200: '马尔代夫',
946600: '马里',
947000: '马耳他',
947400: '马提尼克',
947800: '毛里塔尼亚',
948000: '毛里求斯',
948400: '墨西哥',
949200: '摩纳哥',
949600: '蒙古国',
949800: '摩尔多瓦',
949900: '黑山',
950000: '蒙塞拉特岛',
950400: '摩洛哥',
950800: '莫桑比克',
951200: '阿曼',
951600: '纳米比亚',
952000: '瑙鲁',
952400: '尼泊尔',
952800: '荷兰',
953300: '阿鲁巴',
953500: '荷兰加勒比区',
954000: '新喀里多尼亚',
954800: '瓦努阿图',
955400: '新西兰',
955800: '尼加拉瓜',
956200: '尼日尔',
956600: '尼日利亚',
957000: '纽埃',
957400: '诺福克岛',
957800: '挪威',
958000: '北马里亚纳群岛',
958100: '美国本土外小岛屿',
958300: '密克罗尼西亚联邦',
958400: '马绍尔群岛',
958500: '帕劳',
958600: '巴基斯坦',
959100: '巴拿马',
959800: '巴布亚新几内亚',
960000: '巴拉圭',
960400: '秘鲁',
960800: '菲律宾',
961200: '皮特凯恩群岛',
961600: '波兰',
962000: '葡萄牙',
962400: '几内亚比绍',
962600: '东帝汶',
963000: '波多黎各',
963400: '卡塔尔',
963800: '留尼汪',
964200: '罗马尼亚',
964300: '俄罗斯',
964600: '卢旺达',
965200: '圣巴泰勒米岛',
965400: '圣赫勒拿',
965900: '圣基茨和尼维斯',
966000: '安圭拉',
966200: '圣卢西亚',
966300: '法属圣马丁',
966600: '圣皮埃尔和密克隆',
967000: '圣文森特和格林纳丁斯',
967400: '圣马力诺',
967800: '圣多美和普林西比',
968200: '沙特阿拉伯',
968600: '塞内加尔',
968800: '塞尔维亚',
969000: '塞舌尔',
969400: '塞拉利昂',
970200: '新加坡',
970300: '斯洛伐克',
970400: '越南',
970500: '斯洛文尼亚',
970600: '索马里',
971000: '南非',
971600: '津巴布韦',
972400: '西班牙',
972800: '南苏丹',
972900: '苏丹',
973200: '西撒哈拉',
974000: '苏里南',
974400: '斯瓦尔巴群岛和 扬马延岛',
974800: '斯威士兰',
975200: '瑞典',
975600: '瑞士',
976000: '叙利亚',
976200: '塔吉克斯坦',
976400: '泰国',
976800: '多哥',
977200: '托克劳',
977600: '汤加',
978000: '特立尼达和多巴哥',
978400: '阿联酋',
978800: '突尼斯',
979200: '土耳其',
979500: '土库曼斯坦',
979600: '特克斯和凯科斯群岛',
979800: '图瓦卢',
980000: '乌干达',
980400: '乌克兰',
980700: '马其顿',
981800: '埃及',
982600: '英国',
983100: '根西岛',
983200: '泽西岛',
983300: '马恩岛',
983400: '坦桑尼亚',
984000: '美国',
985000: '美属维尔京群岛',
985400: '布基纳法索',
985800: '乌拉圭',
986000: '乌兹别克斯坦',
986200: '委内瑞拉',
987600: '瓦利斯和富图纳',
988200: '萨摩亚',
988700: '也门',
989400: '赞比亚'
}
};
\ No newline at end of file
import axios from 'axios';
import Vue from 'vue';
import Router from '../router'
// import {
// Toast
// } from 'vant';
......@@ -12,23 +15,33 @@ function Toast(msg) {
// 服务器地址
let base = "https://ow.go.qudone.com";
let baseWxAppid = "wx9fc8816188c0ef2a";
let wxOauthUrl = "http://clubwxuat.hm.liby.com.cn/api/getOpenId.htm";
if (location.href.indexOf("//k.wxpai.cn") > 0) {
base = "https://api.k.wxpai.cn/bizproxy"
baseWxAppid = "wx9fc8816188c0ef2a";
wxOauthUrl = "http://clubwxuat.hm.liby.com.cn/api/getOpenId.htm";
}
let whileList = [
"https://api.k.wxpai.cn/bizproxy/kdapi/file/upload"
]
// let base = COM.baseUrl;
// 请求拦截器
// axios.interceptors.request.use(
// config => {
// // 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加了
// // 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断
// const token = "token"; //这里写入token
// token && (config.headers.Authorization = token);
// return config;
// },
// error => {
// return Promise.error(error);
// })
axios.interceptors.request.use(
config => {
// 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加了
// 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断
const token = store.getSession();
if (token && whileList.indexOf(config.url) < 0) {
config.headers["sessionId"] = token;
}
return config;
},
error => {
return Promise.error(error);
})
// 响应拦截器
axios.interceptors.response.use(
......@@ -37,7 +50,11 @@ axios.interceptors.response.use(
if (response.data.code === 200) {
return Promise.resolve(response);
} else {
Toast(response.data.bizMsg);
if (response.data.code == 404) {
store.removeSession();
store.saveRedirectUrl();
Router.push("/");
}
return Promise.reject(response);
}
} else {
......@@ -46,43 +63,9 @@ axios.interceptors.response.use(
},
// 服务器状态码不是200的情况
error => {
console.log("Router.path === ", Router.history.current);
if (error.response.status) {
switch (error.response.status) {
// 401: 未登录
// 未登录则跳转登录页面,并携带当前页面的路径
// 在登录成功后返回当前页面,这一步需要在登录页操作。
case 401:
router.replace({
path: '/login',
query: {
redirect: router.currentRoute.fullPath
}
});
break;
// 403 token过期
// 登录过期对用户进行提示
// 清除本地token和清空vuex中token对象
// 跳转登录页面
case 403:
Toast({
message: '登录过期,请重新登录',
duration: 1000,
forbidClick: true
});
// 清除token
localStorage.removeItem('token');
store.commit('loginSuccess', null);
// 跳转登录页面,并将要浏览的页面fullPath传过去,登录成功后跳转需要访问的页面
setTimeout(() => {
router.replace({
path: '/login',
query: {
redirect: router.currentRoute.fullPath
}
});
}, 1000);
break;
// 404请求不存在
case 404:
Toast({
message: '网络请求不存在',
......@@ -119,7 +102,9 @@ export const httpGet = params => {
url,
data
} = params;
return axios.get(`${base}${url}`, {
data = !data ? {} : data;
let requestUrl = url.indexOf("http:") >= 0 || url.indexOf("https:") >= 0 ? url : `${base}${url}`;
return axios.get(requestUrl, {
params: data
}).then(res => res.data.content);
}
......@@ -133,9 +118,57 @@ export const httpPost = params => {
url,
data
} = params;
return axios.post(`${base}${url}`, data).then(res => res.data.content);
let requestUrl = url.indexOf("http:") >= 0 || url.indexOf("https:") >= 0 ? url : `${base}${url}`;
return axios.post(requestUrl, data).then(res => res.data.content);
}
export const store = {
putSession: function (sessionId) {
localStorage.setItem("_jiajia_childrenhost_sesson", sessionId);
},
getSession: function () {
return localStorage.getItem("_jiajia_childrenhost_sesson");
},
removeSession: function () {
localStorage.removeItem("_jiajia_childrenhost_sesson");
},
saveRedirectUrl() {
let current = Router.history.current || {};
let data = {
route: current.path,
params: current.query
}
localStorage.setItem("_jiajia_childrenhost_redirect", JSON.stringify(data));
},
getRedirectUrl() {
let dataStr = localStorage.getItem("_jiajia_childrenhost_redirect");
if (dataStr) {
let data = JSON.parse(dataStr);
let path = data.route;
let sep = "?";
if (data.params) {
for (let key in data.params) {
path += sep + key + "=" + data.params[key];
sep = "&";
}
}
return path;
}
return null;
},
delRedirectUrl() {
localStorage.removeItem("_jiajia_childrenhost_redirect");
},
getWxAppId() {
return `${baseWxAppid}`;
},
toWxLogin() {
let baseUrl = location.origin + location.pathname;
let returnUrl = encodeURIComponent(`${wxOauthUrl}` + "?returnUrl=" + baseUrl + "?openId=OPENID&p=p");
let oauthUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + `${baseWxAppid}` + "&redirect_uri=" + returnUrl + "&response_type=code&scope=snsapi_userinfo&stats=" + new Date().getTime() + "#wechat_redirect";
location.href = oauthUrl;
}
}
/**
* 封装post方法
......@@ -152,5 +185,38 @@ export const formdata = params => {
url,
data
} = params;
return axios.post(`${base}${url}`, data, formDataHeaders).then(res => res.data);
let requestUrl = url.indexOf("http:") >= 0 || url.indexOf("https:") >= 0 ? url : `${base}${url}`;
return axios.post(requestUrl, data, formDataHeaders).then(res => res.data);
}
export const request = {
post(url, data) {
return axios.post(`${requestDomain}${url}`, data);
},
get(url, data) {
return axios.get(`${requestDomain}${url}`, { params: data });
},
form(url, params) {
let formData = new FormData(); //使用formData对象
for (let key in params) {
formData.append(key, params[key]);
}
let requestUrl = url.indexOf("://") >= 0 ? `${url}` : `${requestDomain}${url}`;
return axios.post(requestUrl, formData, formDataHeaders)
},
build(url, params){
let fullUrl = `${requestDomain}${url}`;
let split = "";
for(let key in params){
if(split){
split = "&";
} else {
split = "?"
}
fullUrl += split + key +"="+params[key];
}
return fullUrl;
},
/*test*/
};
\ No newline at end of file
......
<template>
<van-overlay :show="show" >
</van-overlay>
</template>
<script>
import Vue from "vue";
import { Overlay } from "vant";
Vue.use(Overlay);
export default {
props: ["value"],
data() {
return {
model: this.value,
show: false
};
},
methods: {},
created() {}
};
</script>
<style lang="less" scoped>
</style>
<template>
<div class="bottom-panel">
<div class="bottom-tool-container">
<div class="item" v-bind:class="{activity : activityIndex == 1}" @click="itemSelect(1)">
<div class="white-bg">
<div class="icon icon-01"></div>
</div>
<div class="name">大赛介绍</div>
</div>
<div class="item" v-bind:class="{activity : activityIndex == 2}" @click="itemSelect(2)">
<div class="white-bg">
<div class="icon icon-02"></div>
</div>
<div class="name">我要报名</div>
</div>
<div class="item" v-bind:class="{activity : activityIndex == 3}" @click="itemSelect(3)">
<div class="white-bg">
<div class="icon icon-03"></div>
</div>
<div class="name">人气评选</div>
</div>
<div class="item" v-bind:class="{activity : activityIndex == 4}" @click="itemSelect(4)">
<div class="white-bg">
<div class="icon icon-04"></div>
</div>
<div class="name">更多福利</div>
</div>
</div>
</div>
</template>
<script>
export default {
props: ["value"],
data() {
return {
activityIndex: this.value
};
},
methods: {
itemSelect(index) {
if (this.activityIndex == index) {
return;
}
this.activityIndex = index;
switch (this.activityIndex) {
case 1:
this.$router.push("/");
break;
case 2:
this.$router.push("/sign");
break;
case 3:
this.$router.push("/list");
break;
case 4:
this.$router.push("/welfare");
break;
}
this.$emit("selectChange", this.activityIndex);
}
},
created() {
if (!this.activityIndex) {
this.activityIndex = 1;
}
}
};
</script>
<style lang="less" scoped>
.bottom-panel {
z-index: 999;
position: fixed;
bottom: 0;
height: 165px;
width: 750px;
background: url(../../assets/imgs/bottom-grassland.png) no-repeat;
background-size: 100% auto;
background-position: bottom;
}
.bottom-tool-container {
margin: auto;
width: 680px;
display: flex;
justify-content: space-between;
}
.item {
width: 140px;
.icon {
margin: auto;
width: 86px;
height: 86px;
}
.icon-01 {
background: url(../../assets/imgs/icon-01.png);
background-size: 100%;
}
.icon-02 {
background: url(../../assets/imgs/icon-02.png);
background-size: 100%;
}
.icon-03 {
background: url(../../assets/imgs/icon-03.png);
background-size: 100%;
}
.icon-04 {
background: url(../../assets/imgs/icon-04.png);
background-size: 100%;
}
.name {
width: 100%;
text-align: center;
color: #fff;
font-size: 24px;
}
.white-bg {
margin: auto;
padding-top: 7px;
background-color: transparent;
width: 110px;
height: 103px;
border-radius: 55px;
}
}
.activity {
.white-bg {
background-color: #fff !important;
}
}
</style>
<template>
<div class="home">home</div>
<div class="home">
<!-- <div class="title"></div>
<div class="sys-btn btn-margin">我要报名</div>
<div class="rule"></div>
<div class="prize"></div>
<div class="leap-01"></div>
<div class="leap-02"></div>
<div class="leap-03"></div>
<div class="remain"></div>
<bottom-tool v-model="activityIndex"></bottom-tool>-->
</div>
</template>
<script>
let urls = {
login: "/jiajiaCHApi/app/login"
};
import { store, httpPost } from "@/api/fetch-api.js";
export default {
name: 'home'
}
name: "home",
data() {
return {
activityIndex: 1,
loginParam: {
openid: "",
accessToken: ""
}
};
},
methods: {
init() {
if (store.getSession()) {
this.$router.push("/index");
} else {
let params = this.analysisParams();
if (params["openId"]) {
this.loginParam.openid = params["openId"];
this.loginParam.accessToken = params["access_token"];
this.login();
} else {
store.toWxLogin();
}
}
},
analysisParams() {
let params = {};
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split("=");
params[pair[0]] = pair[1];
}
return params;
},
login() {
httpPost({ url: urls.login, data: this.loginParam }).then(res => {
store.putSession(res.sessionId);
let path = store.getRedirectUrl();
path = !path ? "/index" : path;
store.delRedirectUrl();
this.$router.push(path);
});
}
},
created() {
this.init();
}
};
</script>
<style lang="scss" scoped>
.home {
position: relative;
text-align: center;
background-color: #74cb35;
}
</style>
......
import api from '../../api/api'
import {
httpGet,
httpPost
} from '../../api/fetch-api.js'
export default {
data() {
return {
key: 'value'
}
},
components: {},
methods: {
initData() {}
},
mounted() {},
created() {
console.log("demo created");
}
}
\ No newline at end of file
@import './../../styles/support';
<template>
<div class="page">
<div class="app__bgc bgc"></div>
<div class="app__bg bg"></div>
<div class="app__content main">
<div class="top-space"></div>
<div class="content">
<span class="iconfont iconclose">demo</span>
</div>
</div>
</div>
</template>
<script src="./index.js"></script>
<style lang="scss" scoped>
// @import './index.scss';
</style>
\ No newline at end of file
File mode changed
<template>
<div class="home">
<div class="title"></div>
<div class="sys-btn btn-margin" @click="toSign">立即报名</div>
<div class="rule"></div>
<div class="prize"></div>
<div class="leap-01"></div>
<div class="leap-02"></div>
<div class="leap-03"></div>
<div class="remain"></div>
<bottom-tool v-model="activityIndex"></bottom-tool>
</div>
</template>
<script>
import BottomTool from "@/components/bottom-tools/bottom-tools";
export default {
name: "home",
data() {
return {
activityIndex: 1
};
},
methods : {
toSign(){
this.$router.push("/sign")
}
},
components: {
BottomTool
}
};
</script>
<style lang="scss" scoped>
.home {
position: relative;
text-align: center;
background-color: #74cb35;
}
.title {
width: 750px;
height: 955px;
background: url(../../assets/imgs/idx-head.jpg);
background-size: 100%;
}
.rule {
width: 689px;
height: 672px;
background: url(../../assets/imgs/rule.png);
background-size: 100%;
margin: auto;
margin-top: 26px;
}
.prize {
width: 684px;
height: 1570px;
background: url(../../assets/imgs/prize.png);
background-size: 100%;
margin: auto;
margin-top: 40px;
}
.btn-margin {
margin-top: 10px;
}
.leap-01 {
width: 87px;
height: 216px;
background: url(../../assets/imgs/leap-01.png);
background-size: 100%;
position: absolute;
right: 0;
top: 990px;
}
.leap-02 {
width: 138px;
height: 290px;
background: url(../../assets/imgs/leap-02.png);
background-size: 100%;
position: absolute;
right: 0;
top: 1665px;
}
.leap-03 {
width: 750px;
height: 355px;
background: url(../../assets/imgs/leap-03.png);
background-size: 100%;
position: absolute;
bottom: 0px;
}
.remain{
height: 0px;
}
</style>
File mode changed
<template>
<div class="editClass">
<div class="sys-container-panel content">
<div class="container-title">我要报名</div>
<div class="head-line"></div>
<div class="text-container space">
<div class="label">选手姓名:</div>
<div class="form-item">
<input v-model="formData.name" placeholder="请填写参赛者姓名" />
</div>
</div>
<div class="text-container space">
<div class="label">所属地区:</div>
<div class="inline-group inline-group-width">
<div class="form-item inline-group inline-02" @click="selectCityHandler">
<div class="label">{{formData.province ? formData.province : "请选择"}}</div>
<div class="icon-draw-down"></div>
</div>
<div class="form-item inline-group inline-02" @click="selectCityHandler">
<div class="label">{{formData.city ? formData.city : "请选择"}}</div>
<div class="icon-draw-down"></div>
</div>
</div>
</div>
<div class="text-container space">
<div class="label">个人简介:</div>
<div class="form-item">
<input v-model="formData.profile" placeholder="可填写参赛者获取过荣誉、特殊才艺技能等" />
</div>
</div>
<div class="text-container space">
<div class="label">竞赛宣言:</div>
<div class="form-item">
<input v-model="formData.slogan" placeholder="参赛口号,不超过8个字" />
</div>
</div>
<div class="text-container space">
<div class="label">家长姓名:</div>
<div class="form-item">
<input v-model="formData.parentName" placeholder="请填写父亲/母亲称呼" />
</div>
</div>
<div class="text-container space">
<div class="label">联系方式:</div>
<div class="form-item">
<input v-model="formData.parentMobile" placeholder="请填写正确手机号码" />
</div>
</div>
<div class="text-container space">
<div class="label">照片/视频:</div>
<div class="item-group top">
<div>
<upload-item v-model="formData.worksList"></upload-item>
</div>
<div class="tips">可上传1-3张照片,首张默认为海报图</div>
</div>
</div>
</div>
<div class="sys-btn-02" :class="{disabled : !autoRegister}" @click="submitFormHandler">确认提交</div>
<div class="center base-margin auto-register-tips" @click="acceptRegisterHandler">
<div class="icon-register" :class="{activity : autoRegister}"></div>
<div class="tips">自动注册为立白集团会员,立享会员权益,详见“更多福利”</div>
</div>
<van-popup position="bottom" :style="{ height: '40%' }" v-model="area.show">
<van-area
:area-list="areaList"
:columns-num="2"
title="选择城市"
:value="formData.cityCode"
@cancel="area.show = false"
@confirm="confirmSelectCityHandler"
/>
</van-popup>
</div>
</template>
<script>
let urls = {
area: "https://api.k.wxpai.cn/bizproxy/kdapi/area",
submit: "/jiajiaCHApi/app/works/submit"
};
import UploadItem from "./UploadItem";
import { httpGet, httpPost } from "@/api/fetch-api";
import AreaList from "@/api/area";
import Vue from "vue";
import { Toast } from "vant";
import { Area } from "vant";
import { Popup } from "vant";
Vue.use(Popup);
Vue.use(Area);
Vue.use(Toast);
export default {
props: ["value"],
data() {
return {
autoRegister: true,
successModelVisiable: true,
area: {
show: false
},
formData: this.value
};
},
methods: {
selectCityHandler() {
if (!this.formData.cityCode) {
this.formData.cityCode = "110100";
}
this.area.show = true;
},
confirmSelectCityHandler(res) {
let province = res[0];
let city = res[1];
if (!city) {
return;
}
this.formData.province = province.name;
this.formData.provinceCode = province.code;
this.formData.city = city.name;
this.formData.cityCode = city.code;
this.area.show = false;
},
acceptRegisterHandler() {
this.autoRegister = !this.autoRegister;
if (!this.autoRegister) {
}
},
submitFormHandler() {
if (!this.autoRegister) {
return;
}
if (!this.formData.name) {
Toast("请填写“参数者姓名”");
return;
}
if (!this.formData.province) {
Toast("请选择“所属地区”");
return;
}
if (!this.formData.profile) {
Toast("请填写“个人简介”");
return;
}
if (!this.formData.slogan) {
Toast("请填写“竞赛宣言”");
return;
}
if (this.formData.slogan.length > 8) {
Toast("“竞赛宣言”不要超过8个字");
return;
}
if (!this.formData.parentName) {
Toast("请填写“家长姓名”");
return;
}
if (!this.formData.parentMobile) {
Toast("请填写“联系方式”");
return;
}
if (
this.formData.parentMobile.indexOf("1") != 0 ||
this.formData.parentMobile.length != 11
) {
Toast("请填写正确的“联系方式”");
return;
}
if (!this.formData.worksList || this.formData.worksList.length == 0) {
Toast("请上传作品");
return;
}
Toast.loading({
mask: true,
message: "数据提交中..."
});
httpPost({ url: urls.submit, data: this.formData }).then(res => {
Toast.clear();
this.$emit("submit", res);
});
}
},
computed: {
areaList() {
return AreaList;
}
},
components: {
UploadItem
},
created() {}
};
</script>
<style lang="scss" scoped>
.content {
margin: 85px auto 60px auto;
padding-bottom: 60px;
.head-line {
height: 60px;
}
.edit {
width: 630px;
text-align: right;
u {
font-size: 24px;
color: #5db288;
position: relative;
z-index: 1000;
}
}
.swipe {
width: 630px;
height: 320px;
margin: auto;
border: 2px solid #82acae;
border-radius: 30px;
}
.space {
margin-top: 20px !important;
}
.top {
display: flex;
align-items: flex-start !important;
}
.inline-group-width {
width: 500px;
}
.inline-group {
display: flex;
justify-content: space-between;
align-items: center;
}
.text-container {
display: flex;
align-items: center;
width: 620px;
margin: auto;
.inline {
width: 315px !important;
}
.inline-02 {
width: 180px !important;
padding: 0 30px;
.label {
font-size: 20px;
}
}
.right {
justify-content: flex-end !important;
}
.label {
min-width: 128px;
font-size: 20px;
text-align: left;
}
.msg {
color: #303531;
font-size: 24px;
text-align: left;
}
.primay {
font-size: 32px !important;
font-weight: 600;
color: #ff9e30;
}
.form-item {
width: 500px;
height: 52px;
border: 1px solid #82acae;
background-color: #addfe1;
border-radius: 26px;
line-height: 52px;
display: flex;
align-items: center;
input {
margin-left: 25px;
line-height: 52px;
height: 52px;
border: none;
width: 90%;
height: 100%;
background-color: transparent;
position: relative;
z-index: 1000;
font-size: 22px;
}
}
}
input::-webkit-input-placeholder {
color: #4f9984;
font-size: 18px;
}
}
.view-btn-group {
display: flex;
width: 730px;
margin: auto;
justify-content: space-between;
margin-bottom: 200px;
.sys-btn-02 {
width: 300px;
line-height: 90px;
}
}
.auto-register-tips {
width: 700px;
margin: auto;
}
.icon-draw-down {
width: 30px;
height: 18px;
background: url(../../../assets/imgs/draw-down.png) no-repeat;
background-size: 100%;
}
.base-margin {
margin-top: 40px;
}
.icon-register {
width: 30px;
height: 30px;
background: url(../../../assets/imgs/checkbox-uncheck.png) no-repeat;
background-size: 100%;
}
.icon-register.activity {
width: 30px;
height: 30px;
background: url(../../../assets/imgs/checkbox-checked.png) no-repeat;
background-size: 100%;
}
.center {
display: flex;
justify-content: center;
align-items: center;
}
.disabled {
filter: grayscale(100%);
}
.tips {
font-size: 20px;
color: #064e39;
padding-left: 10px;
text-align: left;
}
</style>
<template>
<div>
<div class="img-container" v-for="(item,index) in fileList" :key="index">
<img :src="item.worksUrl" />
<i class="van-icon van-icon-delete" @click="deleteImageHandler(index)"></i>
</div>
<van-uploader
ref="vanUploader"
class="uploader"
:after-read="uploadSumit"
v-if="!fileList || fileList.length < 3"
>+</van-uploader>
</div>
</template>
<script>
import { request } from "@/api/fetch-api.js";
import Vue from "vue";
import { Uploader } from "vant";
Vue.use(Uploader);
/**
* 外层插件可通过监听:v-on:before-upload;v-on:after-upload两个事件监听上传结果
* after-upload(success, src)
*/
export default {
props: ["value"],
data() {
return {
fileList: this.value,
uploadUrl: "https://api.k.wxpai.cn/bizproxy/kdapi/file/upload",
};
},
methods: {
uploadSumit(params) {
console.log(params);
let data = {
path: "/pro/jiajiaChildrenHost",
file: params.file
};
request
.form(this.uploadUrl, data)
.then(result => {
let uploadResult = {
worksUrl: result.data.content,
worksType: params.file.type.indexOf("image") >= 0 ? "pic" : "video"
};
if (!this.fileList) {
this.fileList = [];
}
this.fileList.push(uploadResult);
this.$emit("input", this.fileList);
})
.catch(res => {});
},
deleteImageHandler(index) {
this.fileList.splice(index, 1);
}
},
computed: {
currentValue: function() {
return this.value;
}
}
};
</script>
<style lang="scss" scoped>
.uploader {
border: 1px solid #82acae;
border-radius: 6px;
position: relative;
overflow: hidden;
padding: 10px;
background-color: #addfe1;
width: 120px;
min-height: 120px;
font-size: 40px;
line-height: 120px;
text-align: center;
font-weight: bold;
}
.img-container {
border: 1px solid #82acae;
border-radius: 6px;
position: relative;
overflow: hidden;
padding: 10px;
background-color: #addfe1;
width: 120px;
text-align: center;
font-weight: bold;
margin-bottom: 10px;
img {
width: 100%;
}
.van-icon {
background-color: rgba($color: #000000, $alpha: 0.3);
position: absolute;
right: 10px;
bottom: 5px;
font-size: 40px;
}
}
.avatar {
max-width: 120px;
max-height: 120px;
display: block;
}
</style>
<template>
<div class="viewClass">
<div class="sys-container-panel content">
<div class="container-title">我要报名</div>
<div class="head-line"></div>
<div class="edit">
<u @click="formEditHandler">信息编辑</u>
</div>
<div class="swipe">
<van-swipe :autoplay="5000">
<van-swipe-item v-for="(works, index) in formData.worksList" :key="index">
<img :src="works.worksUrl" />
</van-swipe-item>
</van-swipe>
</div>
<div class="text-container space">
<div class="text-container inline">
<div class="label">参数编号:</div>
<div class="msg">{{formData.worksNo}}</div>
</div>
<div class="text-container inline right">
<div class="label">目前人气值:</div>
<div class="msg primay">{{formData.praiseNumber}}</div>
</div>
</div>
<div class="text-container space">
<div class="label">来自城市:</div>
<div class="msg">{{formData.province}} {{formData.city}}</div>
</div>
<div class="text-container space top">
<div class="label">我的简介:</div>
<div class="msg">{{formData.profile}}</div>
</div>
<div class="text-container space top">
<div class="label">竞赛宣言:</div>
<div class="msg">{{formData.slogan}}</div>
</div>
<div class="privacy">
<hr />
<div class="text-container space top">
<div class="label">家长称呼:</div>
<div class="msg">{{formData.parentName}}</div>
</div>
</div>
</div>
<div class="view-btn-group">
<div class="sys-btn-02" @click="selfPraiseHandler">投自己一票</div>
<div class="sys-btn-02" @click="showShareHandler">呼叫亲友团</div>
</div>
</div>
</template>
<script>
let urls = {};
import { httpGet, httpPost } from "@/api/fetch-api";
import Vue from "vue";
import { Toast } from "vant";
import { Popup } from "vant";
Vue.use(Popup);
Vue.use(Toast);
export default {
props: ["value"],
data() {
return {
formData: this.value
};
},
methods: {
formEditHandler() {
this.$emit("edit");
},
selfPraiseHandler() {
// 自己点赞
},
showShareHandler() {
// 出现分享层
}
},
created() {
console.log("view model === ", this.formData);
}
};
</script>
<style lang="scss" scoped>
.content {
margin: 85px auto 60px auto;
padding-bottom: 60px;
.head-line {
height: 60px;
}
.edit {
width: 630px;
text-align: right;
u {
font-size: 24px;
color: #5db288;
position: relative;
z-index: 1000;
}
}
.swipe {
width: 630px;
height: 320px;
margin: auto;
border: 2px solid #82acae;
border-radius: 30px;
img {
max-height: 300px;
max-width: 600px;
}
}
.space {
margin-top: 20px !important;
}
.top {
display: flex;
align-items: flex-start !important;
}
.inline-group-width {
width: 500px;
}
.inline-group {
display: flex;
justify-content: space-between;
align-items: center;
}
.text-container {
display: flex;
align-items: center;
width: 620px;
margin: auto;
.inline {
width: 315px !important;
}
.inline-02 {
width: 180px !important;
padding: 0 30px;
.label {
font-size: 20px;
}
}
.right {
justify-content: flex-end !important;
}
.label {
min-width: 128px;
font-size: 20px;
text-align: left;
}
.msg {
color: #303531;
font-size: 24px;
text-align: left;
}
.primay {
font-size: 32px !important;
font-weight: 600;
color: #ff9e30;
}
}
.privacy {
width: 630px;
margin: auto;
hr {
border-top: 3px dashed #d4d1c5;
margin: 60px auto;
}
}
}
.view-btn-group {
display: flex;
width: 730px;
margin: auto;
justify-content: space-between;
margin-bottom: 200px;
.sys-btn-02 {
width: 300px;
line-height: 90px;
}
}
.auto-register-tips {
width: 700px;
margin: auto;
}
.icon-draw-down {
width: 30px;
height: 18px;
background: url(../../../assets/imgs/draw-down.png) no-repeat;
background-size: 100%;
}
</style>
<template>
<div class="home">
<div class="head-leap"></div>
<ViewModel v-model="formData" v-if="init && !formEdit" v-on:edit="formEdit=true"></ViewModel>
<EditModel v-model="formData" v-if="init && formEdit" v-on:submit="initActivity"></EditModel>
<div class="bottom-line"></div>
<bottom-tool v-model="activityIndex"></bottom-tool>
<!-- <van-popup class="messagePopue" v-model="successModelVisiable" :close-on-click-overlay="false">
<div></div>
</van-popup>-->
</div>
</template>
<script>
let urls = {
myWork: "/jiajiaCHApi/app/works",
area: "https://api.k.wxpai.cn/bizproxy/kdapi/area"
};
import BottomTool from "@/components/bottom-tools/bottom-tools";
import EditModel from "./components/EditModel";
import ViewModel from "./components/ViewModel";
import { httpGet, httpPost } from "@/api/fetch-api";
import AreaList from "@/api/area";
import Vue from "vue";
import { Toast } from "vant";
import { Area } from "vant";
import { Popup } from "vant";
import { Swipe, SwipeItem } from "vant";
Vue.use(Popup);
Vue.use(Area);
Vue.use(Toast);
Vue.use(Swipe).use(SwipeItem);
export default {
name: "home",
data() {
return {
activityIndex: 2,
formEdit: false,
init: false,
isMy: 1,
successModelVisiable: true,
formData: {
name: "",
province: "",
provinceCode: "",
city: "",
cityCode: "",
profile: "",
slogan: "",
parentName: "",
parentMobile: "",
worksList: []
}
};
},
methods: {
initActivity() {
Toast.loading({
mask: true,
message: "加载中..."
});
httpGet({ url: urls.myWork }).then(res => {
this.init = true;
Toast.clear();
this.formData = res.data || {};
if (!res.data) {
this.formEdit = true;
} else {
this.formEdit = false;
}
});
}
},
components: {
BottomTool,
EditModel,
ViewModel
},
created() {
this.initActivity();
}
};
</script>
<style lang="scss" scoped>
.home {
position: relative;
text-align: center;
}
.head-leap {
width: 750px;
height: 231px;
background: url(../../assets/imgs/head-leap.png);
background-size: 100%;
position: fixed;
left: 0;
top: 0;
z-index: 999;
}
.bottom-line {
height: 250px;
background-color: transparent;
}
</style>
<template>
<div class="home">
<div class="header"></div>
<div class="qy">
<div class="qrcode">
<img src="../../assets/imgs/walfare-qrcode.png" />
</div>
</div>
<div class="cj">
<div class="sys-btn-02 btn-position" @click="toDraw">马上抽奖</div>
</div>
<div class="remain"></div>
<bottom-tool v-model="activityIndex"></bottom-tool>
</div>
</template>
<script>
import BottomTool from "@/components/bottom-tools/bottom-tools";
export default {
name: "home",
data() {
return {
activityIndex: 4
};
},
methods: {
toDraw() {
this.$router.push("/draw");
}
},
components: {
BottomTool
}
};
</script>
<style lang="scss" scoped>
.home {
position: relative;
text-align: center;
background: url(../../assets/imgs/welfare-bg.jpg);
background-size: 100% auto;
}
.header {
width: 750px;
height: 247px;
background: url(../../assets/imgs/welfare-top.jpg);
background-size: 100%;
}
.qy {
width: 708px;
height: 1136px;
background: url(../../assets/imgs/welfare-qy.png);
background-size: 100%;
margin: auto;
margin-top: -100px;
position: relative;
.qrcode {
position: absolute;
width: 171px;
height: 171px;
left: 270px;
bottom: 140px;
img {
width: 100%;
}
}
}
.cj {
width: 718px;
height: 968px;
background: url(../../assets/imgs/welfare-cj.png);
background-size: 100%;
margin: auto;
margin-top: 50px;
position: relative;
}
.btn-position {
position: absolute;
bottom: 80px;
left: 188px;
}
.remain {
height: 150px;
}
</style>
......@@ -9,25 +9,49 @@ const routes = [{
name: 'home',
component: Home,
meta: {
title: '首页'
title: '加载中...'
}
},
{
path: '/demo',
name: 'demo',
component: () => import('./pages/demo/index.vue'),
},
{
path: '/index',
name: 'index',
component: () => import('./pages/index/index.vue'),
meta: {
title: '模板'
title: '大赛介绍'
}
},
{
path: '/about',
name: 'about',
component: () => import('./pages/About.vue'),
},
{
path: '/sign',
name: 'sign',
component: () => import('./pages/sign/index.vue'),
meta: {
title: '关于'
title: '我要报名'
}
},
{
path: '/list',
name: 'list',
component: () => import('./pages/list/index.vue'),
meta: {
title: '人气评选'
}
},
{
path: '/welfare',
name: 'welfare',
component: () => import('./pages/welfare/index.vue'),
meta: {
title: '更多福利'
}
},
{
path: '/draw',
name: 'draw',
component: () => import('./pages/draw/index.vue'),
meta: {
title: '幸运抽奖'
}
}
]
// add route path
......
......@@ -202,3 +202,4 @@
background-color: $colorBlack;
}
}
......
......@@ -38,7 +38,7 @@ module.exports = {
// 它支持webPack-dev-server的所有选项
devServer: {
host: "localhost",
host: "192.168.0.101",
port: 9001, // 端口号
https: false, // https:{type:Boolean}
open: true, //配置自动启动浏览器
......