shipengfei

Code Update

Showing 227 changed files with 3074 additions and 0 deletions
1 +.idea/*
...\ No newline at end of file ...\ No newline at end of file
1 +{
2 + "plugins": [
3 + "transform-strict-mode",
4 + "transform-es2015-modules-commonjs",
5 + "transform-es2015-spread",
6 + "transform-es2015-destructuring",
7 + "transform-es2015-parameters"
8 + ]
9 +}
...\ No newline at end of file ...\ No newline at end of file
1 +node_modules/
2 +bower_components/*
3 +dist/
4 +.idea
5 +npm-debug.log
6 +.env
7 +runtime/*
8 +vendor/*
9 +storage/logs/*
10 +.svn/*
11 +*.swp
12 +*.lock
13 +src/config.js
14 +src/utils/
15 +.idea/*
16 +my-project/*
17 +.project
18 +test/*
19 +test.html
20 +*.csv
No preview for this file type
1 +const path = require('path');
2 +var fetch = require('node-fetch');
3 +var fs = require('fs');
4 +var file = path.join(process.cwd(),'/data.csv');
5 +
6 +var json2csv = require('json2csv');
7 +var csvFields = ['accessToken','expires','updateTime'];
8 +
9 +//console.log(fetch);
10 +
11 +var accessToken = '9FrII2SMyfSQqMgTKXBc2CBE_c-O8MW4Hc1SCO9o7pK3k-BLr-x4oGhWMG_Bzr7Or7xnFr1nx-gGdlorAGUAh6Vtisdusb7gq9bbO_byzYOGUoQ8FZZncgZ3JCvI6ov1AXNcAIDQND';
12 +
13 +var getUsersUrl = 'https://api.weixin.qq.com/cgi-bin/user/get?access_token='+accessToken;
14 +
15 +console.log(getUsersUrl);
16 +
17 +var ss = function(url,param){
18 + return recordWxUsers()
19 +};
20 +
21 +var testUrl = 'http://thirdparty.qingger.com/auth/accessToken/MPShop';
22 +recordWxUsers(testUrl).then(function(response){
23 + console.log(response);
24 + if(typeof response.call=='function') {
25 + response.call(testUrl,response.param);
26 + }
27 +},function(rejResponse){
28 + console.log(rejResponse);
29 +});
30 +
31 +
32 +//
33 +// var openids = json.data.openid;
34 +// var openidLength = openids.length;
35 +// var lastOpenId = openidLength?openids[openidLength-1]:null;
36 +
37 +
38 +
39 +var result = json2csv({data:json.data,fields:csvFields});
40 +console.log(result);
41 +fs.writeFile(file,result,'utf8',function(err){
42 + if(err) throw err;
43 + console.log('Saved.');
44 +});
45 +
46 +
47 +function recordWxUsers(url,nextOpenId=null){
48 + return new Promise(function(resolve,reject){
49 + fetch(url)
50 + .then(function(res) {
51 + return res.json();
52 + })
53 + .then(function(json) {
54 + // 处理json
55 +
56 + return new Promise(function(resolve,reject){
57 + fetch(url)
58 + })
59 + });
60 + });
61 +
62 +}
63 +
64 +
65 +
1 +{
2 + "name": "shipfi",
3 + "version": "1.0.0",
4 + "description": "",
5 + "main": "index.js",
6 + "scripts": {
7 + "test": "echo \"Error: no test specified\" && exit 1",
8 + "clientApp": "node index.js"
9 + },
10 + "author": "shipfi",
11 + "license": "ISC",
12 + "dependencies": {
13 + "babel-cli": "^6.18.0",
14 + "express": "^4.14.0",
15 + "fast-csv": "^2.3.0",
16 + "fs-extra": "^1.0.0",
17 + "json2csv": "^3.7.1",
18 + "jsuri": "^1.3.1",
19 + "node-fetch": "^1.6.3",
20 + "whatwg-fetch": "^2.0.1"
21 + },
22 + "devDependencies": {
23 + "babel-cli": "^6.18.0",
24 + "babel-core": "^6.18.2",
25 + "babel-plugin-transform-es2015-destructuring": "^6.19.0",
26 + "babel-plugin-transform-es2015-modules-commonjs": "^6.18.0",
27 + "babel-plugin-transform-es2015-parameters": "^6.18.0",
28 + "babel-plugin-transform-es2015-spread": "^6.8.0",
29 + "babel-plugin-transform-strict-mode": "^6.18.0"
30 + }
31 +}
1 +/**
2 + * Created by shipfi on 2016/11/19.
3 + */
4 +
5 +// 实现Promise递归方案
6 +
7 +var count = 0;
8 +var http = function() {
9 + if(count === 0) {
10 + return Promise.resolve({more:true,user:{name:'jack',age:22}});
11 + }else {
12 + return Promise.resolve({more:false,user:{name:'isaac',age:21}});
13 + }
14 +};
15 +
16 +var a=[1,2];
17 +a = a.concat([3,4]);
18 +console.log(a);
19 +//
20 +// var fetchData = function() {
21 +// var goFetch = function(users) {
22 +// return http().then(function(data){
23 +// users.push(data.user);
24 +// if(data.more) {
25 +// console.log(users);
26 +// return goFetch(users);
27 +// }else{
28 +// console.log(users);
29 +// return users;
30 +// }
31 +// })
32 +// };
33 +//
34 +// return goFetch([]);
35 +// };
36 +//
37 +// fetchData();
...\ No newline at end of file ...\ No newline at end of file
1 +/**
2 + * Created by shipfi on 2016/11/19.
3 + */
4 +
5 +const path = require('path');
6 +var jsuri = require('jsuri');
7 +var fetch = require('node-fetch');
8 +var fs = require('fs');
9 +var json2csv = require('json2csv');
10 +
11 +var csvFields = ['subscribe','openid','nickname','sex','city','province','country','headimgurl','subscribe_time','remark','groupid'];
12 +
13 +//var accessToken = '2Y3cDvNzN2UNqEKXXGrnQox3Iv_DssZIlhrYOY5pAy_ZFhm1EkLyiJ68gq1DirrbpMv-YVVuo4P1BH9AMEE2w9C1Bhunj5F0Oj1If6qq0lwo58HZYqUNPyzcFgBN95aJTAGiALDBIO';
14 +var accessToken = 'IX6Bajo9XVnVX02JzImWeQOEEtNohoZB-5EWSDUxYpsDPwZdBOMyzK0S0ruuYwgfW6XObv0VLlruKmnp5k6wwRV_QeAEbVLoBWlRQKp9CUteKkJLwbxob0NMuZc7JqlCSTLfAIDABT';
15 +
16 +var getOpenIdFromWx = function(openid=null) {
17 + var wxGetUsersURL = 'https://api.weixin.qq.com/cgi-bin/user/get?access_token='+accessToken;
18 + if(openid) {
19 + wxGetUsersURL = wxGetUsersURL+"&next_openid="+openid;
20 + }
21 + //console.log(wxGetUsersURL);
22 + return new Promise(function(resolve,reject){
23 + fetch(wxGetUsersURL).then(function(res){
24 + resolve(res.json());
25 + }).catch(function(err){
26 + reject(err);
27 + });
28 + });
29 +};
30 +
31 +var getWxUsersInfo = function(openids,file_id=0){
32 + return new Promise(function(resolve,reject){
33 + if(!openids) reject(0);
34 + var lengths = openids.length;
35 + if(lengths<=0) reject(0);
36 + var times = parseInt(lengths/100)+1;
37 + var wxUserInfoUrl = 'https://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token='+accessToken;
38 +
39 + var lastOpenId = openids[lengths-1];
40 + // var jsonStream = { 'user_list':[] };
41 +
42 +
43 + for(var i=0;i<times;i++) {
44 + var iBegin = 0;
45 + var iEnd = 99;
46 +
47 + if(openids.length<0)
48 + return;
49 +
50 + var tmpOpenIds = openids.splice(iBegin,iEnd);
51 + var tmpJsonStream = { 'user_list':[] };
52 + tmpJsonStream.user_list = tmpOpenIds.map(function(x){
53 + return {"openid":x,"lang":'zh-CN'}
54 + });
55 + var userListLength = tmpJsonStream.user_list.length;
56 + var stringJsonStream = JSON.stringify(tmpJsonStream);
57 + // jsonStream.user_list = openids.splice(iBegin,iEnd).map(function(x){
58 + // return {"openid":x,"lang":'zh-CN'}
59 + // });
60 +
61 + if(userListLength>0) {
62 + fetch(wxUserInfoUrl,{method:'POST',body:stringJsonStream}).then(function(res){
63 + return res.json();
64 + }).then(function(json){
65 + console.log('Begin:========================================================>'+iBegin);
66 + var result = json2csv({data:json.user_info_list,fields:csvFields,'hasCSVColumnTitle':false});
67 + console.log(result);
68 + var fileName = path.join(process.cwd(),'/data_'+file_id+'.csv');
69 + fs.appendFile(fileName,"\n",'utf8',function(err){
70 + if(err) throw err;
71 + });
72 + fs.appendFile(fileName,result,'utf8',function(err){
73 + if(err) throw err;
74 + console.log('Saved.');
75 + });
76 +
77 + if(i>=times-1) {
78 + resolve(lastOpenId);
79 + }
80 + console.log('End:========================================================>'+iEnd);
81 + }).catch(function(err){
82 + reject(0);
83 + });
84 + }
85 + }
86 + });
87 +
88 +
89 +
90 +
91 +
92 +
93 + // for(var i=0;i<times;i++) {
94 + // jsonStream.user_list = [];
95 + // var iBegin = i*100;
96 + // var iEnd = (i*100+99)>(lengths-1)?(lengths-1):i*100+99;
97 + // if(iBegin>iEnd) break;
98 + // console.log(iBegin+':========================================================>'+iEnd);
99 + // jsonStream.user_list = openids.splice(iBegin,iEnd).map(function(x){
100 + // return {"openid":x,"lang":'zh-CN'}
101 + // });
102 + //
103 + // if(jsonStream.user_list.length>0) {
104 + // fetch(wxUserInfoUrl,{method:'POST',body:JSON.stringify(jsonStream)}).then(function(res){
105 + // return res.json()
106 + // }).then(function(json){
107 + // console.log(JSON.stringify(json.user_info_list));
108 + // // var result = json2csv({data:json.user_info_list,fields:csvFields});
109 + // // //console.log(result);
110 + // // var fileName = path.join(process.cwd(),'/data_'+file_id+'.csv');
111 + // // fs.appendFile(fileName,result,'utf8',function(err){
112 + // // if(err) throw err;
113 + // // console.log('Saved.');
114 + // // });
115 + // });
116 + //
117 + // }
118 + // }
119 +};
120 +
121 +var processDatas = function(_nextOpenid=null) {
122 + var openidArrays = [];
123 + var goFetch = function(nextOpenId,fileIndex=0) {
124 + return getOpenIdFromWx(nextOpenId).then(function(json){
125 + //console.log(response);
126 + if(typeof json.data != 'undefined') {
127 + var openids = json.data.openid;
128 + openidArrays = openidArrays.concat(openids);
129 + var openidLength = openids.length;
130 + var lastOpenId = openidLength?openids[openidLength-1]:null;
131 +
132 + //console.log(fileIndex+'++++++++++++++++++++++++++++++++++++++++++++++++++++>'+openidLength);
133 + //console.log(openids);
134 + //getWxUsersInfo(openids,fileIndex);
135 + getWxUsersInfo(openids).then(function(theRetLastOpenId){
136 + goFetch(theRetLastOpenId,fileIndex++);
137 + },function(rejRes){
138 + Promise.resolve(rejRes);
139 + });
140 + // if(lastOpenId) {
141 + //
142 + // }else{
143 + // Promise.resolve(openidArrays);
144 + // }
145 + }else{
146 + Promise.resolve(openidArrays);
147 + }
148 + }).catch(function(err){
149 + Promise.reject(err);
150 + });
151 + }
152 +
153 + return goFetch(_nextOpenid);
154 +};
155 +
156 +// var xxx = [];
157 +// for(var i=0;i<298;i++) {
158 +// xxx.push('OOOOPPPPP'+i);
159 +// }
160 +// getWxUsersInfo(xxx);
161 +var _nextOpenid = null;
162 + processDatas(_nextOpenid).then(function(data){
163 + //console.log(data);
164 +});
165 +//console.log(openIds);
...\ No newline at end of file ...\ No newline at end of file
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<!-- Komodo Project File - DO NOT EDIT -->
3 +<project id="4e9bd012-c316-4b2e-afce-d6ba26db9bfa" kpf_version="5" name="MyProject.komodoproject">
4 +<preference-set idref="4e9bd012-c316-4b2e-afce-d6ba26db9bfa" id="project" preftype="project">
5 +</preference-set>
6 +</project>
1 +#!/usr/bin/perl -w
2 +use strict;
3 +
4 +my ($dbName,$dbUser,$dbPassword) = ('portal','shipfi','12345qwerT');
5 +
6 +foreach(@ARGV) {
7 + print 'process table '.$_."\n";
8 + my $exportCmd = "mysqldump -u{$dbUser} -p{$dbPassword} {$dbName} {$_} > {$_}.sql";
9 +
10 + `$exportCmd`;
11 +}
12 +
13 +
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<module type="PYTHON_MODULE" version="4">
3 + <component name="FacetManager">
4 + <facet type="django" name="Django">
5 + <configuration>
6 + <option name="rootFolder" value="$MODULE_DIR$" />
7 + <option name="settingsModule" value="DjangoTest/settings.py" />
8 + <option name="manageScript" value="manage.py" />
9 + <option name="environment" value="&lt;map/&gt;" />
10 + <option name="commandsToSkip" value="" />
11 + </configuration>
12 + </facet>
13 + </component>
14 + <component name="NewModuleRootManager">
15 + <content url="file://$MODULE_DIR$" />
16 + <orderEntry type="inheritedJdk" />
17 + <orderEntry type="sourceFolder" forTests="false" />
18 + </component>
19 + <component name="TemplatesService">
20 + <option name="TEMPLATE_CONFIGURATION" value="Django" />
21 + <option name="TEMPLATE_FOLDERS">
22 + <list>
23 + <option value="$MODULE_DIR$/../DjangoTest\templates" />
24 + </list>
25 + </option>
26 + </component>
27 + <component name="TestRunnerService">
28 + <option name="PROJECT_TEST_RUNNER" value="Unittests" />
29 + </component>
30 +</module>
...\ No newline at end of file ...\ No newline at end of file
1 +<component name="ProjectDictionaryState">
2 + <dictionary name="shipfi" />
3 +</component>
...\ No newline at end of file ...\ No newline at end of file
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<project version="4">
3 + <component name="Encoding">
4 + <file url="PROJECT" charset="UTF-8" />
5 + </component>
6 +</project>
...\ No newline at end of file ...\ No newline at end of file
1 +<component name="InspectionProjectProfileManager">
2 + <settings>
3 + <option name="useProjectProfile" value="false" />
4 + <option name="USE_PROJECT_PROFILE" value="false" />
5 + <version value="1.0" />
6 + </settings>
7 +</component>
...\ No newline at end of file ...\ No newline at end of file
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<project version="4">
3 + <component name="JavaScriptLibraryMappings">
4 + <includedPredefinedLibrary name="ECMAScript 6" />
5 + </component>
6 +</project>
...\ No newline at end of file ...\ No newline at end of file
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<project version="4">
3 + <component name="JavaScriptSettings">
4 + <option name="languageLevel" value="ES6" />
5 + </component>
6 + <component name="PhpWorkspaceProjectConfiguration" backward_compatibility_performed="true" />
7 + <component name="ProjectInspectionProfilesVisibleTreeState">
8 + <entry key="Project Default">
9 + <profile-state>
10 + <expanded-state>
11 + <State>
12 + <id />
13 + </State>
14 + <State>
15 + <id>CoffeeScript</id>
16 + </State>
17 + <State>
18 + <id>Control flow issuesJavaScript</id>
19 + </State>
20 + <State>
21 + <id>Data flow issuesJavaScript</id>
22 + </State>
23 + <State>
24 + <id>Error handlingJavaScript</id>
25 + </State>
26 + <State>
27 + <id>General</id>
28 + </State>
29 + <State>
30 + <id>JavaScript</id>
31 + </State>
32 + <State>
33 + <id>Potentially confusing code constructsJavaScript</id>
34 + </State>
35 + <State>
36 + <id>Probable bugsJavaScript</id>
37 + </State>
38 + </expanded-state>
39 + <selected-state>
40 + <State>
41 + <id>CoffeeScript</id>
42 + </State>
43 + </selected-state>
44 + </profile-state>
45 + </entry>
46 + </component>
47 + <component name="ProjectRootManager" version="2" project-jdk-name="Python 2.7.13 virtualenv at C:\Python27\VirutalEnv" project-jdk-type="Python SDK" />
48 + <component name="SvnConfiguration">
49 + <configuration>C:\Users\My PC\AppData\Roaming\Subversion</configuration>
50 + </component>
51 + <component name="masterDetails">
52 + <states>
53 + <state key="ScopeChooserConfigurable.UI">
54 + <settings>
55 + <splitter-proportions>
56 + <option name="proportions">
57 + <list>
58 + <option value="0.2" />
59 + </list>
60 + </option>
61 + </splitter-proportions>
62 + </settings>
63 + </state>
64 + </states>
65 + </component>
66 +</project>
...\ No newline at end of file ...\ No newline at end of file
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<project version="4">
3 + <component name="ProjectModuleManager">
4 + <modules>
5 + <module fileurl="file://$PROJECT_DIR$/.idea/DjangoTest.iml" filepath="$PROJECT_DIR$/.idea/DjangoTest.iml" />
6 + </modules>
7 + </component>
8 +</project>
...\ No newline at end of file ...\ No newline at end of file
This diff is collapsed. Click to expand it.
1 +"""
2 +Django settings for DjangoTest project.
3 +
4 +Generated by 'django-admin startproject' using Django 1.10.6.
5 +
6 +For more information on this file, see
7 +https://docs.djangoproject.com/en/1.10/topics/settings/
8 +
9 +For the full list of settings and their values, see
10 +https://docs.djangoproject.com/en/1.10/ref/settings/
11 +"""
12 +
13 +import os
14 +
15 +# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
16 +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
17 +
18 +
19 +# Quick-start development settings - unsuitable for production
20 +# See https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/
21 +
22 +# SECURITY WARNING: keep the secret key used in production secret!
23 +SECRET_KEY = '+x-=a7*_1rk(5e7f^wll^pm(1r--*-1)ki*lhu1o1w3e$zw$7o'
24 +
25 +# SECURITY WARNING: don't run with debug turned on in production!
26 +DEBUG = True
27 +
28 +ALLOWED_HOSTS = []
29 +
30 +
31 +# Application definition
32 +
33 +INSTALLED_APPS = [
34 + 'django.contrib.admin',
35 + 'django.contrib.auth',
36 + 'django.contrib.contenttypes',
37 + 'django.contrib.sessions',
38 + 'django.contrib.messages',
39 + 'django.contrib.staticfiles',
40 +]
41 +
42 +MIDDLEWARE = [
43 + 'django.middleware.security.SecurityMiddleware',
44 + 'django.contrib.sessions.middleware.SessionMiddleware',
45 + 'django.middleware.common.CommonMiddleware',
46 + 'django.middleware.csrf.CsrfViewMiddleware',
47 + 'django.contrib.auth.middleware.AuthenticationMiddleware',
48 + 'django.contrib.messages.middleware.MessageMiddleware',
49 + 'django.middleware.clickjacking.XFrameOptionsMiddleware',
50 +]
51 +
52 +ROOT_URLCONF = 'DjangoTest.urls'
53 +
54 +TEMPLATES = [
55 + {
56 + 'BACKEND': 'django.template.backends.django.DjangoTemplates',
57 + 'DIRS': [os.path.join(BASE_DIR, 'templates')]
58 + ,
59 + 'APP_DIRS': True,
60 + 'OPTIONS': {
61 + 'context_processors': [
62 + 'django.template.context_processors.debug',
63 + 'django.template.context_processors.request',
64 + 'django.contrib.auth.context_processors.auth',
65 + 'django.contrib.messages.context_processors.messages',
66 + ],
67 + },
68 + },
69 +]
70 +
71 +WSGI_APPLICATION = 'DjangoTest.wsgi.application'
72 +
73 +
74 +# Database
75 +# https://docs.djangoproject.com/en/1.10/ref/settings/#databases
76 +
77 +DATABASES = {
78 + 'default': {
79 + 'ENGINE': 'django.db.backends.sqlite3',
80 + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
81 + }
82 +}
83 +
84 +
85 +# Password validation
86 +# https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators
87 +
88 +AUTH_PASSWORD_VALIDATORS = [
89 + {
90 + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
91 + },
92 + {
93 + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
94 + },
95 + {
96 + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
97 + },
98 + {
99 + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
100 + },
101 +]
102 +
103 +
104 +# Internationalization
105 +# https://docs.djangoproject.com/en/1.10/topics/i18n/
106 +
107 +LANGUAGE_CODE = 'en-us'
108 +
109 +TIME_ZONE = 'UTC'
110 +
111 +USE_I18N = True
112 +
113 +USE_L10N = True
114 +
115 +USE_TZ = True
116 +
117 +
118 +# Static files (CSS, JavaScript, Images)
119 +# https://docs.djangoproject.com/en/1.10/howto/static-files/
120 +
121 +STATIC_URL = '/static/'
1 +"""DjangoTest URL Configuration
2 +
3 +The `urlpatterns` list routes URLs to views. For more information please see:
4 + https://docs.djangoproject.com/en/1.10/topics/http/urls/
5 +Examples:
6 +Function views
7 + 1. Add an import: from my_app import views
8 + 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
9 +Class-based views
10 + 1. Add an import: from other_app.views import Home
11 + 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
12 +Including another URLconf
13 + 1. Import the include() function: from django.conf.urls import url, include
14 + 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
15 +"""
16 +from django.conf.urls import url
17 +from django.contrib import admin
18 +
19 +urlpatterns = [
20 + url(r'^admin/', admin.site.urls),
21 +]
1 +"""
2 +WSGI config for DjangoTest project.
3 +
4 +It exposes the WSGI callable as a module-level variable named ``application``.
5 +
6 +For more information on this file, see
7 +https://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/
8 +"""
9 +
10 +import os
11 +
12 +from django.core.wsgi import get_wsgi_application
13 +
14 +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "DjangoTest.settings")
15 +
16 +application = get_wsgi_application()
1 +#!/usr/bin/env python
2 +import os
3 +import sys
4 +
5 +if __name__ == "__main__":
6 + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "DjangoTest.settings")
7 + try:
8 + from django.core.management import execute_from_command_line
9 + except ImportError:
10 + # The above import may fail for some other reason. Ensure that the
11 + # issue is really that Django is missing to avoid masking other
12 + # exceptions on Python 2.
13 + try:
14 + import django
15 + except ImportError:
16 + raise ImportError(
17 + "Couldn't import Django. Are you sure it's installed and "
18 + "available on your PYTHONPATH environment variable? Did you "
19 + "forget to activate a virtual environment?"
20 + )
21 + raise
22 + execute_from_command_line(sys.argv)
1 +attrs==16.3.0
2 +Automat==0.5.0
3 +constantly==15.1.0
4 +Django==1.10.6
5 +incremental==16.10.1
6 +lxml==3.6.0
7 +mysql-connector-python==2.1.5
8 +MySQL-python==1.2.5
9 +six==1.10.0
10 +Twisted==17.1.0
11 +virtualenv==15.1.0
12 +zope.interface==4.3.3
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<module type="PYTHON_MODULE" version="4">
3 + <component name="NewModuleRootManager">
4 + <content url="file://$MODULE_DIR$" />
5 + <orderEntry type="inheritedJdk" />
6 + <orderEntry type="sourceFolder" forTests="false" />
7 + </component>
8 + <component name="TestRunnerService">
9 + <option name="PROJECT_TEST_RUNNER" value="Unittests" />
10 + </component>
11 +</module>
...\ No newline at end of file ...\ No newline at end of file
1 +<component name="ProjectDictionaryState">
2 + <dictionary name="shipfi" />
3 +</component>
...\ No newline at end of file ...\ No newline at end of file
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<project version="4">
3 + <component name="Encoding">
4 + <file url="PROJECT" charset="UTF-8" />
5 + </component>
6 +</project>
...\ No newline at end of file ...\ No newline at end of file
1 +<component name="InspectionProjectProfileManager">
2 + <settings>
3 + <option name="useProjectProfile" value="false" />
4 + <option name="USE_PROJECT_PROFILE" value="false" />
5 + <version value="1.0" />
6 + </settings>
7 +</component>
...\ No newline at end of file ...\ No newline at end of file
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<project version="4">
3 + <component name="JavaScriptLibraryMappings">
4 + <includedPredefinedLibrary name="ECMAScript 6" />
5 + </component>
6 +</project>
...\ No newline at end of file ...\ No newline at end of file
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<project version="4">
3 + <component name="JavaScriptSettings">
4 + <option name="languageLevel" value="ES6" />
5 + </component>
6 + <component name="PhpWorkspaceProjectConfiguration" backward_compatibility_performed="true" />
7 + <component name="ProjectInspectionProfilesVisibleTreeState">
8 + <entry key="Project Default">
9 + <profile-state>
10 + <expanded-state>
11 + <State>
12 + <id />
13 + </State>
14 + <State>
15 + <id>CoffeeScript</id>
16 + </State>
17 + <State>
18 + <id>Control flow issuesJavaScript</id>
19 + </State>
20 + <State>
21 + <id>Data flow issuesJavaScript</id>
22 + </State>
23 + <State>
24 + <id>Error handlingJavaScript</id>
25 + </State>
26 + <State>
27 + <id>General</id>
28 + </State>
29 + <State>
30 + <id>JavaScript</id>
31 + </State>
32 + <State>
33 + <id>Potentially confusing code constructsJavaScript</id>
34 + </State>
35 + <State>
36 + <id>Probable bugsJavaScript</id>
37 + </State>
38 + </expanded-state>
39 + <selected-state>
40 + <State>
41 + <id>CoffeeScript</id>
42 + </State>
43 + </selected-state>
44 + </profile-state>
45 + </entry>
46 + </component>
47 + <component name="ProjectRootManager" version="2" project-jdk-name="Python 2.7.13 virtualenv at C:\Python27\VirutalEnv" project-jdk-type="Python SDK" />
48 + <component name="SvnConfiguration">
49 + <configuration>C:\Users\My PC\AppData\Roaming\Subversion</configuration>
50 + </component>
51 + <component name="masterDetails">
52 + <states>
53 + <state key="ScopeChooserConfigurable.UI">
54 + <settings>
55 + <splitter-proportions>
56 + <option name="proportions">
57 + <list>
58 + <option value="0.2" />
59 + </list>
60 + </option>
61 + </splitter-proportions>
62 + </settings>
63 + </state>
64 + </states>
65 + </component>
66 +</project>
...\ No newline at end of file ...\ No newline at end of file
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<project version="4">
3 + <component name="ProjectModuleManager">
4 + <modules>
5 + <module fileurl="file://$PROJECT_DIR$/.idea/Learns.iml" filepath="$PROJECT_DIR$/.idea/Learns.iml" />
6 + </modules>
7 + </component>
8 +</project>
...\ No newline at end of file ...\ No newline at end of file
This diff is collapsed. Click to expand it.
1 +#!/usr/bin/python
2 +# coding=utf-8
3 +
1 +## 语句
2 +
3 +### 1. 迭代
4 +
5 +* 使用For迭代序列对象
6 +
7 + ```python
8 + nameList = ['W','N','S','H']
9 + for eachName in nameList:
10 + print eachName, '.'
11 + ```
12 +
13 +
14 +
15 +* 使用For迭代序列索引项
16 +
17 + ```python
18 + for index in range(len(nameList)):
19 + print index, nameList[index]
20 + ```
21 +
22 +
23 +
24 +* 使用For迭代项和索引
25 +
26 + ```python
27 + for i,name in enumerate(nameList):
28 + print '%d %s'%(i,name)
29 + ```
30 +
31 +
...\ No newline at end of file ...\ No newline at end of file
1 +{
2 + "presets": ["es2015", "stage-2"],
3 + "plugins": ["transform-runtime"],
4 + "comments": false
5 +}
1 +root = true
2 +
3 +[*]
4 +charset = utf-8
5 +indent_style = space
6 +indent_size = 2
7 +end_of_line = lf
8 +insert_final_newline = true
9 +trim_trailing_whitespace = true
1 +build/*.js
2 +config/*.js
3 +dist/*.js
4 +node_modules/*
5 +src/static/*
6 +src/assets/*
...\ No newline at end of file ...\ No newline at end of file
1 +/* Refer : http://eslint.cn/docs/user-guide/configuring */
2 +
3 +module.exports = {
4 + root: true,
5 + /* 默认使用Espree作为其解析器, 但在本环境中,使用babel-eslint作其解析器 */
6 + parser: 'babel-eslint',
7 +
8 + /* 设置解析器选项 */
9 + parserOptions: {
10 + /* 设置为 3, 5 (默认), 6、7 或 8 指定你想要使用的 ECMAScript 版本。你也可以指定为 2015(同 6),2016(同 7),或 2017(同 8)使用年份命名 */
11 + "ecmaVersion" : 6,
12 + /* 设置为 "script" (默认) 或 "module"(如果你的代码是 ECMAScript 模块)。 */
13 + "sourceType" : 'module',
14 + /* 额外的语言特性: */
15 + "ecmaFeatures": {
16 + "jsx": true
17 + }
18 + },
19 +
20 + /* 全局环境变量 */
21 + env : {
22 + "node" : true,
23 + "commonjs" : true,
24 + "jquery" : true,
25 + "es6" : true,
26 +
27 + },
28 +
29 + /* 项目全局变量定义区: 在一个文件里使用全局变量,推荐你定义这些全局变量,这样 ESLint 就不会发出警告了 */
30 + globals: {
31 +
32 + },
33 +
34 + // https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style
35 + extends: 'standard',
36 + // required to lint *.vue files
37 + plugins: [
38 + 'html'
39 + ],
40 + // add your custom rules here
41 +
42 + /* 规则 0:关闭规则; 1:开启规则并使用警告级别; 2:开启规则并使用错误级别 */
43 + 'rules': {
44 + // allow paren-less arrow functions
45 + 'arrow-parens': 0,
46 + // allow async-await
47 + 'generator-star-spacing': 0,
48 + // allow debugger during development
49 + 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
50 +
51 + // allow console
52 + 'no-console' : "off",
53 +
54 + /* 关闭: 禁止不必要的分号规则 */
55 + 'no-extra-semi' : "off",
56 +
57 + /* 关闭: 强制分号前后有空格 */
58 + 'semi-spacing' : ["off"],
59 +
60 + /* 关闭: 要求在语句末尾使用分号 */
61 + "semi": ["off", "always"],
62 +
63 + /* 关闭: 在对象字面量的键和值之间至少有一个空格存在 */
64 + // http://eslint.cn/docs/rules/key-spacing
65 + "key-spacing": [ "off", { "beforeColon":true,"afterColon":true }],
66 +
67 +
68 + /* 错误: 检测本作用域中声明的变量是否使用,未使用则报错 */
69 + "no-unused-vars": ["error", { "vars": "local" }],
70 +
71 + /* 警告: 使用一致的缩进 */
72 + "indent": ["warn", 4, { "SwitchCase": 1 }],
73 +
74 + /* 关闭: 不允许多个空行 */
75 + "no-multiple-empty-lines":"off",
76 +
77 + /* 关闭: 要求或禁止函数圆括号之前有一个空格 */
78 + "space-before-function-paren": ["off", {
79 + "anonymous": "ignore",
80 + "named": "ignore",
81 + "asyncArrow": "ignore"
82 + }],
83 +
84 + /* 错误: 要求或禁止使用拖尾逗号 */
85 + "comma-dangle": ["warn", {
86 + "arrays": "never",
87 + "objects": "ignore",
88 + "imports": "never",
89 + "exports": "never",
90 + "functions": "ignore"
91 + }],
92 +
93 + /* 关闭: 禁止行尾空格 */
94 + "no-trailing-spaces" : "off",
95 +
96 + /* 警告: 要求文件末尾保留一行空行*/
97 + "eol-last" : ["warn", "always"],
98 +
99 + /* 关闭:*/
100 + "comma-spacing" : ["off", { "before": false, "after": true }],
101 +
102 + /* 关闭: 强制使用一致的反勾号、双引号或单引号 */
103 + "quotes" : ["off","single"],
104 +
105 + /* 关闭: 要求或禁止在注释前有空白 */
106 + "spaced-comment" : ["off","always"],
107 +
108 + /* 关闭: 要求使用 === 和 !== */
109 + "eqeqeq" : "off",
110 +
111 + /* 关闭: 禁止在条件中使用常量表达式 */
112 + "no-constant-condition" : "off",
113 +
114 + /* 关闭: 要求或禁止块内填充 */
115 + "padded-blocks" : "off",
116 +
117 + /* 警告: 禁止自身比较 */
118 + "no-self-compare" : "warn",
119 +
120 + /* 关闭: 禁止未使用过的变量 ==> 后期开启 */
121 + "no-unused-vars" : "off",
122 +
123 + /* 关闭: 禁止或强制圆括号内的空格 */
124 + "space-in-parens" : "off",
125 +
126 + /* 警告: 要求或者禁止Yoda条件 */
127 + "yoda" : "off",
128 +
129 + /* 警告: 要求或禁止语句块之前的空格 */
130 + "space-before-blocks" : "warn"
131 + }
132 +};
1 +.DS_Store
2 +node_modules/
3 +dist/
4 +npm-debug.log
5 +test/unit/coverage
6 +test/e2e/reports
7 +selenium-debug.log
8 +.node_modules/
9 +dist/
10 +npm-debug.log.*
11 +npm-debug.log
12 +selenium-debug.log
13 +.idea/*
...\ No newline at end of file ...\ No newline at end of file
1 +# shopweb
2 +
3 +> vue project for shop
4 +
5 +## Build Setup
6 +
7 +``` bash
8 +# install dependencies
9 +npm install
10 +
11 +# serve with hot reload at localhost:8080
12 +npm run dev
13 +
14 +# build for production with minification
15 +npm run build
16 +
17 +# run unit tests
18 +npm run unit
19 +
20 +# run e2e tests
21 +npm run e2e
22 +
23 +# run all tests
24 +npm test
25 +```
26 +
27 +For detailed explanation on how things work, checkout the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader).
1 +// https://github.com/shelljs/shelljs
2 +require('./check-versions')()
3 +require('shelljs/global')
4 +env.NODE_ENV = 'production'
5 +
6 +var path = require('path')
7 +var config = require('../config')
8 +var ora = require('ora')
9 +var webpack = require('webpack')
10 +var webpackConfig = require('./webpack.prod.conf')
11 +
12 +console.log(
13 + ' Tip:\n' +
14 + ' Built files are meant to be served over an HTTP server.\n' +
15 + ' Opening index.html over file:// won\'t work.\n'
16 +)
17 +
18 +var spinner = ora('building for production...')
19 +spinner.start()
20 +
21 +var assetsPath = path.join(config.build.assetsRoot, config.build.assetsSubDirectory)
22 +rm('-rf', assetsPath)
23 +mkdir('-p', assetsPath)
24 +cp('-R', 'static/*', assetsPath)
25 +
26 +webpack(webpackConfig, function (err, stats) {
27 + spinner.stop()
28 + if (err) throw err
29 + process.stdout.write(stats.toString({
30 + colors: true,
31 + modules: false,
32 + children: false,
33 + chunks: false,
34 + chunkModules: false
35 + }) + '\n')
36 +})
1 +var semver = require('semver')
2 +var chalk = require('chalk')
3 +var packageConfig = require('../package.json')
4 +var exec = function (cmd) {
5 + return require('child_process')
6 + .execSync(cmd).toString().trim()
7 +}
8 +
9 +var versionRequirements = [
10 + {
11 + name: 'node',
12 + currentVersion: semver.clean(process.version),
13 + versionRequirement: packageConfig.engines.node
14 + },
15 + {
16 + name: 'npm',
17 + currentVersion: exec('npm --version'),
18 + versionRequirement: packageConfig.engines.npm
19 + }
20 +]
21 +
22 +module.exports = function () {
23 + var warnings = []
24 + for (var i = 0; i < versionRequirements.length; i++) {
25 + var mod = versionRequirements[i]
26 + if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
27 + warnings.push(mod.name + ': ' +
28 + chalk.red(mod.currentVersion) + ' should be ' +
29 + chalk.green(mod.versionRequirement)
30 + )
31 + }
32 + }
33 +
34 + if (warnings.length) {
35 + console.log('')
36 + console.log(chalk.yellow('To use this template, you must update following to modules:'))
37 + console.log()
38 + for (var i = 0; i < warnings.length; i++) {
39 + var warning = warnings[i]
40 + console.log(' ' + warning)
41 + }
42 + console.log()
43 + process.exit(1)
44 + }
45 +}
1 +/* eslint-disable */
2 +require('eventsource-polyfill')
3 +var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true')
4 +
5 +hotClient.subscribe(function (event) {
6 + if (event.action === 'reload') {
7 + window.location.reload()
8 + }
9 +})
1 +require('./check-versions')()
2 +var config = require('../config')
3 +if (!process.env.NODE_ENV) process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV)
4 +var path = require('path')
5 +var express = require('express')
6 +var webpack = require('webpack')
7 +var opn = require('opn')
8 +var proxyMiddleware = require('http-proxy-middleware')
9 +// var webpackConfig = process.env.NODE_ENV === 'testing'
10 +// ? require('./webpack.prod.conf')
11 +// : require('./webpack.dev.conf')
12 +
13 +var webpackConfig = require('./webpack.prod.conf');
14 +
15 +// default port where dev server listens for incoming traffic
16 +var port = config.dev.port
17 +// Define HTTP proxies to your custom API backend
18 +// https://github.com/chimurai/http-proxy-middleware
19 +var proxyTable = config.dev.proxyTable
20 +
21 +var app = express()
22 +var compiler = webpack(webpackConfig)
23 +
24 +var devMiddleware = require('webpack-dev-middleware')(compiler, {
25 + publicPath: webpackConfig.output.publicPath,
26 + stats: {
27 + colors: true,
28 + chunks: false
29 + }
30 +})
31 +
32 +var hotMiddleware = require('webpack-hot-middleware')(compiler)
33 +// force page reload when html-webpack-plugin template changes
34 +compiler.plugin('compilation', function (compilation) {
35 + compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) {
36 + hotMiddleware.publish({ action: 'reload' })
37 + cb()
38 + })
39 +})
40 +
41 +// proxy api requests
42 +Object.keys(proxyTable).forEach(function (context) {
43 + var options = proxyTable[context]
44 + if (typeof options === 'string') {
45 + options = { target: options }
46 + }
47 + app.use(proxyMiddleware(context, options))
48 +})
49 +
50 +// handle fallback for HTML5 history API
51 +app.use(require('connect-history-api-fallback')())
52 +
53 +// serve webpack bundle output
54 +app.use(devMiddleware)
55 +
56 +// enable hot-reload and state-preserving
57 +// compilation error display
58 +app.use(hotMiddleware)
59 +
60 +// serve pure static assets
61 +var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory)
62 +app.use(staticPath, express.static('./static'))
63 +
64 +module.exports = app.listen(port, function (err) {
65 + if (err) {
66 + console.log(err)
67 + return
68 + }
69 + var uri = 'http://localhost:' + port
70 + console.log('Listening at ' + uri + '\n')
71 +
72 + // when env is testing, don't need open it
73 + // if (process.env.NODE_ENV !== 'testing') {
74 + // opn(uri)
75 + // }
76 +})
1 +var path = require('path')
2 +var config = require('../config')
3 +var ExtractTextPlugin = require('extract-text-webpack-plugin')
4 +
5 +exports.assetsPath = function (_path) {
6 + var assetsSubDirectory = process.env.NODE_ENV === 'production'
7 + ? config.build.assetsSubDirectory
8 + : config.dev.assetsSubDirectory
9 + return path.posix.join(assetsSubDirectory, _path)
10 +}
11 +
12 +exports.cssLoaders = function (options) {
13 + options = options || {}
14 + // generate loader string to be used with extract text plugin
15 + function generateLoaders (loaders) {
16 + var sourceLoader = loaders.map(function (loader) {
17 + var extraParamChar
18 + if (/\?/.test(loader)) {
19 + loader = loader.replace(/\?/, '-loader?')
20 + extraParamChar = '&'
21 + } else {
22 + loader = loader + '-loader'
23 + extraParamChar = '?'
24 + }
25 + return loader + (options.sourceMap ? extraParamChar + 'sourceMap' : '')
26 + }).join('!')
27 +
28 + // Extract CSS when that option is specified
29 + // (which is the case during production build)
30 + if (options.extract) {
31 + return ExtractTextPlugin.extract('vue-style-loader', sourceLoader)
32 + } else {
33 + return ['vue-style-loader', sourceLoader].join('!')
34 + }
35 + }
36 +
37 + // http://vuejs.github.io/vue-loader/en/configurations/extract-css.html
38 + return {
39 + css: generateLoaders(['css']),
40 + postcss: generateLoaders(['css']),
41 + less: generateLoaders(['css', 'less']),
42 + sass: generateLoaders(['css', 'sass?indentedSyntax']),
43 + scss: generateLoaders(['css', 'sass']),
44 + stylus: generateLoaders(['css', 'stylus']),
45 + styl: generateLoaders(['css', 'stylus'])
46 + }
47 +}
48 +
49 +// Generate loaders for standalone style files (outside of .vue)
50 +exports.styleLoaders = function (options) {
51 + var output = []
52 + var loaders = exports.cssLoaders(options)
53 + for (var extension in loaders) {
54 + var loader = loaders[extension]
55 + output.push({
56 + test: new RegExp('\\.' + extension + '$'),
57 + loader: loader
58 + })
59 + }
60 + console.log(output);
61 + return output
62 +}
1 +var path = require('path');
2 +var config = require('../config');
3 +var utils = require('./utils');
4 +var projectRoot = path.resolve(__dirname, '../');
5 +var webpack = require('webpack');
6 +
7 +var env = process.env.NODE_ENV
8 +// check env & config/index.js to decide weither to enable CSS Sourcemaps for the
9 +// various preprocessor loaders added to vue-loader at the end of this file
10 +var cssSourceMapDev = (env === 'development' && config.dev.cssSourceMap)
11 +var cssSourceMapProd = (env === 'production' && config.build.productionSourceMap)
12 +var useCssSourceMap = cssSourceMapDev || cssSourceMapProd
13 +
14 +module.exports = {
15 + entry: {
16 + main : config.build.entry,
17 + },
18 + output: {
19 + path: config.build.assetsRoot,
20 + publicPath: process.env.NODE_ENV === 'production' ? config.build.assetsPublicPath : config.dev.assetsPublicPath,
21 + filename: '[name].js'
22 + },
23 + resolve: {
24 + extensions: ['', '.js', '.vue'],
25 + fallback: [path.join(__dirname, '../node_modules')],
26 + alias: {
27 + 'vue$': 'vue/dist/vue.common.js',
28 + 'src': path.resolve(__dirname, '../src'),
29 + 'assets': path.resolve(__dirname, '../src/assets'),
30 + 'components': path.resolve(__dirname, '../src/components')
31 + },
32 + modulesDirectories: ["web_modules", "node_modules", "bower_components"],
33 + },
34 + resolveLoader: {
35 + fallback: [path.join(__dirname, '../node_modules')]
36 + },
37 + module: {
38 + preLoaders: [
39 + // {
40 + // test: /\.vue$/,
41 + // loader: 'eslint',
42 + // include: projectRoot,
43 + // exclude: /node_modules/
44 + // },
45 + // {
46 + // test: /\.js$/,
47 + // loader: 'babel-loader!eslint-loader',
48 + // include: projectRoot,
49 + // exclude: /node_modules/
50 + // }
51 + ],
52 + loaders: [
53 + { test: /\.js$/, loader: 'babel',include: projectRoot, exclude: /node_modules/ },
54 + { test: /\.json$/, loader: 'json' },
55 + // less语法转化
56 + { test: /\.less$/, loader: 'style!css!less' },
57 + // stylus语法转化
58 + { test: /\.styl$/, loader: 'style-loader!css-loader!stylus-loader' },
59 + // 编译css并自动添加css前缀
60 + { test: /\.css$/, loader: "style!css" },
61 +
62 + { test: /\.vue$/, loader: 'vue' },
63 + { test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
64 + loader: 'url',
65 + query: {
66 + limit: 10000,
67 + name: utils.assetsPath('img/[name].[hash:7].[ext]')
68 + }
69 + },
70 + {
71 + test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
72 + loader: 'url',
73 + query: {
74 + limit: 10000,
75 + name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
76 + }
77 + }
78 + ]
79 + },
80 + eslint: {
81 + // formatter: require('eslint-friendly-formatter')
82 + },
83 + vue: {
84 + //loaders: utils.cssLoaders({ sourceMap: useCssSourceMap }),
85 + postcss: [
86 + require('autoprefixer')({
87 + browsers: ['last 2 versions']
88 + })
89 + ],
90 + loaders: [
91 + // less语法转化
92 + { test: /\.less$/, loader: 'vue-style-loader!css-loader!less-loader' },
93 + // stylus语法转化
94 + { test: /\.styl$/, loader: 'vue-style-loader!css-loader!stylus-loader' },
95 + // 编译css并自动添加css前缀
96 + { test: /\.css$/, loader: "vue-style-loader!css-loader" },
97 + // postcss转化
98 + { test: /\.postcss$/, loader: "vue-style-loader!css-loader" },
99 + { test: /\.sass$/, loader: "vue-style!css!sass" }
100 + ]
101 + },
102 + plugins : [
103 + //new webpack.ResolverPlugin.DirectoryDescriptionFilePlugin(".bower.json", ["main"])
104 + ],
105 + babel: {
106 + presets: ['es2015'],
107 + plugins: ['transform-runtime']
108 + }
109 +}
1 +var config = require('../config')
2 +var webpack = require('webpack')
3 +var merge = require('webpack-merge')
4 +var utils = require('./utils')
5 +var baseWebpackConfig = require('./webpack.base.conf')
6 +var HtmlWebpackPlugin = require('html-webpack-plugin')
7 +
8 +// add hot-reload related code to entry chunks
9 +Object.keys(baseWebpackConfig.entry).forEach(function (name) {
10 + baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name])
11 +})
12 +
13 +module.exports = merge(baseWebpackConfig, {
14 + // module: {
15 + // //loaders: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap })
16 + // },
17 + // eval-source-map is faster for development
18 + devtool: '#eval-source-map',
19 + plugins: [
20 + new webpack.DefinePlugin({
21 + 'process.env': config.dev.env
22 + }),
23 + // https://github.com/glenjamin/webpack-hot-middleware#installation--usage
24 + new webpack.optimize.OccurenceOrderPlugin(),
25 + new webpack.HotModuleReplacementPlugin(),
26 + new webpack.NoErrorsPlugin(),
27 + // https://github.com/ampedandwired/html-webpack-plugin
28 + new HtmlWebpackPlugin({
29 + filename: 'index.html',
30 + template: 'index.html',
31 + chunks: ['main'],
32 + inject: true
33 + })
34 + ]
35 +})
1 +var path = require('path')
2 +var config = require('../config')
3 +var utils = require('./utils')
4 +var webpack = require('webpack')
5 +var merge = require('webpack-merge')
6 +var baseWebpackConfig = require('./webpack.base.conf')
7 +var ExtractTextPlugin = require('extract-text-webpack-plugin')
8 +var HtmlWebpackPlugin = require('html-webpack-plugin')
9 +var env = config.build.env
10 +
11 +var webpackConfig = merge(baseWebpackConfig, {
12 + devtool: config.build.productionSourceMap ? '#source-map' : false,
13 + output: {
14 + path: config.build.assetsRoot,
15 + filename: utils.assetsPath('js/[name].[chunkhash].js'),
16 + chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
17 + },
18 + plugins: [
19 + // http://vuejs.github.io/vue-loader/en/workflow/production.html
20 + new webpack.DefinePlugin({
21 + 'process.env': env
22 + }),
23 + new webpack.optimize.UglifyJsPlugin({
24 + exclude: /\.css/,
25 + sourceMap: false,
26 + minimize: true,
27 + compress: {
28 + drop_debugger:true,
29 + warnings: false
30 + }
31 + }),
32 + new webpack.optimize.OccurrenceOrderPlugin(),
33 + // extract css into its own file
34 + new ExtractTextPlugin(utils.assetsPath('css/[name].[contenthash].css')),
35 + // generate dist index.html with correct asset hash for caching.
36 + // you can customize output by editing /index.html
37 + // see https://github.com/ampedandwired/html-webpack-plugin
38 + new HtmlWebpackPlugin({
39 + filename: 'index.html',
40 + template: 'index.html',
41 + //chunks: ['main'], // 这里不能只加main,对于pord来说,还会使用CommonsChunkPlugin插件生成vender.js
42 + inject: true,
43 + minify: {
44 + removeComments: true,
45 + collapseWhitespace: true,
46 + removeAttributeQuotes: true
47 + // more options:
48 + // https://github.com/kangax/html-minifier#options-quick-reference
49 + },
50 + // necessary to consistently work with multiple chunks via CommonsChunkPlugin
51 + chunksSortMode: 'dependency'
52 + }),
53 + // split vendor js into its own file
54 + new webpack.optimize.CommonsChunkPlugin({
55 + name: 'vendor',
56 + minChunks: function (module, count) {
57 + // any required modules inside node_modules are extracted to vendor
58 + return (
59 + module.resource &&
60 + /\.js$/.test(module.resource) &&
61 + module.resource.indexOf(
62 + path.join(__dirname, '../node_modules')
63 + ) === 0
64 + )
65 + }
66 + }),
67 + // extract webpack runtime and module manifest to its own file in order to
68 + // prevent vendor hash from being updated whenever app bundle is updated
69 + new webpack.optimize.CommonsChunkPlugin({
70 + name: 'manifest',
71 + chunks: ['vendor']
72 + })
73 + ]
74 +})
75 +
76 +if (config.build.productionGzip) {
77 + var CompressionWebpackPlugin = require('compression-webpack-plugin')
78 +
79 + webpackConfig.plugins.push(
80 + new CompressionWebpackPlugin({
81 + asset: '[path].gz[query]',
82 + algorithm: 'gzip',
83 + test: new RegExp(
84 + '\\.(' +
85 + config.build.productionGzipExtensions.join('|') +
86 + ')$'
87 + ),
88 + threshold: 10240,
89 + minRatio: 0.8
90 + })
91 + )
92 +}
93 +
94 +module.exports = webpackConfig
1 +var merge = require('webpack-merge')
2 +var prodEnv = require('./prod.env')
3 +
4 +module.exports = merge(prodEnv, {
5 + NODE_ENV: '"development"'
6 +})
1 +// see http://vuejs-templates.github.io/webpack for documentation.
2 +var path = require('path')
3 +
4 +module.exports = {
5 + build: {
6 + env: require('./prod.env'),
7 + entry: path.resolve(__dirname, '../src/main.js'),
8 + index: path.resolve(__dirname, '../dist/index.html'),
9 + assetsRoot: path.resolve(__dirname, '../dist'),
10 + assetsSubDirectory: 'static',
11 + assetsImagesDirectory: 'src/static/images',
12 + assetsJsDirectory: 'src/static/js',
13 + assetsPublicPath: '/',
14 + productionSourceMap: true,
15 + // Gzip off by default as many popular static hosts such as
16 + // Surge or Netlify already gzip all static assets for you.
17 + // Before setting to `true`, make sure to:
18 + // npm install --save-dev compression-webpack-plugin
19 + productionGzip: false,
20 + productionGzipExtensions: ['js', 'css']
21 + },
22 + dev: {
23 + env: require('./dev.env'),
24 + port: 9080,
25 + assetsSubDirectory: 'static',
26 + assetsPublicPath: '/',
27 + proxyTable: {},
28 + // CSS Sourcemaps off by default because relative paths are "buggy"
29 + // with this option, according to the CSS-Loader README
30 + // (https://github.com/webpack/css-loader#sourcemaps)
31 + // In our experience, they generally work as expected,
32 + // just be aware of this issue when enabling this option.
33 + cssSourceMap: false
34 + }
35 +}
1 +module.exports = {
2 + NODE_ENV: '"production"'
3 +}
1 +var merge = require('webpack-merge')
2 +var devEnv = require('./dev.env')
3 +
4 +module.exports = merge(devEnv, {
5 + NODE_ENV: '"testing"'
6 +})
1 +<!DOCTYPE html>
2 +<html>
3 + <head>
4 + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5 + <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" />
6 + <meta content="email=no" name="format-detection" />
7 + <meta name="format-detection" content="telephone=no" />
8 + <meta http-equiv="X-UA-Compatible" content="IE=edge">
9 + <meta name="renderer" content="webkit">
10 + <meta name="keyword" content="">
11 + <meta name="x5-page-mode" content="app">
12 + <meta charset="utf-8">
13 + <title>shopweb</title>
14 + </head>
15 + <body>
16 + <div id="app"></div>
17 + <script src="//cdn.bootcss.com/zepto/1.2.0/zepto.min.js"></script>
18 + <!-- built files will be auto injected -->
19 + </body>
20 +</html>
1 +{
2 + "name": "shopweb",
3 + "version": "1.0.0",
4 + "description": "vue project for shop",
5 + "author": "shipfi@thinkpad <shipfi@thinkpad>",
6 + "private": true,
7 + "scripts": {
8 + "dev": "node build/dev-server.js",
9 + "build": "node build/build.js",
10 + "unit": "karma start test/unit/karma.conf.js --single-run",
11 + "e2e": "node test/e2e/runner.js",
12 + "test": "npm run unit && npm run e2e",
13 + "lint": "eslint --ext .js,.vue src",
14 + "webpack-build" : "webpack --config=build/webpack.dev.conf.js",
15 + "webpack-server" : "webpack-dev-server --config=build/webpack.dev.conf.js --port=9088"
16 + },
17 + "dependencies": {
18 + "vue": "^2.1.0",
19 + "connect-history-api-fallback": "^1.3.0",
20 + "isomorphic-fetch": ">=2.2.1",
21 + "jsuri": ">=1.3.1",
22 + "mint-ui": "^2.0.4",
23 + "react-cookie": ">=0.4.8",
24 + "vue-resource": "^1.0.3",
25 + "vue-router": "^2.0.1",
26 + "vuex": "^1.0.0",
27 + "vuex-router-sync": "^2.1.1"
28 + },
29 + "devDependencies": {
30 + "autoprefixer": "^6.4.0",
31 + "babel-core": "^6.0.0",
32 + "babel-eslint": "^7.0.0",
33 + "babel-loader": "^6.0.0",
34 + "babel-plugin-transform-runtime": "^6.0.0",
35 + "babel-preset-es2015": "^6.0.0",
36 + "babel-preset-stage-2": "^6.0.0",
37 + "babel-register": "^6.0.0",
38 + "chalk": "^1.1.3",
39 + "connect-history-api-fallback": "^1.1.0",
40 + "css-loader": "^0.25.0",
41 + "eslint": "^3.7.1",
42 + "eslint-friendly-formatter": "^2.0.5",
43 + "eslint-loader": "^1.5.0",
44 + "eslint-plugin-html": "^1.3.0",
45 + "eslint-config-standard": "^6.1.0",
46 + "eslint-plugin-promise": "^2.0.1",
47 + "eslint-plugin-standard": "^2.0.1",
48 + "eventsource-polyfill": "^0.9.6",
49 + "express": "^4.13.3",
50 + "extract-text-webpack-plugin": "^1.0.1",
51 + "file-loader": "^0.9.0",
52 + "function-bind": "^1.0.2",
53 + "html-webpack-plugin": "^2.8.1",
54 + "http-proxy-middleware": "^0.17.2",
55 + "json-loader": "^0.5.4",
56 + "karma": "^1.3.0",
57 + "karma-coverage": "^1.1.1",
58 + "karma-mocha": "^1.2.0",
59 + "karma-sinon-chai": "^1.2.0",
60 + "karma-sourcemap-loader": "^0.3.7",
61 + "karma-spec-reporter": "0.0.26",
62 + "karma-webpack": "^1.7.0",
63 + "lolex": "^1.4.0",
64 + "mocha": "^3.1.0",
65 + "chai": "^3.5.0",
66 + "sinon": "^1.17.3",
67 + "sinon-chai": "^2.8.0",
68 + "inject-loader": "^2.0.1",
69 + "isparta-loader": "^2.0.0",
70 + "chromedriver": "^2.21.2",
71 + "cross-spawn": "^4.0.2",
72 + "nightwatch": "^0.9.8",
73 + "selenium-server": "2.53.1",
74 + "semver": "^5.3.0",
75 + "opn": "^4.0.2",
76 + "ora": "^0.3.0",
77 + "shelljs": "^0.7.4",
78 + "url-loader": "^0.5.7",
79 + "vue-loader": "^10.0.0",
80 + "vue-style-loader": "^1.0.0",
81 + "vue-template-compiler": "^2.1.0",
82 + "webpack": "^1.13.2",
83 + "webpack-dev-middleware": "^1.8.3",
84 + "webpack-hot-middleware": "^2.12.2",
85 + "webpack-merge": "^0.14.1",
86 + "less": ">=2.7.1",
87 + "less-loader": ">=2.2.3",
88 + "my-local-ip": "^1.0.0",
89 + "postcss": "^5.2.0",
90 + "postcss-loader": "^0.13.0",
91 + "style-loader": "^0.13.1",
92 + "stylus": ">=0.54.5",
93 + "stylus-loader": ">=2.3.1",
94 + "uppercamelcase": "^1.1.0",
95 + "vue-validator": "^3.0.0-alpha.1"
96 + },
97 + "engines": {
98 + "node": ">= 4.0.0",
99 + "npm": ">= 3.0.0"
100 + }
101 +}
1 +<template>
2 +
3 + <div id="app">
4 + <div class="content-top"></div>
5 + <div class="content">
6 + <div class="content-body">
7 + <router-view></router-view>
8 +
9 + </div>
10 + <div class="sidebar"></div>
11 + </div>
12 +
13 + </div>
14 +</template>
15 +
16 +<script>
17 + import './static/js/clamp.js'
18 + import store from './vuex/store';
19 + export default {
20 + store
21 + }
22 +</script>
...\ No newline at end of file ...\ No newline at end of file
This diff is collapsed. Click to expand it.
1 +/**
2 + * Created by qingge_zwj on 2016/11/23.
3 + */
4 +export default {
5 + "code": 20000, // 成功时返回
6 + "content": {
7 + count: 12, //记录总数
8 + list: [
9 + {
10 + id: 12, // 浏览内容id (商品/优惠券)
11 + type: 1, // 浏览内容类型 (0 为商品 1 为优惠券)
12 + photo: "http://evshop.picture.qingger.com/FmDTQf0tZ9Md7pKnaZj6Bj8lESLZ", // 主图 商品主图 spc_main_photo / 优惠券图 cpl_image
13 + name: "111111111111", // 名称 商品名 spc_good_name / 优惠券名 cpl_name
14 + price: 999, // 商品最小牌价 spc_min_price / 优惠券面值
15 + browserTime: "2016-12-12 12:12:12" // 浏览时间
16 + },
17 + {
18 + id: 12, // 浏览内容id (商品/优惠券)
19 + type: 1, // 浏览内容类型 (1 为商品 2 为优惠券)
20 + photo: "http://evshop.picture.qingger.com/FmDTQf0tZ9Md7pKnaZj6Bj8lESLZ", // 主图 商品主图 spc_main_photo / 优惠券图 cpl_image
21 + name: "22222222222222", // 名称 商品名 spc_good_name / 优惠券名 cpl_name
22 + price: 999, // 商品最小牌价 spc_min_price / 优惠券面值
23 + browserTime: "2016-12-12 12:12:12" // 浏览时间
24 + },
25 + {
26 + id: 12, // 浏览内容id (商品/优惠券)
27 + type: 1, // 浏览内容类型 (1 为商品 2 为优惠券)
28 + photo: "http://evshop.picture.qingger.com/FmDTQf0tZ9Md7pKnaZj6Bj8lESLZ", // 主图 商品主图 spc_main_photo / 优惠券图 cpl_image
29 + name: "3333333333333", // 名称 商品名 spc_good_name / 优惠券名 cpl_name
30 + price: 999, // 商品最小牌价 spc_min_price / 优惠券面值
31 + browserTime: "2016-12-12 12:12:12" // 浏览时间
32 + },
33 + {
34 + id: 12, // 浏览内容id (商品/优惠券)
35 + type: 1, // 浏览内容类型 (1 为商品 2 为优惠券)
36 + photo: "http://evshop.picture.qingger.com/FmDTQf0tZ9Md7pKnaZj6Bj8lESLZ", // 主图 商品主图 spc_main_photo / 优惠券图 cpl_image
37 + name: "444444444444444", // 名称 商品名 spc_good_name / 优惠券名 cpl_name
38 + price: 999, // 商品最小牌价 spc_min_price / 优惠券面值
39 + browserTime: "2016-12-12 12:12:12" // 浏览时间
40 + },
41 + {
42 + id: 12, // 浏览内容id (商品/优惠券)
43 + type: 1, // 浏览内容类型 (1 为商品 2 为优惠券)
44 + photo: "http://evshop.picture.qingger.com/FmDTQf0tZ9Md7pKnaZj6Bj8lESLZ", // 主图 商品主图 spc_main_photo / 优惠券图 cpl_image
45 + name: "55555555555555555", // 名称 商品名 spc_good_name / 优惠券名 cpl_name
46 + price: 999, // 商品最小牌价 spc_min_price / 优惠券面值
47 + browserTime: "2016-12-12 12:12:12" // 浏览时间
48 + },
49 + {
50 + id: 12, // 浏览内容id (商品/优惠券)
51 + type: 1, // 浏览内容类型 (1 为商品 2 为优惠券)
52 + photo: "http://evshop.picture.qingger.com/FmDTQf0tZ9Md7pKnaZj6Bj8lESLZ", // 主图 商品主图 spc_main_photo / 优惠券图 cpl_image
53 + name: "666666666666", // 名称 商品名 spc_good_name / 优惠券名 cpl_name
54 + price: 999, // 商品最小牌价 spc_min_price / 优惠券面值
55 + browserTime: "2016-12-12 12:12:12" // 浏览时间
56 + },
57 + {
58 + id: 12, // 浏览内容id (商品/优惠券)
59 + type: 1, // 浏览内容类型 (1 为商品 2 为优惠券)
60 + photo: "http://evshop.picture.qingger.com/FmDTQf0tZ9Md7pKnaZj6Bj8lESLZ", // 主图 商品主图 spc_main_photo / 优惠券图 cpl_image
61 + name: "777777777777777", // 名称 商品名 spc_good_name / 优惠券名 cpl_name
62 + price: 999, // 商品最小牌价 spc_min_price / 优惠券面值
63 + browserTime: "2016-12-12 12:12:12" // 浏览时间
64 + },
65 + {
66 + id: 12, // 浏览内容id (商品/优惠券)
67 + type: 1, // 浏览内容类型 (1 为商品 2 为优惠券)
68 + photo: "http://evshop.picture.qingger.com/FmDTQf0tZ9Md7pKnaZj6Bj8lESLZ", // 主图 商品主图 spc_main_photo / 优惠券图 cpl_image
69 + name: "88888888888888", // 名称 商品名 spc_good_name / 优惠券名 cpl_name
70 + price: 999, // 商品最小牌价 spc_min_price / 优惠券面值
71 + browserTime: "2016-12-12 12:12:12" // 浏览时间
72 + },
73 + {
74 + id: 12, // 浏览内容id (商品/优惠券)
75 + type: 1, // 浏览内容类型 (1 为商品 2 为优惠券)
76 + photo: "http://evshop.picture.qingger.com/FmDTQf0tZ9Md7pKnaZj6Bj8lESLZ", // 主图 商品主图 spc_main_photo / 优惠券图 cpl_image
77 + name: "99999999999999", // 名称 商品名 spc_good_name / 优惠券名 cpl_name
78 + price: 999, // 商品最小牌价 spc_min_price / 优惠券面值
79 + browserTime: "2016-12-12 12:12:12" // 浏览时间
80 + },
81 + {
82 + id: 12, // 浏览内容id (商品/优惠券)
83 + type: 1, // 浏览内容类型 (1 为商品 2 为优惠券)
84 + photo: "http://evshop.picture.qingger.com/FmDTQf0tZ9Md7pKnaZj6Bj8lESLZ", // 主图 商品主图 spc_main_photo / 优惠券图 cpl_image
85 + name: "10", // 名称 商品名 spc_good_name / 优惠券名 cpl_name
86 + price: 999, // 商品最小牌价 spc_min_price / 优惠券面值
87 + browserTime: "2016-12-12 12:12:12" // 浏览时间
88 + },
89 + {
90 + id: 12, // 浏览内容id (商品/优惠券)
91 + type: 1, // 浏览内容类型 (1 为商品 2 为优惠券)
92 + photo: "http://evshop.picture.qingger.com/FmDTQf0tZ9Md7pKnaZj6Bj8lESLZ", // 主图 商品主图 spc_main_photo / 优惠券图 cpl_image
93 + name: "11", // 名称 商品名 spc_good_name / 优惠券名 cpl_name
94 + price: 999, // 商品最小牌价 spc_min_price / 优惠券面值
95 + browserTime: "2016-12-12 12:12:12" // 浏览时间
96 + },
97 + {
98 + id: 12, // 浏览内容id (商品/优惠券)
99 + type: 1, // 浏览内容类型 (1 为商品 2 为优惠券)
100 + photo: "http://evshop.picture.qingger.com/FmDTQf0tZ9Md7pKnaZj6Bj8lESLZ", // 主图 商品主图 spc_main_photo / 优惠券图 cpl_image
101 + name: "12", // 名称 商品名 spc_good_name / 优惠券名 cpl_name
102 + price: 999, // 商品最小牌价 spc_min_price / 优惠券面值
103 + browserTime: "2016-12-12 12:12:12" // 浏览时间
104 + }
105 + ]
106 + }
107 +}
1 +/**
2 + * Created by qingge_cyc on 2016/11/23.
3 + */
4 +export default
5 +{
6 + "code": 20000, // 成功时返回
7 + "content": {
8 + siteName: "兑换", // 店铺名
9 + orderMoney: 599,
10 + orderPoint: 10,
11 + siteUnitName: '人民币', //价格单位
12 + products: [
13 + {
14 + spcId: '010101', //商品id
15 + productPhoto: "http://qing.com/1.png",//商品主图
16 + productName: "dfdf", // 商品名 spd_good_name
17 + productAttrValue: "红色 35", // 规格商品详细值 spd_spec_attr_value
18 + price: 999, // 规格商品主价格 spd_price
19 + productNum: 2, // 商品数量
20 + },
21 +
22 + ],
23 + shippingFee: 10, // 运费
24 + from: "dfdfdf", // 商品来源
25 + coupon: { // 优惠券信息
26 + money: 3, // 订单优惠金额
27 + cplName: "包邮券", //优惠券名称
28 + },
29 + activity: { // 活动信息
30 + money: 3, // 订单优惠金额
31 + actName: " 满100减5", // 活动名称
32 + }
33 + }
34 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/**
2 + * Created by qingge_cyc on 2016/11/23.
3 + */
4 +export default
5 +{
6 + "code": 20000, // 成功时返回
7 + "content": {
8 + siteName: "兑换", // 店铺名
9 + orderId: 12, //订单id
10 + orderMoney: 599,
11 + orderPoint: 10,
12 + siteUnitName: '人民币', //价格单位
13 + products: [
14 + {
15 + spcId: '010101', //商品id
16 + productPhoto: "http://qing.com/1.png",//商品主图
17 + productName: "dfdf", // 商品名 spd_good_name
18 + productAttrValue: "红色 35", // 规格商品详细值 spd_spec_attr_value
19 + price: 999, // 规格商品主价格 spd_price
20 + productNum: 2, // 商品数量
21 + },
22 +
23 + ],
24 + shippingFee: 10, // 运费
25 + from: "dfdfdf", // 商品来源
26 + coupon: { // 优惠券信息
27 + money: 3, // 订单优惠金额
28 + cplName: "包邮券", //优惠券名称
29 + },
30 + activity: { // 活动信息
31 + money: 3, // 订单优惠金额
32 + actName: " 满100减5", // 活动名称
33 + }
34 + }
35 +}
...\ No newline at end of file ...\ No newline at end of file
1 +
2 +/**
3 + * Created by qingge_zwj on 2016/11/23.
4 + */
5 +export default {
6 + "code" : 20000 , // 成功时返回
7 + "content" :{
8 + count:1, //订单总数
9 + }
10 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/**
2 + * Created by qingge_zwj on 2016/11/28.
3 + */
1 +/**
2 + * Created by qingge_zwj on 2016/11/28.
3 + */
1 +/**
2 + * Created by qingge_zwj on 2016/11/28.
3 + */
1 +/**
2 + * Created by qingge_cyc on 2016/11/23.
3 + */
4 +export default
5 +{
6 + "code": 20000, // 成功时返回
7 + "content": {
8 + appNavId: 15, // 导航ID
9 + groupId: "SatTest", // 集团ID
10 + style: 1, // 导航样式
11 + bgColor: "", // 导航背景
12 + navList: [
13 + {
14 + name: "人样",
15 + subMenu: [
16 + {
17 + name: '小样', //导航名
18 + text: '优惠券中心', //导航目标名
19 + prefix: { // 链接类型
20 + type: 4, // 链接类型
21 + id: 1, // 链接参数 为id
22 + },
23 + url: "http://www.baidu.com", // 导航链接
24 +
25 + },
26 + ]
27 + },
28 + {
29 + name: '小样', //导航名
30 + text: '优惠券中心', //导航目标名
31 + prefix: { // 链接类型
32 + type: 6, // 链接类型
33 + id: 1, // 链接参数 为id
34 + url: '/personCenter'
35 + },
36 + url: "http://www.baidu.com" // 导航链接
37 + }
38 + ]
39 + }
40 +}
1 +/**
2 + * Created by qingge_cyc on 2016/11/23.
3 + */
4 +export default
5 +{
6 + "code": 20000, // 成功时返回
7 + "content": [
8 + {
9 + cplId: 12, // 优惠券id
10 + cplName: "满减", // 优惠券名称
11 + money: 5 // 订单优惠金额
12 + },
13 + {
14 + cplId: 13, // 优惠券id
15 + cplName: "满减", // 优惠券名称
16 + money: 9 // 订单优惠金额
17 + }
18 + ]
19 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/**
2 + * Created by qingge_zwj on 2016/11/28.
3 + */
This diff is collapsed. Click to expand it.
1 +/**
2 + * Created by qingge_zwj on 2016/11/24.
3 + */
4 +export default {
5 + "code": 20000, // 成功时返回
6 + "content": {
7 + count: 12, //收藏总数
8 + list: [
9 + {
10 + favoriateId: 1212, // 收藏ID bf_id
11 + productPhoto: "http://evshop.picture.qingger.com/FmDTQf0tZ9Md7pKnaZj6Bj8lESLZ", // 商品主图 spc_main_photo
12 + productName: "dfdfd", // 商品名称 spc_good_name
13 + productListPrice: 999, // 商品最小牌价 spc_min_price
14 + favoriateTime: "28187397", // 收藏时间
15 + type: 0 // 0: com_id为商品 1:位优惠券
16 + },
17 + {
18 + favoriateId: 1212, // 收藏ID bf_id
19 + productPhoto: "http://evshop.picture.qingger.com/FmDTQf0tZ9Md7pKnaZj6Bj8lESLZ", // 商品主图 spc_main_photo
20 + productName: "dfdfd", // 商品名称 spc_good_name
21 + productListPrice: 999, // 商品最小牌价 spc_min_price
22 + favoriateTime: "28187397", // 收藏时间
23 + type: 0 // 0: com_id为商品 1:位优惠券
24 + },
25 + {
26 + favoriateId: 1212, // 收藏ID bf_id
27 + productPhoto: "http://evshop.picture.qingger.com/FmDTQf0tZ9Md7pKnaZj6Bj8lESLZ", // 商品主图 spc_main_photo
28 + productName: "dfdfd", // 商品名称 spc_good_name
29 + productListPrice: 999, // 商品最小牌价 spc_min_price
30 + favoriateTime: "28187397", // 收藏时间
31 + type: 0 // 0: com_id为商品 1:位优惠券
32 + },
33 + {
34 + favoriateId: 1212, // 收藏ID bf_id
35 + productPhoto: "http://evshop.picture.qingger.com/FmDTQf0tZ9Md7pKnaZj6Bj8lESLZ", // 商品主图 spc_main_photo
36 + productName: "dfdfd", // 商品名称 spc_good_name
37 + productListPrice: 999, // 商品最小牌价 spc_min_price
38 + favoriateTime: "28187397", // 收藏时间
39 + type: 0 // 0: com_id为商品 1:位优惠券
40 + },
41 + {
42 + favoriateId: 1212, // 收藏ID bf_id
43 + productPhoto: "http://evshop.picture.qingger.com/FmDTQf0tZ9Md7pKnaZj6Bj8lESLZ", // 商品主图 spc_main_photo
44 + productName: "dfdfd", // 商品名称 spc_good_name
45 + productListPrice: 999, // 商品最小牌价 spc_min_price
46 + favoriateTime: "28187397", // 收藏时间
47 + type: 0 // 0: com_id为商品 1:位优惠券
48 + },
49 + {
50 + favoriateId: 1212, // 收藏ID bf_id
51 + productPhoto: "http://evshop.picture.qingger.com/FmDTQf0tZ9Md7pKnaZj6Bj8lESLZ", // 商品主图 spc_main_photo
52 + productName: "dfdfd", // 商品名称 spc_good_name
53 + productListPrice: 999, // 商品最小牌价 spc_min_price
54 + favoriateTime: "28187397", // 收藏时间
55 + type: 0 // 0: com_id为商品 1:位优惠券
56 + },
57 + {
58 + favoriateId: 1212, // 收藏ID bf_id
59 + productPhoto: "http://evshop.picture.qingger.com/FmDTQf0tZ9Md7pKnaZj6Bj8lESLZ", // 商品主图 spc_main_photo
60 + productName: "dfdfd", // 商品名称 spc_good_name
61 + productListPrice: 999, // 商品最小牌价 spc_min_price
62 + favoriateTime: "28187397", // 收藏时间
63 + type: 0 // 0: com_id为商品 1:位优惠券
64 + },
65 + {
66 + favoriateId: 1212, // 收藏ID bf_id
67 + productPhoto: "http://evshop.picture.qingger.com/FmDTQf0tZ9Md7pKnaZj6Bj8lESLZ", // 商品主图 spc_main_photo
68 + productName: "dfdfd", // 商品名称 spc_good_name
69 + productListPrice: 999, // 商品最小牌价 spc_min_price
70 + favoriateTime: "28187397", // 收藏时间
71 + type: 0 // 0: com_id为商品 1:位优惠券
72 + },
73 + {
74 + favoriateId: 1212, // 收藏ID bf_id
75 + productPhoto: "http://evshop.picture.qingger.com/FmDTQf0tZ9Md7pKnaZj6Bj8lESLZ", // 商品主图 spc_main_photo
76 + productName: "dfdfd", // 商品名称 spc_good_name
77 + productListPrice: 999, // 商品最小牌价 spc_min_price
78 + favoriateTime: "28187397", // 收藏时间
79 + type: 0 // 0: com_id为商品 1:位优惠券
80 + },
81 + {
82 + favoriateId: 1212, // 收藏ID bf_id
83 + productPhoto: "http://evshop.picture.qingger.com/FmDTQf0tZ9Md7pKnaZj6Bj8lESLZ", // 商品主图 spc_main_photo
84 + productName: "dfdfd", // 商品名称 spc_good_name
85 + productListPrice: 999, // 商品最小牌价 spc_min_price
86 + favoriateTime: "28187397", // 收藏时间
87 + type: 0 // 0: com_id为商品 1:位优惠券
88 + },
89 + {
90 + favoriateId: 1212, // 收藏ID bf_id
91 + productPhoto: "http://evshop.picture.qingger.com/FmDTQf0tZ9Md7pKnaZj6Bj8lESLZ", // 商品主图 spc_main_photo
92 + productName: "dfdfd", // 商品名称 spc_good_name
93 + productListPrice: 999, // 商品最小牌价 spc_min_price
94 + favoriateTime: "28187397", // 收藏时间
95 + type: 0 // 0: com_id为商品 1:位优惠券
96 + },
97 + {
98 + favoriateId: 1212, // 收藏ID bf_id
99 + productPhoto: "http://evshop.picture.qingger.com/FmDTQf0tZ9Md7pKnaZj6Bj8lESLZ", // 商品主图 spc_main_photo
100 + productName: "dfdfd", // 商品名称 spc_good_name
101 + productListPrice: 999, // 商品最小牌价 spc_min_price
102 + favoriateTime: "28187397", // 收藏时间
103 + type: 0 // 0: com_id为商品 1:位优惠券
104 + }
105 + ]
106 + }
107 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/**
2 + * Created by qingge_zwj on 2016/11/28.
3 + */
4 +export default {
5 + "code": 20000, // 成功时返回
6 + "content":
7 + {
8 + cplId: "11", // 优惠券id
9 + cplCode: "dfldjfl3333", // 优惠券编号
10 + cplName: "无敌券", // 券名称
11 + cplType: 0, // 优惠券类型
12 + cplTypeName: "折扣券", // 优惠券类型名
13 + cplValue: 500, // 优惠券面值
14 + cplBgcolor: "#000", // 优惠券背景颜色
15 + cplStartTime: "2016-12-12 12:12:12", // 使用开始时间
16 + cplEndTime: "2016-12-12 12:12:12", // 使用截止时间
17 + conditions: "满减" // 使用条件
18 + }
19 +
20 +
21 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/**
2 + * Created by qingge_zwj on 2016/11/24.
3 + */
4 +export default {
5 + "code": 20000, // 成功时返回
6 + "content": {
7 + count: 12, //收藏总数
8 + list: [
9 + {
10 + cplId: "11", // 优惠券id
11 + cplCode: "dfldjfl3333", // 优惠券编号
12 + cplName: "无敌券",
13 + cplUnit:'zhe',// 券名称
14 + cplType: 0, // 优惠券类型
15 + cplTypeName: "折扣券", // 优惠券类型名
16 + cplValue: 500, // 优惠券面值
17 + cplBgcolor: "yellow", // 优惠券背景颜色
18 + cplStartTime: "2016-12-12 12:12:12", // 使用开始时间
19 + cplEndTime: "2016-12-12 12:12:12" // 使用截止时间
20 + },
21 + {
22 + cplId: "121212", // 优惠券id
23 + cplCode: "dfldjfl3333", // 优惠券编号
24 + cplName: "无敌券",
25 + cplUnit:'zhe',// 券名称
26 + cplType: 0, // 优惠券类型
27 + cplTypeName: "折扣券", // 优惠券类型名
28 + cplValue: 500, // 优惠券面值
29 + cplBgcolor: "yellow", // 优惠券背景颜色
30 + cplStartTime: "2016-12-12 12:12:12", // 使用开始时间
31 + cplEndTime: "2016-12-12 12:12:12" // 使用截止时间
32 + },
33 + {
34 + cplId: "121212", // 优惠券id
35 + cplCode: "dfldjfl3333", // 优惠券编号
36 + cplName: "无敌券",
37 + cplUnit:'zhe',// 券名称
38 + cplType: 0, // 优惠券类型
39 + cplTypeName: "折扣券", // 优惠券类型名
40 + cplValue: 500, // 优惠券面值
41 + cplBgcolor: "yellow", // 优惠券背景颜色
42 + cplStartTime: "2016-12-12 12:12:12", // 使用开始时间
43 + cplEndTime: "2016-12-12 12:12:12" // 使用截止时间
44 + },
45 + {
46 + cplId: "121212", // 优惠券id
47 + cplCode: "dfldjfl3333", // 优惠券编号
48 + cplName: "无敌券",
49 + cplUnit:'zhe',// 券名称
50 + cplType: 0, // 优惠券类型
51 + cplTypeName: "折扣券", // 优惠券类型名
52 + cplValue: 500, // 优惠券面值
53 + cplBgcolor: "yellow", // 优惠券背景颜色
54 + cplStartTime: "2016-12-12 12:12:12", // 使用开始时间
55 + cplEndTime: "2016-12-12 12:12:12" // 使用截止时间
56 + },
57 + {
58 + cplId: "121212", // 优惠券id
59 + cplCode: "dfldjfl3333", // 优惠券编号
60 + cplName: "无敌券",
61 + cplUnit:'zhe',// 券名称
62 + cplType: 0, // 优惠券类型
63 + cplTypeName: "折扣券", // 优惠券类型名
64 + cplValue: 500, // 优惠券面值
65 + cplBgcolor: "yellow", // 优惠券背景颜色
66 + cplStartTime: "2016-12-12 12:12:12", // 使用开始时间
67 + cplEndTime: "2016-12-12 12:12:12" // 使用截止时间
68 + },
69 + {
70 + cplId: "121212", // 优惠券id
71 + cplCode: "dfldjfl3333", // 优惠券编号
72 + cplName: "无敌券",
73 + cplUnit:'zhe',// 券名称
74 + cplType: 0, // 优惠券类型
75 + cplTypeName: "折扣券", // 优惠券类型名
76 + cplValue: 500, // 优惠券面值
77 + cplBgcolor: "yellow", // 优惠券背景颜色
78 + cplStartTime: "2016-12-12 12:12:12", // 使用开始时间
79 + cplEndTime: "2016-12-12 12:12:12" // 使用截止时间
80 + },
81 + {
82 + cplId: "121212", // 优惠券id
83 + cplCode: "dfldjfl3333", // 优惠券编号
84 + cplName: "无敌券",
85 + cplUnit:'zhe',// 券名称
86 + cplType: 0, // 优惠券类型
87 + cplTypeName: "折扣券", // 优惠券类型名
88 + cplValue: 500, // 优惠券面值
89 + cplBgcolor: "yellow", // 优惠券背景颜色
90 + cplStartTime: "2016-12-12 12:12:12", // 使用开始时间
91 + cplEndTime: "2016-12-12 12:12:12" // 使用截止时间
92 + },
93 + {
94 + cplId: "121212", // 优惠券id
95 + cplCode: "dfldjfl3333", // 优惠券编号
96 + cplName: "无敌券",
97 + cplUnit:'zhe',// 券名称
98 + cplType: 0, // 优惠券类型
99 + cplTypeName: "折扣券", // 优惠券类型名
100 + cplValue: 500, // 优惠券面值
101 + cplBgcolor: "yellow", // 优惠券背景颜色
102 + cplStartTime: "2016-12-12 12:12:12", // 使用开始时间
103 + cplEndTime: "2016-12-12 12:12:12" // 使用截止时间
104 + },
105 + {
106 + cplId: "121212", // 优惠券id
107 + cplCode: "dfldjfl3333", // 优惠券编号
108 + cplName: "无敌券",
109 + cplUnit:'zhe',// 券名称
110 + cplType: 0, // 优惠券类型
111 + cplTypeName: "折扣券", // 优惠券类型名
112 + cplValue: 500, // 优惠券面值
113 + cplBgcolor: "yellow", // 优惠券背景颜色
114 + cplStartTime: "2016-12-12 12:12:12", // 使用开始时间
115 + cplEndTime: "2016-12-12 12:12:12" // 使用截止时间
116 + },
117 + {
118 + cplId: "121212", // 优惠券id
119 + cplCode: "dfldjfl3333", // 优惠券编号
120 + cplName: "无敌券",
121 + cplUnit:'zhe',// 券名称
122 + cplType: 0, // 优惠券类型
123 + cplTypeName: "折扣券", // 优惠券类型名
124 + cplValue: 500, // 优惠券面值
125 + cplBgcolor: "yellow", // 优惠券背景颜色
126 + cplStartTime: "2016-12-12 12:12:12", // 使用开始时间
127 + cplEndTime: "2016-12-12 12:12:12" // 使用截止时间
128 + },
129 + {
130 + cplId: "121212", // 优惠券id
131 + cplCode: "dfldjfl3333", // 优惠券编号
132 + cplName: "无敌券aaaaaa",
133 + cplUnit:'zhe',// 券名称
134 + cplType: 0, // 优惠券类型
135 + cplTypeName: "折扣券", // 优惠券类型名
136 + cplValue: 500, // 优惠券面值
137 + cplBgcolor: "yellow", // 优惠券背景颜色
138 + cplStartTime: "2016-12-12 12:12:12", // 使用开始时间
139 + cplEndTime: "2016-12-12 12:12:12" // 使用截止时间
140 + },
141 + {
142 + cplId: "121212", // 优惠券id
143 + cplCode: "dfldjfl3333", // 优惠券编号
144 + cplName: "无敌券qqqqqqqqqq",
145 + cplUnit:'zhe',// 券名称
146 + cplType: 0, // 优惠券类型
147 + cplTypeName: "折扣券", // 优惠券类型名
148 + cplValue: 500, // 优惠券面值
149 + cplBgcolor: "yellow", // 优惠券背景颜色
150 + cplStartTime: "2016-12-12 12:12:12", // 使用开始时间
151 + cplEndTime: "2016-12-12 12:12:12" // 使用截止时间
152 + },
153 +
154 + ]
155 + }
156 +}
...\ No newline at end of file ...\ No newline at end of file
This diff is collapsed. Click to expand it.
1 +/**
2 + * Created by qingge_cyc on 2016/11/23.
3 + */
4 +export default {
5 + "code": 20000, // 成功时返回
6 + "content": {
7 + stayPayNum: 11, // 待付款订单数
8 + stayDeliverNum: 22, // 待发货订单数
9 + stayTakeNum: 33, // 待收货订单数
10 + stayReplyNum: 44, // 待评论订单数
11 + salesReturnNum: 55 // 退货订单数
12 + }
13 +}
...\ No newline at end of file ...\ No newline at end of file
1 +/**
2 + * Created by qingge_cyc on 2016/11/23.
3 + */
4 +export default {
5 + "code": 20000, // 成功时返回
6 + "content": {
7 + custId: "12121", // 客户ID
8 + buyerNickName: "王小二", // 买家名称
9 + buyerMobile: "1928192783", // 买家电话
10 + buyerAvatar: "", // 买家头像
11 + buyerPoint: 1222, // 买家积分信息
12 + buyerAppvalue: 1212, // 买家联盟价值
13 + buyerState: 1 // 买家状态
14 + }
15 +}
1 +
2 +/**
3 + * Created by qingge_zwj on 2016/11/23.
4 + */
5 +export default {
6 + "code" : 20000 , // 成功时返回
7 + "content" :{
8 + orderPoints : 999 , // 所需支付总积分值
9 + orderMoney : 10 , // 所需人民币价格
10 + payWay : ["wx","zfb"], // 支付方式
11 + buyerNickName : "小饭团" , // 买家名称
12 + buyerAvatar : "1.png", // 买家头像
13 + custId : "1000000000090" , // 客户ID
14 + custPoints : 8000 , // 客户积分
15 + siteUnitName:'积分' , //客户积分单位
16 + orderTime : '2016-12-12 12:12:12' , // 订单生成时间
17 + orderValidTime :1800 // 订单有效时间(秒)
18 + }
19 +}
1 +/**
2 + * Created by qingge_cyc on 2016/11/23.
3 + */
4 +export default {
5 + "code": 20000, // 成功时返回
6 + "content": {
7 + buyerNickName: "王小二", // 买家名称
8 + cityId: "1212", // 城市Id
9 + cityName: "常州市", // 城市名
10 + provinceId: "4343", // 省份ID
11 + provinceName: "江苏省", // 省份名
12 + areaId: "555", // 区县ID
13 + areaName: "新北区", // 区县名
14 + detailAddress: "太湖东路9-2", // 详细地址
15 + buyerMobile: "12819378189", // 买家电话
16 + buyerCode: 222900 // 买家邮编
17 + }
18 +}
...\ No newline at end of file ...\ No newline at end of file
This diff is collapsed. Click to expand it.
1 +
2 +/**
3 + * Created by shipfi on 2016/6/2.
4 + */
5 + /*jshint esversion: 6 */
6 +import Vue from 'vue';
7 +import VueResource from 'vue-resource';
8 +//import cookieManager from '../utils/cookieManager';
9 +//import {API_ROOT} from '../config';
10 +
11 +//import {getCookie,signOut} from '../utils/AuthService';
12 +
13 +Vue.use(VueResource);
14 +
15 +
16 +
17 +// HTTP相关
18 +Vue.http.options.crossOrigin = true;
19 +Vue.http.options.xhr = {withCredentials: true};
20 +//Vue.http.options.timeout = 5000;
21 +
22 +//Vue.http.headers.common['GrpAppID'] = cookieManager.getCookie('grpAppId');
23 +//Vue.http.headers.common['OpenID'] = cookieManager.getCookie('wxOpenId');
24 +
25 +Vue.http.interceptors.push({
26 + request(request) {
27 + request.headers = request.headers || {};
28 + //request.headers.UserID = "xxx";//getCookie('UserID');
29 + //console.log(grpAppId);
30 + //request.headers.common['AppID'] = cookieManager.getCookie('grpAppId');
31 + //request.headers.common['OpenID'] = cookieManager.getCookie('wxOpenId');
32 + //request.headers.common['UserID'] = cookieManager.getCookie('userId');
33 + return request;
34 + },
35 + response(response){
36 + // 这里可以对响应的结果进行处理
37 + if (response.status === 401) {
38 + //signOut();
39 + window.location.pathname = '/authFaild';
40 + }
41 + return response;
42 + }
43 +});
44 +
45 +
46 +var API_ROOT='/shopAPI';
47 +
48 +export default {
49 + /* 首页结构 */
50 + getweiIndext: Vue.resource(API_ROOT + '/weiPage/indexPage/{pageId}'),
51 + /* 底部导航 */
52 + getgroupNav:Vue.resource(API_ROOT + '/weiPage/nav'),
53 + /* 获取我的地址列表 */
54 + getmyAddressList:Vue.resource(API_ROOT + '/address/list?page={page}&pageNum={pageNum}'),
55 + /* 设置默认地址 */
56 + setDefaultAddress:Vue.resource(API_ROOT + '/address/default'),
57 + /* 删除默认地址 */
58 + deleteAddress:Vue.resource(API_ROOT + '/address'),
59 + /* 获取指定地址信息 */
60 + selectAddress:Vue.resource(API_ROOT + '/address/appoint/{buyerAddressId}'),
61 + /* 保存编辑地址信息 */
62 + posteditAddress:Vue.resource(API_ROOT + '/address/edit'),
63 + /* 保存新增地址信息 */
64 + postaddAddress:Vue.resource(API_ROOT + '/address/add'),
65 + /* 获取个人中心信息 */
66 + getpersonData:Vue.resource(API_ROOT + '/self'),
67 + /* 获取个人中心订单数 */
68 + getorderNum:Vue.resource(API_ROOT + '/order/orderCount'),
69 + /* 获取浏览记录 */
70 + getbrowseRecordList:Vue.resource(API_ROOT + '/self/browers?page={page}&pageNum={pageNum}'),
71 + /* 获取收藏记录 */
72 + getmyCollectionList:Vue.resource(API_ROOT + '/self/favoriates?page={page}&pageNum={pageNum}'),
73 + /* 添加/取消收藏 */
74 + addCancelCollection:Vue.resource(API_ROOT + '/self/favoriate?id={id}&type={type}'),
75 + /* 获取我的优惠券列表 */
76 + getmyCouponList:Vue.resource(API_ROOT + '/self/coupons?useType={useType}&page={page}&pageNum={pageNum}'),
77 + /* 获取优惠券详情 */
78 + getmyCouponDetail:Vue.resource(API_ROOT + '/self/coupon/detail/{cplId}'),
79 + /* 获取优惠券中心列表 */
80 + getcouponCenterList:Vue.resource(API_ROOT + '/coupon/list?cplType={cplType}&page={page}&pageNum={pageNum}'),
81 + /* 获取优惠券中心的优惠券详情 */
82 + getcouponCenterDetail:Vue.resource(API_ROOT + '/coupon/detail/{cplId}'),
83 + /* 获取优惠券适用网点 */
84 + getmatchNetList:Vue.resource(API_ROOT + 'coupon/sites/{cplId}?lon={lon}&lng={lng}'),
85 + /* 获取优惠券中心标题及背景 */
86 + getcouponTab:Vue.resource(API_ROOT + '/coupon'),
87 + /* 优惠券兑换 */
88 + couponExchange:Vue.resource(API_ROOT + '/coupon/exchange'),
89 +
90 + /* 确认订单(结算) */
91 + postcheckOrder:Vue.resource(API_ROOT + '/order/checkOrder'),
92 +
93 + /* 获取符合需求的优惠券列表 */
94 + postmatchCouponList:Vue.resource(API_ROOT + '/order/coupons'),
95 +
96 + /* 确认下单 */
97 + postconfirmOrder:Vue.resource(API_ROOT + '/order/submitOrder'),
98 +
99 + /* 支付页面 */
100 + getpushOrder:Vue.resource(API_ROOT + 'pay.qingger.com'),
101 +
102 + /* 支付订单 */
103 + postpayOrder:Vue.resource(API_ROOT + '/order/payOrder'),
104 +
105 + /* 订单列表 */
106 + getOrderList:Vue.resource(API_ROOT + '/order/list?orderState={orderState}&evaluationState={evaluationState}&page={page}&pageNum={pageNum}'),
107 +
108 +};
109 +
1 +<template>
2 + <div class="hello">
3 + <h1>{{ msg }}</h1>
4 + <h2>Essential Links</h2>
5 + <ul>
6 + <li><a href="https://vuejs.org" target="_blank">Core Docs</a></li>
7 + <li><a href="https://forum.vuejs.org" target="_blank">Forum</a></li>
8 + <li><a href="https://gitter.im/vuejs/vue" target="_blank">Gitter Chat</a></li>
9 + <li><a href="https://twitter.com/vuejs" target="_blank">Twitter</a></li>
10 + <br>
11 + <li><a href="http://vuejs-templates.github.io/webpack/" target="_blank">Docs for This Template</a></li>
12 + </ul>
13 + <h2>Ecosystem</h2>
14 + <ul>
15 + <li><a href="http://router.vuejs.org/" target="_blank">vue-router</a></li>
16 + <li><a href="http://vuex.vuejs.org/" target="_blank">vuex</a></li>
17 + <li><a href="http://vue-loader.vuejs.org/" target="_blank">vue-loader</a></li>
18 + <li><a href="https://github.com/vuejs/awesome-vue" target="_blank">awesome-vue</a></li>
19 + </ul>
20 + </div>
21 +</template>
22 +
23 +<script>
24 + export default {
25 + name : 'hello',
26 + data () {
27 + return {
28 + msg : 'Welcome to Your Vue.js App'
29 + };
30 + }
31 + };
32 +</script>
33 +
34 +<!-- Add "scoped" attribute to limit CSS to this component only -->
35 +<style scoped>
36 + h1, h2 {
37 + font-weight: normal;
38 + }
39 +
40 + ul {
41 + list-style-type: none;
42 + padding: 0;
43 + }
44 +
45 + li {
46 + display: inline-block;
47 + margin: 0 10px;
48 + }
49 +
50 + a {
51 + color: #42b983;
52 + }
53 +</style>
1 +<template>
2 + <li class="addressitem-div">
3 + <div class="address-top">
4 + <span class="name">{{item.buyerNickName}}</span>
5 + <span class="phone">{{item.buyerMobile}}</span>
6 + </div>
7 + <div class="address-mid">
8 + <p>{{item.buyerAddress}}</p>
9 + </div>
10 + <div class="address-bottom">
11 + <label class="mint-radiolist-label" @click.self="selectedlabel(index,item.buyerAddressId)"
12 + :class="{'colorpurple':item.isDefault==1}">
13 + <span class="mint-radio">
14 + <input class="mint-radio-input" type="radio" :value="item.buyerAddressId" checked="checked"
15 + v-if="item.isDefault==1">
16 + <input class="mint-radio-input" type="radio" :value="item.buyerAddressId" v-else>
17 + <span class="mint-radio-core"></span>
18 + </span>
19 + <span class="mint-radio-label">默认地址</span>
20 + </label>
21 + <div class="address-btn">
22 + <router-link :to="{name:'addAddress',params: {Id: item.buyerAddressId,teype:'edit' }}" tag="span"><img
23 + src="../../static/images/edit.svg"/></router-link>
24 + <span @click="openConfirm(item.buyerAddressId)" size="large"><img src="../../static/images/delete.svg"/></span>
25 + </div>
26 + </div>
27 + </li>
28 +</template>
29 +<script type="text/ecmascript-6">
30 + import {MessageBox, Toast} from 'mint-ui';
31 + import {setDefaultAddress, ClearAddresslist, getmyAddressList, deleteAddress} from '../../vuex/actions';
32 +
33 + export default {
34 + data() {
35 + return {}
36 + },
37 + props: {
38 + index: '',
39 + item: '',
40 + pageNum: ''
41 + },
42 + components: {},
43 + vuex: {
44 + getters: {},
45 + actions: {
46 + setDefaultAddress,
47 + ClearAddresslist,
48 + getmyAddressList,
49 + deleteAddress
50 + }
51 + },
52 +
53 + methods: {
54 + selectedlabel(index, id){
55 + $(".mint-radio-input").removeAttr("checked");
56 + $(".mint-radio-label").removeClass("colorpurple");
57 + $(".mint-radio-input").eq(index).attr("checked", "checked");
58 + $(".mint-radio-label").eq(index).addClass("colorpurple");
59 + this.setDefaultAddress(id);
60 + },
61 + openConfirm(id) {
62 + var self = this;
63 + MessageBox.confirm('确定删除该地址?', '提示').then(action => {
64 + self.deleteAddress(id).then(function () {
65 + Toast({
66 + message: '删除成功',
67 + position: 'bottom',
68 + duration: 5000
69 + });
70 + self.ClearAddresslist().then(function () {
71 + self.getmyAddressList(0, self.pageNum);
72 + })
73 + });
74 + });
75 +
76 + }
77 + }
78 + }
79 +</script>
1 +<template>
2 + <div class="order-address-item">
3 + <span class="left"><img src="../../static/images/address.svg"/></span>
4 + <span class="mid">
5 + <p class="top">收货人:{{selectAddress.buyerNickName}}<span>{{selectAddress.buyerMobile}}</span></p>
6 + <p class="bot">收货地址:{{selectAddress.provinceName}} {{selectAddress.cityName}} {{selectAddress.areaName}}
7 + {{selectAddress.detailAddress}}</p>
8 + </span>
9 + <slot name="right">
10 + </slot>
11 + </div>
12 +
13 +</template>
14 +
15 +<script type="text/ecmascript-6">
16 + export default{
17 + data(){
18 + return {
19 + msg: 'hello vue'
20 + }
21 + },
22 + props: {
23 + selectAddress: ''
24 + },
25 + components: {}
26 + }
27 +</script>
1 +<template>
2 + <li class="component-noswipeitem">
3 + <slot></slot>
4 + </li>
5 +</template>
6 +<script type="text/ecmascript-6">
7 +
8 + export default {
9 + data() {
10 + return {}
11 + },
12 + created(){
13 +// $(function(){
14 +// console.log("asdfsadfsafasd")
15 +// var paragraph = document.getElementsByClassName('component-swipe-title')[1];
16 +// $clamp(paragraph, {clamp: 1, useNativeClamp: false});
17 +// })
18 + },
19 + methods: {},
20 + beforeRouteEnter (to, from, next){
21 + next(next(vm => {
22 + }));
23 + },
24 + beforeRouteLeave (to, from, next){
25 + next();
26 + },
27 + }
28 +</script>
1 +<template>
2 + <router-link :to="{ name: 'goodsDetail', params: { productId: 0 }}" tag="li">
3 + <div class="record-item">
4 + <img :src="imgSrc" class="record-img"/>
5 + <div class="record-info">
6 + <p class="record-title">{{item.name}}</p>
7 + <p class="record-coin">联盟币:{{item.price}}</p>
8 + </div>
9 + <div class="record-time">{{item.browserTime}}</div>
10 + </div>
11 + </router-link>
12 +</template>
13 +<script type="text/ecmascript-6">
14 + import {formatImg} from '../../utils/commonUtil';
15 + export default {
16 + data() {
17 + return {}
18 + },
19 + props: {
20 + item: {}
21 + },
22 + computed: {
23 + imgSrc(){
24 + return formatImg.formatSRC(this.item.photo, 100, 100);
25 + },
26 + },
27 + }
28 +</script>
1 +<template>
2 + <router-link to="{ name: 'goodsDetail', params: { productId: 0 }}" tag="li">
3 + <div class="record-item">
4 + <img :src="imgSrc" class="record-img"/>
5 + <div class="record-info">
6 + <p class="record-title">{{item.productName}}</p>
7 + <p class="record-coin">联盟币:{{item.productListPrice}}</p>
8 + </div>
9 + <div class="record-time">{{item.favoriateTime}}
10 + <span @click.stop="openConfirm(item.favoriateId,item.type)" class="cancel-collect">取消收藏</span>
11 + </div>
12 + </div>
13 + </router-link>
14 +</template>
15 +<script type="text/ecmascript-6">
16 + import {formatImg} from '../../utils/commonUtil';
17 + import {MessageBox, Toast} from 'mint-ui';
18 + import {getmyCollectionList, clearmyCollectionList, addCancelCollection} from '../../vuex/actions';
19 +
20 + export default {
21 + data() {
22 + return {}
23 + },
24 + props: {
25 + item: '',
26 + pageNum: ''
27 +
28 + },
29 + computed: {
30 + imgSrc(){
31 + return formatImg.formatSRC(this.item.productPhoto, 100, 100);
32 + }
33 + },
34 + methods: {
35 + openConfirm(id, type) {
36 + var self = this;
37 + MessageBox.confirm('确定取消收藏?', '提示').then(action => {
38 + self.addCancelCollection(id, type).then(function () {
39 + Toast({
40 + message: '取消成功',
41 + position: 'bottom',
42 + duration: 5000
43 + });
44 + self.clearmyCollectionList().then(function () {
45 + self.getmyCollectionList(0, self.pageNum);
46 + })
47 + });
48 + });
49 +
50 + }
51 + },
52 + vuex: {
53 + getters: {},
54 + actions: {
55 + getmyCollectionList,
56 + clearmyCollectionList,
57 + addCancelCollection
58 + }
59 + }
60 + }
61 +</script>
1 +<template>
2 + <div class="nav-bottom">
3 + <div class="nav-bottom-home">
4 + <img src="../../static/images/home.svg" style="width:0.55rem;margin-top:0.2rem;"/>
5 + </div>
6 + <ul class="nav-bottom-table">
7 + <template v-for="(item, index) in groupNav.navList">
8 + <li v-if="item.subMenu" class="nav-tablecell" @click="showSecond(index,item)">
9 + <div class="nav-first">{{item.name}}</div>
10 + <ul class="nav-second hide" v-if="item.subMenu">
11 + <li class="nav-second-item" v-for="subitem in item.subMenu"
12 + @click="gotopage(subitem.prefix,subitem.url)">{{subitem.name}}
13 + </li>
14 + </ul>
15 +
16 + </li>
17 + <router-link :to="item.prefix.url" class="nav-tablecell" @click="gotopage(item.prefix,item.url)" v-else
18 + tag="li">
19 + <div class="nav-first">{{item.name}}</div>
20 + </router-link>
21 +
22 + </template>
23 +
24 + </ul>
25 + </div>
26 +</template>
27 +<style>
28 +
29 +</style>
30 +<script type="text/ecmascript-6">
31 + import {getgroupNav} from '../../vuex/actions';
32 + import {goto} from '../../utils/commonUtil';
33 + export default {
34 + data(){
35 + return {
36 + showlist: false,
37 + linkActiveurl: [],
38 + }
39 + },
40 + mounted(){
41 + this.getgroupNav();
42 + },
43 + methods: {
44 + showSecond(index, item){
45 + if ($(".nav-second").eq(index).hasClass('hide')) {
46 + $(".nav-second").addClass('hide');
47 + $(".nav-second").eq(index).removeClass('hide')
48 + } else {
49 + $(".nav-second").eq(index).addClass('hide')
50 + }
51 + },
52 + gotopage(type, url){
53 + goto.gotopage(this, type, url);
54 + },
55 + },
56 + vuex: {
57 + getters: {
58 + groupNav: ({weiPageData}) => {
59 + return weiPageData.groupNav;
60 + },
61 + },
62 + actions: {
63 + getgroupNav
64 + }
65 + },
66 + }
67 +</script>
1 +<template>
2 + <div class="nodatadiv">
3 + <slot></slot>
4 + </div>
5 +</template>
...\ No newline at end of file ...\ No newline at end of file
1 +<template>
2 + <router-link :to="{ name: 'couponCenterDetail', params: { cplId: item.id }}" tag="div" class="index-coupon-item">
3 + <div class="coupon-left">
4 + <!--优惠券类型-->
5 + <div class="coupon-type">
6 + <div class="coupon-type-left" :style="{'color':item.bgColor}">{{item.useVal}}</div>
7 + <div class="coupon-type-right">
8 + <!--<div class="type-up">{{item.cplTypeName}}</div>-->
9 + <div class="type-down">{{item.cplUnit}}</div>
10 + </div>
11 + </div>
12 + <!--优惠券名称-->
13 + <div class="coupon-name"><span :style="{'color':item.bgColor,'border-color':item.bgColor}" class="typer">{{item.cplTypeName}}</span>{{item.cplName}}
14 + </div>
15 + <!--优惠券有效期--->
16 + <div class="coupon-time">{{StartTime}} 至 {{EndTime}}</div>
17 + </div>
18 + <div class="coupon-right" :style="{'background':item.bgColor}">
19 + <div class="coupon-num">{{item.faceMoney}}</div>
20 + <div class="coupon-jg-type">{{siteUnitName}}</div>
21 + <div class="coupon-btn">立即兑换</div>
22 + </div>
23 + </router-link>
24 +</template>
25 +<script type="text/ecmascript-6">
26 +
27 + export default {
28 + props: {
29 + item: ''
30 + },
31 + data() {
32 + return {
33 + popupVisible: false
34 + };
35 + },
36 + computed: {
37 + StartTime(){
38 + return this.item.grantStartTime.substring(0, 11);
39 + },
40 + EndTime(){
41 + return this.item.grantEndTime.substring(0, 11);
42 + }
43 + }
44 + };
45 +</script>
1 +<template>
2 + <router-link :to="{ name: 'couponCenterDetail', params: { cplId: item.id }}" tag="div" class="index-coupon-item">
3 + <div class="coupon-left">
4 + <!--优惠券类型-->
5 + <div class="coupon-type">
6 + <div class="coupon-type-left" :style="{'color':item.bgColor}">{{item.useVal}}</div>
7 + <div class="coupon-type-right">
8 + <!--<div class="type-up">{{item.cplTypeName}}</div>-->
9 + <div class="type-down">{{item.cplUnit}}</div>
10 + </div>
11 + </div>
12 + <!--优惠券名称-->
13 + <div class="coupon-name"><span :style="{'color':item.bgColor,'border-color':item.bgColor}" class="typer">{{item.cplTypeName}}</span>{{item.cplName}}
14 + </div>
15 + <!--优惠券有效期--->
16 + <div class="coupon-time">{{StartTime}} 至 {{EndTime}}</div>
17 + </div>
18 + <div class="coupon-right" :style="{'background':item.bgColor}">
19 + <div class="coupon-num">{{item.faceMoney}}</div>
20 + <div class="coupon-jg-type">{{siteUnitName}}</div>
21 + <div class="coupon-btn">立即兑换</div>
22 + </div>
23 + </router-link>
24 +</template>
25 +<script type="text/ecmascript-6">
26 +
27 + export default {
28 + props: {
29 + item: '',
30 + siteUnitName: ''
31 + },
32 + data() {
33 + return {
34 + popupVisible: false
35 +
36 +
37 + };
38 + },
39 + computed: {
40 + StartTime(){
41 + return this.item.grantStartTime.substring(0, 11);
42 + },
43 + EndTime(){
44 + return this.item.grantEndTime.substring(0, 11);
45 + }
46 + }
47 + };
48 +</script>
1 +<template>
2 + <router-link :to="{ name: 'myCouponDetail', params: { cplId: item.cplId }}" tag="div" class="index-coupon-item">
3 + <div class="coupon-left">
4 + <!--优惠券类型-->
5 + <div class="coupon-type">
6 + <div class="coupon-type-left" :style="{'color':item.cplBgcolor}">{{item.cplValue}}</div>
7 + <div class="coupon-type-right">
8 + <!--<div class="type-up">{{item.cplUnit}}</div>-->
9 + <div class="type-down">{{item.cplUnit}}</div>
10 + </div>
11 + </div>
12 + <!--优惠券名称-->
13 + <div class="coupon-name"><span :style="{'color':item.cplBgcolor ,'border-color':item.cplBgcolor }"
14 + class="typer">{{item.cplTypeName}}</span>{{item.cplName}}
15 + </div>
16 + <!--优惠券有效期--->
17 + <div class="coupon-time">{{startTime}} 至 {{endTime}}</div>
18 + </div>
19 + <div class="coupon-right" :style="{'background':item.cplBgcolor}">
20 + <div class="use-now">立即使用<span class="mint-cell-allow-right"></span></div>
21 + </div>
22 + </router-link>
23 +</template>
24 +<script type="text/ecmascript-6">
25 + export default {
26 + data() {
27 + return {}
28 + },
29 + props: {
30 + item: {}
31 + },
32 + computed: {
33 + startTime(){
34 + return this.item.cplStartTime.substring(0, 11);
35 + },
36 + endTime(){
37 + return this.item.cplEndTime.substring(0, 11);
38 + }
39 + }
40 + }
41 +</script>
1 +<template>
2 + <router-link :to="{ name: 'goodsDetail', params: { productId: item.id }}" tag="li" class="component-bigpic-li">
3 + <img v-lazy="imgsrc"/>
4 + <!--卡片样式-->
5 + <div class="component-bigpic-txt" v-if="showType!=2">
6 + <p class="goods-name" v-show="showTitle==1">{{item.title}}</p>
7 + <p class="goods-Price" v-show="isShowPrice==1">{{item.price}}{{siteUnitName}}</p>
8 + </div>
9 + <!--极简样式-->
10 + <div class="component-bigpic-Minitxt" v-else>
11 + <p class="goods-name" v-show="showTitle==1">{{item.title}}</p>
12 + <p class="goods-Price" v-show="isShowPrice==1">{{item.price}}{{siteUnitName}}</p>
13 + </div>
14 +
15 + </router-link>
16 +</template>
17 +
18 +<script>
19 + import {Lazyload} from 'mint-ui'
20 + import {formatImg} from '../../utils/commonUtil';
21 + export default {
22 + props: {
23 + item: '',
24 + showType: '',
25 + showTitle: '',
26 + isShowPrice: '',
27 + siteUnitName: ''
28 + },
29 + data() {
30 + return {};
31 + },
32 + computed: {
33 + imgsrc(){
34 + return formatImg.formatSRC(this.item.image, 400, 400);
35 + },
36 + },
37 + };
38 +</script>
1 +<template>
2 + <router-link :to="{name:'goodsDetail',params: { productId: 123 }}" tag="li" class="car-item">
3 + <div class="left">
4 + <span class="mint-radio">
5 + <input class="mint-radio-input" type="radio">
6 + <span class="mint-radio-core"></span>
7 + </span>
8 + </div>
9 + <div class="middle"><img src="../../static/images/u35.jpg" alt=""/></div>
10 + <div class="right">
11 + <p class="title">星期六2016秋冬新款牛皮尖头系带低跟粗
12 + 跟单鞋女鞋新款牛皮尖头系带低跟粗星期六2016秋冬新款牛皮尖头系带低跟粗
13 + 跟单鞋女鞋新款牛皮尖头系带低跟粗</p>
14 + <p class="style">规格:黑色 35</p>
15 + <p class="money-num"><span class="money">888联盟币</span><span class="num">x1</span></p>
16 + </div>
17 + </router-link>
18 +</template>
19 +<script type="text/ecmascript-6">
20 + export default {
21 + data() {
22 + return {}
23 + },
24 + props: {},
25 + components: {},
26 + methods: {},
27 + }
28 +</script>
1 +<template>
2 + <div>
3 + <!--小图-->
4 + <ul class="goods-small-ul">
5 + <router-link to="/" tag="li" class="component-smallpic-li">
6 + <img v-lazy="item"/>
7 + <!--卡片样式-->
8 + <div class="component-smallpic-txt">
9 + <p class="goods-name">星期六2016秋冬新款牛皮尖头系带低跟粗跟单鞋女鞋皮尖头系带低跟粗跟单鞋女鞋头系带低跟粗跟单鞋女鞋皮尖头系带低跟粗跟单鞋女鞋</p>
10 + <p class="goods-Price">499联盟币</p>
11 + </div>
12 + <!--极简样式-->
13 + <!--<div class="component-smallpic-Minitxt">-->
14 + <!--<p class="goods-name">星期六2016秋冬新款牛皮尖头系带低跟粗跟单鞋女鞋皮尖头系带低跟粗跟单鞋女鞋头系带低跟粗跟单鞋女鞋皮尖头系带低跟粗跟单鞋女鞋</p>-->
15 + <!--<p class="goods-Price">499联盟币</p>-->
16 + <!--</div>-->
17 + </router-link>
18 + <router-link to="/" tag="li" class="component-smallpic-li">
19 + <img v-lazy="item"/>
20 + <!--卡片样式-->
21 + <div class="component-smallpic-txt">
22 + <p class="goods-name">星期六2016秋冬新款牛皮尖头系带低跟粗跟单鞋女鞋皮尖头系带低跟粗跟单鞋女鞋头系带低跟粗跟单鞋女鞋皮尖头系带低跟粗跟单鞋女鞋</p>
23 + <p class="goods-Price">499联盟币</p>
24 + </div>
25 + <!--极简样式-->
26 + <!--<div class="component-smallpic-Minitxt">-->
27 + <!--<p class="goods-name">星期六2016秋冬新款牛皮尖头系带低跟粗跟单鞋女鞋皮尖头系带低跟粗跟单鞋女鞋头系带低跟粗跟单鞋女鞋皮尖头系带低跟粗跟单鞋女鞋</p>-->
28 + <!--<p class="goods-Price">499联盟币</p>-->
29 + <!--</div>-->
30 +
31 + </router-link>
32 + <router-link to="/" tag="li" class="component-smallpic-li">
33 + <img v-lazy="item"/>
34 + <!--卡片样式-->
35 + <div class="component-smallpic-txt">
36 + <p class="goods-name">星期六2016秋冬新款牛皮尖头系带低跟粗跟单鞋女鞋皮尖头系带低跟粗跟单鞋女鞋头系带低跟粗跟单鞋女鞋皮尖头系带低跟粗跟单鞋女鞋</p>
37 + <p class="goods-Price">499联盟币</p>
38 + </div>
39 + <!--极简样式-->
40 + <!--<div class="component-smallpic-Minitxt">-->
41 + <!--<p class="goods-name">星期六2016秋冬新款牛皮尖头系带低跟粗跟单鞋女鞋皮尖头系带低跟粗跟单鞋女鞋头系带低跟粗跟单鞋女鞋皮尖头系带低跟粗跟单鞋女鞋</p>-->
42 + <!--<p class="goods-Price">499联盟币</p>-->
43 + <!--</div>-->
44 +
45 + </router-link>
46 + <router-link to="/" tag="li" class="component-smallpic-li">
47 + <img v-lazy="item"/>
48 + <!--卡片样式-->
49 + <div class="component-smallpic-txt">
50 + <p class="goods-name">星期六2016秋冬新款牛皮尖头系带低跟粗跟单鞋女鞋皮尖头系带低跟粗跟单鞋女鞋头系带低跟粗跟单鞋女鞋皮尖头系带低跟粗跟单鞋女鞋</p>
51 + <p class="goods-Price">499联盟币</p>
52 + </div>
53 + <!--极简样式-->
54 + <!--<div class="component-smallpic-Minitxt">-->
55 + <!--<p class="goods-name">星期六2016秋冬新款牛皮尖头系带低跟粗跟单鞋女鞋皮尖头系带低跟粗跟单鞋女鞋头系带低跟粗跟单鞋女鞋皮尖头系带低跟粗跟单鞋女鞋</p>-->
56 + <!--<p class="goods-Price">499联盟币</p>-->
57 + <!--</div>-->
58 +
59 + </router-link>
60 + </ul>
61 + </div>
62 +</template>
63 +<style>
64 + image[lazy=loading] {
65 + width: 40px;
66 + height: 300px;
67 + margin: auto;
68 + }
69 +</style>
70 +<script>
71 + import Lazyload from 'mint-ui';
72 + export default {
73 + data() {
74 + return {
75 + item: 'http://fuss10.elemecdn.com/b/18/0678e57cb1b226c04888e7f244c20jpeg.jpeg',
76 + };
77 + },
78 + };
79 +</script>
1 +<template>
2 + <div>
3 + <!--大图-->
4 + <big-pic :item="data[0]" :showType="showType" :showTitle="showTitle" :isShowPrice="isShowPrice"
5 + :siteUnitName="siteUnitName"></big-pic>
6 + <!--小图-->
7 + <ul class="goods-small-ul">
8 + <template v-for="item in smallgoods">
9 + <small-pic :item="item" :showType="showType" :showTitle="showTitle" :isShowPrice="isShowPrice"
10 + :siteUnitName="siteUnitName"></small-pic>
11 + </template>
12 + </ul>
13 + </div>
14 +</template>
15 +<style>
16 + image[lazy=loading] {
17 + width: 40px;
18 + height: 300px;
19 + margin: auto;
20 + }
21 +</style>
22 +<script>
23 + import smallPic from '../goods/smallPic.vue';
24 + import bigPic from '../goods/bigPic.vue';
25 + import Lazyload from 'mint-ui';
26 + import {formatImg} from '../../utils/commonUtil';
27 + export default {
28 + props: {
29 + data: '',
30 + showType: '',
31 + showTitle: '',
32 + isShowPrice: '',
33 + siteUnitName: ''
34 + },
35 + data() {
36 + return {};
37 + },
38 + computed: {
39 + imgsrc(){
40 + return formatImg.formatSRC(this.data[0].image, 400, 400);
41 + },
42 + smallgoods(){
43 + return this.data.slice(1);
44 + },
45 + },
46 + components: {
47 + smallPic,
48 + bigPic
49 + }
50 + };
51 +</script>
1 +<template>
2 + <router-link to="/" tag="li">
3 + <div class="goods-comment">
4 + <div class="item">
5 + <div>
6 + <img src="../../static/images/defaultface.png" alt="" class="face" />
7 + <span class="name-time">
8 + <span class="name">啊啊啊</span>
9 + <span class="time">2016-11-09 13:55</span>
10 + </span>
11 + </div>
12 + <div class="content">
13 + 鞋子收到了,真的很喜欢,下次还会光临,鞋子收到了,真
14 +的很喜欢,下次还会光临。鞋子收到了,真的很喜欢,下次还会光临,鞋子收到了,真
15 +的很喜欢,下次还会光临。鞋子收到了,真的很喜欢,下次还会光临,鞋子收到了,真
16 +的很喜欢,下次还会光临。鞋子收到了,真的很喜欢,下次还会光临,鞋子收到了,真
17 +的很喜欢,下次还会光临。
18 + </div>
19 + </div>
20 + </div>
21 + </router-link>
22 +</template>
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff could not be displayed because it is too large.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.