修改了主页工作台常用功能的显示内容

This commit is contained in:
panpp 2020-06-23 17:01:20 +08:00
parent a866cd3736
commit 7d09d3733b
83 changed files with 5203 additions and 118 deletions

View File

@ -0,0 +1,796 @@
<!-- 主页 -->
<!DOCTYPE html>
<html>
<head>
<title>造价管理系统</title>
<#include '/include/head-file.ftl'/>
<script src="${base}/static/plugins/sockjs/1.4.0/sockjs.min.js"></script>
<script src="${base}/static/plugins/stomp/2.3.3/stomp.min.js"></script>
<style>
.to-ele {
font-size: 18px;
margin: -2px 9px 0px 3px
}
</style>
</head>
<body>
<#include "/reset-password.ftl"/>
<#include "/exit-system.ftl"/>
<div id="app" class="index" :class="theme">
<el-container>
<!--左侧菜单-->
<el-aside class="ms-admin-menu-aside" v-cloak>
<el-scrollbar style="height:100%">
<el-menu :default-active="asideMenuActive" class="el-menu-vertical-demo"
text-color="rgba(255,255,255,1)" active-text-color="rgba(255,255,255,1)"
:collapse="collapseMenu" :unique-opened='true' ref='menu' @open="asideMenuOpen">
<div class="ms-admin-logo" :style="{display: 'flex','padding-left': (collapseMenu?'5px':'22px')}">
<img :src="ms.base+'/static/ms-admin/5.0.0/images/logo.png'"/>
<div class="class-1" v-show="!collapseMenu">
<div class="class-2">v</div>
2.0
</div>
</div>
<el-submenu :popper-class="['ms-admin-menu-aside-submenu',theme]" :index="menu.modelId+''"
:data-index="menu.modelId+''" v-for="(menu,i) in asideMenuList" :key='i'>
<template slot="title">
<i class='ms-admin-icon iconfont' :class="menu.modelIcon"></i>
<span>{{menu.modelTitle}}</span>
</template>
<!-- 子菜单 -->
<el-menu-item :index="sub.modelId+''" :data-index="sub.modelId"
v-for="(sub,index) in getSubMenu(menu.modelId)"
:key='sub.modelModelId' v-text="sub.modelTitle"
@click.self='open(sub)'></el-menu-item>
</el-submenu>
<!-- 收缩按钮 -->
</el-menu>
</el-scrollbar>
</el-aside>
<#--右侧内容-->
<el-container class="ms-admin-container" v-cloak>
<!--头部-->
<el-header class="ms-admin-header" v-cloak>
<#--展示合并菜单-->
<div class="ms-admin-header-menu-shrink" @click="collapseMenu = !collapseMenu">
<i class="iconfont" :class="collapseMenu?'icon-liebiaoxiangyou':'icon-shousuo'"></i>
</div>
<!--头部menu-->
<el-menu menu-trigger="hover" class="ms-admin-header-menu" background-color="rgba(255,255,255,1)"
text-color="#333333" active-text-color="#409EFF" :default-active="headMenuActive"
mode="horizontal">
<el-submenu style="height: 100%;">
<template slot="title">
<i class="iconfont icon-gezi" style="font-size: 17px"></i>
<span>功能大全</span>
</template>
<div class="ms-admin-header-menu-all">
<li class="ms-admin-header-menu-all-item" v-for="(item,index) of parentMenuList"
:key='index' @click='openMenu(item,index)'>
<i class="iconfont" :class="item.modelIcon" style="padding-right: 4px"></i>
<div style="width:80px">{{item.modelTitle}}</div>
<div style="float: right;width: 18px;">
<template>
<i v-if="markList.find(function(x) {
return x.title == item.modelTitle
})!=undefined" @click="cancelMarkMenu(item.modelTitle)"
class='el-icon-star-on'></i>
<i v-else class='el-icon-star-off '
@click="markMenu(item.modelTitle,item.modelIcon)"></i>
</template>
</div>
</li>
</div>
</el-submenu>
</el-menu>
<!--头部右侧-->
<div class="ms-admin-mstore">
<div class="ms-admin-mstore-menu-icon" style="padding-left:20px " @click="handleMessage">
<el-badge :value="unreadTotal>0?unreadTotal:null" type="danger" class="item" style="z-index: 1">
<i class="iconfont icon-lingdang" style="color: #909399;"></i>
</el-badge>
</div>
<el-menu menu-trigger="hover" class="ms-admin-header-menu" background-color="rgba(255,255,255,1)"
text-color="#333333" active-text-color="#409EFF"
mode="horizontal">
<el-submenu style="height: 100%;" popper-class="theme-select">
<template slot="title">
<i class="iconfont icon-pifu" style="font-size: 18px"></i>
</template>
<el-menu-item @click="handleCommand('ms-theme-light')"
style="display: flex;align-items: center">
<div style="height: 18px;width: 18px;background-color: rgba(64,158,255,1);margin-right: 7px;border-radius: 2px;"></div>
<span>浅色系</span>
</el-menu-item>
<el-menu-item @click="handleCommand('ms-theme-dark')"
style="display: flex;align-items: center">
<div style="height: 18px;width: 18px;background-color: rgba(56,58,63,1);margin-right: 7px;border-radius: 2px;"></div>
<span>深色系</span>
</el-menu-item>
</el-submenu>
</el-menu>
<#-- <el-dropdown trigger="hover" class="ms-admin-login" placement="top-start"
@visible-change="loginDown = !loginDown">
<span class="el-dropdown-link">
<div class="ms-admin-people-head"
v-text="peopleInfo.managerNickName && peopleInfo.managerNickName.substr(0, 1)"></div>
<span v-text='peopleInfo.managerNickName'></span>
</span>
<el-dropdown-menu class="ms-admin-login-down" slot="dropdown">
<el-dropdown-item icon="iconfont icon-suo" @click.native='openModal(true)'>修改密码
</el-dropdown-item>
<el-dropdown-item icon="iconfont icon-tuichu1" @click.native='openModal(false)'>退出
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>-->
<el-menu menu-trigger="hover" class="ms-admin-header-menu" background-color="rgba(255,255,255,1)"
text-color="#333333" active-text-color="#409EFF"
mode="horizontal">
<el-submenu style="height: 100%;" popper-class="top-operate-select">
<template slot="title">
<span class="el-dropdown-link" style="display:flex;align-items: center;float: left">
<div class="ms-admin-people-head adminhead"
v-text="peopleInfo.managerNickName && peopleInfo.managerNickName.substr(0, 1)"></div>
<span v-text='peopleInfo.managerNickName'></span>
</span>
</template>
<el-menu-item @click="openModal(true)" style="display: flex;align-items: center">
<i class="iconfont icon-suo to-ele"></i>
<span>修改密码</span>
</el-menu-item>
<#-- <el-menu-item @click="subscribe" style="display: flex;align-items: center">-->
<#-- <i class="iconfont icon-erweimadenglu to-ele"></i>-->
<#-- <span>微信绑定</span>-->
<#-- </el-menu-item>-->
<el-menu-item @click="openModal(false)" style="display: flex;align-items: center">
<i class="iconfont icon-tuichu1 to-ele"></i>
<span>退出</span>
</el-menu-item>
</el-submenu>
</el-menu>
<#-- <!--mstore按钮&ndash;&gt;
<div class="ms-admin-mstore-icon" @click="open(mstore)">
<span v-if="mstore.syncNum>0" v-text="mstore.syncNum"></span>
<i style="line-height: 42px !important;font-size: 30px;" class="iconfont icon-fenxiang2"></i>
</div>-->
</div>
</el-header>
<!--内容-->
<el-main class="ms-admin-main" >
<!--选项卡-->
<el-tabs class="ms-admin-tabs" v-model="currentTab" type="card" closable @tab-remove="closeTab"
@tab-click='tabClick'>
<el-tab-pane v-for="(item, index) in editableTabs" :key="index" :label="item.modelTitle"
:name="item.modelTitle"
:data-modelId='item.modelId' :data-modelModelId='item.modelModelId'>
<keep-alive>
<iframe :src='item.isStore?item.modelUrl:ms.manager+"/"+item.modelUrl+(item.modelUrl.indexOf("?")==-1?"?":"&")+"modelId="+item.modelId+"&modelCode="+item.modelCode+"&modelTitle="+encodeURI(item.modelTitle)'
:ref="item.modelTitle"></iframe>
</keep-alive>
</el-tab-pane>
</el-tabs>
</el-main>
</el-container>
</el-container>
</div>
</body>
</html>
<script>
var indexVue = new Vue({
el: "#app",
data: {
code: '',
menuList: [], //菜单接口数据
asideMenuList: [], //侧边菜单
parentMenuList: [], //一级菜单
subMenuList: [], //二级菜单 所有
unreadTotal: 0,//未读消息数量
messageList: [],//消息列表
mainParentMenuList: [], //头部菜单显示主要的选项
loginDown: false, //登录下拉
asideMenuActive: "", //左侧选中菜单
headMenuActive: '', //头部菜单激活
editableTabsValue: '',
messageTypeList: [],
editableTabs: [{"modelTitle": "工作台", "modelUrl": "main.do"}], //当前打开的tab页面
shortcutMenu: false, //快捷菜单显示状态
collapseMenu: false, //菜单折叠false不折叠
currentTab: '工作台', //当前激活tab的name
tabIndex: 1,
// markList: ['项目管理', '组织管理', '客户管理', '合同管理', '印章管理', '绩效管理', '权限管理', '系统设置'],
markList: [
{title: "权限管理", icon: "icon-wode", hide: true},
{title: "系统设置", icon: "icon-xitongguanli", hide: true},
{title: "内容管理", icon: "icon-neirongguanli", hide: true},
{title: "印章管理", icon: "icon-huizhang", hide: true},
{title: "会员中心", icon: "icon-huiyuanzhongxin", hide: true},
{title: "自定义管理", icon: "icon-zidingyiguanli", hide: true},
],
//登录用户信息
peopleInfo: {
managerName: '', //账号
managerNickName: '',
},
mstore: {},
theme: 'ms-theme-light',
callbackFun: {},
},
computed: {
messageType: function (type) {
var that = this
return function (type) {
var dict = that.messageTypeList.find(function (x) {
return x.dictValue == type;
});
if (dict) {
return dict.dictLabel;
}
return '';
}
}
},
watch: {
menuList: function (n, o) {
var that = this;
n && n.forEach(function (item, index) {
item.modelModelId ? that.subMenuList.push(item) : that.parentMenuList.push(item)
})
},
parentMenuList: function (n, o) {
var that = this
this.mainParentMenuList = n.slice(0, 5);
this.asideMenuList = n.filter(function (f) {
return that.markList.find(
function (x) {
return x.title == f['modelTitle']
}) != undefined
})
},
editableTabs: {
handler: function (n, o) {
if (n.length) {
var that = this;
if (!document.querySelector('.el-icon-refresh')) {
var i = document.createElement('i');
i.className = "el-icon-refresh ms-admin-refresh"
i.title = "点击刷新当前页"
i.addEventListener('click', function () {
var index = null
Object.keys(that.$refs).forEach(function (item, i) {
item.indexOf(that.currentTab) > -1 ? index = i : ''
}, that)
that.$refs[Object.keys(that.$refs)[index]][0].contentDocument.location.reload(true)
})
document.querySelector('.el-tabs__header').insertBefore(i, document.querySelector('.el-tabs__nav-wrap'))
}
} else {
if (document.querySelector('.ms-admin-refresh')) {
document.querySelector('.el-tabs__header').removeChild(document.querySelector('.ms-admin-refresh'))
}
}
},
deep: true
}
},
methods: {
getAuthorization: function () {
},
subscribe: function () {
var h = this.$createElement
var that = this;
ms.http.get(
ms.manager + "/lic/info"
).then(function (res) {
that.$msgbox({
title: '关注公众号接收系统通知',
message: h('p', null, [h('el-image', {
attrs: {
src: 'http://www.meczj.com/wx/employee/qrCode?code=' + encodeURIComponent(res.data),
},
style: {
width: "80%",
height: "300px"
}
}
), h('el-alert', {
props: {
title: '一人一码,请确认当前登录用户信息再进行绑定,如果绑定错误,请取消关注 铭软 公众号再重新扫码绑定',
closable: false
},
}
)]),
showConfirmButton: false,
center: true
})
}).catch(function (err) {
console.log(err)
})
},
connect: function () {
var that = this
var sockjs = new SockJS("/websocket");
var stompClient = Stomp.over(sockjs);
stompClient.connect({}, function (frame) {
stompClient.subscribe('/topic/message/' +${Session.manager_session.managerId}, function (greeting) {
if (greeting.body == "list") {
that.getMessage()
}
});
});
},
markMenu: function (title, icon) {
var menu = {
title: title,
icon: icon,
}
this.markList.push(menu);
localStorage.setItem("markList", JSON.stringify(this.markList))
this.callbackFun();
},
cancelMarkMenu: function (title) {
var index = this.markList.findIndex(function (x) {
return x.title == title
});
this.markList.splice(index, 1);
localStorage.setItem("markList", JSON.stringify(this.markList))
},
handleMessage: function () {
this.openMenuInTitle('收到消息')
},
handleCommand: function (theme) {
this.theme = theme;
localStorage.setItem("theme", theme);
},
// 菜单列表
list: function () {
var that = this;
ms.http.get(ms.manager + "/model/list.do")
.then(function (data) {
that.menuList = data.data.rows
}, function (err) {
that.$message.error(err);
})
},
asideMenuOpen: function (index, indexPath) {
},
// 菜单打开页面
open: function (sub) {
var that = this
var result = '';
result = this.editableTabs.some(function (item, index) {
return item.modelTitle == sub.modelTitle
})
if (sub.syncStoreUrl) {
sub.modelUrl = sub.syncStoreUrl
sub.modelTitle = 'mstore';
sub.isStore = true;
!result ? this.editableTabs.push(sub) : ""
} else {
!result ? this.editableTabs.push(sub) : ""
}
this.currentTab = sub.modelTitle;
this.headMenuActive = sub.modelModelId
this.$nextTick(function () {
that.asideMenuActive = sub.modelId;
})
// 处理其他逻辑
setTimeout(function () {
if (document.querySelector('.el-tabs__nav-prev')) {
document.querySelector('.el-tabs__nav-wrap').style.padding = '0 40px'
} else {
document.querySelector('.el-tabs__nav-wrap').style.padding = '0'
}
}, 16)
},
tabClick: function (tab) {
this.asideMenuActive = tab.$el.dataset.modelid
this.headMenuActive = tab.$el.dataset.modelmodelid
console.log(this.editableTabs)
},
// 获取当前菜单的子菜单
getSubMenu: function (modelId) {
var result = [];
var that = this;
that.subMenuList && that.subMenuList.forEach(function (item) {
item.modelModelId == modelId ? result.push(item) : ''
})
return result;
},
//关闭tab标签页
closeTab: function (targetName) {
var that = this;
// 关闭的面板是当前激活面板
if (that.currentTab == targetName) {
var modelModelId = null
that.editableTabs.forEach(function (tab, index, arr) {
if (tab.modelTitle == targetName) {
modelModelId = arr[index].modelModelId
var nextTab = arr[index + 1] || arr[index - 1];
if (nextTab) {
that.currentTab = nextTab.modelTitle
that.asideMenuActive = nextTab.modelId
that.headMenuActive = nextTab.modelModelId
}
}
})
}
// 去掉关闭的tab
that.editableTabs = that.editableTabs.filter(function (tab) {
return tab.modelTitle !== targetName
})
// 关闭左侧父菜单
if (that.editableTabs.length) {
var result = that.editableTabs.every(function (item) {
return item.modelModelId !== modelModelId
})
if (result) {
that.asideMenuList.forEach(function (menu, index, arr) {
if (menu.modelId == modelModelId) {
var flag = false;
that.markList.forEach(function (item, index, array) {
if (item.title == menu.modelTitle) {
flag = true;
}
})
if (!flag) {
arr.splice(index, 1);
}
}
})
}
} else {
that.asideMenuList = []
}
// 判断是否出现左右箭头
setTimeout(function () {
if (document.querySelector('.el-tabs__nav-prev')) {
document.querySelector('.el-tabs__nav-wrap').style.padding = '0 40px'
} else {
document.querySelector('.el-tabs__nav-wrap').style.padding = '0'
}
}, 16)
},
openParentMenuInTitle: function (title) {
var data = this.parentMenuList.find(function (menu) {
return menu.modelTitle == title
})
data && this.openMenu(data)
},
// 头部导航打开菜单
openMenu: function (menu, index) {
this.asideMenuList.some(function (item, index) {
return item.modelId == menu.modelId
}) || this.asideMenuList.push(menu)
// this.getSubMenu(menu.modelId)[0] && this.$refs.menu.open(this.getSubMenu(menu.modelId)[0].modelTitle);
var children = [];
this.menuList.forEach(function (tab) {
if (tab.modelModelId == menu.modelId) {
children.push(tab)
}
})
this.currentTab = children[0] && children[0].modelTitle;
this.open(children[0]);
var that = this;
setTimeout(function () {
that.shortcutMenu = false
}, 50)
that.$nextTick(function () {
that.$refs.menu.open(String(menu.modelId))
})
},
managerGet: function () {
var that = this;
ms.http.get(ms.manager + "/basic/manager/get.do")
.then(function (data) {
that.peopleInfo = data.data
resetPasswordVue.resetPasswordForm.managerName = that.peopleInfo.managerName
}, function (err) {
that.$message.error(err);
})
},
exitSystem: function () {
this.$confirm('是否确认退出账号?', '退出系统', {
confirmButtonText: '确定',
cancelButtonText: '取消',
cancelButtonClass: 'el-button--mini',
confirmButtonClass: 'el-button--mini',
type: 'warning'
}).then(function () {
ms.http.get(ms.manager + "/loginOut.do")
.then(function (data) {
isShow = false;
location.href = ms.manager + "/login.do";
}, function (err) {
that.$message.error(err.msg);
})
})
},
// 打开修改密码,退出的模态框
openModal: function (edit) {
edit ?
resetPasswordVue.isShow = true : this.exitSystem();
},
// 显示图标
formmateIcon: function (icon) {
return "<i class='ms-admin-icon iconfont'></i>"
},
//打开指定标题
openMenuInTitle: function (title) {
this.open(this.menuList.find(function (x) {
return x.modelTitle == title
}))
},
//消息显示
getMessage: function () {
var that = this
ms.http.post(ms.manager + "/message/myMessage/list.do", {pageSize: 9999, mlStatus: 'unread'})
.then(function (res) {
if (res.result) {
that.messageList = res.data.rows.splice(0, 5);
that.unreadTotal = res.data.total;
}
}, function (err) {
that.$message.error(err);
})
},
dictList: function () {
var that = this;
ms.http.get(ms.base + '/mdiy/dict/list.do', {dictType: '消息类型', pageSize: 99999}).then(function (res) {
that.messageTypeList = res.rows;
}).catch(function (err) {
console.log(err);
});
},
addCallBackFun: function (fun) {
this.callbackFun = fun;
}
},
created: function () {
this.getAuthorization();
var markList = localStorage.getItem("markList");
if (markList) {
this.markList = JSON.parse(markList)
}
localStorage.setItem("markList", JSON.stringify(this.markList))
},
mounted: function () {
// this.getMessage();
this.dictList();
if (localStorage.getItem("theme")) {
this.theme = localStorage.getItem("theme");
}
//setInterval(this.getMessage,3000)
// 菜单列表
this.list();
this.connect();
//获取登录用户信息
this.managerGet();
var that = this;
ms.http.get(ms.manager + "/upgrader/sync.do").then(function (data) {
if (data.syncStoreUrl != undefined) {
data.syncStoreUrl += "?client=${client}";
that.mstore = data;
}
})
},
})
</script>
<style>
.adminhead{
margin-top: 10px\0;
}
.item {
margin-right: 19px;
}
.ms-notice-menu {
padding: 0px;
width: 400px;
}
.ms-notice-menu-type {
color: #ccc;
font-weight: 500;
font-family: 黑体 !important;
}
.ms-notice-menu-border {
border-bottom: 1px solid rgb(239, 239, 239);
font-weight: bold;
font-family: 黑体 !important;
}
.ms-admin-header-menu-shrink {
width: 64px;
display: flex;
justify-content: center;
align-items: center;
line-height: 50px;
border-right: 1px solid rgba(238, 238, 238, 1);
cursor: pointer;
}
.ms-admin-header-menu-shrink:hover {
background: rgba(250, 250, 250, 1);
}
.el-menu-vertical-demo:not(.el-menu--collapse) {
width: 180px;
height: 100vh;
}
.el-menu--collapse {
height: 100vh;
}
.ms-admin-menu-aside .el-submenu__title,
.ms-admin-menu-aside .el-menu-item {
color: rgba(255, 255, 255, 1);
height: 40px;
line-height: 40px;
}
.ms-admin-menu-aside .el-submenu__title i {
color: inherit;
}
.ms-admin-menu-aside .el-submenu__title .iconfont {
font-size: 19px !important;
}
.ms-admin-menu-aside .el-submenu.is-active .el-submenu__title {
color: rgba(255, 255, 255, 1) !important;
}
.ms-admin-header-menu .el-submenu__title {
height: 50px !important;
line-height: 50px !important;
}
.ms-admin-header-menu .el-submenu__title:hover {
background: rgba(250, 250, 250, 1) !important;
}
.ms-admin-header-menu-all {
width: 560px;
height: auto;
background: rgba(255, 255, 255, 1);
border-radius: 2px;
display: flex;
flex-direction: row;
flex-wrap: wrap;
line-height: 40px;
}
.ms-admin-header-menu-all .iconfont {
font-size: 17px;
}
.ms-admin-header-menu-all .ms-admin-header-menu-all-item {
display: flex;
width: 25%;
justify-content: center;
align-items: center;
cursor: pointer;
}
.ms-admin-header-menu-all .ms-admin-header-menu-all-item .el-icon-star-on {
color: #ccc;
font-size: 17px;
margin-left: -1px;
margin-top: 1px;
}
.ms-admin-header-menu-all .ms-admin-header-menu-all-item .el-icon-star-on:hover {
color: rgba(64, 158, 255, 1);
}
.ms-admin-header-menu-all .ms-admin-header-menu-all-item .el-icon-star-off {
color: #ccc;
}
.ms-admin-header-menu-all .ms-admin-header-menu-all-item .el-icon-star-off:hover {
color: rgba(64, 158, 255, 1);
}
.ms-admin-header-menu-all .ms-admin-header-menu-all-item:hover {
color: rgba(64, 158, 255, 1);
}
.ms-admin-mstore .ms-admin-mstore-menu-icon {
height: 100%;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
width: 48px;
color: rgba(51, 51, 51, 1);
}
.ms-admin-mstore .ms-admin-login .el-dropdown-link:hover,
.ms-admin-mstore .ms-admin-mstore-menu-icon:hover {
background: rgba(250, 250, 250, 1);
}
.ms-admin-mstore .ms-admin-mstore-menu-icon i {
font-size: 18px;
margin: 0 5px 0 0;
}
.ms-admin-login-down {
top: 55px !important;
}
.ms-admin-menu-aside-submenu .el-menu-item {
line-height: 40px;
height: 40px;
}
.el-submenu__title * {
vertical-align: top;
}
.ms-admin-login-theme .el-dropdown-menu__item {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
}
.el-tabs__nav .el-tabs__item:nth-child(1) span {
display: none;
}
.el-tabs__item.is-active {
background-color: rgba(255, 255, 255, 1);
}
.el-menu {
border-right: 0px;
}
.ms-admin-logo .class-1 {
color: white;
padding-top: 8px;
color: #FFFFFF;
word-wrap: break-word;
font-family: MicrosoftYaHei-Bold;
font-weight: bold;
font-style: italic;
}
.ms-admin-logo .class-2 {
font-size: 12px;
font-weight: normal;
}
.theme-select .el-menu--popup {
width: 100px;
min-width: 100px;
}
.top-operate-select .el-menu--popup {
width: 162px;
min-width: 162px;
}
</style>

