Commit 76ef912c authored by 夏彬's avatar 夏彬

first commot

parents
# phpstorm project files
.idea
# netbeans project files
nbproject
# zend studio for eclipse project files
.buildpath
.project
.settings
# windows thumbnail cache
Thumbs.db
# Mac DS_Store Files
.DS_Store
node_modules
dist
var webpack = require('webpack');
module.exports = {
plugins: [
new webpack.DefinePlugin({
__BASE_URL__: JSON.stringify('//dev.wxherr.com/'),
__CDN_URL__: JSON.stringify('//dev.wxherr.com/'),
__QINIU_URL__: JSON.stringify('http://deimg.c.xixia.cc/'),
__NODE_ENV__: '"development"'
}),
]
};
var webpack = require('webpack');
module.exports = {
plugins: [
new webpack.DefinePlugin({
__BASE_URL__: JSON.stringify('//code.ibanshou.cn/'),
__CDN_URL__: JSON.stringify('//code.ibanshou.cn/'),
__QINIU_URL__: JSON.stringify('http://img.2g.vgot.net/'),
__NODE_ENV__: '"production"'
}),
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
}
}),
new webpack.LoaderOptionsPlugin({
minimize: true
})
]
};
{
"name": "zuiketang-frontend",
"version": "1.0.0",
"description": "zuiketang-frontend",
"main": "index.js",
"scripts": {
"dev": "cross-env NODE_ENV=development webpack --watch --progress --display-error-details",
"build": "cross-env NODE_ENV=production webpack --progress --hide-modules"
},
"keywords": [
"webpack"
],
"author": "xiabin",
"license": "MIT",
"devDependencies": {
"babel-core": "^6.0.0",
"babel-loader": "^6.0.0",
"babel-plugin-component": "^0.9.1",
"babel-preset-es2015": "^6.1.18",
"babel-preset-latest": "^6.0.0",
"babel-runtime": "^5.8.0",
"copy-webpack-plugin": "^4.0.1",
"cross-env": "^3.0.0",
"css-loader": "^0.28.4",
"expose": "^0.1.4",
"expose-loader": "^0.7.3",
"extract-text-webpack-plugin": "^2.1.2",
"file-loader": "^0.9.0",
"html-webpack-plugin": "^2.28.0",
"imports-loader": "^0.6.5",
"jsx-loader": "^0.13.2",
"script-loader": "^0.7.0",
"style-loader": "^0.18.1",
"url-loader": "^0.5.7",
"vue-loader": "^11.1.4",
"vue-style-loader": "^1.0.0",
"vue-template-compiler": "^2.2.1",
"webpack": "^2.2.0",
"webpack-hashed-module-id-plugin": "^0.1.4",
"webpack-require-http": "^0.1.0"
},
"dependencies": {
"file-size": "^1.0.0",
"jquery": "^2.2.4",
"moment": "^2.13.0",
"video.js": "^5.11.9",
"vue": "^2.0.8",
"vue-cookie": "^1.1.4",
"vue-resource": "^1.3.1",
"vue-router": "^2.5.3"
}
}
\ No newline at end of file
<template>
<div class="upload-code-doc">
<div class="input-style" v-show="!disabled">
<button type="button" class="btn btn-upload" :id="uploaderId">上传文件</button>
</div>
<ul class="code-doc-list">
<li v-for="file in uplist" :data-fid="file.id" :class="'type-'+(file.isImg ? 'img' : 'doc')">
<div class="upload-item-container">
<i v-if="!file.isImg" class="iconfont icon-wenjianjia"></i>
<img v-else :src="getImageSrc(file.url)">
<h3>{{file.name}}</h3>
<p>
<template v-if="file.isImg">[图片] </template>
{{calcSize(file.size)}} -
<template v-if="file.status == status.QUEUED">准备</template>
<template v-else-if="file.status == status.UPLOADING">上传中</template>
<template v-else-if="file.status == status.DONE">上传完成</template>
<template v-else-if="file.status == status.FAILED">上传失败</template>
</p>
</div>
<a class="upload-item-close" href="javascript:;" @click="cancelUpload(file)"><i class="iconfont icon-close"></i></a>
<span class="upload-item-loading" v-if="file.status == status.QUEUED || file.status == status.UPLOADING" :style="{width:file.percent+'%'}"></span>
</li>
</ul>
</div>
</template>
<script>
import str from "../utils/string";
import qiniu from "../utils/qiniu";
import filesize from "file-size";
export default {
data() {
return {
uploader: null,
uploaderId: "uploader" + str.rand(10),
uplist: [],
disabled: false,
status: qiniu.status
};
},
props: {
maxFileNumber: {
type: Number,
default: 5
}
},
mounted() {
this.initUploader();
},
methods: {
getUploadToken(callback) {
$.post(common.getFullUrl("userup/get-upload-token"), {type:"doc"}, t => {
if (t.status) {
callback(t.data.token);
} else {
layer.alert("初化上传组件失败!" + t.message/*, {icon:5}*/);
}
}, "json");
},
initUploader(uploadToken) {
let self = this;
if (!uploadToken) {
this.getUploadToken(token => {
self.initUploader(token);
});
return;
}
let uploader = new qiniu.Uploader({
browse_button: self.uploaderId,
drop_element: self.uploaderId,
runtimes: 'html5,html4',
dragdrop: true,
multi_selection: true,
filters: {
max_file_size: "5mb",
/*
mime_types: [{
title: "视频文件",
extensions: "3gp,flv,rm,rmvb,mpg,mpeg,mp4,m4v,mov,mkv,qt,avi,wmv"
}]
*/
prevent_duplicates : true
},
upload_token: uploadToken,
auto_start: true,
init: {
FilesAdded(up, files) {
plupload.each(files, file => {
//最大文件数限制
if (self.isListFull()) {
uploader.removeFile(file);
uploader.disableBrowse();
self.disabled = true;
return;
}
//文件入列表
let f = {
id: file.id,
name: file.name,
type: file.type,
size: file.size,
origSize: file.origSize,
loaded: file.loaded,
percent: file.percent,
status: file.status,
lastModifiedDate: file.lastModifiedDate,
//以下是自定义对象
src: "",
url: "",
isImg: file.type.indexOf("image") != -1
};
self.uplist.push(f);
});
up.start();
},
FileUploaded(up, file, info) {
self.updateFile(file);
qiniu.uploadedCallback(info, res => {
let f = self.getFile(file.id);
f.url = res.url;
f.src = res.src;
self.$emit("list-changed", 'uploaded', f);
});
},
Error(up, err) {
let msg = "";
if (err.response) {
let data = $.parseJSON(err.response);
msg += "<br>" + data.error;
} else {
msg = "<br>" + err.message;
}
layer.alert(err.file.name + " 上传失败," + msg, {/*icon:5, */title: "上传失败"});
self.updateFile(err.file);
},
UploadProgress(up, file) {
self.updateFile(file);
},
UploadComplete(up, files) {
plupload.each(files, self.updateFile)
},
FilesRemoved(up, files) {
let rids = [];
plupload.each(files, file => {
rids.push(file.id);
});
self.uplist = self.uplist.filter(file => {
return plupload.inArray(file.id, rids) == -1;
});
}
}
});
uploader.init();
this.uploader = uploader;
},
cancelUpload(f) {
let file = this.uploader.getFile(f.id);
this.uploader.removeFile(file);
if (!this.isListFull()) {
this.uploader.disableBrowse(false);
this.disabled = false;
}
this.$emit("list-changed", "removed", f);
},
refresh() {
this.uploader.splice(0, this.uploader.files.length);
this.uploader.disableBrowse(false);
},
isListFull() {
return (this.maxFileNumber > 0 && this.uplist.length >= this.maxFileNumber);
},
getFile(id) {
let file;
plupload.each(this.uplist, f => {
if (f.id == id) {
file = f;
return false;
}
});
return file;
},
updateFile(file) {
let f = this.getFile(file.id);
if (f) {
f.status = file.status;
f.loaded = file.loaded;
f.percent = file.percent;
}
},
getKeys() {
let arr = [];
plupload.each(this.uplist, file => {
if (file.status = plupload.DONE) {
arr.push(file.src);
}
});
return arr;
},
calcSize(size) {
return filesize(size).human('si');
},
getImageSrc(src) {
return src ? src : common.getCdnFullUrl("assets/img/placeholder.jpg")
}
}
}
</script>
<style>
.code-doc-list li {padding-left: 0;}
.upload-item-container {position:absolute; z-index:2; left:0; top: 0; padding-left:95px;}
.upload-item-container img, .upload-item-container i {width:75px; height:50px; position:absolute; border-radius:3px; left:5px; top:5px;}
.upload-item-container i {background-color:#fff; color:#666; text-align:center; line-height:50px;}
.upload-item-container h3 {font-size:14px; color:#666; font-weight:normal; padding-top:10px; overflow:hidden;
text-overflow:ellipsis; white-space:nowrap;}
.upload-item-container p {font-size:12px; color:#999; line-height:24px;}
.upload-item-close {position:absolute; z-index:3; display:block; width:30px; height:60px; text-align:center; line-height:60px;
color:#999; right:0; top:0;}
.upload-item-loading {position:absolute; z-index:1; height:100%; bottom:0; left:0; background-color:#c9caf7;}
</style>
\ No newline at end of file
<template>
<div>
<div class="banshou-tips">分享榜,历史前三名家维人榜单</div>
<ul class="share-rank-list">
<li :class="{clearfix:true ,first:index == 0,second:index==1,third:index==2}" v-for="(item,index) in lists">
<div class="rank-num fl" v-if="index < 3"><img :src="getSortImg(index)"></div>
<div v-else class="rank-num fl">No.{{index + 1}}</div>
<div class="rank-user-head fl"><img :src="item.user.avatar"> <i v-if="index < 3"
class="iconfont icon-huangguan"></i>
</div>
<div class="rank-user-name fl">{{item.user.nickname}}</div>
<div class="rank-share-times fr">{{item.num}}枚</div>
</li>
</ul>
<div class="foot-block"></div>
<div class="foot-nav-box clearfix">
<button @click="showShareImageClick" class="btn btn-none">推荐给其他师傅</button>
</div>
</div>
</template>
<script>
import shareImg from '../share-image';
export default {
data(){
return {
lists: [],
page: 0,
num: 10,
more: false
}
},
methods: {
showShareImageClick(){
shareImg.showShare();
},
moreClick(){
this.page++;
this.getLists(this.page,this.num);
},
getSortImg(index){
var result = '/assets/img/rank_no.jpg';
if (index == 1) {
result = '/assets/img/rank_no2.jpg';
}
if (index == 2) {
result = '/assets/img/rank_no3.jpg';
}
return result;
},
getLists(page, num){
var self = this;
var url = "honor/golden-wrench?page=" + page + "&num=" + num;
$.getJSON(common.getFullUrl(url), function (t) {
if (t.status) {
var result = t.data;
self.lists = self.lists.concat(result.list);
self.more = (result.count > self.lists.length);
} else {
alert(t.message);
}
});
}
},
mounted(){
this.getLists(this.page, this.num);
}
}
</script>
\ No newline at end of file
<template>
<div>
<div class="thanks">
<i class="iconfont icon-evaluate"></i>
<p>感谢以下师傅提供故障码数据,方便你我他</p>
</div>
<div class="thanks-list">
<ul class="clearfix">
<li v-for="(item,index) in lists">
<img :src="item.user.avatar">
<p>{{item.user.nickname}}</p>
</li>
</ul>
</div>
<div v-show="more" class="read-more">
<a @click="moreClick" href="javascript:;">查看更多</a>
</div>
<div class="foot-block"></div>
<div class="foot-nav-box clearfix">
<router-link tag="button" to="/code/upload" class="btn btn-none">上传故障码数据</router-link>
</div>
</div>
</template>
<script>
export default {
data(){
return {
lists: [],
page: 0,
num: 10,
more: false,
}
},
methods: {
moreClick(){
this.page++;
this.getLists(this.page,this.num);
},
getLists(page, num){
var self = this;
var url = "honor/provide-data?page=" + page + "&num=" + num;
$.getJSON(common.getFullUrl(url), function (t) {
if (t.status) {
var result = t.data;
self.lists = self.lists.concat(result.list);
self.more = (result.count > self.lists.length);
} else {
alert(t.message);
}
});
}
},
mounted(){
this.getLists(this.page, this.num);
}
}
</script>
<style>body{background-color: #fff}</style>
\ No newline at end of file
<template>
<div>
<div class="banshou-tips">榜单每周日23:59更新,前三名将获得“金扳手”勋章</div>
<ul class="share-rank-list">
<li :class="{clearfix:true ,first:index == 0,second:index==1,third:index==2}" v-for="(item,index) in lists">
<div class="rank-num fl" v-if="index < 3"><img :src="getSortImg(index)"></div>
<div v-else class="rank-num fl">No.{{index + 1}}</div>
<div class="rank-user-head fl"><img :src="item.user.avatar"> <i v-if="index < 3"
class="iconfont icon-huangguan"></i>
</div>
<div class="rank-user-name fl">{{item.user.nickname}}</div>
<div class="rank-share-times fr">{{item.num}}次分享</div>
</li>
</ul>
<div class="foot-block"></div>
<div class="foot-nav-box clearfix">
<button @click="showShareImageClick" class="btn btn-none">推荐给其他师傅</button>
</div>
</div>
</template>
<script>
import shareImg from '../share-image';
export default {
data(){
return {
lists: [],
page: 0,
num: 10,
more: false
}
},
methods: {
showShareImageClick(){
shareImg.showShare();
},
moreClick(){
this.page++;
this.getLists(this.page,this.num);
},
getSortImg(index){
var result = '/assets/img/rank_no.jpg';
if (index == 1) {
result = '/assets/img/rank_no2.jpg';
}
if (index == 2) {
result = '/assets/img/rank_no3.jpg';
}
return result;
},
getLists(page, num){
var self = this;
var url = "honor/share-data?page=" + page + "&num=" + num;
$.getJSON(common.getFullUrl(url), function (t) {
if (t.status) {
var result = t.data;
self.lists = self.lists.concat(result.list);
self.more = (result.count > self.lists.length);
} else {
alert(t.message);
}
});
}
},
mounted(){
this.getLists(this.page, this.num);
}
}
</script>
<style>body{background-color: #fff}</style>
\ No newline at end of file
<template>
<div class="upload-code-img">
<div class="input-style" v-show="!disabled">
<button type="button" class="btn btn-upload" :id="uploaderId">上传图片</button>
</div>
<ul class="code-img-list clearfix">
<li v-for="file in uplist" :data-fid="file.id">
<img v-if="file.status == status.DONE" :src="file.url">
<span class="loading" v-if="file.status == status.QUEUED || file.status == status.UPLOADING" :style="{width:file.percent+'%'}"></span>
<a href="javascript:;" @click="cancelUpload(file)"><i class="iconfont icon-close"></i></a>
</li>
</ul>
</div>
</template>
<script>
import str from "../utils/string";
import qiniu from "../utils/qiniu";
export default {
data() {
return {
uploader: null,
uploaderId: "uploader" + str.rand(10),
uplist: [],
disabled: false,
status: qiniu.status
};
},
props: {
maxFileNumber: {
type: Number,
default: 5
}
},
mounted() {
this.initUploader();
},
methods: {
getUploadToken(callback) {
$.post(common.getFullUrl("userup/get-upload-token"), {type:"img"}, t => {
if (t.status) {
callback(t.data.token);
} else {
layer.alert("初化上传组件失败!" + t.message/*, {icon:5}*/);
}
}, "json");
},
initUploader(uploadToken) {
let self = this;
if (!uploadToken) {
this.getUploadToken(token => {
self.initUploader(token);
});
return;
}
let uploader = new qiniu.Uploader({
browse_button: self.uploaderId,
drop_element: self.uploaderId,
runtimes: 'html5,html4',
dragdrop: true,
multi_selection: true,
filters: {
max_file_size: "5mb",
/*
mime_types: [{
title: "视频文件",
extensions: "3gp,flv,rm,rmvb,mpg,mpeg,mp4,m4v,mov,mkv,qt,avi,wmv"
}]
*/
prevent_duplicates : true
},
upload_token: uploadToken,
auto_start: true,
init: {
FilesAdded(up, files) {
plupload.each(files, file => {
//最大文件数限制
if (self.isListFull()) {
uploader.removeFile(file);
uploader.disableBrowse();
self.disabled = true;
return;
}
//文件入列表
let f = {
id: file.id,
name: file.name,
type: file.type,
size: file.size,
origSize: file.origSize,
loaded: file.loaded,
percent: file.percent,
status: file.status,
lastModifiedDate: file.lastModifiedDate,
//以下是自定义对象
src: "",
url: ""
};
self.uplist.push(f);
});
up.start();
},
FileUploaded(up, file, info) {
self.updateFile(file);
qiniu.uploadedCallback(info, res => {
let f = self.getFile(file.id);
f.url = res.url;
f.src = res.src;
self.$emit("list-changed", 'uploaded', f);
});
},
Error(up, err) {
let msg = "";
if (err.response) {
let data = $.parseJSON(err.response);
msg += "<br>" + data.error;
} else {
msg = "<br>" + err.message;
}
layer.alert(err.file.name + " 上传失败," + msg, {/*icon:5, */title: "上传失败"});
self.updateFile(err.file);
},
UploadProgress(up, file) {
self.updateFile(file);
},
UploadComplete(up, files) {
plupload.each(files, self.updateFile)
},
FilesRemoved(up, files) {
let rids = [];
plupload.each(files, file => {
rids.push(file.id);
});
self.uplist = self.uplist.filter(file => {
return plupload.inArray(file.id, rids) == -1;
});
}
}
});
uploader.init();
this.uploader = uploader;
},
cancelUpload(f) {
let file = this.uploader.getFile(f.id);
this.uploader.removeFile(file);
if (!this.isListFull()) {
this.uploader.disableBrowse(false);
this.disabled = false;
}
this.$emit("list-changed", "removed", f);
},
refresh() {
this.uploader.splice(0, this.uploader.files.length);
this.uploader.disableBrowse(false);
// this.uploader.destroy();
// this.initUploader();
},
isListFull() {
return (this.maxFileNumber > 0 && this.uplist.length >= this.maxFileNumber);
},
getFile(id) {
let file;
plupload.each(this.uplist, f => {
if (f.id == id) {
file = f;
return false;
}
});
return file;
},
updateFile(file) {
let f = this.getFile(file.id);
if (f) {
f.status = file.status;
f.loaded = file.loaded;
f.percent = file.percent;
}
},
getKeys() {
let arr = [];
plupload.each(this.uplist, file => {
if (file.status = plupload.DONE) {
arr.push(file.src);
}
});
return arr;
}
}
}
</script>
\ No newline at end of file
/**
* Created by pader on 2017/6/9.
*/
var Vue = require("vue");
var Mask = new Vue({
el: document.createElement('div'),
template: '<div class="mask" style="display:block; opacity:1;z-index:10;"></div>'
});
/**
* 半透明全局遮罩层组件
*
* @type {{show: module.exports.show, hide: module.exports.hide}}
*/
module.exports = {
show: function() {
document.body.appendChild(Mask.$el);
},
hide: function() {
document.body.removeChild(Mask.$el);
}
};
\ No newline at end of file
/**
* Created by pader on 2017/6/9.
*/
var Vue = require("vue");
var shareImage = require("../share-image");
var cache = {};
module.exports = {
/**
* 展示勋章的介绍信息
*
* @param id
*/
showInfo: function(id) {
require(["./medal-info.vue"], function(info) {
if (!cache.infoInstance) {
var Constructor = Vue.extend(info);
cache.Info = new Constructor({
el: document.createElement('div')
});
}
cache.Info.show(id);
});
},
/**
* 显示我的勋章分享图片
* @param medalId
*/
showMyMedal: function(medalId ) {
$.getJSON(common.getFullUrl("honor/get-medal-share-image") + "?medalId=" + medalId, function(res) {
if (res.status) {
shareImage.show(res.data.image_url);
} else {
layer.alert(res.message, {
title:"获取勋章图片失败",
closeBtn:false,
shade: 0.3
});
}
});
}
};
\ No newline at end of file
<template>
<div class="medal-main-box" style="z-index:11;">
<div class="medal-main">
<img :src="icon">
<h3>{{name}}</h3>
</div>
<div class="medal-intro" v-html="info"></div>
<button class="btn btn-get" type="button" @click="goShareClick">去看看</button>
<a href="javascript:;" @click="close"><i class="iconfont icon-close"></i></a>
</div>
</template>
<script>
import mask from "../mask";
export default {
data() {
return {
id: 0,
name: "",
icon: "",
info: "",
anchors: {
1: "provide-data",
2: "share-data",
3: "wrench-data"
}
};
},
mounted() {
},
destroyed() {
this.close();
console.log("medal-info.vue destroyed");
},
methods: {
show(id) {
let self = this;
$.getJSON(common.getFullUrl('medal/get-medal-info') + "?medalId=" + id, res => {
if (res.status) {
var medal = res.data;
self.id = medal.id;
self.name = medal.name;
self.icon = common.getCdnFullUrl("assets/img/medal/" + medal.icon);
self.info = medal.info;
document.body.appendChild(self.$el);
} else {
layer.alert(res.message, {
title: "获取勋章资料失败",
closeBtn: false,
shade: 0.3
});
}
});
mask.show();
},
close() {
document.body.removeChild(this.$el);
mask.hide();
this.$destroy();
},
goShareClick() {
// let anchor = this.anchors[this.id] || "";
// return {path:"/honor", query:{anchor:anchor}};
this.close();
location.href = "/#/honor?anchor=" + this.anchors[this.id];
}
}
}
</script>
\ No newline at end of file
var Vue = require("vue");
var mask = require("./mask");
var Layer = new Vue({
el: document.createElement('div'),
data: function() {
return {
imgUrl: ""
};
},
template: '<div class="generate-img-box" style="z-index:11"> \
<p class="tip">长按图片分享给朋友</p> \
<img :src="imgUrl"> \
<a href="javascript:;" @click="close"><i class="iconfont icon-close"></i></a> \
</div>',
destroyed: function() {
this.close();
},
methods: {
show: function(imgUrl) {
mask.show();
this.imgUrl = imgUrl;
document.body.appendChild(this.$el);
},
close: function() {
document.body.removeChild(this.$el);
mask.hide();
this.imgUrl = "";
}
}
});
module.exports = {
/**
* 在弹层中显示一张要分享的图片
*
* @param {String} src 图片地址
*/
show: Layer.show,
close: Layer.close,
/**
* 显示个人分享二维码图片
*/
showShare: function() {
$.getJSON(common.getFullUrl("honor/get-share-image"), function(res) {
if (res.status) {
Layer.show(res.data.image_url);
} else {
layer.alert(res.message, {
title:"获取分享图片失败",
closeBtn:false,
shade: 0.3
});
}
});
},
};
\ No newline at end of file
@charset "utf-8";
/*! normalize.css v2.1.3 | MIT License | git.io/normalize */
/*Html5*/
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
nav,
section,
summary {
display: block;
}
audio,
canvas,
video {
display: inline-block;
}
audio:not([controls]) {
display: none;
height: 0;
}
/*Base*/
html {
font-family: "-apple-system-font","Microsoft YaHei","Helvetica Neue","Hiragino Sans GB","\9ED1\4F53",Arial,sans-serif;
color: #666;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%; /*修正手持设备字体变化*/
background-color: #f3f3f3;
}
* {
margin: 0;
padding: 0;
}
a {
text-decoration: none;
background: transparent; /*修正win8系统IE连接灰色背景*/
outline:none;
blr:expression(this.onFocus=this.blur());
}
a:focus {
outline: thin dotted;
-webkit-tap-highlight-color: transparent;
}
a:active,
a:hover {
outline: 0;
-webkit-tap-highlight-color: transparent;
/*transition:text-shadow 500ms ease-in 0ms, color 500ms ease-in 0ms;*/
}
img {
border: 0;
-ms-interpolation-mode:bicubic
}
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
button,
input,
select,
textarea {
font-family: inherit;
font-size: 100%;
margin: 0;
}
button,
input {
line-height: normal;
}
button,
select {
text-transform: none;
}
button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button;
cursor: pointer;
}
button[disabled],
html input[disabled] {
cursor: default;
}
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box;
padding: 0;
}
input[type="search"] {
-webkit-appearance: textfield;
-moz-box-sizing: content-box;
-webkit-box-sizing: content-box;
box-sizing: content-box;
}
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
input.submit {
border: 0;
margin: 0;
cursor: pointer;
}
input.radio,
input.checkbox{
float: left;
display: inline;
}
textarea {
overflow: auto;
vertical-align: top;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
i,em {
font-style: normal;
}
/*清除浮动*/
.clearfix:after {
content: "\200B";
display: block;
height: 0;
clear: both;
}
.clearfix {
*zoom: 1;
*width: 100%;
*line-height: 0;
}
.fl {
float:left;
}
.fr {
float:right;
}
.m-t-10 {
margin-top: 10px;
}
.t-c {
text-align: center;
}
.t-l {
text-align: left;
}
.hide {
display: none;
}
/*链接样式*/
a {
color:#666666;
text-decoration:none;
}
.vertical-obj {
display: table;
width: 100%;
height: 100%;
min-height: 100%;
}
.vertical-obj .vertical-obj-cont {
display: table-cell;
vertical-align: middle;
}
.full {
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
z-index: -1;
}
\ No newline at end of file
This diff is collapsed.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>扳手快查</title>
<style type="text/css">
[v-cloak] {display:none;}
html,body,.full-box {width:100%; height:100%;}
</style>
<link href="//at.alicdn.com/t/font_f42pj71yqfe6ogvi.css" rel="stylesheet">
</head>
<body>
<div id="app" class="full-box">
<router-view></router-view>
</div>
</body>
</html>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
Copyright 2012 DevBridge and other contributors
http://www.devbridge.com/projects/autocomplete/jquery/
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/**
* Created by xiabin on 2016/10/9.
*/
//yii2框架开启csrf后post请求需要添加
$.ajaxSetup({
beforeSend: function(xhr) {
//是否请求的本站域名
var match = this.url.match(/^https?:\/\/([\w\-\.]+)\//);
if (match && __BASE_URL__.indexOf(match[1]) == -1) {
return;
}
//添加 CSRF Token
if (this.type == "POST") {
var name = "_csrf-frontend";
var token = $("meta[name='csrf-token']").attr("content");
if (this.data instanceof FormData) {
this.data.append(name, token);
} else {
this.data += (this.data ? "&" : "") + name + "=" + encodeURIComponent(token);
}
}
//添加授权 Token
var token = localStorage.getItem("authorization");
if (token) {
xhr.setRequestHeader("Authorize", token);
}
},
error: function(xhr, textStatus, errorThrown) {
//Unauthorized
if (xhr.status == 401) {
common.requestLogin();
console.warn("登录过期或无效!");
} else if (console) {
console.log("AJAX 调用失败\n" + this.type + " " + this.url + "\n" + textStatus.toUpperCase() + ": " + errorThrown);
}
}
});
/*! layer弹层组件拓展类 */
;!function(){layer.use("skin/layer.ext.css",function(){layer.layui_layer_extendlayerextjs=!0});var a=layer.cache||{},b=function(b){return a.skin?" "+a.skin+" "+a.skin+"-"+b:""};layer.prompt=function(a,c){a=a||{},"function"==typeof a&&(c=a);var d,e=2==a.formType?'<textarea class="layui-layer-input">'+(a.value||"")+"</textarea>":function(){return'<input type="'+(1==a.formType?"password":"text")+'" class="layui-layer-input" value="'+(a.value||"")+'">'}();return layer.open($.extend({btn:["&#x786E;&#x5B9A;","&#x53D6;&#x6D88;"],content:e,skin:"layui-layer-prompt"+b("prompt"),success:function(a){d=a.find(".layui-layer-input"),d.focus()},yes:function(b){var e=d.val();""===e?d.focus():e.length>(a.maxlength||500)?layer.tips("&#x6700;&#x591A;&#x8F93;&#x5165;"+(a.maxlength||500)+"&#x4E2A;&#x5B57;&#x6570;",d,{tips:1}):c&&c(e,b,d)}},a))},layer.tab=function(a){a=a||{};var c=a.tab||{};return layer.open($.extend({type:1,skin:"layui-layer-tab"+b("tab"),title:function(){var a=c.length,b=1,d="";if(a>0)for(d='<span class="layui-layer-tabnow">'+c[0].title+"</span>";a>b;b++)d+="<span>"+c[b].title+"</span>";return d}(),content:'<ul class="layui-layer-tabmain">'+function(){var a=c.length,b=1,d="";if(a>0)for(d='<li class="layui-layer-tabli xubox_tab_layer">'+(c[0].content||"no content")+"</li>";a>b;b++)d+='<li class="layui-layer-tabli">'+(c[b].content||"no content")+"</li>";return d}()+"</ul>",success:function(b){var c=b.find(".layui-layer-title").children(),d=b.find(".layui-layer-tabmain").children();c.on("mousedown",function(b){b.stopPropagation?b.stopPropagation():b.cancelBubble=!0;var c=$(this),e=c.index();c.addClass("layui-layer-tabnow").siblings().removeClass("layui-layer-tabnow"),d.eq(e).show().siblings().hide(),"function"==typeof a.change&&a.change(e)})}},a))},layer.photos=function(a,c,d){function e(a,b,c){var d=new Image;d.onload=function(){d.onload=null,b(d)},d.onerror=function(a){d.onerror=null,c(a)},d.src=a}var f={};if(a=a||{},a.photos){var g=a.photos.constructor===Object,h=g?a.photos:{},i=h.data||[],j=h.start||0;if(f.imgIndex=j+1,g){if(0===i.length)return layer.msg("&#x6CA1;&#x6709;&#x56FE;&#x7247;")}else{var k=$(a.photos),l=function(){return i=[],k.find(a.img||"img").each(function(a){var b=$(this);i.push({alt:b.attr("alt"),pid:b.attr("layer-pid"),src:b.attr("layer-src")||b.attr("src"),thumb:b.attr("src")})}),arguments.callee}();if(0===i.length)return;if(c||k.on("click",a.img||"img",function(){var b=$(this),c=b.index();l(),layer.photos($.extend(a,{photos:{start:c,data:i,tab:a.tab},full:a.full}),!0)}),!c)return}f.imgprev=function(a){f.imgIndex--,f.imgIndex<1&&(f.imgIndex=i.length),f.tabimg(a)},f.imgnext=function(a,b){f.imgIndex++,f.imgIndex>i.length&&(f.imgIndex=1,b)||f.tabimg(a)},f.keyup=function(a){if(!f.end){var b=a.keyCode;a.preventDefault(),37===b?f.imgprev(!0):39===b?f.imgnext(!0):27===b&&layer.close(f.index)}},f.tabimg=function(b){i.length<=1||(h.start=f.imgIndex-1,layer.close(f.index),layer.photos(a,!0,b))},f.event=function(){f.bigimg.hover(function(){f.imgsee.show()},function(){f.imgsee.hide()}),f.bigimg.find(".layui-layer-imgprev").on("click",function(a){a.preventDefault(),f.imgprev()}),f.bigimg.find(".layui-layer-imgnext").on("click",function(a){a.preventDefault(),f.imgnext()}),$(document).on("keyup",f.keyup)},f.loadi=layer.load(1,{shade:"shade"in a?!1:.9,scrollbar:!1}),e(i[j].src,function(c){layer.close(f.loadi),f.index=layer.open($.extend({type:1,area:function(){var b=[c.width,c.height],d=[$(window).width()-100,$(window).height()-100];return!a.full&&b[0]>d[0]&&(b[0]=d[0],b[1]=b[0]*d[1]/b[0]),[b[0]+"px",b[1]+"px"]}(),title:!1,shade:.9,shadeClose:!0,closeBtn:!1,move:".layui-layer-phimg img",moveType:1,scrollbar:!1,moveOut:!0,shift:5*Math.random()|0,skin:"layui-layer-photos"+b("photos"),content:'<div class="layui-layer-phimg"><img src="'+i[j].src+'" alt="'+(i[j].alt||"")+'" layer-pid="'+i[j].pid+'"><div class="layui-layer-imgsee">'+(i.length>1?'<span class="layui-layer-imguide"><a href="javascript:;" class="layui-layer-iconext layui-layer-imgprev"></a><a href="javascript:;" class="layui-layer-iconext layui-layer-imgnext"></a></span>':"")+'<div class="layui-layer-imgbar" style="display:'+(d?"block":"")+'"><span class="layui-layer-imgtit"><a href="javascript:;">'+(i[j].alt||"")+"</a><em>"+f.imgIndex+"/"+i.length+"</em></span></div></div></div>",success:function(b,c){f.bigimg=b.find(".layui-layer-phimg"),f.imgsee=b.find(".layui-layer-imguide,.layui-layer-imgbar"),f.event(b),a.tab&&a.tab(i[j],b)},end:function(){f.end=!0,$(document).off("keyup",f.keyup)}},a))},function(){layer.close(f.loadi),layer.msg("&#x5F53;&#x524D;&#x56FE;&#x7247;&#x5730;&#x5740;&#x5F02;&#x5E38;<br>&#x662F;&#x5426;&#x7EE7;&#x7EED;&#x67E5;&#x770B;&#x4E0B;&#x4E00;&#x5F20;&#xFF1F;",{time:3e4,btn:["下一张","不看了"],yes:function(){i.length>1&&f.imgnext(!0,!0)}})})}}}();
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
/*!
@Name: layer拓展样式
@Date: 2012.12.13
@Author: 贤心
@blog: sentsin.com
*/.layui-layer-imgbar,.layui-layer-imgtit a,.layui-layer-tab .layui-layer-title span{text-overflow:ellipsis;white-space:nowrap}.layui-layer-iconext{background:url(default/icon-ext.png) no-repeat}html #layui_layer_skinlayerextcss{display:none;position:absolute;width:1989px}.layui-layer-prompt .layui-layer-input{display:block;width:220px;height:30px;margin:0 auto;line-height:30px;padding:0 5px;border:1px solid #ccc;box-shadow:1px 1px 5px rgba(0,0,0,.1) inset;color:#333}.layui-layer-prompt textarea.layui-layer-input{width:300px;height:100px;line-height:20px}.layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4)}.layui-layer-tab .layui-layer-title{padding-left:0;border-bottom:1px solid #ccc;background-color:#eee;overflow:visible}.layui-layer-tab .layui-layer-title span{position:relative;float:left;min-width:80px;max-width:260px;padding:0 20px;text-align:center;cursor:default;overflow:hidden}.layui-layer-tab .layui-layer-title span.layui-layer-tabnow{height:43px;border-left:1px solid #ccc;border-right:1px solid #ccc;background-color:#fff;z-index:10}.layui-layer-tab .layui-layer-title span:first-child{border-left:none}.layui-layer-tabmain{line-height:24px;clear:both}.layui-layer-tabmain .layui-layer-tabli{display:none}.layui-layer-tabmain .layui-layer-tabli.xubox_tab_layer{display:block}.xubox_tabclose{position:absolute;right:10px;top:5px;cursor:pointer}.layui-layer-photos{-webkit-animation-duration:1s;animation-duration:1s}.layui-layer-photos .layui-layer-content{overflow:hidden;text-align:center}.layui-layer-photos .layui-layer-phimg img{position:relative;width:100%;display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-imgbar,.layui-layer-imguide{display:none}.layui-layer-imgnext,.layui-layer-imgprev{position:absolute;top:50%;width:27px;_width:44px;height:44px;margin-top:-22px;outline:0;blr:expression(this.onFocus=this.blur())}.layui-layer-imgprev{left:10px;background-position:-5px -5px;_background-position:-70px -5px}.layui-layer-imgprev:hover{background-position:-33px -5px;_background-position:-120px -5px}.layui-layer-imgnext{right:10px;_right:8px;background-position:-5px -50px;_background-position:-70px -50px}.layui-layer-imgnext:hover{background-position:-33px -50px;_background-position:-120px -50px}.layui-layer-imgbar{position:absolute;left:0;bottom:0;width:100%;height:32px;line-height:32px;background-color:rgba(0,0,0,.8);background-color:#000\9;filter:Alpha(opacity=80);color:#fff;overflow:hidden;font-size:0}.layui-layer-imgtit *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:12px}.layui-layer-imgtit a{max-width:65%;overflow:hidden;color:#fff}.layui-layer-imgtit a:hover{color:#fff;text-decoration:underline}.layui-layer-imgtit em{padding-left:10px;font-style:normal}
\ No newline at end of file
body .layer-ext-yunyaskin .layui-layer-title{
height: 47px;
line-height: 47px;
background-color: transparent;
}
body .layer-ext-yunyaskin .layui-layer-btn {
position: relative;
line-height: 48px;
font-size: 14px;
display: -webkit-box;
display: -webkit-flex;
display: flex;
padding: 0;
margin: 0;
}
body .layer-ext-yunyaskin .layui-layer-btn:after {
content: " ";
position: absolute;
left: 0;
top: 0;
right: 0;
height: 1px;
border-top: 1px solid #D5D5D6;
color: #D5D5D6;
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
body .layer-ext-yunyaskin .layui-layer-btn a {
padding: 0;
margin: 0;
display: block;
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
color: #333;
text-decoration: none;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
position: relative;
height: 48px;
line-height: 48px;
background-color: transparent;
border: none;
text-align: center;
}
body .layer-ext-yunyaskin .layui-layer-btn a:after {
content: " ";
position: absolute;
left: 0;
top: 0;
width: 1px;
bottom: 0;
border-left: 1px solid #D5D5D6;
color: #D5D5D6;
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleX(0.5);
transform: scaleX(0.5);
}
// English (en)
plupload.addI18n({"Stop Upload":"Stop Upload","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.","tb":"tb","Size":"Size","Close":"Close","You must specify either browse_button or drop_element.":"You must specify either browse_button or drop_element.","Init error.":"Init error.","Add files to the upload queue and click the start button.":"Add files to the upload queue and click the start button.","List":"List","Filename":"Filename","%s specified, but cannot be found.":"%s specified, but cannot be found.","Image format either wrong or not supported.":"Image format either wrong or not supported.","Status":"Status","HTTP Error.":"HTTP Error.","Start Upload":"Start Upload","Error: File too large:":"Error: File too large:","kb":"kb","Duplicate file error.":"Duplicate file error.","File size error.":"File size error.","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Select files","%s already present in the queue.":"%s already present in the queue.","Resoultion out of boundaries! <b>%s</b> runtime supports images only up to %wx%hpx.":"Resoultion out of boundaries! <b>%s</b> runtime supports images only up to %wx%hpx.","File: %s":"File: %s","b":"b","Uploaded %d/%d files":"Uploaded %d/%d files","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d files queued","File: %s, size: %d, max file size: %d":"File: %s, size: %d, max file size: %d","Thumbnails":"Thumbnails","Drag files here.":"Drag files here.","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"File count error.","File extension error.":"File extension error.","mb":"mb","Add Files":"Add Files"});
\ No newline at end of file
// Chinese (China) (zh_CN)
plupload.addI18n({"Stop Upload":"停止上传","Upload URL might be wrong or doesn't exist.":"上传的URL可能是错误的或不存在。","tb":"tb","Size":"大小","Close":"关闭","You must specify either browse_button or drop_element.":"您必须指定 browse_button 或者 drop_element。","Init error.":"初始化错误。","Add files to the upload queue and click the start button.":"将文件添加到上传队列,然后点击”开始上传“按钮。","List":"列表","Filename":"文件名","%s specified, but cannot be found.":"%s 已指定,但是没有找到。","Image format either wrong or not supported.":"图片格式错误或者不支持。","Status":"状态","HTTP Error.":"HTTP 错误。","Start Upload":"开始上传","Error: File too large:":"错误: 文件太大:","kb":"kb","Duplicate file error.":"重复文件错误。","File size error.":"文件大小错误。","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"错误:无效的文件扩展名:","Select files":"选择文件","%s already present in the queue.":"%s 已经在当前队列里。","Resoultion out of boundaries! <b>%s</b> runtime supports images only up to %wx%hpx.":"超限。<b>%s</b> 支持最大 %wx%hpx 的图片。","File: %s":"文件: %s","b":"b","Uploaded %d/%d files":"已上传 %d/%d 个文件","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"每次只接受同时上传 %d 个文件,多余的文件将会被删除。","%d files queued":"%d 个文件加入到队列","File: %s, size: %d, max file size: %d":"文件: %s, 大小: %d, 最大文件大小: %d","Thumbnails":"缩略图","Drag files here.":"把文件拖到这里。","Runtime ran out of available memory.":"运行时已消耗所有可用内存。","File count error.":"文件数量错误。","File extension error.":"文件扩展名错误。","mb":"mb","Add Files":"增加文件"});
\ No newline at end of file
// Chinese (Taiwan) (zh_TW)
plupload.addI18n({"Stop Upload":"停止上傳","Upload URL might be wrong or doesn't exist.":"檔案URL可能有誤或者不存在。","tb":"tb","Size":"大小","Close":"關閉","You must specify either browse_button or drop_element.":"","Init error.":"初始化錯誤。","Add files to the upload queue and click the start button.":"將檔案加入上傳序列,然後點選”開始上傳“按鈕。","List":"","Filename":"檔案名稱","%s specified, but cannot be found.":"","Image format either wrong or not supported.":"圖片格式錯誤或者不支援。","Status":"狀態","HTTP Error.":"HTTP 錯誤。","Start Upload":"開始上傳","Error: File too large:":"錯誤: 檔案大小太大:","kb":"kb","Duplicate file error.":"錯誤:檔案重複。","File size error.":"錯誤:檔案大小超過限制。","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"錯誤:不接受的檔案格式:","Select files":"選擇檔案","%s already present in the queue.":"%s 已經存在目前的檔案序列。","Resoultion out of boundaries! <b>%s</b> runtime supports images only up to %wx%hpx.":"","File: %s":"檔案: %s","b":"b","Uploaded %d/%d files":"已上傳 %d/%d 個文件","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"每次只能上傳 %d 個檔案,超過限制數量的檔案將被忽略。","%d files queued":"%d 個檔案加入到序列","File: %s, size: %d, max file size: %d":"檔案: %s, 大小: %d, 檔案大小上限: %d","Thumbnails":"","Drag files here.":"把檔案拖曳到這裡。","Runtime ran out of available memory.":"執行時耗盡了所有可用的記憶體。","File count error.":"檔案數量錯誤。","File extension error.":"檔案副檔名錯誤。","mb":"mb","Add Files":"增加檔案"});
\ No newline at end of file
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
/*
* SliderNav - A Simple Content Slider with a Navigation Bar
* Copyright 2010 Monjurul Dolon, http://mdolon.com/
* Released under the MIT, BSD, and GPL Licenses.
* More information: http://devgrow.com/slidernav
*/
$.fn.sliderNav = function (options) {
var defaults = {items: [], debug: false, height: null, arrows: true};
var opts = $.extend(defaults, options);
var o = $.meta ? $.extend({}, opts, $$.data()) : opts;
var slider = $(this);
$(slider).addClass('slider');
$('.slider-content li:first', slider).addClass('selected');
$(slider).append('<div class="slider-nav"><ul></ul></div>');
for (var i in o.items) {
if (o.items[i] == 'hot') {
$('.slider-nav ul', slider).append("<li><a alt='#" + o.items[i] + "'>" + "♡" + "</a></li>");
} else {
$('.slider-nav ul', slider).append("<li><a alt='#" + o.items[i] + "'>" + o.items[i] + "</a></li>");
}
}
var height = $('.slider-nav', slider).height();
if (o.height) height = o.height;
$('.slider-content', slider).css('height', $(window).height()-51);
if (o.debug) $(slider).append('<div id="debug">Scroll Offset: <span>0</span></div>');
$('.slider-nav a', slider).mouseover(function (event) {
var target = $(this).attr('alt');
var cOffset = $('.slider-content', slider).offset().top;
var tOffset = $('.slider-content ' + target, slider).offset().top;
var height = $('.slider-nav', slider).height();
if (o.height) height = o.height;
var pScroll = (tOffset - cOffset);
$('.slider-content li', slider).removeClass('selected');
$(target).addClass('selected');
$('.slider-content', slider).stop().animate({scrollTop: '+=' + pScroll + 'px'},0);
if (o.debug) $('#debug span', slider).html(tOffset);
});
var touch = {};
var firstTouch;
$('.slider-nav a', slider).bind('touchstart', function (e) {
firstTouch = e.originalEvent.targetTouches[0];
touch.y1 = firstTouch.pageY;
var target = $(this).attr('alt');
touch.anchor = target.substr(1);
var cOffset = $('.slider-content', slider).offset().top;
var tOffset = $('.slider-content ' + target, slider).offset().top;
var height = $('.slider-nav', slider).height();
if (o.height) height = o.height;
var pScroll = (tOffset - cOffset);
$('.slider-content li', slider).removeClass('selected');
$(target).addClass('selected');
$('.slider-content', slider).stop().animate({scrollTop: '+=' + pScroll + 'px'},0);
if (o.debug) $('#debug span', slider).html(tOffset);
return false;
});
$('.slider-nav a', slider).bind('touchmove', function (e) {
firstTouch = e.originalEvent.targetTouches[0];
touch.y2 = firstTouch.pageY;
var anchorHeight = 20;
var delta = (touch.y2 - touch.y1) / anchorHeight | 0;
var target = o.items[o.items.indexOf(touch.anchor) + delta];
if(target === undefined){
return false;
}
target = '#'+target;
var cOffset = $('.slider-content', slider).offset().top;
var tOffset = $('.slider-content ' + target, slider).offset().top;
var height = $('.slider-nav', slider).height();
if (o.height) height = o.height;
var pScroll = (tOffset - cOffset);
$('.slider-content li', slider).removeClass('selected');
$(target).addClass('selected');
$('.slider-content', slider).stop().animate({scrollTop: '+=' + pScroll + 'px'},0);
if (o.debug) $('#debug span', slider).html(tOffset);
return false;
});
};
\ No newline at end of file
(function($){$.fn.extend({slimScroll:function(options){var defaults={width:"auto",height:"250px",size:"7px",color:"#000",position:"right",distance:"1px",start:"top",opacity:.4,alwaysVisible:false,disableFadeOut:false,railVisible:false,railColor:"#333",railOpacity:.2,railDraggable:true,railClass:"slimScrollRail",barClass:"slimScrollBar",wrapperClass:"slimScrollDiv",allowPageScroll:false,wheelStep:20,touchScrollStep:200,borderRadius:"7px",railBorderRadius:"7px"};var o=$.extend(defaults,options);this.each(function(){var isOverPanel,isOverBar,isDragg,queueHide,touchDif,barHeight,percentScroll,lastScroll,divS="<div></div>",minBarHeight=30,releaseScroll=false;var me=$(this);if(me.parent().hasClass(o.wrapperClass)){var offset=me.scrollTop();bar=me.parent().find("."+o.barClass);rail=me.parent().find("."+o.railClass);getBarHeight();if($.isPlainObject(options)){if("height"in options&&options.height=="auto"){me.parent().css("height","auto");me.css("height","auto");var height=me.parent().parent().height();me.parent().css("height",height);me.css("height",height)}if("scrollTo"in options){offset=parseInt(o.scrollTo)}else if("scrollBy"in options){offset+=parseInt(o.scrollBy)}else if("destroy"in options){bar.remove();rail.remove();me.unwrap();return}scrollContent(offset,false,true)}return}else if($.isPlainObject(options)){if("destroy"in options){return}}o.height=o.height=="auto"?me.parent().height():o.height;var wrapper=$(divS).addClass(o.wrapperClass).css({position:"relative",overflow:"hidden",width:o.width,height:o.height});me.css({overflow:"hidden",width:o.width,height:o.height,"-ms-touch-action":"none"});var rail=$(divS).addClass(o.railClass).css({width:o.size,height:"100%",position:"absolute",top:0,display:o.alwaysVisible&&o.railVisible?"block":"none","border-radius":o.railBorderRadius,background:o.railColor,opacity:o.railOpacity,zIndex:90});var bar=$(divS).addClass(o.barClass).css({background:o.color,width:o.size,position:"absolute",top:0,opacity:o.opacity,display:o.alwaysVisible?"block":"none","border-radius":o.borderRadius,BorderRadius:o.borderRadius,MozBorderRadius:o.borderRadius,WebkitBorderRadius:o.borderRadius,zIndex:99});var posCss=o.position=="right"?{right:o.distance}:{left:o.distance};rail.css(posCss);bar.css(posCss);me.wrap(wrapper);me.parent().append(bar);me.parent().append(rail);if(o.railDraggable){bar.bind("mousedown",function(e){var $doc=$(document);isDragg=true;t=parseFloat(bar.css("top"));pageY=e.pageY;$doc.bind("mousemove.slimscroll",function(e){currTop=t+e.pageY-pageY;bar.css("top",currTop);scrollContent(0,bar.position().top,false)});$doc.bind("mouseup.slimscroll",function(e){isDragg=false;hideBar();$doc.unbind(".slimscroll")});return false}).bind("selectstart.slimscroll",function(e){e.stopPropagation();e.preventDefault();return false})}rail.hover(function(){showBar()},function(){hideBar()});bar.hover(function(){isOverBar=true},function(){isOverBar=false});me.hover(function(){isOverPanel=true;showBar();hideBar()},function(){isOverPanel=false;hideBar()});if(window.navigator.msPointerEnabled){me.bind("MSPointerDown",function(e,b){if(e.originalEvent.targetTouches.length){touchDif=e.originalEvent.targetTouches[0].pageY}});me.bind("MSPointerMove",function(e){e.originalEvent.preventDefault();if(e.originalEvent.targetTouches.length){var diff=(touchDif-e.originalEvent.targetTouches[0].pageY)/o.touchScrollStep;scrollContent(diff,true);touchDif=e.originalEvent.targetTouches[0].pageY}})}else{me.bind("touchstart",function(e,b){if(e.originalEvent.touches.length){touchDif=e.originalEvent.touches[0].pageY}});me.bind("touchmove",function(e){if(!releaseScroll){e.originalEvent.preventDefault()}if(e.originalEvent.touches.length){var diff=(touchDif-e.originalEvent.touches[0].pageY)/o.touchScrollStep;scrollContent(diff,true);touchDif=e.originalEvent.touches[0].pageY}})}getBarHeight();if(o.start==="bottom"){bar.css({top:me.outerHeight()-bar.outerHeight()});scrollContent(0,true)}else if(o.start!=="top"){scrollContent($(o.start).position().top,null,true);if(!o.alwaysVisible){bar.hide()}}attachWheel();function _onWheel(e){if(!isOverPanel){return}var e=e||window.event;var delta=0;if(e.wheelDelta){delta=-e.wheelDelta/120}if(e.detail){delta=e.detail/3}var target=e.target||e.srcTarget||e.srcElement;if($(target).closest("."+o.wrapperClass).is(me.parent())){scrollContent(delta,true)}if(e.preventDefault&&!releaseScroll){e.preventDefault()}if(!releaseScroll){e.returnValue=false}}function scrollContent(y,isWheel,isJump){releaseScroll=false;var delta=y;var maxTop=me.outerHeight()-bar.outerHeight();if(isWheel){delta=parseInt(bar.css("top"))+y*parseInt(o.wheelStep)/100*bar.outerHeight();delta=Math.min(Math.max(delta,0),maxTop);delta=y>0?Math.ceil(delta):Math.floor(delta);bar.css({top:delta+"px"})}percentScroll=parseInt(bar.css("top"))/(me.outerHeight()-bar.outerHeight());delta=percentScroll*(me[0].scrollHeight-me.outerHeight());if(isJump){delta=y;var offsetTop=delta/me[0].scrollHeight*me.outerHeight();offsetTop=Math.min(Math.max(offsetTop,0),maxTop);bar.css({top:offsetTop+"px"})}me.scrollTop(delta);me.trigger("slimscrolling",~~delta);showBar();hideBar()}function attachWheel(){if(window.addEventListener){this.addEventListener("DOMMouseScroll",_onWheel,false);this.addEventListener("mousewheel",_onWheel,false)}else{document.attachEvent("onmousewheel",_onWheel)}}function getBarHeight(){barHeight=Math.max(me.outerHeight()/me[0].scrollHeight*me.outerHeight(),minBarHeight);bar.css({height:barHeight+"px"});var display=barHeight==me.outerHeight()?"none":"block";bar.css({display:display})}function showBar(){getBarHeight();clearTimeout(queueHide);if(percentScroll==~~percentScroll){releaseScroll=o.allowPageScroll;if(lastScroll!=percentScroll){var msg=~~percentScroll==0?"top":"bottom";me.trigger("slimscroll",msg)}}else{releaseScroll=false}lastScroll=percentScroll;if(barHeight>=me.outerHeight()){releaseScroll=true;return}bar.stop(true,true).fadeIn("fast");if(o.railVisible){rail.stop(true,true).fadeIn("fast")}}function hideBar(){if(!o.alwaysVisible){queueHide=setTimeout(function(){if(!(o.disableFadeOut&&isOverPanel)&&!isOverBar&&!isDragg){bar.fadeOut("slow");rail.fadeOut("slow")}},1e3)}}});return this}});$.fn.extend({slimscroll:$.fn.slimScroll})})(jQuery);
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
videojs.addLanguage("zh-CN",{
"Play": "播放",
"Pause": "暂停",
"Current Time": "当前时间",
"Duration Time": "时长",
"Remaining Time": "剩余时间",
"Stream Type": "媒体流类型",
"LIVE": "直播",
"Loaded": "加载完毕",
"Progress": "进度",
"Fullscreen": "全屏",
"Non-Fullscreen": "退出全屏",
"Mute": "静音",
"Unmute": "取消静音",
"Playback Rate": "播放码率",
"Subtitles": "字幕",
"subtitles off": "字幕关闭",
"Captions": "内嵌字幕",
"captions off": "内嵌字幕关闭",
"Chapters": "节目段落",
"You aborted the media playback": "视频播放被终止",
"A network error caused the media download to fail part-way.": "网络错误导致视频下载中途失败。",
"The media could not be loaded, either because the server or network failed or because the format is not supported.": "视频因格式不支持或者服务器或网络的问题无法加载。",
"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "由于视频文件损坏或是该视频使用了你的浏览器不支持的功能,播放终止。",
"No compatible source was found for this media.": "无法找到此视频兼容的源。",
"The media is encrypted and we do not have the keys to decrypt it.": "视频已加密,无法解密。"
});
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
/**
* Created by pader on 2017/5/10.
*/
var Vue = require("vue");
var VueRouter = require("vue-router/dist/vue-router.common");
var routes = require("./routes");
require("./css/basic.css");
require("./css/tool_search.css");
Vue.use(VueRouter);
var router = new VueRouter({
routes: routes,
mode: "hash",
scrollBehavior: function(to, from, savedPosition) {
return {x:0, y:0}
}
});
new Vue({router:router}).$mount('#app');
<template>
<div>
<p style="padding:50px;text-align:center;">{{msg}}</p>
</div>
</template>
<script>
export default {
data() {
return {
msg: "正在登录中..",
code: ""
};
},
mounted() {
let self = this;
this.code = this.$route.query.code;
if (!localStorage) {
layer.alert("您的浏览器无法保存登录状态!", {
title: "无法登录",
icon: 2,
shade: 0.3
});
return;
}
$.getJSON(common.getFullUrl("login/get-token") + "?code=" + encodeURIComponent(this.code), function(t) {
if (t.status) {
let storName = "authorization";
localStorage.setItem(storName, t.data.token);
if (localStorage.getItem(storName) != t.data.token) {
layer.alert("令牌存储失败", {
title: "登录失败",
icon: 2,
shade: 0.3
});
} else {
self.msg = "跳转中..";
location.replace(t.data.returnUrl);
}
} else {
self.msg = t.message;
layer.alert(t.message, {
title: "登录失败",
icon: 2,
shade: 0.3
});
}
});
}
}
</script>
\ No newline at end of file
<template>
<div class="container" style="background-color:#f3f3f3">
<div class="common-tit">
<a href="#" class="back"><i class="iconfont icon-navigate_before"></i></a>
<p>E10 空调 格力</p>
<a href="#" class="home"><i class="iconfont icon-msnui-find-bold"></i></a>
</div>
<div class="location">志高 / 电饭煲</div>
<div class="search-empty">
<h3>未查询到 <b>E10</b> 错误代码,联系客服获得帮助</h3>
<img src="../img/ewm.png">
<p>长按二维码,添加客服</p>
</div>
</div>
</template>
<script>
export default{
data() {
return {
msg:'hello vue'
}
}
}
</script>
<template>
<div>
<div class="common-tit">
<a href="javascript:;" @click="back" class="back"><i class="iconfont icon-navigate_before"></i></a>
<p>上传故障码</p>
<router-link to="/" class="home"><i class="iconfont icon-shouye"></i></router-link>
</div>
<div class="upload-code-box">
<div class="tit">您可以任选一种或多种方式</div>
<!--<img-multi-uploader ref="upimg"></img-multi-uploader>-->
<doc-multi-uploader ref="updoc" :max-file-number="10"></doc-multi-uploader>
<div class="upload-text-code">
<textarea v-model="content" placeholder="输入链接或者文字..."></textarea>
</div>
<button type="button" class="btn btn-blue" @click="postClick" :disabled="!postable">{{posting ? '提交中..' : '提交'}}</button>
</div>
</div>
</template>
<script>
//import imgMultiUploader from '../components/img-multi-uploader.vue';
import docMultiUploader from '../components/doc-multi-uploader.vue';
import Medal from '../components/medal';
export default {
data() {
return {
imgList: [],
docList: [],
content: "",
posting: false
};
},
computed: {
postable() {
return (!this.posting && (this.docList.length > 0 || this.content != ""));
}
},
mounted() {
document.title = "上传故障码";
let self = this;
// this.$refs.upimg.$on("list-changed", () => {
// self.imgList = self.$refs.upimg.getKeys();
// });
this.$refs.updoc.$on("list-changed", () => {
self.docList = self.$refs.updoc.getKeys();
});
},
methods: {
postClick() {
if (this.posting == true) {
return;
}
this.posting = true;
let self = this;
$.post(common.getFullUrl("userup/post"), {content: this.content, imgs:this.imgList, docs:this.docList}, res => {
if (res.status) {
if (res.data && res.data.get_medal) {
layer.msg("故障码提交成功,感谢您的支持!", {icon: 1, time: 1000}, () => {
Medal.showMyMedal(res.data.get_medal.id);
});
} else {
layer.alert("故障码提交成功,感谢您的支持!", {title:"", closeBtn:false, icon: 1, shade: 0.3,
end() {
history.back();
}
});
}
self.content = "";
// self.$refs.upimg.refresh();
self.$refs.updoc.refresh();
} else {
layer.alert(t.message, {
icon: 2,
shade: 0.3
});
}
self.posting = false;
}, "json");
},
back() {
this.$router.go(-1);
}
},
components: {
// imgMultiUploader,
docMultiUploader
}
}
</script>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
<template>
<div>
<div class="common-tit">
<a href="javascript:;" @click="goBackClick()" class="back"><i class="iconfont icon-navigate_before"></i></a>
<p></p>
<router-link to="/" class="home"><i class="iconfont icon-shouye"></i></router-link>
</div>
<div class="rank-nav clearfix">
<a v-for="(item,index) in navData" :class="{cur:item.key == currentNavKey}"
@click="currentNavKey=item.key" href="javascript:;">{{item.value}}</a>
</div>
<keep-alive>
<component v-bind:is="currentView">
</component>
</keep-alive>
</div>
</template>
<script>
import provideData from '../components/honor/provide-data.vue';
import share from '../components/honor/share.vue';
import goldenWrench from '../components/honor/golden-wrench.vue';
export default {
data(){
return {
navData: [
{
key: 1,
value: '数据榜'
},
{
key: 2,
value: '分享榜'
},
{
key: 3,
value: '金扳手'
}
],
currentNavKey: 1,
currentView: provideData,
}
},
watch: {
currentNavKey(currentNavKey){
switch (currentNavKey) {
case 1:
this.currentView = provideData;
break;
case 2:
this.currentView = share;
break;
case 3:
this.currentView = goldenWrench;
break;
}
}
},
methods: {
goBackClick(){
this.$router.go(-1);
}
},
components: {
provideData: provideData,
share: share,
goldenWrench: goldenWrench
},
mounted(){
var anchor = location.hash;
if (anchor != undefined) {
anchor = anchor.slice(1);
switch (anchor) {
case 'provide-data':
this.currentNavKey = 1;
break;
case 'share-data':
this.currentNavKey = 2;
break;
case 'wrench-data':
this.currentNavKey = 3;
break;
default:
this.currentNavKey = 1;
}
}
}
}
</script>
\ No newline at end of file
<template>
<div>
<div class="common-tit">
<a href="javascript:;" @click="goBackClick()" class="back"><i class="iconfont icon-navigate_before"></i></a>
<p>我的</p>
<router-link to="/" class="home"><i class="iconfont icon-shouye"></i></router-link>
</div>
<div v-if="userInfo != null" class="my-head-box">
<img :src="userInfo.avatar">
<h3>{{userInfo.name}}</h3>
</div>
<div class="my-medal">
<div class="tit">我的勋章</div>
<ul v-if="medal != null" class="medal-list">
<template v-for="(item,index) in medalImgMap">
<li v-if="medal[index]">
<a @click="medalClick(index)" href="javascript:;">
<img :src="item.img">
<h3>{{item.name}}</h3>
<span v-if="medal[index].count > 1 ">{{medal[index].count}}</span>
</a>
</li>
<li v-else>
<a href="javascript:;" @click="medalInfoClick(index)">
<img :src="item.img" class="gray">
<h3>{{item.name}}</h3>
</a>
</li>
</template>
</ul>
</div>
</div>
</template>
<script>
import Medal from '../components/medal';
export default {
data(){
return {
showMedalImg: false,
userInfo: null,
medal: null,
medalImgMap: {
'1': {img: '/assets/img/medal/medal_baixiaosheng.png', name: '扳手百晓生', shareImg: ''},
'2': {img: '/assets/img/medal/medal_leifeng.png', name: "扳手活雷锋", shareImg: ''},
'3': {img: '/assets/img/medal/medal_banshou.png', name: '金扳手', shareImg: ''}
}
}
},
methods: {
medalClick(medalId){
Medal.showMyMedal(medalId);
},
medalInfoClick(id) {
Medal.showInfo(id);
},
goBackClick(){
this.$router.go(-1);
},
init(){
var self = this;
$.getJSON(common.getFullUrl('my/get-my-info'), function (t) {
if (t.status) {
self.userInfo = t.data.userInfo;
self.medal = t.data.medal;
}
});
}
},
mounted(){
this.init();
}
}
</script>
<style>
html, body {
background-color: #fff
}
</style>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
<template>
<div>
trouble_list
<p>{{msg}}</p>
</div>
</template>
<script>
export default {
data() {
return {
msg: "Hello World"
};
},
mounted() {
}
}
</script>
\ No newline at end of file
/**
* Created by pader on 2017/6/2.
*/
module.exports = [
{
path: '/code/:brandId/:categoryId',
component: function(resolve) { require(['./pages/code.vue'], resolve); }
}, {
path: '/code/notfound',
component: function(R) { require(['./pages/code-notfound.vue'], R); }
}, {
path: '/code/upload',
component: function(R) { require(['./pages/code-upload.vue'], R); }
}, {
path: '/trouble/cate',
component: function(R) { require(['./pages/trouble-cate.vue'], R); }
}, {
path: '/trouble/detail',
component: function(R) { require(['./pages/trouble-detail.vue'], R); }
}, {
path: '/honor',
component: function(R) { require(['./pages/honor.vue'], R); }
}, {
path: '/my',
component: function(R) { require(['./pages/my.vue'], R); }
}, {
path: '/auth-login',
component: function(R) { require(['./pages/auth-login.vue'], R); }
}, {
path: '',
component: function(R) { require(['./pages/home.vue'], R); }
}, {
path: '*', //其他页面,强制跳转到首页
redirect: '/'
}
];
\ No newline at end of file
This diff is collapsed.
/**
* Created by pader on 16/9/30.
*
* 文件相关辅助函数
* 文件、路径、文件名称、文件大小等与文件相关的能用辅助函数
*/
module.exports = {
/**
* 根据输入的字节数显示可读形式的文件大小
*
* @param {int} bytes
* @returns {string}
*/
readableSize: function(bytes) {
var filesizeUnits = ['Bytes','KB','MB','GB','TB','PB','EB','ZB','YB'];
var base = 1024;
if (bytes) {
var i = 0;
if (bytes >= base) {
var a = bytes;
while(1) { a /= base; i++; if(a < base) break; }
}
return parseFloat((bytes/Math.pow(base,i)).toFixed(2)) + ' ' + filesizeUnits[i];
} else return '0 Byte';
}
};
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment