Commit c0afe12f by shenjinzhu

web页面提交

parent f810a2a7
...@@ -29,6 +29,13 @@ public class Message implements Serializable { ...@@ -29,6 +29,13 @@ public class Message implements Serializable {
private Date handleDate; private Date handleDate;
private String handler; private String handler;
private String pt; private String pt;
private String handleMsg;
public String getHandleMsg() {
return handleMsg;
}
public void setHandleMsg(String handleMsg) {
this.handleMsg = handleMsg;
}
public String getPt() { public String getPt() {
return pt; return pt;
} }
...@@ -96,12 +103,7 @@ public class Message implements Serializable { ...@@ -96,12 +103,7 @@ public class Message implements Serializable {
public String toString() { public String toString() {
return "Message [messageId=" + messageId + ", templateName=" + templateName + ", createDate=" + createDate return "Message [messageId=" + messageId + ", templateName=" + templateName + ", createDate=" + createDate
+ ", errorMsg=" + errorMsg + ", templateLv=" + templateLv + ", templateCreator=" + templateCreator + ", errorMsg=" + errorMsg + ", templateLv=" + templateLv + ", templateCreator=" + templateCreator
+ ", handle=" + handle + ", handleDate=" + handleDate + ", handler=" + handler + "]"; + ", handle=" + handle + ", handleDate=" + handleDate + ", handler=" + handler + ", pt=" + pt
+ ", handleMsg=" + handleMsg + "]";
} }
} }
...@@ -51,6 +51,7 @@ public class MessageDaoImpl implements MessageDao { ...@@ -51,6 +51,7 @@ public class MessageDaoImpl implements MessageDao {
obj.put("handle", message.isHandle()); obj.put("handle", message.isHandle());
obj.put("handleDate", new Date()); obj.put("handleDate", new Date());
obj.put("handler", message.getHandler()); obj.put("handler", message.getHandler());
obj.put("handleMsg", message.getHandleMsg());
DBObject update = new BasicDBObject(); DBObject update = new BasicDBObject();
update.put("$set", obj); update.put("$set", obj);
WriteResult result = con.update(new BasicDBObject("_id", new ObjectId(message.getMessageId())), update, false, WriteResult result = con.update(new BasicDBObject("_id", new ObjectId(message.getMessageId())), update, false,
......
...@@ -39,6 +39,7 @@ public class MessageConteoller { ...@@ -39,6 +39,7 @@ public class MessageConteoller {
@RequestMapping(value = "/handle", produces = "application/json;charset=utf-8") @RequestMapping(value = "/handle", produces = "application/json;charset=utf-8")
@ResponseBody @ResponseBody
public String handle(Message message,@RequestParam(value = "pt", defaultValue = "网媒")String pt) { public String handle(Message message,@RequestParam(value = "pt", defaultValue = "网媒")String pt) {
System.out.println(message);
String str = msgService.update(message,pt); String str = msgService.update(message,pt);
JsonResult result = new JsonResult(true, 200, str, ""); JsonResult result = new JsonResult(true, 200, str, "");
return JSON.toJSONString(result); return JSON.toJSONString(result);
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
<context:component-scan base-package="com.zhiwei.manage.servlet" /> <context:component-scan base-package="com.zhiwei.manage.servlet" />
<mvc:default-servlet-handler /> <mvc:default-servlet-handler />
<mvc:annotation-driven /> <mvc:annotation-driven />
<mvc:resources mapping="./static/**" location="/datamanage/dist/static/" /> <mvc:resources mapping="/static/**" location="/datamanage/dist/static/" />
<!-- ViewResolver --> <!-- ViewResolver -->
<bean <bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver"> class="org.springframework.web.servlet.view.InternalResourceViewResolver">
......
...@@ -45,7 +45,8 @@ exports.cssLoaders = function (options) { ...@@ -45,7 +45,8 @@ exports.cssLoaders = function (options) {
if (options.extract) { if (options.extract) {
return ExtractTextPlugin.extract({ return ExtractTextPlugin.extract({
use: loaders, use: loaders,
fallback: 'vue-style-loader' fallback: 'vue-style-loader',
publicPath: '../../'
}) })
} else { } else {
return ['vue-style-loader'].concat(loaders) return ['vue-style-loader'].concat(loaders)
......
...@@ -62,7 +62,7 @@ module.exports = { ...@@ -62,7 +62,7 @@ module.exports = {
// Paths // Paths
assetsRoot: path.resolve(__dirname, '../dist'), assetsRoot: path.resolve(__dirname, '../dist'),
assetsSubDirectory: 'static', assetsSubDirectory: './static',
assetsPublicPath: './', assetsPublicPath: './',
/** /**
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
<!-- 如果修改了 nav 中的 list 列表,不要忘了重新配置一下 navAutoShow 方法(就在下面) --> <!-- 如果修改了 nav 中的 list 列表,不要忘了重新配置一下 navAutoShow 方法(就在下面) -->
<div v-if="userInfo.lv >= 2" class="list-title icon-1" :class="{ 'active': toggle.listTitle === 0 }" @click="toggle.listTitle = 0"> <div v-if="userInfo.lv >= 2" class="list-title icon-1" :class="{ 'active': toggle.listTitle === 0 }" @click="toggle.listTitle = 0">
<a href="javascirpt:void(0)">检测模块</a> <a href="javascirpt:void(0)">检测模块</a>
<img src="static/img/xiala.png" alt=""> <img src="~static/img/xiala.png" alt="">
</div> </div>
<div v-if="userInfo.lv >= 2" class="list-item"> <div v-if="userInfo.lv >= 2" class="list-item">
<router-link :class="{ 'active': $route.path === '/checkInfo' }" :to="{ path: '/checkInfo' }">检测信息</router-link> <router-link :class="{ 'active': $route.path === '/checkInfo' }" :to="{ path: '/checkInfo' }">检测信息</router-link>
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
</div> </div>
<div class="list-title icon-2" :class="{ 'active': toggle.listTitle === 1 }" @click="toggle.listTitle = 1"> <div class="list-title icon-2" :class="{ 'active': toggle.listTitle === 1 }" @click="toggle.listTitle = 1">
<a href="javascirpt:void(0)">数据模块</a> <a href="javascirpt:void(0)">数据模块</a>
<img src="static/img/xiala.png" alt=""> <img src="~static/img/xiala.png" alt="">
</div> </div>
<div class="list-item"> <div class="list-item">
<router-link :class="{ 'active': $route.path === '/channelData' }" :to="{ path: '/channelData' }">渠道数据</router-link> <router-link :class="{ 'active': $route.path === '/channelData' }" :to="{ path: '/channelData' }">渠道数据</router-link>
...@@ -39,14 +39,14 @@ ...@@ -39,14 +39,14 @@
</div> </div>
<div v-if="userInfo.lv >= 3" class="list-title icon-3" :class="{ 'active': toggle.listTitle === 2 }" @click="toggle.listTitle = 2"> <div v-if="userInfo.lv >= 3" class="list-title icon-3" :class="{ 'active': toggle.listTitle === 2 }" @click="toggle.listTitle = 2">
<a href="javascirpt:void(0)">用户模块</a> <a href="javascirpt:void(0)">用户模块</a>
<img src="static/img/xiala.png" alt=""> <img src="~static/img/xiala.png" alt="">
</div> </div>
<div v-if="userInfo.lv >= 3" class="list-item"> <div v-if="userInfo.lv >= 3" class="list-item">
<router-link :class="{ 'active': $route.path === '/userManage' }" :to="{ path: '/userManage' }">用户管理</router-link> <router-link :class="{ 'active': $route.path === '/userManage' }" :to="{ path: '/userManage' }">用户管理</router-link>
</div> </div>
<div v-if="userInfo.lv >= 3" class="list-title icon-4" :class="{ 'active': toggle.listTitle === 3 }" @click="toggle.listTitle = 3"> <div v-if="userInfo.lv >= 3" class="list-title icon-4" :class="{ 'active': toggle.listTitle === 3 }" @click="toggle.listTitle = 3">
<a href="javascirpt:void(0)">配置模块</a> <a href="javascirpt:void(0)">配置模块</a>
<img src="static/img/xiala.png" alt=""> <img src="~static/img/xiala.png" alt="">
</div> </div>
<div v-if="userInfo.lv >= 3" class="list-item"> <div v-if="userInfo.lv >= 3" class="list-item">
<router-link :class="{ 'active': $route.path === '/databaseInfo' }" :to="{ path: '/databaseInfo' }">数据库信息</router-link> <router-link :class="{ 'active': $route.path === '/databaseInfo' }" :to="{ path: '/databaseInfo' }">数据库信息</router-link>
...@@ -287,8 +287,8 @@ body{ ...@@ -287,8 +287,8 @@ body{
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: 5px center; background-position: 5px center;
background-size: 24px auto; background-size: 24px auto;
&:nth-of-type(1){ background-image: url('/static/img/user.png'); } &:nth-of-type(1){ background-image: url('~static/img/user.png'); }
&:nth-of-type(2){ background-image: url('/static/img/exit.png'); } &:nth-of-type(2){ background-image: url('~static/img/exit.png'); }
} }
.logout{ .logout{
transition: all 0.2s ease; transition: all 0.2s ease;
...@@ -323,7 +323,7 @@ body{ ...@@ -323,7 +323,7 @@ body{
height: 50px; height: 50px;
line-height: 180px; line-height: 180px;
overflow: hidden; overflow: hidden;
background-image: url('/static/img/nav-title.png'); background-image: url('~static/img/nav-title.png');
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: center; background-position: center;
margin-bottom: 20px; margin-bottom: 20px;
...@@ -396,10 +396,10 @@ body{ ...@@ -396,10 +396,10 @@ body{
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: 40px 40px; background-size: 40px 40px;
background-position: 20px center; background-position: 20px center;
&.icon-1{ background-image: url('/static/img/list-1.png'); } &.icon-1{ background-image: url('~static/img/list-1.png'); }
&.icon-2{ background-image: url('/static/img/list-2.png'); } &.icon-2{ background-image: url('~static/img/list-2.png'); }
&.icon-3{ background-image: url('/static/img/list-3.png'); } &.icon-3{ background-image: url('~static/img/list-3.png'); }
&.icon-4{ background-image: url('/static/img/list-4.png'); } &.icon-4{ background-image: url('~static/img/list-4.png'); }
img{ img{
position: absolute; position: absolute;
right: 20px; right: 20px;
...@@ -537,7 +537,7 @@ body{ ...@@ -537,7 +537,7 @@ body{
border-radius: 3px; border-radius: 3px;
border: 1px solid #4E5560; border: 1px solid #4E5560;
background-color: #262D33; background-color: #262D33;
background-image: url('/static/img/search.png'); background-image: url('~static/img/search.png');
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: 10px center; background-position: 10px center;
padding: 3px 6px 3px 45px; padding: 3px 6px 3px 45px;
...@@ -546,7 +546,7 @@ body{ ...@@ -546,7 +546,7 @@ body{
font-size: 16px; font-size: 16px;
&:focus{ &:focus{
border-color: #49B0F7; border-color: #49B0F7;
background-image: url('/static/img/search_focus.png'); background-image: url('~static/img/search_focus.png');
} }
&::-webkit-input-placeholder { /* WebKit browsers */ &::-webkit-input-placeholder { /* WebKit browsers */
color: #868D93; color: #868D93;
...@@ -797,7 +797,7 @@ body{ ...@@ -797,7 +797,7 @@ body{
display: block; display: block;
width: 40px; width: 40px;
height: 40px; height: 40px;
background-image: url('/static/img/close.png'); background-image: url('~static/img/close.png');
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: center; background-position: center;
float: right; float: right;
......
export const getPageList = (params) => {
let displayCount = params.displayCount // 显示的页面总数(最大值)
let page = params.page // 当前页面
let pages = params.pages // 总页数
let limit = []
for (let i = 1; i <= pages; i++) {
limit.push(i)
}
if (displayCount >= pages) return limit
if (Math.ceil(displayCount / 2) > page) {
return limit.slice(0, displayCount)
} else if (pages - page < Math.ceil(displayCount / 2)) {
return limit.slice(pages - displayCount, pages)
} else {
return limit.slice(page - Math.ceil(displayCount / 2), page + Math.floor(displayCount / 2))
}
}
...@@ -228,7 +228,7 @@ export default { ...@@ -228,7 +228,7 @@ export default {
border: 1px solid #525A65; border: 1px solid #525A65;
color: #4F5762; color: #4F5762;
text-align: center; text-align: center;
background-image: url('/static/img/select_01.png'); background-image: url('~static/img/select_01.png');
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: contain; background-size: contain;
background-position: right; background-position: right;
...@@ -250,7 +250,7 @@ export default { ...@@ -250,7 +250,7 @@ export default {
height: 31px; height: 31px;
background-color: #000; background-color: #000;
border: 1px solid #394048; border: 1px solid #394048;
background-image: url('/static/img/select_02.png'); background-image: url('~static/img/select_02.png');
} }
} }
} }
......
<template lang="html">
<div class="channelTableInfoVue">
<div class="title">
<div class="right">
<button type="button" class="btn1" @click="popup.channelAdd = true">新建</button>
<button type="button" class="btn1" @click="del()">删除</button>
</div>
</div>
<div class="table">
<table>
<tr>
<td>编号</td>
<td>渠道</td>
<td>参数</td>
<td>详情</td>
<td>标记</td>
</tr>
<tr v-for="n,i in channelData.data">
<td>{{ i + 1 + (page - 1) * 10 }}.</td>
<td>{{ n.pt }}</td>
<td>{{ n.value }}</td>
<td>
<button type="button" class="btn2" @click="popup.channelDetails = true, childrenData = n">详情</button>
</td>
<td>
<label :for="'checkbox' + i" class="checkbox">
<input type="checkbox" name="" value="" :id="'checkbox' + i" v-model="checkbox[i]">
<span></span>
</label>
</td>
</tr>
<tr class="empty" v-for="n,i in freeList">
<td><!-- 编号 --></td>
<td><!-- 渠道 --></td>
<td><!-- 参数 --></td>
<td><!-- 详情 --></td>
<td><!-- 标记 --></td>
</tr>
</table>
<div class="pageList">
<div @click="page = page - 1 < 1 ? 1 : page - 1">Provious</div>
<div @click="page = n" :class="{ 'active': page === n }" v-for="n,i in pageList">{{ n }}</div>
<div @click="page = page + 1 > pages ? pages : page + 1">Next</div> / 总共 {{ channelData.pageCount || 1 }}
</div>
</div>
<!-- 检测模板详情 -->
<div class="mask" v-if="popup.channelDetails">
<channel-details @close="popup.channelDetails = false" :children-data="childrenData" @update="getChannel()" />
</div>
<!-- 删除模板 -->
<div class="mask" v-if="popup.channelDelete">
<channel-delete @close="popup.channelDelete = false" :children-data="childrenData" @update="getChannel()" :checked-channel="checkedChannel" @clear-checkbox="clearCheckbox()" />
</div>
<!-- 新建模板 -->
<div class="mask" v-if="popup.channelAdd">
<channel-add @close="popup.channelAdd = false" :userInfo="userInfo" @update="getChannel()" />
</div>
</div>
</template>
<script>
import channelDetails from '@/components/module/channelDetails'
import channelDelete from '@/components/module/channelDelete'
import channelAdd from '@/components/module/channelAdd'
import { bus, requestGetChannel } from '@/vuex/request.js'
import { getPageList } from '@/assets/js/get-page-list.js'
export default {
components: {
channelDetails,
channelDelete,
channelAdd
},
data () {
return {
page: 0,
pages: 7,
pageList: [1],
popup: {
channelDetails: false,
channelDelete: false,
channelAdd: false
},
checkbox: [false, false, false, false, false, false, false, false, false, false],
// tempName: '',
channelData: {},
freeList: 10,
pageSize: 10,
childrenData: {},
checkedChannel: []
}
},
props: ['userInfo'],
mounted () {
this.page = 1
},
methods: {
clearCheckbox () {
this.checkbox = [false, false, false, false, false, false, false, false, false, false]
},
del () {
if (!this.checkbox.some((n, i) => { return n === true })) {
bus.$emit('alert', '您没有选择任何选项!')
} else {
this.popup.channelDelete = true
this.checkedChannel = []
this.checkbox.forEach((n, i) => {
if (n) {
this.checkedChannel.push(this.channelData.data[i])
}
})
}
},
getChannel () {
let pageSize = this.pageSize
let params = {
pageNo: this.page,
pageSize: pageSize
// tempName: this.tempName
}
requestGetChannel(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
this.channelData = response.data.data
this.pages = response.data.data.pageCount
this.pageList = getPageList({
displayCount: 7, // 显示的页面总数(最大值)
page: Math.max(this.page, 1), // 当前页面
pages: Math.max(response.data.data.pageCount, 1) // 总页数
})
this.freeList = this.page === response.data.data.pageCount ? pageSize - (response.data.data.dataCount % pageSize === 0 ? pageSize : response.data.data.dataCount % pageSize) : 0
if (!response.data.data.data.length) {
this.freeList = 10
}
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
},
watch: {
page (val, oldVal) {
this.getChannel()
}
}
}
</script>
<style lang="scss" scoped>
.channelTableInfoVue{
padding: 0 50px;
max-width: 1600px;
margin: auto;
.title{
padding: 15px 0;
overflow: hidden;
.right{
float: right;
height: 100%;
vertical-align: middle;
text-align: right;
line-height: 36px;
button:nth-of-type(n + 2){
margin-left: 10px;
}
}
}
}
.pageList{
margin-top: 30px;
margin-bottom: 10px;
}
</style>
<template lang="html">
<div class="databaseInfoVue">
<div class="title">
<input type="text" name="" value="" class="searchInput" spellcheck="false" placeholder="数据库" v-model="dbName" @keydown.enter="getServer()">
<div class="right">
<button type="button" class="btn1" @click="popup.databaseAdd = true">新建</button>
<button type="button" class="btn1" @click="del()">删除</button>
</div>
</div>
<div class="table">
<table>
<tr>
<td>编号</td>
<td>数据库名</td>
<td>地址</td>
<td>端口</td>
<td>渠道</td>
<td>功能</td>
<td>数据库类型</td>
<td>是否分表</td>
<td>分表种类</td>
<td>详情</td>
<td>标记</td>
</tr>
<tr v-for="n,i in DatabaseData.data">
<td>{{ i + 1 + (page - 1) * 10 }}.</td>
<td>
<p class="lengthLimit">{{ n.dbName }}</p>
</td>
<td>{{ n.dbHost }}</td>
<td>{{ n.dbPort }}</td>
<td>{{ n.pt }}</td>
<td>{{ n.effect }}</td>
<td>{{ n.dbType }}</td>
<td>
<span :class="{'tableTrue': n.table}">{{ n.table ? '✔' : '✖' }}</span>
</td>
<td>{{ n.tableKind }}</td>
<td>
<button type="button" class="btn2" @click="popup.databaseDetails = true, childrenData = n">详情</button>
</td>
<td>
<label :for="'checkbox' + i" class="checkbox">
<input type="checkbox" name="" value="" :id="'checkbox' + i" v-model="checkbox[i]">
<span></span>
</label>
</td>
</tr>
<tr class="empty" v-for="n,i in freeList">
<td><!-- 编号 --></td>
<td><!-- 数据库名 --></td>
<td><!-- 地址 --></td>
<td><!-- 端口 --></td>
<td><!-- 渠道 --></td>
<td><!-- 功能 --></td>
<td><!-- 数据库类型 --></td>
<td><!-- 是否分表 --></td>
<td><!-- 分表种类 --></td>
<td><!-- 详情 --></td>
<td><!-- 标记 --></td>
</tr>
</table>
<div class="pageList">
<div @click="page = page - 1 < 1 ? 1 : page - 1">Provious</div>
<div @click="page = n" :class="{ 'active': page === n }" v-for="n,i in pageList">{{ n }}</div>
<div @click="page = page + 1 > pages ? pages : page + 1">Next</div> / 总共 {{ DatabaseData.pageCount || 1 }}
</div>
</div>
<!-- 检测模板详情 -->
<div class="mask" v-if="popup.databaseDetails">
<database-details @close="popup.databaseDetails = false" :children-data="childrenData" @update="getServer()" :param-data="paramData" />
</div>
<!-- 删除模板 -->
<div class="mask" v-if="popup.databaseDelete">
<database-delete @close="popup.databaseDelete = false" @update="getServer()" :checked-database="checkedDatabase" @clear-checkbox="clearCheckbox()" />
</div>
<!-- 新建模板 -->
<div class="mask" v-if="popup.databaseAdd">
<database-add @close="popup.databaseAdd = false" :userInfo="userInfo" @update="getServer()" :param-data="paramData" />
</div>
</div>
</template>
<script>
import databaseDetails from '@/components/module/databaseDetails'
import databaseDelete from '@/components/module/databaseDelete'
import databaseAdd from '@/components/module/databaseAdd'
import { bus, requestGetServer, requestStartTmp, requestStopTmp, requestGetParam } from '@/vuex/request.js'
import { getPageList } from '@/assets/js/get-page-list.js'
export default {
components: {
databaseDetails,
databaseDelete,
databaseAdd
},
data () {
return {
page: 0,
pages: 7,
pageList: [1],
popup: {
databaseDetails: false,
databaseDelete: false,
databaseAdd: false
},
checkbox: [false, false, false, false, false, false, false, false, false, false],
dbName: '',
DatabaseData: {},
freeList: 10,
pageSize: 10,
childrenData: {},
checkedDatabase: [],
paramData: []
}
},
props: ['userInfo'],
mounted () {
this.page = 1
this.getParamData()
},
methods: {
getParamData () {
requestGetParam((response) => {
if (response.data) {
if (response.data.state) {
this.paramData = response.data.data
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
},
clearCheckbox () {
this.checkbox = [false, false, false, false, false, false, false, false, false, false]
},
tempToggle (i) {
let params = {
templateId: this.DatabaseData.data[i].templateId
}
if (!this.toggle[i]) {
requestStartTmp(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
this.getServer()
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
} else {
requestStopTmp(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
this.getServer()
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
},
del () {
if (!this.checkbox.some((n, i) => { return n === true })) {
bus.$emit('alert', '您没有选择任何选项!')
} else {
this.popup.databaseDelete = true
this.checkedDatabase = []
this.checkbox.forEach((n, i) => {
if (n) {
this.checkedDatabase.push(this.DatabaseData.data[i])
}
})
}
},
getServer () {
let pageSize = this.pageSize
let params = {
pageNo: this.page,
pageSize: pageSize,
dbName: this.dbName
}
requestGetServer(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
this.DatabaseData = response.data.data
this.pages = response.data.data.pageCount
this.pageList = getPageList({
displayCount: 7, // 显示的页面总数(最大值)
page: Math.max(this.page, 1), // 当前页面
pages: Math.max(response.data.data.pageCount, 1) // 总页数
})
this.freeList = this.page === response.data.data.pageCount ? pageSize - (response.data.data.dataCount % pageSize === 0 ? pageSize : response.data.data.dataCount % pageSize) : 0
if (!response.data.data.data.length) {
this.freeList = 10
}
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
},
watch: {
page (val, oldVal) {
this.getServer()
}
}
}
</script>
<style lang="scss" scoped>
.databaseInfoVue{
padding: 0 50px;
max-width: 1600px;
margin: auto;
.title{
padding: 15px 0;
.right{
float: right;
height: 100%;
vertical-align: middle;
text-align: right;
line-height: 36px;
button:nth-of-type(n + 2){
margin-left: 10px;
}
}
}
}
.tableTrue{
// display: inline-block;
// transform: scale(1.5);
color: #49b0f7;
}
.pageList{
margin-top: 30px;
margin-bottom: 10px;
}
</style>
...@@ -320,7 +320,7 @@ export default { ...@@ -320,7 +320,7 @@ export default {
border: 1px solid #525A65; border: 1px solid #525A65;
color: #4F5762; color: #4F5762;
text-align: center; text-align: center;
background-image: url('/static/img/select_01.png'); background-image: url('~static/img/select_01.png');
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: contain; background-size: contain;
background-position: right; background-position: right;
...@@ -385,7 +385,7 @@ export default { ...@@ -385,7 +385,7 @@ export default {
height: 31px; height: 31px;
background-color: #000; background-color: #000;
border: 1px solid #394048; border: 1px solid #394048;
background-image: url('/static/img/select_02.png'); background-image: url('~static/img/select_02.png');
} }
} }
} }
......
<template lang="html">
<div class="fieldTableInfoVue">
<div class="title">
<input type="text" name="" value="" class="searchInput" spellcheck="false" placeholder="渠道" v-model="pt" @keydown.enter="getFields()">
<div class="right">
<button type="button" class="btn1" @click="popup.fieldAdd = true">新建</button>
<button type="button" class="btn1" @click="del()">删除</button>
</div>
</div>
<div class="table">
<table>
<tr>
<td>编号</td>
<td>数据库名</td>
<td>表名</td>
<td>字段长度</td>
<td>所属渠道</td>
<td>详细信息</td>
<td>标记</td>
</tr>
<tr v-for="n,i in fieldData.data">
<td>{{ i + 1 + (page - 1) * 10 }}.</td>
<td>
<p class="lengthLimit" :title="n.dbName">{{ n.dbName }}</p>
</td>
<td>{{ n.collection }}</td>
<td>{{ n.fieldSize }}</td>
<td>{{ n.pt }}</td>
<td>
<button type="button" class="btn2" @click="popup.fieldDetails = true, childrenData = n">详情</button>
</td>
<td>
<label :for="'checkbox' + i" class="checkbox">
<input type="checkbox" name="" value="" :id="'checkbox' + i" v-model="checkbox[i]">
<span></span>
</label>
</td>
</tr>
<tr class="empty" v-for="n,i in freeList">
<td><!-- 编号 --></td>
<td><!-- 数据库名 --></td>
<td><!-- 表名 --></td>
<td><!-- 字段长度 --></td>
<td><!-- 所属渠道 --></td>
<td><!-- 详细信息 --></td>
<td><!-- 标记 --></td>
</tr>
</table>
<div class="pageList">
<div @click="page = page - 1 < 1 ? 1 : page - 1">Provious</div>
<div @click="page = n" :class="{ 'active': page === n }" v-for="n,i in pageList">{{ n }}</div>
<div @click="page = page + 1 > pages ? pages : page + 1">Next</div> / 总共 {{ fieldData.pageCount || 1 }}
</div>
</div>
<!-- 检测模板详情 -->
<div class="mask" v-if="popup.fieldDetails">
<field-details @close="popup.fieldDetails = false" :children-data="childrenData" @update="getFields()" :channel-msg-data="channelMsgData" />
</div>
<!-- 删除模板 -->
<div class="mask" v-if="popup.fieldDelete">
<field-delete @close="popup.fieldDelete = false" :children-data="childrenData" @update="getFields()" :checked-field="checkedField" @clear-checkbox="clearCheckbox()" />
</div>
<!-- 新建模板 -->
<div class="mask" v-if="popup.fieldAdd">
<field-add @close="popup.fieldAdd = false" :userInfo="userInfo" @update="getFields()" :channel-msg-data="channelMsgData" />
</div>
</div>
</template>
<script>
import fieldDetails from '@/components/module/fieldDetails'
import fieldDelete from '@/components/module/fieldDelete'
import fieldAdd from '@/components/module/fieldAdd'
import { bus, requestGetFields, requestGetDisChannel } from '@/vuex/request.js'
import { getPageList } from '@/assets/js/get-page-list.js'
export default {
components: {
fieldDetails,
fieldDelete,
fieldAdd
},
data () {
return {
page: 0,
pages: 7,
pageList: [1],
popup: {
fieldDetails: false,
fieldDelete: false,
fieldAdd: false
},
checkbox: [false, false, false, false, false, false, false, false, false, false],
pt: '',
fieldData: {},
freeList: 10,
pageSize: 10,
childrenData: {},
checkedField: [],
channelMsgData: []
}
},
props: ['userInfo'],
mounted () {
this.page = 1
this.getDisChannel()
},
methods: {
getDisChannel () {
requestGetDisChannel((response) => {
if (response.data) {
if (response.data.state) {
this.channelMsgData = response.data.data
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
},
clearCheckbox () {
this.checkbox = [false, false, false, false, false, false, false, false, false, false]
},
del () {
if (!this.checkbox.some((n, i) => { return n === true })) {
bus.$emit('alert', '您没有选择任何选项!')
} else {
this.popup.fieldDelete = true
this.checkedField = []
this.checkbox.forEach((n, i) => {
if (n) {
this.checkedField.push(this.fieldData.data[i])
}
})
}
},
getFields () {
let pageSize = this.pageSize
let params = {
pageNo: this.page,
pageSize: pageSize,
pt: this.pt
}
requestGetFields(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
this.fieldData = response.data.data
this.pages = response.data.data.pageCount
this.pageList = getPageList({
displayCount: 7, // 显示的页面总数(最大值)
page: Math.max(this.page, 1), // 当前页面
pages: Math.max(response.data.data.pageCount, 1) // 总页数
})
this.freeList = this.page === response.data.data.pageCount ? pageSize - (response.data.data.dataCount % pageSize === 0 ? pageSize : response.data.data.dataCount % pageSize) : 0
if (!response.data.data.data.length) {
this.freeList = 10
}
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
},
watch: {
page (val, oldVal) {
this.getFields()
}
}
}
</script>
<style lang="scss" scoped>
.fieldTableInfoVue{
padding: 0 50px;
max-width: 1600px;
margin: auto;
.title{
padding: 15px 0;
.right{
float: right;
height: 100%;
vertical-align: middle;
text-align: right;
line-height: 36px;
button:nth-of-type(n + 2){
margin-left: 10px;
}
}
}
}
.pageList{
margin-top: 30px;
margin-bottom: 10px;
}
</style>
<template lang="html"> <template lang="html">
<div class="loginVue"> <div class="loginVue">
<img src="static/img/logo.png" alt="" class="logo"> <img src="~static/img/logo.png" alt="" class="logo">
<div class="loginForm"> <div class="loginForm">
<div class="title"> <div class="title">
<img src="static/img/login_title.png" alt=""> <img src="~static/img/login_title.png" alt="">
</div> </div>
<div class="form"> <div class="form">
<input type="text" name="username" class="username" v-model="username" spellcheck="false" placeholder="User name" @keydown.enter="login()"> <input type="text" name="username" class="username" v-model="username" spellcheck="false" placeholder="User name" @keydown.enter="login()">
...@@ -68,7 +68,7 @@ export default { ...@@ -68,7 +68,7 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.loginVue{ .loginVue{
padding: 15px 45px 0 45px; padding: 15px 45px 0 45px;
background-image: url('/static/img/bg.png'); background-image: url('~static/img/bg.png');
.loginForm{ .loginForm{
position: absolute; position: absolute;
left: 50%; left: 50%;
...@@ -101,18 +101,18 @@ export default { ...@@ -101,18 +101,18 @@ export default {
background-position: right center; background-position: right center;
&.username{ &.username{
margin-bottom: 30px; margin-bottom: 30px;
background-image: url('/static/img/username_1.png'); background-image: url('~static/img/username_1.png');
&:focus{ &:focus{
border-bottom-color: #49AFF7; border-bottom-color: #49AFF7;
background-image: url('/static/img/username_2.png'); background-image: url('~static/img/username_2.png');
} }
} }
&.password{ &.password{
margin-bottom: 10px; margin-bottom: 10px;
background-image: url('/static/img/password_1.png'); background-image: url('~static/img/password_1.png');
&:focus{ &:focus{
border-bottom-color: #49AFF7; border-bottom-color: #49AFF7;
background-image: url('/static/img/password_2.png'); background-image: url('~static/img/password_2.png');
} }
} }
&::-webkit-input-placeholder { /* WebKit browsers */ &::-webkit-input-placeholder { /* WebKit browsers */
......
<template lang="html">
<div class="NotFoundComponentVue">
<h1>您访问的页面不存在 :(</h1>
<h3>{{ timeout }} 秒后返回上一个页面</h3>
</div>
</template>
<script>
export default {
data () {
return {
timeout: 3
}
},
mounted () {
let timer = setInterval(() => {
this.timeout--
if (this.timeout < 0) {
window.history.back()
clearInterval(timer)
}
}, 1000)
}
}
</script>
<style lang="scss" scoped>
.NotFoundComponentVue{
padding: 0 50px;
max-width: 1600px;
margin: auto;
}
</style>
<template lang="html">
<div class="channelAddVue pop-up">
<div class="title">
新建渠道表
<i class="close" @click="close()"></i>
</div>
<div class="main">
<div class="list">
<p class="item">
<span>渠道信息</span>:
<input type="text" name="" v-model="data.pt" spellcheck="false">
</p>
<p class="item">
<span>渠道对应</span>:
<input type="text" name="" v-model="data.value" spellcheck="false">
</p>
</div>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">放弃</button>
</div>
</div>
</template>
<script>
import { bus, requestInsertChannel } from '@/vuex/request.js'
export default {
data () {
return {
data: {
value: '',
pt: ''
}
}
},
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.channelAddVue.pop-up')
})
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.channelAddVue.pop-up')
setTimeout(() => {
this.$emit('close')
}, 500)
})
},
submit () {
let params = {}
for (let n in this.data) {
params[n] = this.data[n]
}
let flag = true
for (let n in params) {
if (params[n] === '') {
flag = false
break
}
}
if (!flag) {
bus.$emit('alert', '存在未填写项!')
return false
}
requestInsertChannel(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.channelAddVue{
width: 500px;
.main{
.list{
overflow: hidden;
.item{
width: 100%;
margin-bottom: 20px;
span{
display: inline-block;
width: 100px;
}
input, select{
width: 310px;
height: 31px;
background-color: #2F363E;
border: 1px solid #505A64;
background-image: none;
}
}
}
.handle{
line-height: 100px;
padding-left: 50px;
label.checkbox input[type=checkbox]+span{
background-color: #262B31;
box-shadow: 0 0 0 1px #262B31;
margin-right: 10px;
}
}
}
}
</style>
<template lang="html">
<div class="channelDeleteVue pop-up">
<div class="title">
删除渠道表
<i class="close" @click="close()"></i>
</div>
<div class="main">
<p>是否确认删除以下{{ checkedChannel.length }}个渠道表?</p>
<ul>
<li class="lengthLimit" v-for="n,i in checkedChannel">{{ n.pt }} ({{ n.value }})</li>
</ul>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">返回</button>
</div>
</div>
</template>
<script>
import { bus, requestDeleteChannel } from '@/vuex/request.js'
export default {
data () {
return {
}
},
props: ['checkedChannel'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.channelDeleteVue.pop-up')
})
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.channelDeleteVue.pop-up')
setTimeout(() => {
window.$('#generationTime').DatePickerClear()
this.$emit('close')
}, 500)
})
},
submit () {
let params = {
id: this.checkedChannel.map((n, i) => {
return n.id
})
}
requestDeleteChannel(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('clear-checkbox')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.channelDeleteVue{
width: 500px;
.main{
p{
font-size: 16px;
margin-bottom: 20px;
}
ul{
padding-left: 20px;
margin-bottom: 50px;
max-height: 150px;
overflow-y: auto;
li{
display: list-item;
list-style-type: circle;
line-height: 1.5;
overflow: visible;
max-width: 400px;
}
}
}
}
</style>
<template lang="html">
<div class="channelDetailsVue pop-up">
<div class="title">
修改渠道表
<i class="close" @click="close()"></i>
</div>
<div class="main">
<div class="list">
<p class="item">
<span>渠道信息</span>:
<input type="text" name="" v-model="data.pt" spellcheck="false">
</p>
<p class="item">
<span>渠道对应</span>:
<input type="text" name="" v-model="data.value" spellcheck="false">
</p>
</div>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">放弃</button>
</div>
</div>
</template>
<script>
import { bus, requestUpdateChannel } from '@/vuex/request.js'
export default {
data () {
return {
data: {
id: '',
value: '',
pt: ''
}
}
},
props: ['childrenData'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.channelDetailsVue.pop-up')
})
// init
for (let n in this.data) {
this.data[n] = this.childrenData[n]
}
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.channelDetailsVue.pop-up')
setTimeout(() => {
this.$emit('close')
}, 500)
})
},
submit () {
let params = {}
for (let n in this.data) {
params[n] = this.data[n]
}
let flag = true
for (let n in params) {
if (params[n] === '') {
flag = false
break
}
}
if (!flag) {
bus.$emit('alert', '存在未填写项!')
return false
}
requestUpdateChannel(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.channelDetailsVue{
width: 500px;
.main{
.list{
overflow: hidden;
.item{
width: 100%;
margin-bottom: 20px;
span{
display: inline-block;
width: 100px;
}
input, select{
width: 310px;
height: 31px;
background-color: #2F363E;
border: 1px solid #505A64;
background-image: none;
}
}
}
.handle{
line-height: 100px;
padding-left: 50px;
label.checkbox input[type=checkbox]+span{
background-color: #262B31;
box-shadow: 0 0 0 1px #262B31;
margin-right: 10px;
}
}
}
}
</style>
<template lang="html">
<div class="checkInfoDeleteVue pop-up">
<div class="title">
删除信息
<i class="close" @click="close()"></i>
</div>
<div class="main">
<p>是否确认删除以下{{ checkedMessage.length }}条信息?</p>
<ul>
<li class="lengthLimit" :title="n.errorMsg" v-for="n,i in checkedMessage">{{ n.templateName }} ({{ n.errorMsg }})</li>
</ul>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">返回</button>
</div>
</div>
</template>
<script>
import { bus, requestDeleteMsg } from '@/vuex/request.js'
export default {
data () {
return {
}
},
props: ['checkedMessage', 'ptSelectedData'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.checkInfoDeleteVue.pop-up')
})
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.checkInfoDeleteVue.pop-up')
setTimeout(() => {
window.$('#generationTime').DatePickerClear()
this.$emit('close')
}, 500)
})
},
submit () {
let params = {
messageId: this.checkedMessage.map((n, i) => {
return n.messageId
}),
pt: this.ptSelectedData.pt
}
requestDeleteMsg(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('clear-checkbox')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.checkInfoDeleteVue{
width: 500px;
.main{
p{
font-size: 16px;
margin-bottom: 20px;
}
ul{
padding-left: 20px;
margin-bottom: 50px;
max-height: 150px;
overflow-y: auto;
li{
display: list-item;
list-style-type: circle;
line-height: 1.5;
// overflow: visible;
max-width: 400px;
}
}
}
}
</style>
<template lang="html">
<div class="checkInfoDetailsVue pop-up">
<div class="title">
检测详情
<i class="close" @click="close()"></i>
</div>
<div class="main">
<div class="list">
<p class="item">
<span>检测模板</span>:
<input type="text" name="" :value="data.templateName" disabled spellcheck="false" placeholder="UC">
</p>
<p class="item">
<span>产生时间</span>:
<input type="text" name="" :value="data.handleDate" disabled class="dateInput" placeholder="2017-12-12" id="generationTime" readonly>
</p>
<p class="item big-area">
<span>错误信息</span>:
<textarea name="name" :value="data.errorMsg" disabled spellcheck="false" placeholder="连接失败"></textarea>
</p>
<p class="item">
<span>所属级别</span>:
<input type="text" name="" :value="data.templateLv" disabled spellcheck="false" placeholder="1">
</p>
<p class="item">
<span>模板创建人</span>:
<input type="text" name="" :value="data.templateCreator" disabled spellcheck="false" placeholder="沈金柱">
</p>
<p class="item big-area">
<span>处理信息</span>:
<textarea name="name" v-model="data.handleMsg" spellcheck="false" placeholder="无"></textarea>
</p>
</div>
<div class="handle">
<label for="checkInfoDetailsVuePopUpCheckBox" class="checkbox">
<input type="checkbox" name="" v-model="data.handle" id="checkInfoDetailsVuePopUpCheckBox">
<span></span>
已处理
</label>
</div>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确定</button>
<button type="button" class="btn3" @click="close()">返回</button>
</div>
</div>
</template>
<script>
import { bus, requestHandle } from '@/vuex/request.js'
import moment from 'moment'
export default {
data () {
return {
data: {
messageId: '',
templateName: '',
handleDate: '',
errorMsg: '',
handleMsg: '',
templateLv: '',
templateCreator: '',
handle: false
}
}
},
props: ['childrenData', 'userInfo', 'ptSelectedData'],
mounted () {
let self = this
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.checkInfoDetailsVue.pop-up')
})
// 初始化
this.data = {
messageId: this.childrenData.messageId,
templateName: this.childrenData.templateName,
handleDate: moment(this.childrenData.handleDate).format('YYYY-MM-DD'),
errorMsg: this.childrenData.errorMsg,
handleMsg: this.childrenData.handleMsg,
templateLv: this.childrenData.templateLv,
templateCreator: this.childrenData.templateCreator,
handle: this.childrenData.handle
}
// 自定义日历插件
window.$('#generationTime').DatePicker({
format: 'Y-m-d',
date: window.$('#generationTime').val(),
current: window.$('#generationTime').val(),
starts: 1,
position: 'bottom',
onBeforeShow: function () {
window.$('#generationTime').DatePickerSetDate(window.$('#generationTime').val(), true)
},
onChange: function (formated, dates) {
console.log(formated, dates)
self.data.handleDate = formated
window.$('#generationTime').val(formated)
window.$('#generationTime').DatePickerHide()
}
})
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.checkInfoDetailsVue.pop-up')
setTimeout(() => {
window.$('#generationTime').DatePickerClear()
this.$emit('close')
}, 500)
})
},
submit () {
let params = {
messageId: this.childrenData.messageId,
// templateName: this.childrenData.templateName,
// handleDate: this.childrenData.handleDate,
// errorMsg: this.childrenData.errorMsg,
// templateLv: this.childrenData.templateLv,
// templateCreator: this.childrenData.templateCreator,
handleMsg: this.data.handleMsg,
handle: this.data.handle,
handler: this.userInfo.username,
pt: this.ptSelectedData.pt
}
requestHandle(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.checkInfoDetailsVue{
.main{
.list{
overflow: hidden;
.item{
width: 50%;
float: left;
margin-bottom: 20px;
span{
display: inline-block;
width: 80px;
}
input{
width: 219px;
height: 31px;
background-color: #2F363E;
border: 1px solid #505A64;
}
&.big-area{
width: 100%;
vertical-align: top;
textarea{
min-width: 543px;
max-width: 543px;
min-height: 75px;
max-height: 150px;
background-color: #2F363E;
border: 1px solid #505A64;
padding: 6px;
}
}
}
}
.handle{
line-height: 100px;
padding-left: 50px;
label.checkbox input[type=checkbox]+span{
background-color: #262B31;
box-shadow: 0 0 0 1px #262B31;
margin-right: 10px;
}
}
}
}
</style>
<template lang="html">
<div class="checkTemplateDetailsVue pop-up">
<div class="title">
新建模板
<i class="close" @click="close()"></i>
</div>
<div class="main">
<div class="list">
<p class="item">
<span>检测模板名称</span>:
<input type="text" name="" v-model="data.tempName" spellcheck="false">
</p>
<p class="item">
<span>模板渠道</span>:
<input type="text" name="" v-model="data.pt" spellcheck="false">
</p>
<p class="item">
<span>等级</span>:
<input type="text" name="" v-model="data.templateLv" spellcheck="false">
</p>
<p class="item">
<span>设置人</span>:
<input type="text" name="" :value="this.userInfo.username" disabled spellcheck="false">
</p>
<p class="item">
<span>连通性测试</span>:
<select class="" name="" v-model="data.needPing">
<option :value="false">否</option>
<option :value="true">是</option>
</select>
</p>
<p class="item">
<span>测试间隔(小时)</span>:
<input type="text" name="" v-model="data.pingInterval" spellcheck="false" :disabled="!data.needPing">
</p>
<p class="item">
<span>链接测试网站</span>:
<input type="text" name="" v-model="data.pingUrlOne">
</p>
<p class="item">
<span>测试网站二</span>:
<input type="text" name="" v-model="data.pingUrlTwo">
</p>
<p class="item">
<span>字段完整率</span>:
<select class="" name="" v-model="data.needField">
<option :value="false">否</option>
<option :value="true">是</option>
</select>
</p>
<p class="item">
<span>测试间隔(小时)</span>:
<input type="text" name="" v-model="data.fieldInterval" spellcheck="false" :disabled="!data.needField">
</p>
<p class="item">
<span>字段选择</span>:
<input type="text" name="" v-model="data.field" spellcheck="false" readonly @click="popup.fieldSelect = true">
</p>
<p class="item">
<span>字段达标率(%)</span>:
<input type="text" name="" v-model="data.fieldIntegrityRate" spellcheck="false">
</p>
<p class="item">
<span>数据的延时性</span>:
<select class="" name="" v-model="data.needDelayed">
<option :value="false">否</option>
<option :value="true">是</option>
</select>
</p>
<p class="item">
<span>测试间隔(小时)</span>:
<input type="text" name="" v-model="data.delayedInterval" spellcheck="false" :disabled="!data.needDelayed">
</p>
<p class="item">
<span>入库时间字段</span>:
<input type="text" name="" v-model="data.savetime" spellcheck="false">
</p>
<p class="item">
<span>产生时间字段</span>:
<input type="text" name="" v-model="data.time" spellcheck="false">
</p>
<p class="item">
<span>每次检查条数</span>:
<input type="text" name="" v-model="data.testCount">
</p>
<p class="item">
<span>延时要求</span>:
<input type="text" name="" v-model="data.newsDelayed">
</p>
<p class="item">
<span>预警邮箱</span>:
<input type="text" name="" v-model="data.mail">
</p>
<p class="item">
<span>低数据量预警</span>:
<input type="text" name="" v-model="data.newsNumber">
</p>
<p class="item">
<span>存储地址</span>:
<input type="text" name="" v-model="data.host">
</p>
<p class="item">
<span>端口</span>:
<input type="text" name="" v-model="data.port">
</p>
<p class="item">
<span>数据库名</span>:
<input type="text" name="" v-model="data.dBName">
</p>
<p class="item">
<span>表名</span>:
<input type="text" name="" v-model="data.collection">
</p>
<p class="item">
<span>采集主键</span>:
<input type="text" name="" v-model="data.spyderInfoId">
</p>
</div>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">放弃</button>
</div>
<!-- 字段选择弹窗 -->
<div class="mask" v-if="popup.fieldSelect">
<field-select @close="popup.fieldSelect = false" :field="data.field" @change-field-list="changeFieldList" :all-fields="allFields" />
</div>
</div>
</template>
<script>
import { bus, requestSaveTmp } from '@/vuex/request.js'
import fieldSelect from '@/components/module/fieldSelect'
export default {
components: {
fieldSelect
},
data () {
return {
popup: {
fieldSelect: false
},
data: {
tempName: '',
pt: '',
templateLv: '',
creator: '',
needPing: false,
pingInterval: 0,
pingUrlOne: '',
pingUrlTwo: '',
needField: false,
fieldInterval: 0,
field: [''],
fieldIntegrityRate: '',
needDelayed: false,
delayedInterval: 0,
savetime: '',
time: '',
testCount: '',
newsDelayed: '',
mail: '',
newsNumber: '',
host: '',
port: '',
dBName: '',
collection: '',
spyderInfoId: ''
}
}
},
props: ['userInfo', 'allFields', 'ptSelectedData'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.checkTemplateDetailsVue.pop-up')
})
// init
this.data.creator = this.userInfo.username
this.data.pt = this.ptSelectedData.pt
},
methods: {
changeFieldList (list) {
this.data.field = list
},
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.checkTemplateDetailsVue.pop-up')
setTimeout(() => {
this.$emit('close')
}, 500)
})
},
submit () {
let params = this.data
if (params.needPing && params.pingUrlOne === '') {
bus.$emit('alert', '链接测试网站 不可为空!')
return false
}
for (let n in params) {
// 除去特殊几个外,其他都不为空
if (params[n] === '' && !/spyderInfoId|pingUrlTwo/g.test(n)) {
bus.$emit('alert', '必填项未填写')
return false
}
// 部分值必须为整数
if (/[^\d]/g.test(params[n]) && /templateLv|pingInterval|fieldInterval|delayedInterval|testCount|newsNumber|port|fieldIntegrityRate|newsDelayed/g.test(n)) {
bus.$emit('alert', '等级、测试间隔、每次检查条数、低数据量预警、端口 必须为整数')
return false
}
// if (/templateLv|pingInterval|fieldInterval|delayedInterval|testCount|newsNumber|port|fieldIntegrityRate|newsDelayed/g.test(n)) {
// if (/[^\d]/g.test(params[n])) {
// bus.$emit('alert', '等级、测试间隔、每次检查条数、低数据量预警、端口 必须为整数')
// return false
// } else {
// params[n] = parseInt(this.data[n])
// }
// }
if (n === 'host' && !/\d+\.\d+\.\d+\.\d+/g.test(params[n])) {
bus.$emit('alert', '存储地址 必须为ip地址,如:192.168.0.242')
return false
}
}
params.field = this.data.field.join(',')
console.log('checkTemplateAdd request params:', params)
// {tmp: JSON.stringify(params)}
requestSaveTmp(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.checkTemplateDetailsVue{
.main{
.list{
overflow: hidden;
.item{
width: 50%;
float: left;
margin-bottom: 20px;
span{
display: inline-block;
width: 100px;
}
input, select{
width: 200px;
height: 31px;
background-color: #2F363E;
border: 1px solid #505A64;
background-image: none;
&[readonly]{
cursor: pointer;
}
}
}
}
.handle{
line-height: 100px;
padding-left: 50px;
label.checkbox input[type=checkbox]+span{
background-color: #262B31;
box-shadow: 0 0 0 1px #262B31;
margin-right: 10px;
}
}
}
}
</style>
<template lang="html">
<div class="checkInfoDeleteVue pop-up">
<div class="title">
删除模板
<i class="close" @click="close()"></i>
</div>
<div class="main">
<p>是否确认删除以下{{ checkedTemplate.length }}个模板?</p>
<ul>
<li class="lengthLimit" v-for="n,i in checkedTemplate">{{ n.tempName }}</li>
</ul>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">返回</button>
</div>
</div>
</template>
<script>
import { bus, requestDeleteTmp } from '@/vuex/request.js'
export default {
data () {
return {
}
},
props: ['childrenData', 'checkedTemplate', 'ptSelectedData'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.checkInfoDeleteVue.pop-up')
})
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.checkInfoDeleteVue.pop-up')
setTimeout(() => {
window.$('#generationTime').DatePickerClear()
this.$emit('close')
}, 500)
})
},
submit () {
let params = {
templateId: this.checkedTemplate.map((n, i) => {
return n.templateId
}),
pt: this.ptSelectedData.pt
}
requestDeleteTmp(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('clear-checkbox')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.checkInfoDeleteVue{
width: 500px;
.main{
p{
font-size: 16px;
margin-bottom: 20px;
}
ul{
padding-left: 20px;
margin-bottom: 50px;
max-height: 150px;
overflow-y: auto;
li{
display: list-item;
list-style-type: circle;
line-height: 1.5;
overflow: visible;
max-width: 400px;
}
}
}
}
</style>
<template lang="html">
<div class="checkTemplateDetailsVue pop-up">
<div class="title">
检测详情
<i class="close" @click="close()"></i>
</div>
<div class="main">
<div class="list">
<p class="item">
<span>检测模板名称</span>:
<input type="text" name="" v-model="data.tempName" spellcheck="false">
</p>
<p class="item">
<span>模板渠道</span>:
<input type="text" name="" v-model="data.pt" spellcheck="false">
</p>
<p class="item">
<span>等级</span>:
<input type="text" name="" v-model="data.templateLv" spellcheck="false">
</p>
<p class="item">
<span>设置人</span>:
<input type="text" name="" :value="this.userInfo.username" disabled spellcheck="false">
</p>
<p class="item">
<span>连通性测试</span>:
<select class="" name="" v-model="data.needPing">
<option :value="false">否</option>
<option :value="true">是</option>
</select>
</p>
<p class="item">
<span>测试间隔(小时)</span>:
<input type="text" name="" v-model="data.pingInterval" spellcheck="false" :disabled="!data.needPing">
</p>
<p class="item">
<span>链接测试网站</span>:
<input type="text" name="" v-model="data.pingUrlOne">
</p>
<p class="item">
<span>测试网站二</span>:
<input type="text" name="" v-model="data.pingUrlTwo">
</p>
<p class="item">
<span>字段完整率</span>:
<select class="" name="" v-model="data.needField">
<option :value="false">否</option>
<option :value="true">是</option>
</select>
</p>
<p class="item">
<span>测试间隔(小时)</span>:
<input type="text" name="" v-model="data.fieldInterval" spellcheck="false" :disabled="!data.needField">
</p>
<p class="item">
<span>字段选择</span>:
<input type="text" name="" v-model="data.field" spellcheck="false" readonly @click="popup.fieldSelect = true">
</p>
<p class="item">
<span>字段达标率(%)</span>:
<input type="text" name="" v-model="data.fieldIntegrityRate" spellcheck="false">
</p>
<p class="item">
<span>数据的延时性</span>:
<select class="" name="" v-model="data.needDelayed">
<option :value="false">否</option>
<option :value="true">是</option>
</select>
</p>
<p class="item">
<span>测试间隔(小时)</span>:
<input type="text" name="" v-model="data.delayedInterval" spellcheck="false" :disabled="!data.needDelayed">
</p>
<p class="item">
<span>入库时间字段</span>:
<input type="text" name="" v-model="data.savetime" spellcheck="false">
</p>
<p class="item">
<span>产生时间字段</span>:
<input type="text" name="" v-model="data.time" spellcheck="false">
</p>
<p class="item">
<span>每次检查条数</span>:
<input type="text" name="" v-model="data.testCount">
</p>
<p class="item">
<span>延时要求</span>:
<input type="text" name="" v-model="data.newsDelayed">
</p>
<p class="item">
<span>预警邮箱</span>:
<input type="text" name="" v-model="data.mail">
</p>
<p class="item">
<span>低数据量预警</span>:
<input type="text" name="" v-model="data.newsNumber">
</p>
<p class="item">
<span>存储地址</span>:
<input type="text" name="" v-model="data.host">
</p>
<p class="item">
<span>端口</span>:
<input type="text" name="" v-model="data.port">
</p>
<p class="item">
<span>数据库名</span>:
<input type="text" name="" v-model="data.dBName">
</p>
<p class="item">
<span>表名</span>:
<input type="text" name="" v-model="data.collection">
</p>
<p class="item">
<span>采集主键</span>:
<input type="text" name="" v-model="data.spyderInfoId">
</p>
</div>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">保存修改</button>
<button type="button" class="btn3" @click="close()">放弃修改</button>
</div>
<!-- 字段选择弹窗 -->
<div class="mask" v-if="popup.fieldSelect">
<field-select @close="popup.fieldSelect = false" :field="data.field" @change-field-list="changeFieldList" :all-fields="allFields" />
</div>
</div>
</template>
<script>
import { bus, requestUpdateTmp } from '@/vuex/request.js'
import fieldSelect from '@/components/module/fieldSelect'
export default {
components: {
fieldSelect
},
data () {
return {
popup: {
fieldSelect: false
},
data: {
tempName: '',
pt: '',
templateLv: '',
creator: '',
needPing: false,
pingInterval: 0,
pingUrlOne: '',
pingUrlTwo: '',
needField: false,
fieldInterval: 0,
field: [''],
fieldIntegrityRate: '',
needDelayed: false,
delayedInterval: 0,
savetime: '',
time: '',
testCount: '',
newsDelayed: '',
mail: '',
newsNumber: '',
host: '',
port: '',
dBName: '',
collection: '',
spyderInfoId: ''
}
}
},
props: ['childrenData', 'userInfo', 'allFields', 'ptSelectedData'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.checkTemplateDetailsVue.pop-up')
})
// init
for (let n in this.data) {
if (n === 'field') {
this.data.field = this.childrenData.field.split(',')
} else {
this.data[n] = this.childrenData[n]
}
}
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.checkTemplateDetailsVue.pop-up')
setTimeout(() => {
this.$emit('close')
}, 500)
})
},
submit () {
let params = this.data
if (params.needPing && params.pingUrlOne === '') {
bus.$emit('alert', '链接测试网站 不可为空!')
return false
}
for (let n in params) {
// 除去特殊几个外,其他都不为空
if (params[n] === '' && !/spyderInfoId|pingUrlTwo/g.test(n)) {
bus.$emit('alert', '必填项未填写')
return false
}
// 部分值必须为整数
if (/[^\d]/g.test(params[n]) && /templateLv|pingInterval|fieldInterval|delayedInterval|testCount|newsNumber|port|fieldIntegrityRate|newsDelayed/g.test(n)) {
bus.$emit('alert', '等级、测试间隔、每次检查条数、低数据量预警、端口 必须为整数')
return false
}
// if (/templateLv|pingInterval|fieldInterval|delayedInterval|testCount|newsNumber|port|fieldIntegrityRate|newsDelayed/g.test(n)) {
// if (/[^\d]/g.test(params[n])) {
// bus.$emit('alert', '等级、测试间隔、每次检查条数、低数据量预警、端口 必须为整数')
// return false
// } else {
// params[n] = parseInt(this.data[n])
// }
// }
if (n === 'host' && !/\d+\.\d+\.\d+\.\d+/g.test(params[n])) {
bus.$emit('alert', '存储地址 必须为ip地址,如:192.168.0.242')
return false
}
}
params.field = this.data.field.join(',')
params.templateId = this.childrenData.templateId
console.log('checkTemplateDetails request params:', params)
requestUpdateTmp(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.checkTemplateDetailsVue{
.main{
.list{
overflow: hidden;
.item{
width: 50%;
float: left;
margin-bottom: 20px;
span{
display: inline-block;
width: 100px;
}
input, select{
width: 200px;
height: 31px;
background-color: #2F363E;
border: 1px solid #505A64;
background-image: none;
}
}
}
.handle{
line-height: 100px;
padding-left: 50px;
label.checkbox input[type=checkbox]+span{
background-color: #262B31;
box-shadow: 0 0 0 1px #262B31;
margin-right: 10px;
}
}
}
}
</style>
<template lang="html">
<div class="databaseAddVue pop-up">
<div class="title">
新建数据库
<i class="close" @click="close()"></i>
</div>
<div class="main">
<div class="list">
<p class="item">
<span>数据库用户名</span>:
<input type="text" name="" v-model="data.dbUsername" spellcheck="false">
</p>
<p class="item">
<span>数据库密码</span>:
<input type="text" name="" v-model="data.dbPassword" spellcheck="false">
</p>
<p class="item">
<span>数据库地址</span>:
<input type="text" name="" v-model="data.dbHost" spellcheck="false">
</p>
<p class="item">
<span>数据库端口</span>:
<input type="text" name="" v-model="data.dbPort" spellcheck="false">
</p>
<p class="item">
<span>表名</span>:
<input type="text" name="" v-model="data.collection" spellcheck="false">
</p>
<p class="item">
<span>数据库名</span>:
<input type="text" name="" v-model="data.dbName" spellcheck="false">
</p>
<p class="item">
<span>表的作用</span>:
<input type="text" name="" v-model="data.effect" spellcheck="false">
</p>
<p class="item">
<span>数据库类型</span>:
<input type="text" name="" v-model="data.dbType" spellcheck="false">
</p>
<!-- <p class="item">
<span>存储的什么数据</span>:
<input type="text" name="" v-model="data.dataType" spellcheck="false">
</p> -->
<p class="item">
<span>参数说明</span>:
<!-- <input type="text" name="" v-model="data.other" spellcheck="false"> -->
<select class="" name="" v-model="data.other">
<option :value="n" v-for="n,i in paramData">{{ n }}</option>
</select>
</p>
<p class="item">
<span>渠道</span>:
<input type="text" name="" v-model="data.pt" spellcheck="false">
</p>
<p class="item">
<span>是否分表</span>:
<select class="" name="" v-model="data.table">
<option :value="true">是</option>
<option :value="false">否</option>
</select>
</p>
<p class="item">
<span>分表种类</span>:
<select class="" name="" v-model="data.tableKind">
<option value="hash">哈希</option>
<option value="month">月份</option>
</select>
</p>
</div>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">放弃</button>
</div>
</div>
</template>
<script>
import { bus, requestInsertServer } from '@/vuex/request.js'
export default {
data () {
return {
data: {
dbUsername: '',
dbPassword: '',
dbHost: '',
dbPort: '',
collection: '',
dbName: '',
effect: '',
dbType: '',
// dataType: '',
other: '',
pt: '',
table: true,
tableKind: 'hash'
}
}
},
props: ['paramData'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.databaseAddVue.pop-up')
})
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.databaseAddVue.pop-up')
setTimeout(() => {
this.$emit('close')
}, 500)
})
},
submit () {
let params = {}
for (let n in this.data) {
params[n] = this.data[n]
}
let flag = true
for (let n in params) {
if (params[n] === '' && !/dbUsername|dbPassword/g.test(n)) {
flag = false
break
}
}
if (!flag) {
bus.$emit('alert', '存在未填写项!')
return false
}
if (this.data.dbPort.search(/[^\d]/g) !== -1) {
bus.$emit('alert', '端口必须为数字')
return false
}
requestInsertServer(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.databaseAddVue{
.main{
.list{
overflow: hidden;
.item{
width: 50%;
float: left;
margin-bottom: 20px;
span{
display: inline-block;
width: 100px;
}
input, select{
width: 200px;
height: 31px;
background-color: #2F363E;
border: 1px solid #505A64;
background-image: none;
}
}
}
.handle{
line-height: 100px;
padding-left: 50px;
label.checkbox input[type=checkbox]+span{
background-color: #262B31;
box-shadow: 0 0 0 1px #262B31;
margin-right: 10px;
}
}
}
}
</style>
<template lang="html">
<div class="databaseDeleteVue pop-up">
<div class="title">
删除数据库
<i class="close" @click="close()"></i>
</div>
<div class="main">
<p>是否确认删除以下{{ checkedDatabase.length }}个数据库?</p>
<ul>
<li class="lengthLimit" v-for="n,i in checkedDatabase">{{ n.dbName }}</li>
</ul>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">返回</button>
</div>
</div>
</template>
<script>
import { bus, requestDeleteServer } from '@/vuex/request.js'
export default {
data () {
return {
}
},
props: ['checkedDatabase'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.databaseDeleteVue.pop-up')
})
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.databaseDeleteVue.pop-up')
setTimeout(() => {
window.$('#generationTime').DatePickerClear()
this.$emit('close')
}, 500)
})
},
submit () {
let params = {
serverid: this.checkedDatabase.map((n, i) => {
return n.id
})
}
requestDeleteServer(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('clear-checkbox')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.databaseDeleteVue{
width: 500px;
.main{
p{
font-size: 16px;
margin-bottom: 20px;
}
ul{
padding-left: 20px;
margin-bottom: 50px;
max-height: 150px;
overflow-y: auto;
li{
display: list-item;
list-style-type: circle;
line-height: 1.5;
overflow: visible;
max-width: 400px;
}
}
}
}
</style>
<template lang="html">
<div class="databaseAddVue pop-up">
<div class="title">
修改数据库
<i class="close" @click="close()"></i>
</div>
<div class="main">
<div class="list">
<p class="item">
<span>数据库用户名</span>:
<input type="text" name="" v-model="data.dbUsername" spellcheck="false">
</p>
<p class="item">
<span>数据库密码</span>:
<input type="text" name="" v-model="data.dbPassword" spellcheck="false">
</p>
<p class="item">
<span>数据库地址</span>:
<input type="text" name="" v-model="data.dbHost" spellcheck="false">
</p>
<p class="item">
<span>数据库端口</span>:
<input type="text" name="" v-model="data.dbPort" spellcheck="false">
</p>
<p class="item">
<span>表名</span>:
<input type="text" name="" v-model="data.collection" spellcheck="false">
</p>
<p class="item">
<span>数据库名</span>:
<input type="text" name="" v-model="data.dbName" spellcheck="false">
</p>
<p class="item">
<span>表的作用</span>:
<input type="text" name="" v-model="data.effect" spellcheck="false">
</p>
<p class="item">
<span>数据库类型</span>:
<input type="text" name="" v-model="data.dbType" spellcheck="false">
</p>
<!-- <p class="item">
<span>存储的什么数据</span>:
<input type="text" name="" v-model="data.dataType" spellcheck="false">
</p> -->
<p class="item">
<span>参数说明</span>:
<!-- <input type="text" name="" v-model="data.other" spellcheck="false"> -->
<select class="" name="" v-model="data.other">
<option :value="n" v-for="n,i in paramData">{{ n }}</option>
</select>
</p>
<p class="item">
<span>渠道</span>:
<input type="text" name="" v-model="data.pt" spellcheck="false">
</p>
<p class="item">
<span>是否分表</span>:
<select class="" name="" v-model="data.table">
<option :value="true">是</option>
<option :value="false">否</option>
</select>
</p>
<p class="item">
<span>分表种类</span>:
<select class="" name="" v-model="data.tableKind">
<option value="hash">哈希</option>
<option value="month">月份</option>
</select>
</p>
</div>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">放弃</button>
</div>
</div>
</template>
<script>
import { bus, requestUpdateServer } from '@/vuex/request.js'
export default {
data () {
return {
data: {
id: '',
dbUsername: '',
dbPassword: '',
dbHost: '',
dbPort: '',
collection: '',
dbName: '',
effect: '',
dbType: '',
// dataType: '',
other: '',
pt: '',
table: true,
tableKind: 'hash'
}
}
},
props: ['childrenData', 'paramData'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.databaseAddVue.pop-up')
})
// init
for (let n in this.data) {
this.data[n] = this.childrenData[n]
}
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.databaseAddVue.pop-up')
setTimeout(() => {
this.$emit('close')
}, 500)
})
},
submit () {
let params = {}
for (let n in this.data) {
params[n] = this.data[n]
}
let flag = true
for (let n in params) {
if (params[n] === '' && !/dbUsername|dbPassword/g.test(n)) {
flag = false
break
}
}
if (!flag) {
bus.$emit('alert', '存在未填写项!')
return false
}
requestUpdateServer(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.databaseAddVue{
.main{
.list{
overflow: hidden;
.item{
width: 50%;
float: left;
margin-bottom: 20px;
span{
display: inline-block;
width: 100px;
}
input, select{
width: 200px;
height: 31px;
background-color: #2F363E;
border: 1px solid #505A64;
background-image: none;
}
}
}
.handle{
line-height: 100px;
padding-left: 50px;
label.checkbox input[type=checkbox]+span{
background-color: #262B31;
box-shadow: 0 0 0 1px #262B31;
margin-right: 10px;
}
}
}
}
</style>
<template lang="html">
<div class="fieldAddVue pop-up" @click="toggle.fieldList = false">
<div class="title">
新建字段表
<i class="close" @click="close()"></i>
</div>
<div class="main">
<div class="list">
<p class="item">
<span>字段数量</span>:
<input type="text" name="" v-model="data.fieldSize" spellcheck="false">
</p>
<p class="item">
<span>字段值</span>:
<input type="text" name="" v-model="fieldInput" spellcheck="false" @click.stop="toggle.fieldList = true" @keydown.enter="AddFieldList()">
<ul class="fieldList" v-show="toggle.fieldList">
<li v-if="data.field.length" v-for="n,i in data.field"><span>{{ n }}</span><i @click.stop="delField(i)">✖</i></li>
<li v-if="!data.field.length" class="empty">Empty...</li>
</ul>
</p>
<p class="item">
<span>表名</span>:
<input type="text" name="" v-model="data.collection" spellcheck="false">
</p>
<p class="item">
<span>数据库名</span>:
<input type="text" name="" v-model="data.dbName" spellcheck="false">
</p>
<p class="item">
<span>渠道信息</span>:
<!-- <input type="text" name="" v-model="data.pt" spellcheck="false"> -->
<select class="" name="" v-model="data.pt">
<option :value="n" v-for="n,i in channelMsgData">{{ n }}</option>
</select>
</p>
<!-- <p class="item">
<span>数据库表id</span>:
<input type="text" name="" v-model="data.dbId" spellcheck="false">
</p> -->
</div>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">放弃</button>
</div>
</div>
</template>
<script>
import { bus, requestInsertFields } from '@/vuex/request.js'
export default {
data () {
return {
fieldInput: '',
data: {
fieldSize: '',
field: [],
collection: '',
dbName: '',
pt: ''
// dbId: ''
},
toggle: {
fieldList: false
}
}
},
props: ['channelMsgData'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.fieldAddVue.pop-up')
})
},
methods: {
delField (index) {
this.data.field.splice(index, 1)
setTimeout(() => {
this.toggle.fieldList = true
}, 100)
},
AddFieldList () {
if (this.fieldInput === '') {
bus.$emit('alert', '字段值中有空字段!')
return false
}
if (/,/g.test(this.fieldInput)) {
bus.$emit('alert', '字段值中不能有逗号(,)')
return false
}
for (let i = 0; i < this.data.field.length; i++) {
if (this.data.field[i] === this.fieldInput) {
bus.$emit('alert', '字段值有重复项!')
return false
}
}
this.data.field.push(this.fieldInput)
this.fieldInput = ''
},
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.fieldAddVue.pop-up')
setTimeout(() => {
this.$emit('close')
}, 500)
})
},
submit () {
let params = {}
for (let n in this.data) {
params[n] = this.data[n]
}
let flag = true
for (let n in params) {
if (params[n] === '') {
flag = false
break
}
}
if (!flag) {
bus.$emit('alert', '存在未填写项!')
return false
}
if (this.data.fieldSize.toString().search(/[^\d]/g) !== -1) {
bus.$emit('alert', '字段数量必须为数字')
return false
}
// for (let i = 0; i < params.field.length - 1; i++) {
// for (let j = i + 1; j < params.field.length; j++) {
// if (params.field[i] === '' || params.field[j] === '') {
// bus.$emit('alert', '字段值中有空字段!')
// return false
// }
// if (/,/g.test(params.field[i]) || /,/g.test(params.field[j])) {
// bus.$emit('alert', '字段值中不能有逗号(,)')
// return false
// }
// if (params.field[i] === params.field[j]) {
// bus.$emit('alert', '字段值有重复项!')
// return false
// }
// }
// }
params.field = params.field.join(',')
requestInsertFields(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
},
watch: {
'toggle.fieldList' (val, oldVal) {
if (val) {
this.fieldInput = ''
} else {
this.fieldInput = this.data.field.join(',')
}
}
}
}
</script>
<style lang="scss" scoped>
.fieldAddVue{
.main{
.list{
// overflow: hidden;
&:after{
display: block;
content: "";
clear: both;
}
.item{
width: 50%;
float: left;
margin-bottom: 20px;
position: relative;
span{
display: inline-block;
width: 100px;
}
input, select{
width: 200px;
height: 31px;
background-color: #2F363E;
border: 1px solid #505A64;
background-image: none;
}
.fieldList{
width: 200px;
position: absolute;
left: 107.5px;
top: 30px;
background-color: #2F363E;
border: 1px solid #505A64;
z-index: 1;
li{
padding: 3px 6px;
i{
display: inline-block;
cursor: pointer;
float: right;
}
&:nth-of-type(n+2){
border-top: 1px solid #505A64;
}
&.empty{
text-align: center;
}
}
}
}
}
.handle{
line-height: 100px;
padding-left: 50px;
label.checkbox input[type=checkbox]+span{
background-color: #262B31;
box-shadow: 0 0 0 1px #262B31;
margin-right: 10px;
}
}
}
}
</style>
<template lang="html">
<div class="fieldDeleteVue pop-up">
<div class="title">
删除字段表
<i class="close" @click="close()"></i>
</div>
<div class="main">
<p>是否确认删除以下{{ checkedField.length }}个字段表?</p>
<ul>
<li class="lengthLimit" v-for="n,i in checkedField">{{ n.dbName }} -> {{ n.collection }}</li>
</ul>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">返回</button>
</div>
</div>
</template>
<script>
import { bus, requestDeleteFields } from '@/vuex/request.js'
export default {
data () {
return {
}
},
props: ['checkedField'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.fieldDeleteVue.pop-up')
})
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.fieldDeleteVue.pop-up')
setTimeout(() => {
window.$('#generationTime').DatePickerClear()
this.$emit('close')
}, 500)
})
},
submit () {
let params = {
id: this.checkedField.map((n, i) => {
return n.id
})
}
requestDeleteFields(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('clear-checkbox')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.fieldDeleteVue{
width: 500px;
.main{
p{
font-size: 16px;
margin-bottom: 20px;
}
ul{
padding-left: 20px;
margin-bottom: 50px;
max-height: 150px;
overflow-y: auto;
li{
display: list-item;
list-style-type: circle;
line-height: 1.5;
overflow: visible;
max-width: 400px;
}
}
}
}
</style>
<template lang="html">
<div class="fieldAddVue pop-up" @click="toggle.fieldList = false">
<div class="title">
字段表详情
<i class="close" @click="close()"></i>
</div>
<div class="main">
<div class="list">
<p class="item">
<span>字段数量</span>:
<input type="text" name="" v-model="data.fieldSize" spellcheck="false">
</p>
<p class="item">
<span>字段值</span>:
<input type="text" name="" v-model="fieldInput" spellcheck="false" @click.stop="toggle.fieldList = true" @keydown.enter="AddFieldList()">
<ul class="fieldList" v-show="toggle.fieldList">
<li v-if="data.field.length" v-for="n,i in data.field"><span>{{ n }}</span><i @click.stop="delField(i)">✖</i></li>
<li v-if="!data.field.length" class="empty">Empty...</li>
</ul>
</p>
<p class="item">
<span>表名</span>:
<input type="text" name="" v-model="data.collection" spellcheck="false">
</p>
<p class="item">
<span>数据库名</span>:
<input type="text" name="" v-model="data.dbName" spellcheck="false">
</p>
<p class="item">
<span>渠道信息</span>:
<!-- <input type="text" name="" v-model="data.pt" spellcheck="false"> -->
<select class="" name="" v-model="data.pt">
<option :value="n" v-for="n,i in channelMsgData">{{ n }}</option>
</select>
</p>
<!-- <p class="item">
<span>数据库表id</span>:
<input type="text" name="" v-model="data.dbId" spellcheck="false">
</p> -->
</div>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">放弃</button>
</div>
</div>
</template>
<script>
import { bus, requestUpdateFields } from '@/vuex/request.js'
export default {
data () {
return {
fieldInput: '',
data: {
fieldSize: '',
field: [],
collection: '',
dbName: '',
pt: ''
// dbId: ''
},
toggle: {
fieldList: false
}
}
},
props: ['childrenData', 'channelMsgData'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.fieldAddVue.pop-up')
})
// init
this.fieldInput = this.childrenData.field
for (let n in this.data) {
if (n === 'field') {
this.data.field = this.childrenData.field.split(',')
} else {
this.data[n] = this.childrenData[n]
}
}
},
methods: {
delField (index) {
this.data.field.splice(index, 1)
setTimeout(() => {
this.toggle.fieldList = true
}, 100)
},
AddFieldList () {
if (this.fieldInput === '') {
bus.$emit('alert', '字段值中有空字段!')
return false
}
if (/,/g.test(this.fieldInput)) {
bus.$emit('alert', '字段值中不能有逗号(,)')
return false
}
for (let i = 0; i < this.data.field.length; i++) {
if (this.data.field[i] === this.fieldInput) {
bus.$emit('alert', '字段值有重复项!')
return false
}
}
this.data.field.push(this.fieldInput)
this.fieldInput = ''
},
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.fieldAddVue.pop-up')
setTimeout(() => {
this.$emit('close')
}, 500)
})
},
submit () {
let params = {}
for (let n in this.data) {
params[n] = this.data[n]
}
let flag = true
for (let n in params) {
if (params[n] === '') {
flag = false
break
}
}
if (!flag) {
bus.$emit('alert', '存在未填写项!')
return false
}
if (this.data.fieldSize.toString().search(/[^\d]/g) !== -1) {
bus.$emit('alert', '字段数量必须为数字')
return false
}
// for (let i = 0; i < params.field.length - 1; i++) {
// for (let j = i + 1; j < params.field.length; j++) {
// if (params.field[i] === '' || params.field[j] === '') {
// bus.$emit('alert', '字段值中有空字段!')
// return false
// }
// if (/,/g.test(params.field[i]) || /,/g.test(params.field[j])) {
// bus.$emit('alert', '字段值中不能有逗号(,)')
// return false
// }
// if (params.field[i] === params.field[j]) {
// bus.$emit('alert', '字段值有重复项!')
// return false
// }
// }
// }
params.field = params.field.join(',')
params.id = this.childrenData.id
requestUpdateFields(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
},
watch: {
'toggle.fieldList' (val, oldVal) {
if (val) {
this.fieldInput = ''
} else {
this.fieldInput = this.data.field.join(',')
}
}
}
}
</script>
<style lang="scss" scoped>
.fieldAddVue{
.main{
.list{
// overflow: hidden;
&:after{
display: block;
content: "";
clear: both;
}
.item{
width: 50%;
float: left;
margin-bottom: 20px;
position: relative;
span{
display: inline-block;
width: 100px;
}
input, select{
width: 200px;
height: 31px;
background-color: #2F363E;
border: 1px solid #505A64;
background-image: none;
}
.fieldList{
width: 200px;
position: absolute;
left: 107.5px;
top: 30px;
background-color: #2F363E;
border: 1px solid #505A64;
z-index: 1;
li{
padding: 3px 6px;
i{
display: inline-block;
cursor: pointer;
float: right;
}
&:nth-of-type(n+2){
border-top: 1px solid #505A64;
}
&.empty{
text-align: center;
}
}
}
}
}
.handle{
line-height: 100px;
padding-left: 50px;
label.checkbox input[type=checkbox]+span{
background-color: #262B31;
box-shadow: 0 0 0 1px #262B31;
margin-right: 10px;
}
}
}
}
</style>
<template lang="html">
<div class="channelSelectVue pop-up">
<div class="title">
字段选择
<i class="close" @click="close()"></i>
</div>
<div class="main">
<div class="list">
<p class="item" v-for="n,i in fieldList">
<span>第{{ i + 1 }}个</span>:
<select class="" name="" v-model="fieldList[i]">
<option :value="n" v-for="n,i in allFields">{{ n }}</option>
</select>
<i v-if="fieldList.length > 1" @click="fieldList.splice(i, 1)">✖</i>
<i v-if="i === fieldList.length - 1 && fieldList.length < 4" @click="fieldList.push('')">➕</i>
</p>
</div>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">放弃</button>
</div>
</div>
</template>
<script>
import { bus } from '@/vuex/request.js'
export default {
data () {
return {
fieldList: ['']
}
},
props: ['field', 'allFields'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.channelSelectVue.pop-up')
})
// init
this.fieldList = []
this.field.forEach((n, i) => {
this.fieldList[i] = n
})
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.channelSelectVue.pop-up')
setTimeout(() => {
this.$emit('close')
}, 500)
})
},
submit () {
if (this.fieldList.some((n, i) => {
return n === ''
})) {
bus.$emit('alert', '存在未填写项')
return false
} else {
// not same
for (let i = 0; i < this.fieldList.length; i++) {
for (let j = 0; j < this.fieldList.length; j++) {
if (i !== j && this.fieldList[i] === this.fieldList[j]) {
bus.$emit('alert', '存在相同项')
return false
}
}
}
this.$emit('change-field-list', this.fieldList)
this.$emit('close')
}
}
}
}
</script>
<style lang="scss" scoped>
.channelSelectVue{
width: 500px;
.main{
.list{
overflow: hidden;
.item{
width: 100%;
margin-bottom: 20px;
line-height: 30px;
span{
display: inline-block;
width: 60px;
}
i{
display: inline-block;
width: 25px;
height: 25px;
line-height: 25px;
text-align: center;
margin-left: 10px;
cursor: pointer;
border-radius: 3px;
transition: all .3s ease;
&:hover{
background-color: #2F363E;
}
}
input, select{
width: 290px;
height: 31px;
background-color: #2F363E;
border: 1px solid #505A64;
background-image: none;
}
}
}
.handle{
line-height: 100px;
padding-left: 50px;
label.checkbox input[type=checkbox]+span{
background-color: #262B31;
box-shadow: 0 0 0 1px #262B31;
margin-right: 10px;
}
}
}
}
</style>
<template lang="html">
<div class="checkInfoDeleteVue pop-up">
<div class="title">
删除处理记录
<i class="close" @click="close()"></i>
</div>
<div class="main">
<p>是否确认删除以下{{ checkedMessage.length }}条记录?</p>
<ul>
<li class="lengthLimit" v-for="n,i in checkedMessage">{{ n.templateName }} ({{ n.errorMsg }})</li>
</ul>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">返回</button>
</div>
</div>
</template>
<script>
import { bus, requestDeleteMsg } from '@/vuex/request.js'
export default {
data () {
return {
}
},
props: ['checkedMessage'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.checkInfoDeleteVue.pop-up')
})
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.checkInfoDeleteVue.pop-up')
setTimeout(() => {
window.$('#generationTime').DatePickerClear()
this.$emit('close')
}, 500)
})
},
submit () {
let params = {
messageId: this.checkedMessage.map((n, i) => {
return n.messageId
})
}
requestDeleteMsg(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('clear-checkbox')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.checkInfoDeleteVue{
width: 500px;
.main{
p{
font-size: 16px;
margin-bottom: 20px;
}
ul{
padding-left: 20px;
margin-bottom: 50px;
max-height: 150px;
overflow-y: auto;
li{
display: list-item;
list-style-type: circle;
line-height: 1.5;
overflow: visible;
max-width: 400px;
}
}
}
}
</style>
<template lang="html">
<div class="checkInfoDetailsVue pop-up">
<div class="title">
检测详情
<i class="close" @click="close()"></i>
</div>
<div class="main">
<div class="list">
<p class="item">
<span>检测模板</span>:
<input type="text" name="" :value="data.templateName" disabled spellcheck="false" placeholder="UC">
</p>
<p class="item">
<span>产生时间</span>:
<input type="text" name="" :value="data.createDate" disabled class="dateInput" placeholder="2017-12-12" id="generationTime" readonly>
</p>
<p class="item big-area">
<span>错误信息</span>:
<!-- <input type="text" name="" :value="data.errorMsg" disabled spellcheck="false" placeholder="连接失败"> -->
<textarea name="name" rows="8" cols="80" :value="data.errorMsg" disabled spellcheck="false" placeholder="连接失败"></textarea>
</p>
<p class="item">
<span>所属级别</span>:
<input type="text" name="" :value="data.templateLv" disabled spellcheck="false" placeholder="1">
</p>
<p class="item">
<span>模板创建人</span>:
<input type="text" name="" :value="data.templateCreator" disabled spellcheck="false" placeholder="沈金柱">
</p>
<p class="item">
<span>是否已处理</span>:
<input type="text" name="" :value="data.handle" disabled spellcheck="false" placeholder="沈金柱">
</p>
<p class="item">
<span>处理人</span>:
<input type="text" name="" :value="data.handler" disabled spellcheck="false" placeholder="沈金柱">
</p>
<p class="item big-area">
<span>处理信息</span>:
<textarea name="name" v-model="data.handleMsg" spellcheck="false" placeholder="无"></textarea>
</p>
<p class="item">
<span>处理时间</span>:
<input type="text" name="" :value="data.handleDate" disabled spellcheck="false" placeholder="沈金柱">
</p>
</div>
<div class="handle" v-show>
<label for="checkInfoDetailsVuePopUpCheckBox" class="checkbox">
<input type="checkbox" name="" v-model="data.handle" id="checkInfoDetailsVuePopUpCheckBox">
<span></span>
已处理
</label>
</div>
</div>
<div class="btns">
<button type="button" class="btn3" @click="close()">确定</button>
<button type="button" class="btn3" @click="close()">返回</button>
</div>
</div>
</template>
<script>
// requestHandle
import { bus } from '@/vuex/request.js'
import moment from 'moment'
export default {
data () {
return {
data: {
messageId: '',
templateName: '',
createDate: '',
errorMsg: '',
templateLv: '',
templateCreator: '',
handle: false,
handler: '',
handleMsg: '',
handleDate: ''
}
}
},
props: ['childrenData'],
mounted () {
// let self = this
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.checkInfoDetailsVue.pop-up')
})
// 初始化
this.data = {
messageId: this.childrenData.messageId,
templateName: this.childrenData.templateName,
createDate: moment(this.childrenData.createDate).format('YYYY-MM-DD HH:mm'),
errorMsg: this.childrenData.errorMsg,
templateLv: this.childrenData.templateLv,
templateCreator: this.childrenData.templateCreator,
handle: this.childrenData.handle,
handler: this.childrenData.handler,
handleMsg: this.childrenData.handleMsg,
handleDate: moment(this.childrenData.handleDate).format('YYYY-MM-DD HH:mm')
}
// 自定义日历插件
// window.$('#generationTime').DatePicker({
// format: 'Y-m-d',
// date: window.$('#generationTime').val(),
// current: window.$('#generationTime').val(),
// starts: 1,
// position: 'bottom',
// onBeforeShow: function () {
// window.$('#generationTime').DatePickerSetDate(window.$('#generationTime').val(), true)
// },
// onChange: function (formated, dates) {
// console.log(formated, dates)
// self.data.handleDate = formated
// window.$('#generationTime').val(formated)
// window.$('#generationTime').DatePickerHide()
// }
// })
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.checkInfoDetailsVue.pop-up')
setTimeout(() => {
window.$('#generationTime').DatePickerClear()
this.$emit('close')
}, 500)
})
}
// submit () {
// let params = {
// messageId: this.childrenData.messageId,
// // templateName: this.childrenData.templateName,
// // handleDate: this.childrenData.handleDate,
// // errorMsg: this.childrenData.errorMsg,
// // templateLv: this.childrenData.templateLv,
// // templateCreator: this.childrenData.templateCreator,
// handle: this.data.handle,
// handler: this.userInfo.username
// }
// requestHandle(params, {}, (response) => {
// if (response.data) {
// if (response.data.state) {
// bus.$emit('alert', response.data.message)
// this.$emit('update')
// this.$emit('close')
// } else {
// bus.$emit('alert', response.data.message)
// }
// } else {
// bus.$emit('alert', response + '.')
// }
// })
// }
}
}
</script>
<style lang="scss" scoped>
.checkInfoDetailsVue{
.main{
padding-bottom: 50px;
.list{
overflow: hidden;
.item{
width: 50%;
float: left;
margin-bottom: 20px;
span{
display: inline-block;
width: 80px;
}
input{
width: 219px;
height: 31px;
background-color: #2F363E;
border: 1px solid #505A64;
}
&.big-area{
width: 100%;
vertical-align: top;
textarea{
min-width: 543px;
max-width: 543px;
min-height: 150px;
max-height: 400px;
background-color: #2F363E;
border: 1px solid #505A64;
padding: 6px;
}
}
}
}
.handle{
line-height: 100px;
padding-left: 50px;
label.checkbox input[type=checkbox]+span{
background-color: #262B31;
box-shadow: 0 0 0 1px #262B31;
margin-right: 10px;
}
}
}
}
</style>
<template lang="html">
<div class="">
</div>
</template>
<script>
export default {
beforeCreate () {
this.$router.go(-1)
}
}
</script>
<style lang="css">
</style>
<template lang="html">
<div class="userAddVue pop-up">
<div class="title">
新建用户
<i class="close" @click="close()"></i>
</div>
<div class="main">
<p>
<span>用户名</span>:
<input type="text" name="" v-model="username" spellcheck="false">
</p>
<p>
<span>密码</span>:
<input type="text" name="" v-model="password" spellcheck="false">
</p>
<p>
<span>等级</span>:
<input type="number" name="" v-model="lv" spellcheck="false">
</p>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">创建</button>
<button type="button" class="btn3" @click="close()">取消</button>
</div>
</div>
</template>
<script>
import { bus, requestSavePerson } from '@/vuex/request.js'
export default {
data () {
return {
username: '',
password: '',
lv: ''
}
},
props: ['userInfo'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.userAddVue.pop-up')
})
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.userAddVue.pop-up')
setTimeout(() => {
this.$emit('close')
}, 500)
})
},
submit () {
if (this.username === '' || this.password === '' || this.lv === '') {
bus.$emit('alert', '存在未填写项!')
return false
}
if (this.lv.search(/[^\d]/g) !== -1) {
bus.$emit('alert', '等级只能为整数!')
return false
}
let params = {
username: this.username,
password: this.password,
lv: this.lv,
creator: this.userInfo.username
}
requestSavePerson(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.userAddVue{
width: 500px;
.main{
padding: 50px 0;
p{
text-align: center;
margin-bottom: 20px;
span{
display: inline-block;
width: 50px;
}
input{
width: 300px;
height: 31px;
background-color: #2F363E;
border: 1px solid #505A64;
background-image: none;
text-align: left;
}
}
}
}
</style>
<template lang="html">
<div class="checkInfoDeleteVue pop-up">
<div class="title">
删除用户
<i class="close" @click="close()"></i>
</div>
<div class="main">
<p>是否确认删除以下{{ checkedUsers.length }}个用户?</p>
<ul>
<li class="lengthLimit" v-for="n,i in checkedUsers">{{ n.username }}</li>
</ul>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认</button>
<button type="button" class="btn3" @click="close()">返回</button>
</div>
</div>
</template>
<script>
import { bus, requestDeletePerson } from '@/vuex/request.js'
export default {
data () {
return {
}
},
props: ['checkedUsers'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.checkInfoDeleteVue.pop-up')
})
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.checkInfoDeleteVue.pop-up')
setTimeout(() => {
window.$('#generationTime').DatePickerClear()
this.$emit('close')
}, 500)
})
},
submit () {
let params = {
personId: this.checkedUsers.map((n, i) => {
return n.personId
})
}
requestDeletePerson(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('clear-checkbox')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.checkInfoDeleteVue{
width: 500px;
.main{
p{
font-size: 16px;
margin-bottom: 20px;
}
ul{
padding-left: 20px;
margin-bottom: 50px;
max-height: 150px;
overflow-y: auto;
li{
display: list-item;
list-style-type: circle;
line-height: 1.5;
overflow: visible;
max-width: 400px;
}
}
}
}
</style>
<template lang="html">
<div class="userAddVue pop-up">
<div class="title">
修改用户
<i class="close" @click="close()"></i>
</div>
<div class="main">
<p>
<span>用户名</span>:
<input type="text" name="" v-model="username" :placeholder="username" spellcheck="false">
</p>
<p>
<span>密码</span>:
<input type="text" name="" v-model="password" :placeholder="password" spellcheck="false">
</p>
<p>
<span>等级</span>:
<input type="number" name="" v-model="lv" :placeholder="lv" spellcheck="false">
</p>
</div>
<div class="btns">
<button type="button" class="btn3" @click="submit()">确认修改</button>
<button type="button" class="btn3" @click="close()">放弃修改</button>
</div>
</div>
</template>
<script>
import { bus, requestUpdatePerson } from '@/vuex/request.js'
export default {
data () {
return {
username: '',
password: '',
lv: ''
}
},
props: ['childrenData'],
mounted () {
// 弹框弹出动画
window.$(() => {
bus.$emit('pop-up-show', '.userAddVue.pop-up')
})
// init
this.username = this.childrenData.username
this.password = this.childrenData.password
this.lv = this.childrenData.lv + ''
},
methods: {
// 关闭弹窗&动画
close () {
window.$(() => {
bus.$emit('pop-up-close', '.userAddVue.pop-up')
setTimeout(() => {
this.$emit('close')
}, 500)
})
},
submit () {
if (this.username === '' || this.password === '' || this.lv === '') {
bus.$emit('alert', '存在未填写项!')
return false
}
if (this.lv.search(/[^\d]/g) !== -1) {
bus.$emit('alert', '等级只能为整数!')
return false
}
let params = {
username: this.username,
password: this.password,
personId: this.childrenData.personId,
lv: this.lv
}
requestUpdatePerson(params, {}, (response) => {
if (response.data) {
if (response.data.state) {
bus.$emit('alert', response.data.message)
this.$emit('update')
this.$emit('close')
} else {
bus.$emit('alert', response.data.message)
}
} else {
bus.$emit('alert', response + '.')
}
})
}
}
}
</script>
<style lang="scss" scoped>
.userAddVue{
width: 500px;
.main{
padding: 50px 0;
p{
text-align: center;
margin-bottom: 20px;
span{
display: inline-block;
width: 50px;
}
input{
width: 300px;
height: 31px;
background-color: #2F363E;
border: 1px solid #505A64;
background-image: none;
text-align: left;
}
}
}
}
</style>
div.datepicker {
position: relative;
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
width: 196px;
height: 147px;
position: absolute;
cursor: default;
top: 0;
left: 0;
display: none;
}
.datepickerContainer {
background: #121212;
position: absolute;
top: 10px;
left: 10px;
}
.datepickerBorderT {
position: absolute;
left: 10px;
top: 0;
right: 10px;
height: 10px;
background: url(../images/datepicker_t.png);
}
.datepickerBorderB {
position: absolute;
left: 10px;
bottom: 0;
right: 10px;
height: 10px;
background: url(../images/datepicker_b.png);
}
.datepickerBorderL {
position: absolute;
left: 0;
bottom: 10px;
top: 10px;
width: 10px;
background: url(../images/datepicker_l.png);
}
.datepickerBorderR {
position: absolute;
right: 0;
bottom: 10px;
top: 10px;
width: 10px;
background: url(../images/datepicker_r.png);
}
.datepickerBorderTL {
position: absolute;
top: 0;
left: 0;
width: 10px;
height: 10px;
background: url(../images/datepicker_tl.png);
}
.datepickerBorderTR {
position: absolute;
top: 0;
right: 0;
width: 10px;
height: 10px;
background: url(../images/datepicker_tr.png);
}
.datepickerBorderBL {
position: absolute;
bottom: 0;
left: 0;
width: 10px;
height: 10px;
background: url(../images/datepicker_bl.png);
}
.datepickerBorderBR {
position: absolute;
bottom: 0;
right: 0;
width: 10px;
height: 10px;
background: url(../images/datepicker_br.png);
}
.datepickerHidden {
display: none;
}
div.datepicker table {
border-collapse:collapse;
}
div.datepicker a {
color: #eee;
text-decoration: none;
cursor: default;
outline: none;
}
div.datepicker table td {
text-align: right;
padding: 0;
margin: 0;
}
div.datepicker th {
text-align: center;
color: #999;
font-weight: normal;
}
div.datepicker tbody th {
text-align: left;
}
div.datepicker tbody a {
display: block;
}
.datepickerDays a {
width: 20px;
line-height: 16px;
height: 16px;
padding-right: 2px;
}
.datepickerYears a,
.datepickerMonths a{
width: 44px;
line-height: 36px;
height: 36px;
text-align: center;
}
td.datepickerNotInMonth a {
color: #666;
}
tbody.datepickerDays td.datepickerSelected{
background: #136A9F;
}
tbody.datepickerDays td.datepickerNotInMonth.datepickerSelected {
background: #17384d;
}
tbody.datepickerYears td.datepickerSelected,
tbody.datepickerMonths td.datepickerSelected{
background: #17384d;
}
div.datepicker a:hover,
div.datepicker a:hover {
color: #88c5eb;
}
div.datepicker td.datepickerNotInMonth a:hover {
color: #999;
}
div.datepicker tbody th {
text-align: left;
}
.datepickerSpace div {
width: 20px;
}
.datepickerGoNext a,
.datepickerGoPrev a,
.datepickerMonth a {
text-align: center;
height: 20px;
line-height: 20px;
}
.datepickerGoNext a {
float: right;
width: 20px;
}
.datepickerGoPrev a {
float: left;
width: 20px;
}
table.datepickerViewDays tbody.datepickerMonths,
table.datepickerViewDays tbody.datepickerYears {
display: none;
}
table.datepickerViewMonths tbody.datepickerDays,
table.datepickerViewMonths tbody.datepickerYears,
table.datepickerViewMonths tr.datepickerDoW {
display: none;
}
table.datepickerViewYears tbody.datepickerDays,
table.datepickerViewYears tbody.datepickerMonths,
table.datepickerViewYears tr.datepickerDoW {
display: none;
}
td.datepickerDisabled a,
td.datepickerDisabled.datepickerNotInMonth a{
color: #333;
}
td.datepickerDisabled a:hover {
color: #333;
}
td.datepickerSpecial a {
background: #700;
}
td.datepickerSpecial.datepickerSelected a {
background: #a00;
}
\ No newline at end of file
.datepickerContainer{
background-color: #2F363E;
/*border: 1px solid #505A64;*/
}
.datepicker>div[class*=datepickerBorder]{
background-image: none;
background-color: #2F363E;
}
.datepickerBorderT{
border-top: 1px solid #505a64;
}
.datepickerBorderB{
border-bottom: 1px solid #505a64;
}
.datepickerBorderL{
border-left: 1px solid #505a64;
}
.datepickerBorderR{
border-right: 1px solid #505a64;
}
.datepickerBorderTL{
border-top: 1px solid #505a64;
border-left: 1px solid #505a64;
}
.datepickerBorderTR{
border-top: 1px solid #505a64;
border-right: 1px solid #505a64;
}
.datepickerBorderBL{
border-bottom: 1px solid #505a64;
border-left: 1px solid #505a64;
}
.datepickerBorderBR{
border-bottom: 1px solid #505a64;
border-right: 1px solid #505a64;
}
/*body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td {
margin:0;
padding:0;
}
table {
border-collapse:collapse;
border-spacing:0;
}
fieldset,img {
border:0;
}
address,caption,cite,code,dfn,em,strong,th,var {
font-style:normal;
font-weight:normal;
}
ol,ul {
list-style:none;
}
caption,th {
text-align:left;
}
h1,h2,h3,h4,h5,h6 {
font-size:100%;
font-weight:normal;
}
q:before,q:after {
content:'';
}
abbr,acronym { border:0;
}
html, body {
background-color: #fff;
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
line-height: 18px;
color: #52697E;
}
body {
text-align: center;
overflow: auto;
}
.wrapper {
width: 700px;
margin: 0 auto;
text-align: left;
}
h1 {
font-size: 21px;
height: 47px;
line-height: 47px;
text-transform: uppercase;
}
.navigationTabs {
height: 23px;
line-height: 23px;
border-bottom: 1px solid #ccc;
}
.navigationTabs li {
float: left;
height: 23px;
line-height: 23px;
padding-right: 3px;
}
.navigationTabs li a{
float: left;
dispaly: block;
height: 23px;
line-height: 23px;
padding: 0 10px;
overflow: hidden;
color: #52697E;
background-color: #eee;
position: relative;
text-decoration: none;
}
.navigationTabs li a:hover {
background-color: #f0f0f0;
}
.navigationTabs li a.active {
background-color: #fff;
border: 1px solid #ccc;
border-bottom: 0px solid;
}
.tabsContent {
border: 1px solid #ccc;
border-top: 0px solid;
width: 698px;
overflow: hidden;
}
.tab {
padding: 16px;
display: none;
}
.tab h2 {
font-weight: bold;
font-size: 16px;
}
.tab h3 {
font-weight: bold;
font-size: 14px;
margin-top: 20px;
}
.tab p {
margin-top: 16px;
clear: both;
}
.tab ul {
margin-top: 16px;
list-style: disc;
}
.tab li {
margin: 10px 0 0 35px;
}
.tab a {
color: #8FB0CF;
}
.tab strong {
font-weight: bold;
}
.tab pre {
font-size: 11px;
margin-top: 20px;
width: 668px;
overflow: auto;
clear: both;
}
.tab table {
width: 100%;
}
.tab table td {
padding: 6px 10px 6px 0;
vertical-align: top;
}
.tab dt {
margin-top: 16px;
}
#colorSelector {
position: relative;
width: 36px;
height: 36px;
background: url(../images/select.png);
}
#colorSelector div {
position: absolute;
top: 3px;
left: 3px;
width: 30px;
height: 30px;
background: url(../images/select.png) center;
}
#colorSelector2 {
position: absolute;
top: 0;
left: 0;
width: 36px;
height: 36px;
background: url(../images/select2.png);
}
#colorSelector2 div {
position: absolute;
top: 4px;
left: 4px;
width: 28px;
height: 28px;
background: url(../images/select2.png) center;
}
#colorpickerHolder2 {
top: 32px;
left: 0;
width: 356px;
height: 0;
overflow: hidden;
position: absolute;
}
#colorpickerHolder2 .colorpicker {
background-image: url(../images/custom_background.png);
position: absolute;
bottom: 0;
left: 0;
}
#colorpickerHolder2 .colorpicker_hue div {
background-image: url(../images/custom_indic.gif);
}
#colorpickerHolder2 .colorpicker_hex {
background-image: url(../images/custom_hex.png);
}
#colorpickerHolder2 .colorpicker_rgb_r {
background-image: url(../images/custom_rgb_r.png);
}
#colorpickerHolder2 .colorpicker_rgb_g {
background-image: url(../images/custom_rgb_g.png);
}
#colorpickerHolder2 .colorpicker_rgb_b {
background-image: url(../images/custom_rgb_b.png);
}
#colorpickerHolder2 .colorpicker_hsb_s {
background-image: url(../images/custom_hsb_s.png);
display: none;
}
#colorpickerHolder2 .colorpicker_hsb_h {
background-image: url(../images/custom_hsb_h.png);
display: none;
}
#colorpickerHolder2 .colorpicker_hsb_b {
background-image: url(../images/custom_hsb_b.png);
display: none;
}
#colorpickerHolder2 .colorpicker_submit {
background-image: url(../images/custom_submit.png);
}
#colorpickerHolder2 .colorpicker input {
color: #778398;
}
#customWidget {
position: relative;
height: 36px;
}
input.inputDate {
border: 1px solid #999;
padding: 4px;
border-bottom-color: #ddd;
border-right-color: #ddd;
width: 65px;
}
#widget {
position: relative;
}
#widgetField {
width: 290px;
height: 26px;
background: url(../images/field.png);
overflow: hidden;
position: relative;
}
#widgetField a {
display: block;
position: absolute;
width: 26px;
height: 26px;
top: 0;
right: 0;
text-decoration: none;
text-indent: -3000px;
}
#widgetField span {
font-size: 12px;
font-weight: bold;
color: #000;
position: absolute;
top: 0;
height: 26px;
line-height: 26px;
left: 5px;
width: 250px;
text-align: center;
}
#widgetCalendar {
position: absolute;
top: 26px;
left: 0;
height: 0px;
overflow: hidden;
width: 588px;
background: #B9B9B9;
}
#widgetCalendar .datepicker {
position: absolute;
bottom: 0;
top: auto;
}
#widgetCalendar .datepickerContainer,
#widgetCalendar .datepickerBorderT,
#widgetCalendar .datepickerBorderB,
#widgetCalendar .datepickerBorderL,
#widgetCalendar .datepickerBorderR,
#widgetCalendar .datepickerBorderTL,
#widgetCalendar .datepickerBorderTR,
#widgetCalendar .datepickerBorderBL,
#widgetCalendar .datepickerBorderBR {
background: transparent !important;
}
#widgetCalendar .datepicker a:hover{
color: #b6f063;
}*/
/**
*
* Zoomimage
* Author: Stefan Petre www.eyecon.ro
*
*/
(function($){
var EYE = window.EYE = function() {
var _registered = {
init: []
};
return {
init: function() {
$.each(_registered.init, function(nr, fn){
fn.call();
});
},
extend: function(prop) {
for (var i in prop) {
if (prop[i] != undefined) {
this[i] = prop[i];
}
}
},
register: function(fn, type) {
if (!_registered[type]) {
_registered[type] = [];
}
_registered[type].push(fn);
}
};
}();
$(EYE.init);
})(jQuery);
This source diff could not be displayed because it is too large. You can view the blob instead.
(function($){
var initLayout = function() {
var hash = window.location.hash.replace('#', '');
var currentTab = $('ul.navigationTabs a')
.bind('click', showTab)
// .filter('a[rel=' + hash + ']');
if (currentTab.size() == 0) {
currentTab = $('ul.navigationTabs a:first');
}
showTab.apply(currentTab.get(0));
$('#date').DatePicker({
flat: true,
date: '2008-07-31',
current: '2008-07-31',
calendars: 1,
starts: 1,
view: 'years'
});
var now = new Date();
now.addDays(-10);
var now2 = new Date();
now2.addDays(-5);
now2.setHours(0,0,0,0);
$('#date2').DatePicker({
flat: true,
date: ['2008-07-31', '2008-07-28'],
current: '2008-07-31',
format: 'Y-m-d',
calendars: 1,
mode: 'multiple',
onRender: function(date) {
return {
disabled: (date.valueOf() < now.valueOf()),
className: date.valueOf() == now2.valueOf() ? 'datepickerSpecial' : false
}
},
onChange: function(formated, dates) {
},
starts: 0
});
$('#clearSelection').bind('click', function(){
$('#date3').DatePickerClear();
return false;
});
$('#date3').DatePicker({
flat: true,
date: ['2009-12-28','2010-01-23'],
current: '2010-01-01',
calendars: 3,
mode: 'range',
starts: 1
});
$('.inputDate').DatePicker({
format:'m/d/Y',
date: $('#inputDate').val(),
current: $('#inputDate').val(),
starts: 1,
position: 'right',
onBeforeShow: function(){
$('#inputDate').DatePickerSetDate($('#inputDate').val(), true);
},
onChange: function(formated, dates){
$('#inputDate').val(formated);
if ($('#closeOnSelect input').attr('checked')) {
$('#inputDate').DatePickerHide();
}
}
});
var now3 = new Date();
now3.addDays(-4);
var now4 = new Date()
$('#widgetCalendar').DatePicker({
flat: true,
format: 'd B, Y',
date: [new Date(now3), new Date(now4)],
calendars: 3,
mode: 'range',
starts: 1,
onChange: function(formated) {
$('#widgetField span').get(0).innerHTML = formated.join(' &divide; ');
}
});
var state = false;
$('#widgetField>a').bind('click', function(){
$('#widgetCalendar').stop().animate({height: state ? 0 : $('#widgetCalendar div.datepicker').get(0).offsetHeight}, 500);
state = !state;
return false;
});
$('#widgetCalendar div.datepicker').css('position', 'absolute');
};
var showTab = function(e) {
var tabIndex = $('ul.navigationTabs a')
.removeClass('active')
.index(this);
$(this)
.addClass('active')
.blur();
$('div.tab')
.hide()
.eq(tabIndex)
.show();
};
EYE.register(initLayout, 'init');
})(jQuery)
\ No newline at end of file
/**
*
* Utilities
* Author: Stefan Petre www.eyecon.ro
*
*/
(function($) {
EYE.extend({
getPosition : function(e, forceIt)
{
var x = 0;
var y = 0;
var es = e.style;
var restoreStyles = false;
if (forceIt && jQuery.curCSS(e,'display') == 'none') {
var oldVisibility = es.visibility;
var oldPosition = es.position;
restoreStyles = true;
es.visibility = 'hidden';
es.display = 'block';
es.position = 'absolute';
}
var el = e;
if (el.getBoundingClientRect) { // IE
var box = el.getBoundingClientRect();
x = box.left + Math.max(document.documentElement.scrollLeft, document.body.scrollLeft) - 2;
y = box.top + Math.max(document.documentElement.scrollTop, document.body.scrollTop) - 2;
} else {
x = el.offsetLeft;
y = el.offsetTop;
el = el.offsetParent;
if (e != el) {
while (el) {
x += el.offsetLeft;
y += el.offsetTop;
el = el.offsetParent;
}
}
if (jQuery.browser.safari && jQuery.curCSS(e, 'position') == 'absolute' ) {
x -= document.body.offsetLeft;
y -= document.body.offsetTop;
}
el = e.parentNode;
while (el && el.tagName.toUpperCase() != 'BODY' && el.tagName.toUpperCase() != 'HTML')
{
if (jQuery.curCSS(el, 'display') != 'inline') {
x -= el.scrollLeft;
y -= el.scrollTop;
}
el = el.parentNode;
}
}
if (restoreStyles == true) {
es.display = 'none';
es.position = oldPosition;
es.visibility = oldVisibility;
}
return {x:x, y:y};
},
getSize : function(e)
{
var w = parseInt(jQuery.curCSS(e,'width'), 10);
var h = parseInt(jQuery.curCSS(e,'height'), 10);
var wb = 0;
var hb = 0;
if (jQuery.curCSS(e, 'display') != 'none') {
wb = e.offsetWidth;
hb = e.offsetHeight;
} else {
var es = e.style;
var oldVisibility = es.visibility;
var oldPosition = es.position;
es.visibility = 'hidden';
es.display = 'block';
es.position = 'absolute';
wb = e.offsetWidth;
hb = e.offsetHeight;
es.display = 'none';
es.position = oldPosition;
es.visibility = oldVisibility;
}
return {w:w, h:h, wb:wb, hb:hb};
},
getClient : function(e)
{
var h, w;
if (e) {
w = e.clientWidth;
h = e.clientHeight;
} else {
var de = document.documentElement;
w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight;
}
return {w:w,h:h};
},
getScroll : function (e)
{
var t=0, l=0, w=0, h=0, iw=0, ih=0;
if (e && e.nodeName.toLowerCase() != 'body') {
t = e.scrollTop;
l = e.scrollLeft;
w = e.scrollWidth;
h = e.scrollHeight;
} else {
if (document.documentElement) {
t = document.documentElement.scrollTop;
l = document.documentElement.scrollLeft;
w = document.documentElement.scrollWidth;
h = document.documentElement.scrollHeight;
} else if (document.body) {
t = document.body.scrollTop;
l = document.body.scrollLeft;
w = document.body.scrollWidth;
h = document.body.scrollHeight;
}
if (typeof pageYOffset != 'undefined') {
t = pageYOffset;
l = pageXOffset;
}
iw = self.innerWidth||document.documentElement.clientWidth||document.body.clientWidth||0;
ih = self.innerHeight||document.documentElement.clientHeight||document.body.clientHeight||0;
}
return { t: t, l: l, w: w, h: h, iw: iw, ih: ih };
},
getMargins : function(e, toInteger)
{
var t = jQuery.curCSS(e,'marginTop') || '';
var r = jQuery.curCSS(e,'marginRight') || '';
var b = jQuery.curCSS(e,'marginBottom') || '';
var l = jQuery.curCSS(e,'marginLeft') || '';
if (toInteger)
return {
t: parseInt(t, 10)||0,
r: parseInt(r, 10)||0,
b: parseInt(b, 10)||0,
l: parseInt(l, 10)
};
else
return {t: t, r: r, b: b, l: l};
},
getPadding : function(e, toInteger)
{
var t = jQuery.curCSS(e,'paddingTop') || '';
var r = jQuery.curCSS(e,'paddingRight') || '';
var b = jQuery.curCSS(e,'paddingBottom') || '';
var l = jQuery.curCSS(e,'paddingLeft') || '';
if (toInteger)
return {
t: parseInt(t, 10)||0,
r: parseInt(r, 10)||0,
b: parseInt(b, 10)||0,
l: parseInt(l, 10)
};
else
return {t: t, r: r, b: b, l: l};
},
getBorder : function(e, toInteger)
{
var t = jQuery.curCSS(e,'borderTopWidth') || '';
var r = jQuery.curCSS(e,'borderRightWidth') || '';
var b = jQuery.curCSS(e,'borderBottomWidth') || '';
var l = jQuery.curCSS(e,'borderLeftWidth') || '';
if (toInteger)
return {
t: parseInt(t, 10)||0,
r: parseInt(r, 10)||0,
b: parseInt(b, 10)||0,
l: parseInt(l, 10)||0
};
else
return {t: t, r: r, b: b, l: l};
},
traverseDOM : function(nodeEl, func)
{
func(nodeEl);
nodeEl = nodeEl.firstChild;
while(nodeEl){
EYE.traverseDOM(nodeEl, func);
nodeEl = nodeEl.nextSibling;
}
},
getInnerWidth : function(el, scroll) {
var offsetW = el.offsetWidth;
return scroll ? Math.max(el.scrollWidth,offsetW) - offsetW + el.clientWidth:el.clientWidth;
},
getInnerHeight : function(el, scroll) {
var offsetH = el.offsetHeight;
return scroll ? Math.max(el.scrollHeight,offsetH) - offsetH + el.clientHeight:el.clientHeight;
},
getExtraWidth : function(el) {
if($.boxModel)
return (parseInt($.curCSS(el, 'paddingLeft'))||0)
+ (parseInt($.curCSS(el, 'paddingRight'))||0)
+ (parseInt($.curCSS(el, 'borderLeftWidth'))||0)
+ (parseInt($.curCSS(el, 'borderRightWidth'))||0);
return 0;
},
getExtraHeight : function(el) {
if($.boxModel)
return (parseInt($.curCSS(el, 'paddingTop'))||0)
+ (parseInt($.curCSS(el, 'paddingBottom'))||0)
+ (parseInt($.curCSS(el, 'borderTopWidth'))||0)
+ (parseInt($.curCSS(el, 'borderBottomWidth'))||0);
return 0;
},
isChildOf: function(parentEl, el, container) {
if (parentEl == el) {
return true;
}
if (!el || !el.nodeType || el.nodeType != 1) {
return false;
}
if (parentEl.contains && !$.browser.safari) {
return parentEl.contains(el);
}
if ( parentEl.compareDocumentPosition ) {
return !!(parentEl.compareDocumentPosition(el) & 16);
}
var prEl = el.parentNode;
while(prEl && prEl != container) {
if (prEl == parentEl)
return true;
prEl = prEl.parentNode;
}
return false;
},
centerEl : function(el, axis)
{
var clientScroll = EYE.getScroll();
var size = EYE.getSize(el);
if (!axis || axis == 'vertically')
$(el).css(
{
top: clientScroll.t + ((Math.min(clientScroll.h,clientScroll.ih) - size.hb)/2) + 'px'
}
);
if (!axis || axis == 'horizontally')
$(el).css(
{
left: clientScroll.l + ((Math.min(clientScroll.w,clientScroll.iw) - size.wb)/2) + 'px'
}
);
}
});
if (!$.easing.easeout) {
$.easing.easeout = function(p, n, firstNum, delta, duration) {
return -delta * ((n=n/duration-1)*n*n*n - 1) + firstNum;
};
}
})(jQuery);
\ No newline at end of file
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