View File

@ -44,110 +44,26 @@
<div class="class-6" >
</div>
<div class="class-7" >
<div class="class-8" >
<div class="class-9">
<div class="panel">
<div class="panel-title">
常用功能
</div>
<div class="v-space"></div>
<div class="panel-content" style="flex-direction: row;flex-wrap: wrap; flex: unset">
<div class="mitem"
@click="window.parent.indexVue.openParentMenuInTitle(item.title)"
v-for="item in alwaysList">
<!--图标开始-->
<i :class="['iconfont',item.icon]"></i>
<div class="item-title">
{{ item.title }}
</div>
<!--文本结束-->
</div>
</div>
</div>
<div class="class-10" >
<div @click="jumpArtcleManager"
class="class-11" >
<div class="class-12" >
<!--图片开始-->
<img
src="${base}/static/ms-admin/5.0.0/images/1578362848002.png"
class="class-13" />
<!--图片结束-->
</div>
<div class="class-14">
文章管理
</div>
</div>
<div @click="jumpCategorymanager" class="class-15" >
<div class="class-16" >
<!--图片开始-->
<img
src="${base}/static/ms-admin/5.0.0/images/1578363219309.png"
class="class-17" />
<!--图片结束-->
</div>
<div class="class-18">
栏目管理
</div>
</div>
<div @click="jumpStaticManager" class="class-19" >
<div class="class-20" >
<!--图片开始-->
<img
src="${base}/static/ms-admin/5.0.0/images/1578363549912.png"
class="class-21" />
<!--图片结束-->
</div>
<div class="class-22">
静态化
</div>
</div>
<div @click="jumpAdmininstatorManager" class="class-23" >
<div class="class-24" >
<!--图片开始-->
<img
src="${base}/static/ms-admin/5.0.0/images/1578363754088.png"
class="class-25" />
<!--图片结束-->
</div>
<div class="class-26">
管理员管理
</div>
</div>
<div @click="jumpUserManager" class="class-27" >
<div class="class-28" >
<!--图片开始-->
<img
src="${base}/static/ms-admin/5.0.0/images/1578364450652.png"
class="class-29" />
<!--图片结束-->
</div>
<div class="class-30">
角色管理
</div>
</div>
<div @click="jumpMenuManager" class="class-31" >
<div class="class-32" >
<!--图片开始-->
<img
src="${base}/static/ms-admin/5.0.0/images/1578363880431.png"
class="class-33" />
<!--图片结束-->
</div>
<div class="class-34">
菜单管理
</div>
</div>
<div @click="jumpTemplateManager" class="class-35" >
<div class="class-36" >
<!--图片开始-->
<img
src="${base}/static/ms-admin/5.0.0/images/1578363998984.png"
class="class-37" />
<!--图片结束-->
</div>
<div class="class-38">
模板管理
</div>
</div>
<div @click="jumpApplicationManager" class="class-39" >
<div class="class-40" >
<!--图片开始-->
<img
src="${base}/static/ms-admin/5.0.0/images/1578364095317.png"
class="class-41" />
<!--图片结束-->
</div>
<div class="class-42">
应用设置
</div>
</div>
</div>
</div>
<!--大容器开始-->
<div class="class-43" >
@ -431,7 +347,8 @@
data: {
base: ms.base,
msNewsLast: '',
msNewsPath: ''
msNewsPath: '',
alwaysList: [], //常用功能列表
},
methods: {
jumpArtcleManager: function () {
@ -481,6 +398,12 @@
"modelUrl": "model/index.do"
});
},
getAlwaysList: function () {
var markList = localStorage.getItem("markList");
if (markList) {
this.alwaysList = JSON.parse(markList)
}
},
//模板管理
jumpTemplateManager: function () {
window.parent.indexVue.open({
@ -490,6 +413,9 @@
"modelUrl": "template/index.do"
});
},
setCallBackFun: function () {
window.parent.indexVue.addCallBackFun(this.getAlwaysList);
},
//应用管理
jumpApplicationManager: function () {
window.parent.indexVue.open({
@ -530,14 +456,71 @@
that.msNewsLast = res.data.data.rows[0].contentTitle.toString();
that.msNewsPath = 'https://ms.mingsoft.net/html/1/203/202/' + res.data.data.rows[0].id + '.html';
});
this.setCallBackFun();
}
},
created: function () {
this.getNewsLast();
this.getAlwaysList();
}
});
</script>
<style>
.panel-content .mitem {
color: #333333;
cursor: pointer;
outline-offset: -1px;
height: 88px;
flex-direction: column;
display: flex;
animation-duration: 1s;
width: 88px;
background-repeat: no-repeat;
align-items: center;
}
.panel .panel-content .mitem:hover i ,.panel .panel-content .mitem:hover .item-title{
color:#409EFF
}
.panel-content .mitem i {
font-size: 36px;
}
.panel {
color: #333333;
padding: 10px;
outline-offset: -1px;
flex: 1;
background-color: rgba(255, 255, 255, 1);
flex-direction: column;
display: flex;
animation-duration: 1s;
background-repeat: no-repeat;
}
.panel .panel-title {
color: #333333;
word-wrap: break-word;
font-weight: bold;
display: inline-block;
animation-duration: 1s;
font-size: 16px;
padding-left: 10px;
margin-top: 5px;
}
.panel .panel-content {
color: #333333;
padding-right: 10px;
padding-bottom: 10px;
outline-offset: -1px;
flex: 1;
padding-top: 10px;
max-width: 100%;
flex-direction: column;
display: flex;
animation-duration: 1s;
width: 100%;
padding-left: 10px;
background-repeat: no-repeat;
}
.custom-body {
}
.class-1

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 428 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 960 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 803 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@ -120,12 +120,6 @@ a:link,a:visited,a:active{text-decoration: none; color:#409EFF;}
border-radius: 10px;
background-color: rgba(144,147,153,.5);
}
/*缩略图*/
.el-upload-list--picture-card .el-upload-list__item-thumbnail {
width: 100%;
height: auto!important;
}
/*饿了么滚动样式*/
.ms-scrollbar .el-scrollbar__wrap{
overflow-x: hidden;

View File

@ -141,7 +141,7 @@ textarea::-webkit-input-placeholder {
flex: 1;
height: 320px;
background: #fff;
padding: 20px 26px;
padding: 20px 54px;
}
.login .ms-admin-login-container .ms-admin-login-main .ms-admin-login-warp .ms-admin-login-form h1 {
line-height: 1;
@ -173,7 +173,7 @@ textarea::-webkit-input-placeholder {
}
.login .ms-admin-login-container .ms-admin-login-main .ms-admin-login-warp .ms-admin-login-form .ms-admin-form-item-code .el-form-item__content .el-input__inner,
.login .ms-admin-login-container .ms-admin-login-main .ms-admin-login-warp .ms-admin-login-form .ms-admin-form-item-code .el-form-item__content .el-input {
width: 110px;
width: 97px;
}
.login .ms-admin-login-container .ms-admin-login-main .ms-admin-login-warp .ms-admin-login-form .ms-admin-form-item-code .el-form-item__content > img {
width: 66px;
@ -183,7 +183,7 @@ textarea::-webkit-input-placeholder {
.login .ms-admin-login-container .ms-admin-login-main .ms-admin-login-warp .ms-admin-login-form .ms-admin-form-item-code .el-form-item__content p {
display: flex;
justify-content: space-between;
line-height: 1;
line-height: 17px;
flex-direction: column;
margin: 0;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -47,6 +47,13 @@
"unicode": "e6c2",
"unicode_decimal": 59074
},
{
"icon_id": "174849",
"name": "特色服务icon",
"font_class": "tesefuwuicon",
"unicode": "e7a2",
"unicode_decimal": 59298
},
{
"icon_id": "247483",
"name": "书",
@ -740,6 +747,13 @@
"unicode": "e6aa",
"unicode_decimal": 59050
},
{
"icon_id": "2228997",
"name": "打折",
"font_class": "dazhe",
"unicode": "e79e",
"unicode_decimal": 59294
},
{
"icon_id": "2245822",
"name": "红包",
@ -1104,6 +1118,13 @@
"unicode": "e615",
"unicode_decimal": 58901
},
{
"icon_id": "3512889",
"name": "地址",
"font_class": "dizhi",
"unicode": "e79f",
"unicode_decimal": 59295
},
{
"icon_id": "3555825",
"name": "加",
@ -1384,6 +1405,13 @@
"unicode": "e6e1",
"unicode_decimal": 59105
},
{
"icon_id": "4480718",
"name": "网页",
"font_class": "wangye",
"unicode": "e7a0",
"unicode_decimal": 59296
},
{
"icon_id": "4549366",
"name": "水滴",
@ -1566,6 +1594,20 @@
"unicode": "e917",
"unicode_decimal": 59671
},
{
"icon_id": "5296173",
"name": "承诺函",
"font_class": "chengnuohan",
"unicode": "e8f9",
"unicode_decimal": 59641
},
{
"icon_id": "5296174",
"name": "正品行货",
"font_class": "zhengpinhanghuo",
"unicode": "e8fa",
"unicode_decimal": 59642
},
{
"icon_id": "5309436",
"name": "电源",
@ -2119,6 +2161,13 @@
"unicode": "ebf4",
"unicode_decimal": 60404
},
{
"icon_id": "7731245",
"name": "优惠券",
"font_class": "youhuiquan1",
"unicode": "e79a",
"unicode_decimal": 59290
},
{
"icon_id": "7782114",
"name": "裁剪",
@ -2665,6 +2714,13 @@
"unicode": "e82f",
"unicode_decimal": 59439
},
{
"icon_id": "9739958",
"name": "9-劳联保险@三合一",
"font_class": "-laolianbaoxiansanheyi",
"unicode": "e7a3",
"unicode_decimal": 59299
},
{
"icon_id": "9742421",
"name": "清空",
@ -2931,6 +2987,13 @@
"unicode": "e738",
"unicode_decimal": 59192
},
{
"icon_id": "10833932",
"name": "商户管理",
"font_class": "shanghuguanli",
"unicode": "e79d",
"unicode_decimal": 59293
},
{
"icon_id": "11043027",
"name": "多行文本",

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 912 KiB

After

Width:  |  Height:  |  Size: 933 KiB

View File

@ -0,0 +1,413 @@
/*!
* accounting.js v0.4.1
* Copyright 2014 Open Exchange Rates
*
* Freely distributable under the MIT license.
* Portions of accounting.js are inspired or borrowed from underscore.js
*
* Full details and documentation:
* http://openexchangerates.github.io/accounting.js/
*/
(function(root, undefined) {
/* --- Setup --- */
// Create the local library object, to be exported or referenced globally later
var lib = {};
// Current version
lib.version = '0.4.1';
/* --- Exposed settings --- */
// The library's settings configuration object. Contains default parameters for
// currency and number formatting
lib.settings = {
currency: {
symbol : "$", // default currency symbol is '$'
format : "%s%v", // controls output: %s = symbol, %v = value (can be object, see docs)
decimal : ".", // decimal point separator
thousand : ",", // thousands separator
precision : 2, // decimal places
grouping : 3 // digit grouping (not implemented yet)
},
number: {
precision : 0, // default precision on numbers is 0
grouping : 3, // digit grouping (not implemented yet)
thousand : ",",
decimal : "."
}
};
/* --- Internal Helper Methods --- */
// Store reference to possibly-available ECMAScript 5 methods for later
var nativeMap = Array.prototype.map,
nativeIsArray = Array.isArray,
toString = Object.prototype.toString;
/**
* Tests whether supplied parameter is a string
* from underscore.js
*/
function isString(obj) {
return !!(obj === '' || (obj && obj.charCodeAt && obj.substr));
}
/**
* Tests whether supplied parameter is a string
* from underscore.js, delegates to ECMA5's native Array.isArray
*/
function isArray(obj) {
return nativeIsArray ? nativeIsArray(obj) : toString.call(obj) === '[object Array]';
}
/**
* Tests whether supplied parameter is a true object
*/
function isObject(obj) {
return obj && toString.call(obj) === '[object Object]';
}
/**
* Extends an object with a defaults object, similar to underscore's _.defaults
*
* Used for abstracting parameter handling from API methods
*/
function defaults(object, defs) {
var key;
object = object || {};
defs = defs || {};
// Iterate over object non-prototype properties:
for (key in defs) {
if (defs.hasOwnProperty(key)) {
// Replace values with defaults only if undefined (allow empty/zero values):
if (object[key] == null) object[key] = defs[key];
}
}
return object;
}
/**
* Implementation of `Array.map()` for iteration loops
*
* Returns a new Array as a result of calling `iterator` on each array value.
* Defers to native Array.map if available
*/
function map(obj, iterator, context) {
var results = [], i, j;
if (!obj) return results;
// Use native .map method if it exists:
if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
// Fallback for native .map:
for (i = 0, j = obj.length; i < j; i++ ) {
results[i] = iterator.call(context, obj[i], i, obj);
}
return results;
}
/**
* Check and normalise the value of precision (must be positive integer)
*/
function checkPrecision(val, base) {
val = Math.round(Math.abs(val));
return isNaN(val)? base : val;
}
/**
* Parses a format string or object and returns format obj for use in rendering
*
* `format` is either a string with the default (positive) format, or object
* containing `pos` (required), `neg` and `zero` values (or a function returning
* either a string or object)
*
* Either string or format.pos must contain "%v" (value) to be valid
*/
function checkCurrencyFormat(format) {
var defaults = lib.settings.currency.format;
// Allow function as format parameter (should return string or object):
if ( typeof format === "function" ) format = format();
// Format can be a string, in which case `value` ("%v") must be present:
if ( isString( format ) && format.match("%v") ) {
// Create and return positive, negative and zero formats:
return {
pos : format,
neg : format.replace("-", "").replace("%v", "-%v"),
zero : format
};
// If no format, or object is missing valid positive value, use defaults:
} else if ( !format || !format.pos || !format.pos.match("%v") ) {
// If defaults is a string, casts it to an object for faster checking next time:
return ( !isString( defaults ) ) ? defaults : lib.settings.currency.format = {
pos : defaults,
neg : defaults.replace("%v", "-%v"),
zero : defaults
};
}
// Otherwise, assume format was fine:
return format;
}
/* --- API Methods --- */
/**
* Takes a string/array of strings, removes all formatting/cruft and returns the raw float value
* Alias: `accounting.parse(string)`
*
* Decimal must be included in the regular expression to match floats (defaults to
* accounting.settings.number.decimal), so if the number uses a non-standard decimal
* separator, provide it as the second argument.
*
* Also matches bracketed negatives (eg. "$ (1.99)" => -1.99)
*
* Doesn't throw any errors (`NaN`s become 0) but this may change in future
*/
var unformat = lib.unformat = lib.parse = function(value, decimal) {
// Recursively unformat arrays:
if (isArray(value)) {
return map(value, function(val) {
return unformat(val, decimal);
});
}
// Fails silently (need decent errors):
value = value || 0;
// Return the value as-is if it's already a number:
if (typeof value === "number") return value;
// Default decimal point comes from settings, but could be set to eg. "," in opts:
decimal = decimal || lib.settings.number.decimal;
// Build regex to strip out everything except digits, decimal point and minus sign:
var regex = new RegExp("[^0-9-" + decimal + "]", ["g"]),
unformatted = parseFloat(
("" + value)
.replace(/\((.*)\)/, "-$1") // replace bracketed values with negatives
.replace(regex, '') // strip out any cruft
.replace(decimal, '.') // make sure decimal point is standard
);
// This will fail silently which may cause trouble, let's wait and see:
return !isNaN(unformatted) ? unformatted : 0;
};
/**
* Implementation of toFixed() that treats floats more like decimals
*
* Fixes binary rounding issues (eg. (0.615).toFixed(2) === "0.61") that present
* problems for accounting- and finance-related software.
*/
var toFixed = lib.toFixed = function(value, precision) {
precision = checkPrecision(precision, lib.settings.number.precision);
var power = Math.pow(10, precision);
// Multiply up by precision, round accurately, then divide and use native toFixed():
return (Math.round(lib.unformat(value) * power) / power).toFixed(precision);
};
/**
* Format a number, with comma-separated thousands and custom precision/decimal places
* Alias: `accounting.format()`
*
* Localise by overriding the precision and thousand / decimal separators
* 2nd parameter `precision` can be an object matching `settings.number`
*/
var formatNumber = lib.formatNumber = lib.format = function(number, precision, thousand, decimal) {
// Resursively format arrays:
if (isArray(number)) {
return map(number, function(val) {
return formatNumber(val, precision, thousand, decimal);
});
}
// Clean up number:
number = unformat(number);
// Build options object from second param (if object) or all params, extending defaults:
var opts = defaults(
(isObject(precision) ? precision : {
precision : precision,
thousand : thousand,
decimal : decimal
}),
lib.settings.number
),
// Clean up precision
usePrecision = checkPrecision(opts.precision),
// Do some calc:
negative = number < 0 ? "-" : "",
base = parseInt(toFixed(Math.abs(number || 0), usePrecision), 10) + "",
mod = base.length > 3 ? base.length % 3 : 0;
// Format the number:
return negative + (mod ? base.substr(0, mod) + opts.thousand : "") + base.substr(mod).replace(/(\d{3})(?=\d)/g, "$1" + opts.thousand) + (usePrecision ? opts.decimal + toFixed(Math.abs(number), usePrecision).split('.')[1] : "");
};
/**
* Format a number into currency
*
* Usage: accounting.formatMoney(number, symbol, precision, thousandsSep, decimalSep, format)
* defaults: (0, "$", 2, ",", ".", "%s%v")
*
* Localise by overriding the symbol, precision, thousand / decimal separators and format
* Second param can be an object matching `settings.currency` which is the easiest way.
*
* To do: tidy up the parameters
*/
var formatMoney = lib.formatMoney = function(number, symbol, precision, thousand, decimal, format) {
// Resursively format arrays:
if (isArray(number)) {
return map(number, function(val){
return formatMoney(val, symbol, precision, thousand, decimal, format);
});
}
// Clean up number:
number = unformat(number);
// Build options object from second param (if object) or all params, extending defaults:
var opts = defaults(
(isObject(symbol) ? symbol : {
symbol : symbol,
precision : precision,
thousand : thousand,
decimal : decimal,
format : format
}),
lib.settings.currency
),
// Check format (returns object with pos, neg and zero):
formats = checkCurrencyFormat(opts.format),
// Choose which format to use for this value:
useFormat = number > 0 ? formats.pos : number < 0 ? formats.neg : formats.zero;
// Return with currency symbol added:
return useFormat.replace('%s', opts.symbol).replace('%v', formatNumber(Math.abs(number), checkPrecision(opts.precision), opts.thousand, opts.decimal));
};
/**
* Format a list of numbers into an accounting column, padding with whitespace
* to line up currency symbols, thousand separators and decimals places
*
* List should be an array of numbers
* Second parameter can be an object containing keys that match the params
*
* Returns array of accouting-formatted number strings of same length
*
* NB: `white-space:pre` CSS rule is required on the list container to prevent
* browsers from collapsing the whitespace in the output strings.
*/
lib.formatColumn = function(list, symbol, precision, thousand, decimal, format) {
if (!list) return [];
// Build options object from second param (if object) or all params, extending defaults:
var opts = defaults(
(isObject(symbol) ? symbol : {
symbol : symbol,
precision : precision,
thousand : thousand,
decimal : decimal,
format : format
}),
lib.settings.currency
),
// Check format (returns object with pos, neg and zero), only need pos for now:
formats = checkCurrencyFormat(opts.format),
// Whether to pad at start of string or after currency symbol:
padAfterSymbol = formats.pos.indexOf("%s") < formats.pos.indexOf("%v") ? true : false,
// Store value for the length of the longest string in the column:
maxLength = 0,
// Format the list according to options, store the length of the longest string:
formatted = map(list, function(val, i) {
if (isArray(val)) {
// Recursively format columns if list is a multi-dimensional array:
return lib.formatColumn(val, opts);
} else {
// Clean up the value
val = unformat(val);
// Choose which format to use for this value (pos, neg or zero):
var useFormat = val > 0 ? formats.pos : val < 0 ? formats.neg : formats.zero,
// Format this value, push into formatted list and save the length:
fVal = useFormat.replace('%s', opts.symbol).replace('%v', formatNumber(Math.abs(val), checkPrecision(opts.precision), opts.thousand, opts.decimal));
if (fVal.length > maxLength) maxLength = fVal.length;
return fVal;
}
});
// Pad each number in the list and send back the column of numbers:
return map(formatted, function(val, i) {
// Only if this is a string (not a nested array, which would have already been padded):
if (isString(val) && val.length < maxLength) {
// Depending on symbol position, pad after symbol or at index 0:
return padAfterSymbol ? val.replace(opts.symbol, opts.symbol+(new Array(maxLength - val.length + 1).join(" "))) : (new Array(maxLength - val.length + 1).join(" ")) + val;
}
return val;
});
};
/* --- Module Definition --- */
// Export accounting for CommonJS. If being loaded as an AMD module, define it as such.
// Otherwise, just add `accounting` to the global object
if (typeof exports !== 'undefined') {
if (typeof module !== 'undefined' && module.exports) {
exports = module.exports = lib;
}
exports.accounting = lib;
} else if (typeof define === 'function' && define.amd) {
// Return the library as an AMD module:
define([], function() {
return lib;
});
} else {
// Use accounting.noConflict to restore `accounting` back to its original value.
// Returns a reference to the library's `accounting` object;
// e.g. `var numbers = accounting.noConflict();`
lib.noConflict = (function(oldAccounting) {
return function() {
// Reset the value of the root's `accounting` variable:
root.accounting = oldAccounting;
// Delete the noConflict method:
lib.noConflict = undefined;
// Return reference to the library to re-assign it:
return lib;
};
})(root.accounting);
// Declare `fx` on the root (global/window) object:
root['accounting'] = lib;
}
// Root will be `window` in browser or `global` on the server:
}(this));

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,119 @@
/**
* 字典类
* 初始化ms.dict.list("A类型,B类型,C类型","子业务类型")
* 获取值ms.dict.getDictValue("A类型标签") ms.dict.getDictValue("C类型标签",3)
* 获取值ms.dict.getDictLabel("B类型值",2)
*/
(function() {
var dictData;
/**
* 获取所有字典类型的数组集合
* @param dictType 字典类型 支持多个类型用英文逗号隔开
* @param isChild 子业务类型 可选
*/
function list(dictType,isChild) {
var _dict={
dictType:dictType,
isChild:isChild,
}
ms.http.get(ms.manager+'/mdiy/dict/dictList.do', _dict).then(function (res) {
if(res.code==200){
dict.dictData = res.data;
}
}).catch(function (err) {
console.log(err);
});
}
function get(index, dictLabel, dictValue,isChild){
var dicts= (dict.dictData?dict.dictData[index-1]:[]).filter(function(element,index,self){
if(dictLabel&&dictLabel!=element.dictLabel){
return false
}else if(dictValue&&dictValue!=element.dictValue){
return false
}
return true
})
if(dicts.length){
return dicts[0];
}else {
return null;
}
}
/**
* 获取字典列表
* @param index list方法中dictType的索引值 从1开始
* @returns {*}
*/
function getList(index){
if(index){
return dict.dictData[0]
}else {
return dict.dictData[index-1]
}
}
/**
* 获取字典值
* @param dictLabel 字典标签值
* @param index list方法中dictType的索引值 从1开始
* @param defaultValue 默认值
* @returns {string|string|rules.dictValue|{message, required}}
*/
function getDictValue( dictLabel, index, defaultValue) {
if (!defaultValue) {
defaultValue="";
}
var dictEntity = ''
if (index && dictLabel) {
dictEntity = get(index, dictLabel, null);
}
if (!index && dictLabel) {
dictEntity = get(1, dictLabel, null);
}
if(dictEntity){
return dictEntity.dictValue;
}
return defaultValue;
}
/**
* 获取字典标签
* @param dictValue 字典值
* @param index list方法中dictType的索引值 从1开始
* @param defaultValue 默认值
* @returns {string|string|rules.dictLabel|{message, required}|data.mdiyFormRule.dictLabel|{trigger, message, required}}
*/
function getDictLabel( dictValue, index, defaultValue) {
if (!defaultValue) {
defaultValue = "";
}
var dictEntity = ''
if(!index && dictValue){
dictEntity = get(1,"", dictValue, null);
}
if (index && dictValue) {
dictEntity = get(index,"", dictValue, null);
}
if(dictEntity){
return dictEntity.dictLabel;
}
return defaultValue;
}
var dict = {
list: list,
dictData: dictData,
getList:getList,
getDictValue:getDictValue,
getDictLabel:getDictLabel,
}
if (typeof ms != "object") {
window.ms = {};
}
window.ms.dict = dict;
}());