shipengfei

Code Update

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