first commit
137
public/static/system/css/content.css
Normal file
@@ -0,0 +1,137 @@
|
||||
|
||||
xm-select > .xm-label .scroll .label-content {
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
.layui-card {
|
||||
overflow: hidden!important;
|
||||
}
|
||||
|
||||
.layui-form-item .layui-input-inline {
|
||||
width: 320px;
|
||||
}
|
||||
|
||||
.layui-fluid .layui-form {
|
||||
padding-bottom: 35px;
|
||||
}
|
||||
|
||||
.layui-rate {
|
||||
padding: 0px;
|
||||
padding-top: 3px;
|
||||
}
|
||||
|
||||
.layui-rate .layui-inline{
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
.layui-rate li i.layui-icon {
|
||||
font-size: 16px;
|
||||
margin-right: 0px
|
||||
}
|
||||
|
||||
.layui-fluid .layui-footer {
|
||||
margin-top: 50px;
|
||||
}
|
||||
|
||||
p.layui-clear {
|
||||
height: 10px;
|
||||
}
|
||||
|
||||
.layui-imagesbox {
|
||||
width: 810px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.layui-imagesbox input {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.layui-imagesbox .layui-input-inline {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.layui-imagesbox .layui-input-inline span {
|
||||
position: absolute;
|
||||
right: 5px;
|
||||
top: 5px;
|
||||
cursor: pointer;
|
||||
width: 30px;
|
||||
height: 20px;
|
||||
font-size: 10px;
|
||||
line-height: 20px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 787px) {
|
||||
|
||||
.layui-form-item-fixed .layui-input-inline {
|
||||
width: 181px;
|
||||
}
|
||||
|
||||
.layui-form-video .layui-input-inline:nth-of-type(n+2) {
|
||||
width: 108px;
|
||||
}
|
||||
|
||||
.layui-form-fixday .layui-input-inline:nth-of-type(n+2) {
|
||||
width: 270px;
|
||||
}
|
||||
|
||||
.layui-form-video .layui-form-label:nth-of-type(n+2),.layui-form-fixday .layui-form-label:nth-of-type(n+2){
|
||||
width: 62px;
|
||||
padding-left: 0px;
|
||||
}
|
||||
|
||||
.layui-form-soft .layui-input-inline:nth-of-type(n+2) {
|
||||
width: 108px;
|
||||
}
|
||||
|
||||
.layui-form-soft .layui-form-label:nth-of-type(n+2) {
|
||||
width: 31px;
|
||||
padding-left: 0px;
|
||||
}
|
||||
|
||||
.layui-form-item-fixed .layui-form-label:not(:first-child) {
|
||||
padding-left: 0;
|
||||
width: auto!important;
|
||||
}
|
||||
|
||||
.layui-form-item .wid550 {
|
||||
width: 550px;
|
||||
}
|
||||
|
||||
.layui-form-item .wid650 {
|
||||
width: 650px;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 787px) {
|
||||
|
||||
.layui-form-item .layui-input-inline {
|
||||
width: 200px!important;
|
||||
}
|
||||
|
||||
.layui-form-item .layui-inline {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.layui-imagesbox {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.layui-imagesbox img {
|
||||
width: 208px;
|
||||
}
|
||||
|
||||
.layui-imagesbox .layui-input-inline {
|
||||
width: auto!important;
|
||||
margin-left: 6px;
|
||||
}
|
||||
|
||||
.layui-form-item .picker,.layui-form-item .stars {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
p.layui-clear {
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
49
public/static/system/css/login.css
Normal file
@@ -0,0 +1,49 @@
|
||||
body,html{height:100%}
|
||||
body{min-height:100%;background:#f0f2f5 url(/static/images/background.svg) no-repeat 60%;background-size:100%;position:relative;text-align:center}
|
||||
body{margin:0;color:rgba(0,0,0,.65);font-size:14px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;font-variant:tabular-nums;line-height:1.5;-webkit-font-feature-settings:"tnum";font-feature-settings:"tnum"}
|
||||
img,input,svg{vertical-align:middle}
|
||||
body a{color:#1890ff;text-decoration:none;background-color:transparent;outline:0;cursor:pointer;-webkit-transition:color .3s;transition:color .3s;-webkit-text-decoration-skip:objects}
|
||||
.layui-layout-body{overflow:auto}
|
||||
.swiftadmin-user-display-show{display:block!important}
|
||||
.swiftadmin-login{position:relative;left:0;top:0;padding:110px 0;min-height:100%;box-sizing:border-box}
|
||||
.swiftadmin-login-main{width:390px;margin:0 auto;box-sizing:border-box}
|
||||
.swiftadmin-login-box{padding:20px 3px}
|
||||
.swiftadmin-login-header{text-align:center;padding-right:20px}
|
||||
.swiftadmin-login-header h2{margin-bottom:10px;font-weight:300;font-size:30px;color:#000;font-size:33px;color:rgba(0,0,0,.85);font-family:Avenir,Helvetica Neue,Arial,Helvetica,sans-serif;font-weight:600;position:relative;top:2px}
|
||||
.swiftadmin-login-header p{font-weight:300;color:#999}
|
||||
.swiftadmin-login-body .layui-form-item{position:relative;margin-bottom:25px}
|
||||
.swiftadmin-login-icon{position:absolute;left:1px;top:2px;width:38px;line-height:36px;text-align:center;color:#d2d2d2}
|
||||
.swiftadmin-login-body .layui-form-item .layui-input{padding-left:38px;height:40px;line-height:40px;border-radius:5px;border:0}
|
||||
.swiftadmin-login-codeimg{max-height:38px;width:100%;cursor:pointer;box-sizing:border-box}
|
||||
.swiftadmin-login-other{position:relative;font-size:0;line-height:38px;padding-top:20px}
|
||||
.swiftadmin-login-other>*{display:inline-block;vertical-align:middle;margin-right:10px;font-size:14px}
|
||||
.swiftadmin-login-other .layui-icon{position:relative;top:2px;font-size:26px}
|
||||
.swiftadmin-login-other a:hover{opacity:.8}
|
||||
.swiftadmin-user-jump-change{float:right}
|
||||
.swiftadmin-login-footer{position:absolute;left:0;bottom:0;width:100%;line-height:30px;padding:20px;text-align:center;box-sizing:border-box;color:rgba(0,0,0,.5)}
|
||||
.swiftadmin-login-footer span{padding:0 5px}
|
||||
.swiftadmin-login-footer a{padding:0 5px;color:rgba(0,0,0,.5)}
|
||||
.swiftadmin-login-footer a:hover{color:#000}
|
||||
.swiftadmin-login-main[bgimg]{background-color:#fff;box-shadow:0 0 5px rgba(0,0,0,.05)}
|
||||
@media screen and (max-width:768px){
|
||||
.swiftadmin-login{padding-top:60px}
|
||||
.swiftadmin-login-main{width:300px}
|
||||
.swiftadmin-login-box{padding:10px}
|
||||
}
|
||||
.fl{float:left}
|
||||
.fr{float:right}
|
||||
.swiftadmin-login .logo{height:44px;vertical-align:top;margin-right:16px;border-style:none;display:inline}
|
||||
.swiftadmin-login .captcha{width:97%;padding:2px;border-radius:5px;border:1px solid #d9d9d9;background-color:#fff}
|
||||
.swiftadmin-login .captcha img{width:100%}
|
||||
.swiftadmin-login .layui-col-xs7{width:65%}
|
||||
.swiftadmin-login .captcha:hover,.swiftadmin-login .item:hover,.swiftadmin-login .layui-col-xs7:hover{border:1px solid #1890ff}
|
||||
.swiftadmin-login .item,.swiftadmin-login layui-col-xs7{border:1px solid #d9d9d9;border-radius:5px}
|
||||
.swiftadmin-login .other-login .layui-icon{color:#d9d9d9}
|
||||
.swiftadmin-login .other-login a{margin-left:6px;display:inline-block}
|
||||
.swiftadmin-login .other-login .layui-icon:hover{color:#1890ff}
|
||||
.swiftadmin-login .layui-col-xs3{width:33%}
|
||||
.layui-btn-fixed,.swiftadmin-login .layui-btn{border-radius:5px}
|
||||
.swiftadmin-login .layui-btn-fixed{height:40px;line-height:36px;width:100%;padding:1px}
|
||||
.layui-form-checkbox[lay-skin=primary]:hover i{border-color:#1890ff;color:#fff}
|
||||
.layui-form-checked[lay-skin=primary] i{border-color:#1890ff!important;background-color:#1890ff;color:#fff}
|
||||
.layui-form-pane .layui-form-checkbox {margin-left: 0;}
|
||||
116
public/static/system/css/message.css
Normal file
@@ -0,0 +1,116 @@
|
||||
body {
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
body a:hover {
|
||||
color: #777;
|
||||
}
|
||||
|
||||
.layui-tab-brief {
|
||||
padding: 5px 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.layui-message-list-item:hover, .layui-message-footer a:hover, .message-btn-more:hover {
|
||||
background: #F2F2F2;
|
||||
}
|
||||
|
||||
.layui-message-list {
|
||||
position: absolute;
|
||||
top: 51px;
|
||||
bottom: 44px;
|
||||
left: 0;
|
||||
right: 0;
|
||||
overflow-y: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.layui-message-list-item {
|
||||
padding: 10px 24px;
|
||||
border-bottom: 1px solid #e8e8e8;
|
||||
-ms-flex-align: start;
|
||||
align-items: flex-start;
|
||||
display: flex;
|
||||
-ms-flex: 1 1;
|
||||
flex: 1 1;
|
||||
}
|
||||
|
||||
.layui-message-list-item:hover, .message-btn-clear:hover, .message-btn-more:hover {
|
||||
background: #F2F2F2;
|
||||
}
|
||||
|
||||
.layui-message-item-icon {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
margin-right: 16px;
|
||||
display: block;
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
.layui-message-item-right {
|
||||
display: block;
|
||||
flex: 1 0;
|
||||
line-height: 24px;
|
||||
}
|
||||
|
||||
.layui-message-item-title {
|
||||
font-size: 13px;
|
||||
color: rgba(0, 0, 0, .65);
|
||||
}
|
||||
|
||||
.layui-message-item-text {
|
||||
color: rgba(0, 0, 0, .45);
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.pull-right {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.layui-message-btn-clear, .layui-message-btn-more {
|
||||
display: block;
|
||||
padding: 10px 5px;
|
||||
text-align: center;
|
||||
line-height: 24px;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.layui-message-btn-more {
|
||||
color: #666;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.layui-message-list-empty {
|
||||
text-align: center;
|
||||
color: rgba(0, 0, 0, .45);
|
||||
padding: 73px 0 88px;
|
||||
}
|
||||
|
||||
.layui-message-list-empty img {
|
||||
height: 76px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.layui-message-footer {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
background: white;
|
||||
right: 0;
|
||||
border-top: 1px solid #e8e8e8;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.layui-message-footer a {
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
color: #333;
|
||||
width: 49%;
|
||||
height: 42px;
|
||||
line-height: 42px;
|
||||
}
|
||||
|
||||
.layui-icon-email {
|
||||
font-size: 40px;
|
||||
}
|
||||
183
public/static/system/css/plugin.css
Normal file
@@ -0,0 +1,183 @@
|
||||
body,.layui-fluid {
|
||||
height: 100%;
|
||||
/*background: #fff;*/
|
||||
}
|
||||
|
||||
.layui-col-md3 {
|
||||
width: 20%;
|
||||
}
|
||||
|
||||
.website,.website:hover {
|
||||
color: #fff;
|
||||
border-bottom: 1px solid #fff;
|
||||
}
|
||||
|
||||
.pluginCenter {
|
||||
position: relative;
|
||||
border: 0;
|
||||
text-indent: 1em;
|
||||
}
|
||||
|
||||
.pluginCenter .fa-user {
|
||||
position: absolute;
|
||||
right: 15px;
|
||||
font-size: 18px;
|
||||
top: 6px;
|
||||
}
|
||||
|
||||
.pluginCenter .fa-user:hover {
|
||||
color: #FF5722;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 450px) {
|
||||
.layui-col-md3 {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.layui-project .layui-project-cover {
|
||||
height: 150px;
|
||||
}
|
||||
|
||||
.layui-project-body {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.layui-dropdown.upgrade-version {
|
||||
min-width: 80px!important;
|
||||
}
|
||||
|
||||
.upgrade-version .layui-menu li {
|
||||
width: 80px;
|
||||
line-height: 15px;
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.layui-project .layui-project-body > h2 {
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.layui-elem .layui-plugin-select,.layui-elem .layui-template-select {
|
||||
cursor: pointer;
|
||||
border-radius: 2px;
|
||||
padding: 1px 10px 3px;
|
||||
}
|
||||
|
||||
.layui-elem .layui-plugin-select:hover,.layui-elem .layui-template-select:hover {
|
||||
color: #fff;
|
||||
background: #1890ff;
|
||||
}
|
||||
|
||||
.layui-elem .layui-plugin-select.active,.layui-elem .layui-template-select.active {
|
||||
color: #fff;
|
||||
background: #1890ff;
|
||||
}
|
||||
|
||||
.layui-elem .layui-hot.active,.layui-elem .layui-hot:hover {
|
||||
background: #FE232D;
|
||||
}
|
||||
|
||||
span .layui-btn {
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
.lay-upgrade {
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
i.layui-icon-picture {
|
||||
color: #1890ff;
|
||||
margin-left:3px;
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.layui-badge-dot {
|
||||
margin-bottom: 2px;
|
||||
margin-left: 2px;
|
||||
}
|
||||
|
||||
.layui-input-key {
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
button[lay-filter="formSearch"] {
|
||||
margin-left: 10px;
|
||||
margin-bottom: 4px;
|
||||
padding: 0px 12px;
|
||||
}
|
||||
|
||||
.layui-fluid {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.layui-form-item .layui-input-inline {
|
||||
width: 243px;
|
||||
}
|
||||
|
||||
.layui-form-item .layui-btn {
|
||||
margin: 0px 10px;
|
||||
}
|
||||
|
||||
.layui-elem-quote {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.layui-elem-plugin {
|
||||
color: red;
|
||||
background: url('/static/images/plugin-login.png');
|
||||
border-radius: 3px;
|
||||
height: 53px;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.layui-elem-uninstall {
|
||||
background: #FF5722;
|
||||
color: #fff;
|
||||
border-color: #FF5722;
|
||||
}
|
||||
|
||||
.layui-elem-upgrade {
|
||||
color: #1890ff;
|
||||
background: #e6f7ff;
|
||||
border: 1px solid #91d5ff;
|
||||
padding: 15px 20px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.layui-elem-upgrade .upgrade-title {
|
||||
font-size: 15px;
|
||||
color: #f5222d;
|
||||
}
|
||||
|
||||
.layui-elem-tips {
|
||||
background: #FFB800;
|
||||
color: #fff;
|
||||
border-color: #FFB800;
|
||||
}
|
||||
|
||||
.layui-form-fixed {
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
.layui-layer-title {
|
||||
height: 50px;
|
||||
line-height: 50px;
|
||||
border-bottom: 1px solid #f6f6f6;
|
||||
}
|
||||
|
||||
.layui-plugin-tables {
|
||||
display: none;
|
||||
overflow: hidden;
|
||||
margin-top: 10px;
|
||||
width: 343px;
|
||||
padding-left: 3px;
|
||||
padding-bottom: 3px;
|
||||
}
|
||||
|
||||
.layui-plugin-tables span {
|
||||
padding-top:2px;
|
||||
padding-left: 3px;
|
||||
display: inline-block;
|
||||
}
|
||||
3825
public/static/system/css/style.css
Normal file
106
public/static/system/css/theme.css
Normal file
@@ -0,0 +1,106 @@
|
||||
/** theme.css apache License By https://www.swiftadmin.net */
|
||||
|
||||
.layui-card,.layui-card-header,.layui-card-body {
|
||||
/*border: 0;*/
|
||||
overflow: hidden;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.layui-fluid {
|
||||
padding: 15px;
|
||||
padding-bottom: 5%;
|
||||
}
|
||||
|
||||
.layui-icon-ok {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.drawer-item,.drawer-menu {
|
||||
position: relative;
|
||||
margin-right: 16px;
|
||||
border-radius: 2px;
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
}
|
||||
.drawer-item .layui-icon-ok,.drawer-menu .layui-icon-ok{
|
||||
position: absolute;
|
||||
left: 26px;
|
||||
top: 13px;
|
||||
font-size: 18px;
|
||||
color: #1890ff;
|
||||
}
|
||||
|
||||
.theme-item {
|
||||
float: left;
|
||||
display: inline-block;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin-right: 8px;
|
||||
color: #fff;
|
||||
font-weight: 700;
|
||||
text-align: center;
|
||||
border-radius: 2px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.layui-form-label {
|
||||
width: 110px;
|
||||
text-align: left;
|
||||
padding: 6px 0px;
|
||||
}
|
||||
|
||||
.layui-form .layui-input-inline {
|
||||
width: 80px;
|
||||
float: right;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
.layui-elem-field legend {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.layui-form-select dl dd,.layui-form-select .layui-input {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.layui-form-select .layui-input {
|
||||
height: 26px;
|
||||
width: 80px;
|
||||
}
|
||||
.layui-form-item {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.layui-quote-tips {
|
||||
background-color: #fffbe6;
|
||||
border: 1px solid #ffe58f;
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
font-variant: tabular-nums;
|
||||
line-height: 1.5715;
|
||||
list-style: none;
|
||||
font-feature-settings: "tnum";
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 8px 15px;
|
||||
word-wrap: break-word;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
.layui-quote-tips div {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.layui-quote-tips i {
|
||||
color:#faad14
|
||||
}
|
||||
|
||||
.layui-btn-primary {
|
||||
border: 1px dashed #d9d9d9;
|
||||
}
|
||||
|
||||
.layui-btn-primary:hover {
|
||||
color: #1890ff;
|
||||
}
|
||||
69
public/static/system/images/background.svg
Normal file
@@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg width="1361px" height="609px" viewBox="0 0 1361 609" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
|
||||
<title>Group 21</title>
|
||||
<desc>Created with Sketch.</desc>
|
||||
<defs></defs>
|
||||
<g id="Ant-Design-Pro-3.0" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="账户密码登录-校验" transform="translate(-79.000000, -82.000000)">
|
||||
<g id="Group-21" transform="translate(77.000000, 73.000000)">
|
||||
<g id="Group-18" opacity="0.8" transform="translate(74.901416, 569.699158) rotate(-7.000000) translate(-74.901416, -569.699158) translate(4.901416, 525.199158)">
|
||||
<ellipse id="Oval-11" fill="#CFDAE6" opacity="0.25" cx="63.5748792" cy="32.468367" rx="21.7830479" ry="21.766008"></ellipse>
|
||||
<ellipse id="Oval-3" fill="#CFDAE6" opacity="0.599999964" cx="5.98746479" cy="13.8668601" rx="5.2173913" ry="5.21330997"></ellipse>
|
||||
<path d="M38.1354514,88.3520215 C43.8984227,88.3520215 48.570234,83.6838647 48.570234,77.9254015 C48.570234,72.1669383 43.8984227,67.4987816 38.1354514,67.4987816 C32.3724801,67.4987816 27.7006688,72.1669383 27.7006688,77.9254015 C27.7006688,83.6838647 32.3724801,88.3520215 38.1354514,88.3520215 Z" id="Oval-3-Copy" fill="#CFDAE6" opacity="0.45"></path>
|
||||
<path d="M64.2775582,33.1704963 L119.185836,16.5654915" id="Path-12" stroke="#CFDAE6" stroke-width="1.73913043" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<path d="M42.1431708,26.5002681 L7.71190162,14.5640702" id="Path-16" stroke="#E0B4B7" stroke-width="0.702678964" opacity="0.7" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1.405357899873153,2.108036953469981"></path>
|
||||
<path d="M63.9262187,33.521561 L43.6721326,69.3250951" id="Path-15" stroke="#BACAD9" stroke-width="0.702678964" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1.405357899873153,2.108036953469981"></path>
|
||||
<g id="Group-17" transform="translate(126.850922, 13.543654) rotate(30.000000) translate(-126.850922, -13.543654) translate(117.285705, 4.381889)" fill="#CFDAE6">
|
||||
<ellipse id="Oval-4" opacity="0.45" cx="9.13482653" cy="9.12768076" rx="9.13482653" ry="9.12768076"></ellipse>
|
||||
<path d="M18.2696531,18.2553615 C18.2696531,13.2142826 14.1798519,9.12768076 9.13482653,9.12768076 C4.08980114,9.12768076 0,13.2142826 0,18.2553615 L18.2696531,18.2553615 Z" id="Oval-4" transform="translate(9.134827, 13.691521) scale(-1, -1) translate(-9.134827, -13.691521) "></path>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group-14" transform="translate(216.294700, 123.725600) rotate(-5.000000) translate(-216.294700, -123.725600) translate(106.294700, 35.225600)">
|
||||
<ellipse id="Oval-2" fill="#CFDAE6" opacity="0.25" cx="29.1176471" cy="29.1402439" rx="29.1176471" ry="29.1402439"></ellipse>
|
||||
<ellipse id="Oval-2" fill="#CFDAE6" opacity="0.3" cx="29.1176471" cy="29.1402439" rx="21.5686275" ry="21.5853659"></ellipse>
|
||||
<ellipse id="Oval-2-Copy" stroke="#CFDAE6" opacity="0.4" cx="179.019608" cy="138.146341" rx="23.7254902" ry="23.7439024"></ellipse>
|
||||
<ellipse id="Oval-2" fill="#BACAD9" opacity="0.5" cx="29.1176471" cy="29.1402439" rx="10.7843137" ry="10.7926829"></ellipse>
|
||||
<path d="M29.1176471,39.9329268 L29.1176471,18.347561 C23.1616351,18.347561 18.3333333,23.1796097 18.3333333,29.1402439 C18.3333333,35.1008781 23.1616351,39.9329268 29.1176471,39.9329268 Z" id="Oval-2" fill="#BACAD9"></path>
|
||||
<g id="Group-9" opacity="0.45" transform="translate(172.000000, 131.000000)" fill="#E6A1A6">
|
||||
<ellipse id="Oval-2-Copy-2" cx="7.01960784" cy="7.14634146" rx="6.47058824" ry="6.47560976"></ellipse>
|
||||
<path d="M0.549019608,13.6219512 C4.12262681,13.6219512 7.01960784,10.722722 7.01960784,7.14634146 C7.01960784,3.56996095 4.12262681,0.670731707 0.549019608,0.670731707 L0.549019608,13.6219512 Z" id="Oval-2-Copy-2" transform="translate(3.784314, 7.146341) scale(-1, 1) translate(-3.784314, -7.146341) "></path>
|
||||
</g>
|
||||
<ellipse id="Oval-10" fill="#CFDAE6" cx="218.382353" cy="138.685976" rx="1.61764706" ry="1.61890244"></ellipse>
|
||||
<ellipse id="Oval-10-Copy-2" fill="#E0B4B7" opacity="0.35" cx="179.558824" cy="175.381098" rx="1.61764706" ry="1.61890244"></ellipse>
|
||||
<ellipse id="Oval-10-Copy" fill="#E0B4B7" opacity="0.35" cx="180.098039" cy="102.530488" rx="2.15686275" ry="2.15853659"></ellipse>
|
||||
<path d="M28.9985381,29.9671598 L171.151018,132.876024" id="Path-11" stroke="#CFDAE6" opacity="0.8"></path>
|
||||
</g>
|
||||
<g id="Group-10" opacity="0.799999952" transform="translate(1054.100635, 36.659317) rotate(-11.000000) translate(-1054.100635, -36.659317) translate(1026.600635, 4.659317)">
|
||||
<ellipse id="Oval-7" stroke="#CFDAE6" stroke-width="0.941176471" cx="43.8135593" cy="32" rx="11.1864407" ry="11.2941176"></ellipse>
|
||||
<g id="Group-12" transform="translate(34.596774, 23.111111)" fill="#BACAD9">
|
||||
<ellipse id="Oval-7" opacity="0.45" cx="9.18534718" cy="8.88888889" rx="8.47457627" ry="8.55614973"></ellipse>
|
||||
<path d="M9.18534718,17.4450386 C13.8657264,17.4450386 17.6599235,13.6143199 17.6599235,8.88888889 C17.6599235,4.16345787 13.8657264,0.332739156 9.18534718,0.332739156 L9.18534718,17.4450386 Z" id="Oval-7"></path>
|
||||
</g>
|
||||
<path d="M34.6597385,24.809694 L5.71666084,4.76878945" id="Path-2" stroke="#CFDAE6" stroke-width="0.941176471"></path>
|
||||
<ellipse id="Oval" stroke="#CFDAE6" stroke-width="0.941176471" cx="3.26271186" cy="3.29411765" rx="3.26271186" ry="3.29411765"></ellipse>
|
||||
<ellipse id="Oval-Copy" fill="#F7E1AD" cx="2.79661017" cy="61.1764706" rx="2.79661017" ry="2.82352941"></ellipse>
|
||||
<path d="M34.6312443,39.2922712 L5.06366663,59.785082" id="Path-10" stroke="#CFDAE6" stroke-width="0.941176471"></path>
|
||||
</g>
|
||||
<g id="Group-19" opacity="0.33" transform="translate(1282.537219, 446.502867) rotate(-10.000000) translate(-1282.537219, -446.502867) translate(1142.537219, 327.502867)">
|
||||
<g id="Group-17" transform="translate(141.333539, 104.502742) rotate(275.000000) translate(-141.333539, -104.502742) translate(129.333539, 92.502742)" fill="#BACAD9">
|
||||
<circle id="Oval-4" opacity="0.45" cx="11.6666667" cy="11.6666667" r="11.6666667"></circle>
|
||||
<path d="M23.3333333,23.3333333 C23.3333333,16.8900113 18.1099887,11.6666667 11.6666667,11.6666667 C5.22334459,11.6666667 0,16.8900113 0,23.3333333 L23.3333333,23.3333333 Z" id="Oval-4" transform="translate(11.666667, 17.500000) scale(-1, -1) translate(-11.666667, -17.500000) "></path>
|
||||
</g>
|
||||
<circle id="Oval-5-Copy-6" fill="#CFDAE6" cx="201.833333" cy="87.5" r="5.83333333"></circle>
|
||||
<path d="M143.5,88.8126685 L155.070501,17.6038544" id="Path-17" stroke="#BACAD9" stroke-width="1.16666667"></path>
|
||||
<path d="M17.5,37.3333333 L127.466252,97.6449735" id="Path-18" stroke="#BACAD9" stroke-width="1.16666667"></path>
|
||||
<polyline id="Path-19" stroke="#CFDAE6" stroke-width="1.16666667" points="143.902597 120.302281 174.935455 231.571342 38.5 147.510847 126.366941 110.833333"></polyline>
|
||||
<path d="M159.833333,99.7453842 L195.416667,89.25" id="Path-20" stroke="#E0B4B7" stroke-width="1.16666667" opacity="0.6"></path>
|
||||
<path d="M205.333333,82.1372105 L238.719406,36.1666667" id="Path-24" stroke="#BACAD9" stroke-width="1.16666667"></path>
|
||||
<path d="M266.723424,132.231988 L207.083333,90.4166667" id="Path-25" stroke="#CFDAE6" stroke-width="1.16666667"></path>
|
||||
<circle id="Oval-5" fill="#C1D1E0" cx="156.916667" cy="8.75" r="8.75"></circle>
|
||||
<circle id="Oval-5-Copy-3" fill="#C1D1E0" cx="39.0833333" cy="148.75" r="5.25"></circle>
|
||||
<circle id="Oval-5-Copy-2" fill-opacity="0.6" fill="#D1DEED" cx="8.75" cy="33.25" r="8.75"></circle>
|
||||
<circle id="Oval-5-Copy-4" fill-opacity="0.6" fill="#D1DEED" cx="243.833333" cy="30.3333333" r="5.83333333"></circle>
|
||||
<circle id="Oval-5-Copy-5" fill="#E0B4B7" cx="175.583333" cy="232.75" r="5.25"></circle>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.7 KiB |
39
public/static/system/images/black.svg
Normal file
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="52px" height="45px" viewBox="0 0 52 45" version="1.1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<filter x="-9.4%" y="-6.2%" width="118.8%" height="122.5%" filterUnits="objectBoundingBox" id="filter-1">
|
||||
<feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix>
|
||||
<feMerge>
|
||||
<feMergeNode in="shadowMatrixOuter1"></feMergeNode>
|
||||
<feMergeNode in="SourceGraphic"></feMergeNode>
|
||||
</feMerge>
|
||||
</filter>
|
||||
<rect id="path-2" x="0" y="0" width="48" height="40" rx="4"></rect>
|
||||
<filter x="-4.2%" y="-2.5%" width="108.3%" height="110.0%" filterUnits="objectBoundingBox" id="filter-4">
|
||||
<feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="0.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
|
||||
</filter>
|
||||
</defs>
|
||||
<g id="配置面板" width="48" height="40" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="setting-copy-2" width="48" height="40" transform="translate(-1190.000000, -136.000000)">
|
||||
<g id="Group-8" width="48" height="40" transform="translate(1167.000000, 0.000000)">
|
||||
<g id="Group-5-Copy-5" filter="url(#filter-1)" transform="translate(25.000000, 137.000000)">
|
||||
<mask id="mask-3" fill="white">
|
||||
<use xlink:href="#path-2"></use>
|
||||
</mask>
|
||||
<g id="Rectangle-18">
|
||||
<use fill="black" fill-opacity="1" filter="url(#filter-4)" xlink:href="#path-2"></use>
|
||||
<use fill="#303648" fill-rule="evenodd" xlink:href="#path-2"></use>
|
||||
</g>
|
||||
<rect id="Rectangle-11" fill="#303648" mask="url(#mask-3)" x="0" y="0" width="48" height="10"></rect>
|
||||
<rect id="Rectangle-18" fill="#303648" mask="url(#mask-3)" x="0" y="0" width="16" height="40"></rect>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
39
public/static/system/images/dark.svg
Normal file
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="52px" height="45px" viewBox="0 0 52 45" version="1.1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<filter x="-9.4%" y="-6.2%" width="118.8%" height="122.5%" filterUnits="objectBoundingBox" id="filter-1">
|
||||
<feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix>
|
||||
<feMerge>
|
||||
<feMergeNode in="shadowMatrixOuter1"></feMergeNode>
|
||||
<feMergeNode in="SourceGraphic"></feMergeNode>
|
||||
</feMerge>
|
||||
</filter>
|
||||
<rect id="path-2" x="0" y="0" width="48" height="40" rx="4"></rect>
|
||||
<filter x="-4.2%" y="-2.5%" width="108.3%" height="110.0%" filterUnits="objectBoundingBox" id="filter-4">
|
||||
<feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="0.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
|
||||
</filter>
|
||||
</defs>
|
||||
<g id="配置面板" width="48" height="40" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="setting-copy-2" width="48" height="40" transform="translate(-1190.000000, -136.000000)">
|
||||
<g id="Group-8" width="48" height="40" transform="translate(1167.000000, 0.000000)">
|
||||
<g id="Group-5-Copy-5" filter="url(#filter-1)" transform="translate(25.000000, 137.000000)">
|
||||
<mask id="mask-3" fill="white">
|
||||
<use xlink:href="#path-2"></use>
|
||||
</mask>
|
||||
<g id="Rectangle-18">
|
||||
<use fill="black" fill-opacity="1" filter="url(#filter-4)" xlink:href="#path-2"></use>
|
||||
<use fill="#F0F2F5" fill-rule="evenodd" xlink:href="#path-2"></use>
|
||||
</g>
|
||||
<rect id="Rectangle-11" fill="#FFFFFF" mask="url(#mask-3)" x="0" y="0" width="48" height="10"></rect>
|
||||
<rect id="Rectangle-18" fill="#303648" mask="url(#mask-3)" x="0" y="0" width="16" height="40"></rect>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
BIN
public/static/system/images/head.png
Normal file
|
After Width: | Height: | Size: 52 KiB |
39
public/static/system/images/hybrid.svg
Normal file
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="52px" height="45px" viewBox="0 0 52 45" version="1.1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<filter x="-9.4%" y="-6.2%" width="118.8%" height="122.5%" filterUnits="objectBoundingBox" id="filter-1">
|
||||
<feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix>
|
||||
<feMerge>
|
||||
<feMergeNode in="shadowMatrixOuter1"></feMergeNode>
|
||||
<feMergeNode in="SourceGraphic"></feMergeNode>
|
||||
</feMerge>
|
||||
</filter>
|
||||
<rect id="path-2" x="0" y="0" width="48" height="40" rx="4"></rect>
|
||||
<filter x="-4.2%" y="-2.5%" width="108.3%" height="110.0%" filterUnits="objectBoundingBox" id="filter-4">
|
||||
<feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="0.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
|
||||
</filter>
|
||||
</defs>
|
||||
<g id="配置面板" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="setting-copy-2" transform="translate(-1254.000000, -136.000000)">
|
||||
<g id="Group-8" transform="translate(1167.000000, 0.000000)">
|
||||
<g id="Group-5" filter="url(#filter-1)" transform="translate(89.000000, 137.000000)">
|
||||
<mask id="mask-3" fill="white">
|
||||
<use xlink:href="#path-2"></use>
|
||||
</mask>
|
||||
<g id="Rectangle-18">
|
||||
<use fill="black" fill-opacity="1" filter="url(#filter-4)" xlink:href="#path-2"></use>
|
||||
<use fill="#F0F2F5" fill-rule="evenodd" xlink:href="#path-2"></use>
|
||||
</g>
|
||||
<rect id="Rectangle-18" fill="#313548" mask="url(#mask-3)" x="0" y="0" width="16" height="40"></rect>
|
||||
<rect id="Rectangle-11" fill="#313548" mask="url(#mask-3)" x="0" y="0" width="48" height="10"></rect>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
39
public/static/system/images/light.svg
Normal file
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="52px" height="45px" viewBox="0 0 52 45" version="1.1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<filter x="-9.4%" y="-6.2%" width="118.8%" height="122.5%" filterUnits="objectBoundingBox" id="filter-1">
|
||||
<feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix>
|
||||
<feMerge>
|
||||
<feMergeNode in="shadowMatrixOuter1"></feMergeNode>
|
||||
<feMergeNode in="SourceGraphic"></feMergeNode>
|
||||
</feMerge>
|
||||
</filter>
|
||||
<rect id="path-2" x="0" y="0" width="48" height="40" rx="4"></rect>
|
||||
<filter x="-4.2%" y="-2.5%" width="108.3%" height="110.0%" filterUnits="objectBoundingBox" id="filter-4">
|
||||
<feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="0.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
|
||||
</filter>
|
||||
</defs>
|
||||
<g id="配置面板" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="setting-copy-2" transform="translate(-1254.000000, -136.000000)">
|
||||
<g id="Group-8" transform="translate(1167.000000, 0.000000)">
|
||||
<g id="Group-5" filter="url(#filter-1)" transform="translate(89.000000, 137.000000)">
|
||||
<mask id="mask-3" fill="white">
|
||||
<use xlink:href="#path-2"></use>
|
||||
</mask>
|
||||
<g id="Rectangle-18">
|
||||
<use fill="black" fill-opacity="1" filter="url(#filter-4)" xlink:href="#path-2"></use>
|
||||
<use fill="#F0F2F5" fill-rule="evenodd" xlink:href="#path-2"></use>
|
||||
</g>
|
||||
<rect id="Rectangle-18" fill="#FFFFFF" mask="url(#mask-3)" x="0" y="0" width="16" height="40"></rect>
|
||||
<rect id="Rectangle-11" fill="#FFFFFF" mask="url(#mask-3)" x="0" y="0" width="48" height="10"></rect>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
BIN
public/static/system/images/logo.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
public/static/system/images/message.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
public/static/system/images/noting.png
Normal file
|
After Width: | Height: | Size: 842 B |
39
public/static/system/images/top.svg
Normal file
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="52px" height="45px" viewBox="0 0 52 45" version="1.1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
|
||||
<defs>
|
||||
<filter x="-9.4%" y="-6.2%" width="118.8%" height="122.5%" filterUnits="objectBoundingBox" id="filter-1">
|
||||
<feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix>
|
||||
<feMerge>
|
||||
<feMergeNode in="shadowMatrixOuter1"></feMergeNode>
|
||||
<feMergeNode in="SourceGraphic"></feMergeNode>
|
||||
</feMerge>
|
||||
</filter>
|
||||
<rect id="path-2" x="0" y="0" width="48" height="40" rx="4"></rect>
|
||||
<filter x="-4.2%" y="-2.5%" width="108.3%" height="110.0%" filterUnits="objectBoundingBox" id="filter-4">
|
||||
<feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
||||
<feGaussianBlur stdDeviation="0.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
|
||||
</filter>
|
||||
</defs>
|
||||
<g id="配置面板" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="setting-copy-2" transform="translate(-1254.000000, -337.000000)">
|
||||
<g id="Group-8" transform="translate(1167.000000, 0.000000)">
|
||||
<g id="Group-5" filter="url(#filter-1)" transform="translate(89.000000, 338.000000)">
|
||||
<mask id="mask-3" fill="white">
|
||||
<use xlink:href="#path-2"></use>
|
||||
</mask>
|
||||
<g id="Rectangle-18">
|
||||
<use fill="black" fill-opacity="1" filter="url(#filter-4)" xlink:href="#path-2"></use>
|
||||
<use fill="#F0F2F5" fill-rule="evenodd" xlink:href="#path-2"></use>
|
||||
</g>
|
||||
<rect id="Rectangle-11" fill="#303648" mask="url(#mask-3)" x="0" y="0" width="48" height="10"></rect>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.3 KiB |
BIN
public/static/system/images/user.png
Normal file
|
After Width: | Height: | Size: 52 KiB |
1
public/static/system/js/cascadata.js
Normal file
45
public/static/system/js/common.js
Normal file
@@ -0,0 +1,45 @@
|
||||
/** SwiftAdmin iframe Apache2.0 License By http://www.swiftadmin.net */
|
||||
|
||||
// 以下代码是配置layui扩展模块的目录,每个页面都需要引入
|
||||
layui.config({
|
||||
version: 'v2.0.0',
|
||||
base: getProjectUrl() + 'module/'
|
||||
}).extend({
|
||||
tags: 'tags/tags',
|
||||
i18n: 'i18n/jquery.i18n.properties',
|
||||
cascader: 'cascader/cascader',
|
||||
fileManager: 'fileManager/fileManager',
|
||||
iconPicker: 'iconPicker/iconPicker',
|
||||
echarts: "echarts/echarts",
|
||||
xmselect: 'xmselect/xmselect',
|
||||
treetable: 'treetable/treetable',
|
||||
tableSelect: 'tableSelect/tableSelect',
|
||||
formDesign: 'formDesign/formDesign',
|
||||
soulTable: 'soulTable/soulTable',
|
||||
tableChild: 'soulTable/tableChild',
|
||||
tableMerge: 'soulTable/tableMerge',
|
||||
tableFilter: 'soulTable/tableFilter',
|
||||
excel: 'soulTable/excel',
|
||||
}).use(['admin','jquery'], function () {
|
||||
var $ = layui.jquery; // jquery的
|
||||
var admin = layui.admin; // amdin模块的
|
||||
});
|
||||
|
||||
// 获取当前项目的根路径,通过获取layui.js全路径截取assets之前的地址
|
||||
function getProjectUrl() {
|
||||
|
||||
var layuiDir = layui.cache.dir;
|
||||
if (!layuiDir) {
|
||||
var js = document.scripts, last = js.length - 1, src;
|
||||
for (var i = last; i > 0; i--) {
|
||||
if (js[i].readyState === 'interactive') {
|
||||
src = js[i].src;
|
||||
break;
|
||||
}
|
||||
}
|
||||
var jsPath = src || js[last].src;
|
||||
layuiDir = jsPath.substring(0, jsPath.lastIndexOf('/') + 1);
|
||||
}
|
||||
|
||||
return layuiDir.substring(0, layuiDir.indexOf('layui'));
|
||||
}
|
||||
2337
public/static/system/layui/css/font-awesome.css
vendored
Normal file
1
public/static/system/layui/css/layui.css
Normal file
1
public/static/system/layui/css/modules/code.css
Normal file
@@ -0,0 +1 @@
|
||||
html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-view{display:block;position:relative;margin:10px 0;padding:0;border:1px solid #eee;border-left-width:6px;background-color:#fafafa;color:#333;font-family:Courier New;font-size:13px}.layui-code-title{position:relative;padding:0 10px;height:40px;line-height:40px;border-bottom:1px solid #eee;font-size:12px}.layui-code-title>.layui-code-about{position:absolute;right:10px;top:0;color:#b7b7b7}.layui-code-about>a{padding-left:10px}.layui-code-view>.layui-code-ol,.layui-code-view>.layui-code-ul{position:relative;overflow:auto}.layui-code-view>.layui-code-ol>li{position:relative;margin-left:45px;line-height:20px;padding:0 10px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view>.layui-code-ol>li:first-child,.layui-code-view>.layui-code-ul>li:first-child{padding-top:10px}.layui-code-view>.layui-code-ol>li:last-child,.layui-code-view>.layui-code-ul>li:last-child{padding-bottom:10px}.layui-code-view>.layui-code-ul>li{position:relative;line-height:20px;padding:0 10px;list-style-type:none;*list-style-type:none;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-dark{border:1px solid #0c0c0c;border-left-color:#3f3f3f;background-color:#0c0c0c;color:#c2be9e}.layui-code-dark>.layui-code-title{border-bottom:none}.layui-code-dark>.layui-code-ol>li,.layui-code-dark>.layui-code-ul>li{background-color:#3f3f3f;border-left:none}.layui-code-dark>.layui-code-ul>li{margin-left:6px}.layui-code-demo .layui-code{visibility:visible!important;margin:-15px;border-top:none;border-right:none;border-bottom:none}.layui-code-demo .layui-tab-content{padding:15px;border-top:none}
|
||||
@@ -0,0 +1,16 @@
|
||||
/** 图标字体 **/
|
||||
@font-face {font-family: 'laydate-icon';
|
||||
src: url('./font/iconfont.eot');
|
||||
src: url('./font/iconfont.eot#iefix') format('embedded-opentype'),
|
||||
url('./font/iconfont.svg#iconfont') format('svg'),
|
||||
url('./font/iconfont.woff') format('woff'),
|
||||
url('./font/iconfont.ttf') format('truetype');
|
||||
}
|
||||
|
||||
.laydate-icon{
|
||||
font-family:"laydate-icon" !important;
|
||||
font-size: 16px;
|
||||
font-style: normal;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
After Width: | Height: | Size: 5.8 KiB |
BIN
public/static/system/layui/css/modules/layer/default/icon.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
1
public/static/system/layui/css/modules/notice.css
Normal file
1
public/static/system/layui/css/modules/tags.css
Normal file
@@ -0,0 +1 @@
|
||||
.layui-tags{border:1px solid #e3e7f1;height:29px;line-height:1.3;background-color:#fff;border-radius:2px;padding-left:10px}.layui-tags input{width:90px;font-family:helvetica;font-size:13px;border:1px solid transparent;background:0 0;color:#000;outline:0;height:28px;float:left}.layui-tags .tag-elem{float:left;height:25px;font-size:12px;box-sizing:border-box;margin-right:5px;padding:5px;margin-top:2px;-moz-border-radius:2px;-webkit-border-radius:2px;font-family:helvetica;color:#1890ff;background:#e6f7ff;border:1px solid #91d5ff}.layui-tags span.tag-elem i{font-family:Verdana;color:#0084ff;margin-left:5px;font-size:12px;cursor:pointer}#layui-tags-ajax li b,.layui-tags span.tag-elem i:hover{color:red}#layui-tags-ajax{text-align:left;cursor:default;background:#fff;border:1px solid rgba(0,0,0,.15);border-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);-moz-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box;position:absolute;display:none;z-index:1029;max-height:254px;overflow:hidden;overflow-y:auto;width:138px;box-sizing:border-box}#layui-tags-ajax li{position:relative;line-height:20px;overflow:hidden;text-overflow:ellipsis;font-size:1em;color:#333;padding:5px 10px;cursor:pointer;white-space:nowrap}#layui-tags-ajax .layui-tag-this,#layui-tags-ajax li:hover{background:#f0f0f0}
|
||||
BIN
public/static/system/layui/font/iconfont.eot
Normal file
554
public/static/system/layui/font/iconfont.svg
Normal file
|
After Width: | Height: | Size: 299 KiB |
BIN
public/static/system/layui/font/iconfont.ttf
Normal file
BIN
public/static/system/layui/font/iconfont.woff
Normal file
BIN
public/static/system/layui/font/iconfont.woff2
Normal file
BIN
public/static/system/layui/fonts/FontAwesome.otf
Normal file
BIN
public/static/system/layui/fonts/fontawesome-webfont.eot
Normal file
2671
public/static/system/layui/fonts/fontawesome-webfont.svg
Normal file
|
After Width: | Height: | Size: 434 KiB |
BIN
public/static/system/layui/fonts/fontawesome-webfont.ttf
Normal file
BIN
public/static/system/layui/fonts/fontawesome-webfont.woff
Normal file
BIN
public/static/system/layui/fonts/fontawesome-webfont.woff2
Normal file
1
public/static/system/layui/layui.js
Normal file
387
public/static/system/module/CircleProgress.js
Normal file
@@ -0,0 +1,387 @@
|
||||
/*!
|
||||
* Circle Progress - v0.0.0 - 2019-07-13
|
||||
* https://tigrr.github.io/circle-progress
|
||||
* Copyright (c) Tigran Sargsyan
|
||||
* Licensed MIT
|
||||
*/
|
||||
layui.define(function (exports) {
|
||||
|
||||
"use strict";
|
||||
|
||||
function _classCallCheck(a, b) {
|
||||
if (!(a instanceof b)) throw new TypeError("Cannot call a class as a function")
|
||||
}
|
||||
|
||||
var _extends = Object.assign || function (a) {
|
||||
for (var b = 1; b < arguments.length; b++) {
|
||||
var c = arguments[b];
|
||||
for (var d in c) Object.prototype.hasOwnProperty.call(c, d) && (a[d] = c[d])
|
||||
}
|
||||
return a
|
||||
}, _createClass = function () {
|
||||
function a(a, b) {
|
||||
for (var c = 0; c < b.length; c++) {
|
||||
var d = b[c];
|
||||
d.enumerable = d.enumerable || !1, d.configurable = !0, "value" in d && (d.writable = !0), Object.defineProperty(a, d.key, d)
|
||||
}
|
||||
}
|
||||
|
||||
return function (b, c, d) {
|
||||
return c && a(b.prototype, c), d && a(b, d), b
|
||||
}
|
||||
}(), _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (a) {
|
||||
return typeof a
|
||||
} : function (a) {
|
||||
return a && "function" == typeof Symbol && a.constructor === Symbol && a !== Symbol.prototype ? "symbol" : typeof a
|
||||
}, CircleProgress = function () {
|
||||
SVGElement.prototype.hasOwnProperty("innerHTML") || Object.defineProperty(SVGElement.prototype, "innerHTML", {
|
||||
get: function () {
|
||||
var a, b, c, d, e, f;
|
||||
for (c = document.createElement("div"), b = this.cloneNode(!0), f = b.childNodes, d = 0, e = f.length; e > d; d++) a = f[d], c.appendChild(a);
|
||||
return c.innerHTML
|
||||
}, set: function (a) {
|
||||
for (var b, c, d, e, f, g, h; this.firstChild;) this.firstChild.parentNode.removeChild(this.firstChild);
|
||||
for (a = "<svg id='wrapper' xmlns='http://www.w3.org/2000/svg'>" + a + "</svg>", b = document.createElement("div"), b.innerHTML = a, d = b.querySelector("svg#wrapper"), g = d.childNodes, h = [], e = 0, f = g.length; f > e; e++) c = g[e], h.push(this.appendChild(c));
|
||||
return h
|
||||
}, enumerable: !1, configurable: !0
|
||||
});
|
||||
var a = function () {
|
||||
var a, b, c, d;
|
||||
return a = function (a, c, d, e) {
|
||||
var f, g;
|
||||
return e = e || document, g = Object.create(b), "string" == typeof a && (a = e.querySelector(a)), a ? (f = e.createElementNS("http://www.w3.org/2000/svg", "svg"), f.setAttribute("version", "1.1"), c && f.setAttribute("width", c), d && f.setAttribute("height", d), c && d && f.setAttribute("viewBox", "0 0 " + c + " " + d), a.appendChild(f), g.svg = f, g) : void 0
|
||||
}, b = {
|
||||
element: function (a, b, d, e) {
|
||||
var f;
|
||||
return f = c(this, a, b, e), d && (f.el.innerHTML = d), f
|
||||
}, _shortcutElement: function (a, b) {
|
||||
var c, d, e = {};
|
||||
switch (a) {
|
||||
case"rect":
|
||||
c = ["x", "y", "width", "height", "r"];
|
||||
break;
|
||||
case"circle":
|
||||
c = ["cx", "cy", "r"];
|
||||
break;
|
||||
case"path":
|
||||
c = ["d"];
|
||||
break;
|
||||
case"text":
|
||||
c = ["x", "y"], d = b[3]
|
||||
}
|
||||
if (c.length !== b.length) throw new Error("Unexpected number of arguments to " + a + ". Expected " + c.length + " arguments, got " + b.length);
|
||||
return c.forEach(function (a) {
|
||||
e[a] = b[a]
|
||||
}), this.element.apply(this, [a, e, d])
|
||||
}, rect: function () {
|
||||
return this._shortcutElement("rect", arguments)
|
||||
}, circle: function () {
|
||||
return this._shortcutElement("circle", arguments)
|
||||
}, path: function () {
|
||||
return this._shortcutElement("path", arguments)
|
||||
}
|
||||
}, c = function (a, b, c, e, f) {
|
||||
var g;
|
||||
return f = f || document, g = Object.create(d), g.el = f.createElementNS("http://www.w3.org/2000/svg", b), g.attr(c), (e ? e.el || e : a.svg).appendChild(g.el), g
|
||||
}, d = {
|
||||
attr: function (a, b) {
|
||||
if (void 0 === a) return this;
|
||||
if ("object" === ("undefined" == typeof a ? "undefined" : _typeof(a))) {
|
||||
for (var c in a) this.attr(c, a[c]);
|
||||
return this
|
||||
}
|
||||
return void 0 === b ? this.el.getAttributeNS(null, a) : (this.el.setAttribute(a, b), this)
|
||||
}, content: function (a) {
|
||||
return this.el.innerHTML = a, this
|
||||
}
|
||||
}, a
|
||||
}();
|
||||
!function () {
|
||||
for (var a = 0, b = ["ms", "moz", "webkit", "o"], c = 0; c < b.length && !window.requestAnimationFrame; ++c) window.requestAnimationFrame = window[b[c] + "RequestAnimationFrame"], window.cancelAnimationFrame = window[b[c] + "CancelAnimationFrame"] || window[b[c] + "CancelRequestAnimationFrame"];
|
||||
window.requestAnimationFrame || (window.requestAnimationFrame = function (b, c) {
|
||||
var d = Date.now(), e = Math.max(0, 16 - (d - a)), f = window.setTimeout(function () {
|
||||
b(d + e)
|
||||
}, e);
|
||||
return a = d + e, f
|
||||
}), window.cancelAnimationFrame || (window.cancelAnimationFrame = function (a) {
|
||||
clearTimeout(a)
|
||||
})
|
||||
}();
|
||||
var b = function d(a, b, c, e, f) {
|
||||
var g = d.easings[a], h = window.performance.now ? window.performance.now() : Date.now(), i = function j() {
|
||||
var a = (window.performance.now ? window.performance.now() : Date.now()) - h, d = g(a, b, c, e);
|
||||
f(d), e > a ? requestAnimationFrame(j) : f(b + c)
|
||||
};
|
||||
requestAnimationFrame(i)
|
||||
};
|
||||
b.easings = {
|
||||
linear: function (a, b, c, d) {
|
||||
return c * a / d + b
|
||||
}, easeInCubic: function (a, b, c, d) {
|
||||
return a /= d, c * a * a * a + b
|
||||
}, easeOutCubic: function (a, b, c, d) {
|
||||
return a /= d, a--, c * (a * a * a + 1) + b
|
||||
}, easeInOutCubic: function (a, b, c, d) {
|
||||
return a /= d / 2, 1 > a ? c / 2 * a * a * a + b : (a -= 2, c / 2 * (a * a * a + 2) + b)
|
||||
}, easeInQuadr: function (a, b, c, d) {
|
||||
return a /= d, c * a * a * a * a + b
|
||||
}, easeOutQuadr: function (a, b, c, d) {
|
||||
return a /= d, a--, -c * (a * a * a * a - 1) + b
|
||||
}, easeInOutQuadr: function (a, b, c, d) {
|
||||
return a /= d / 2, 1 > a ? c / 2 * a * a * a * a + b : (a -= 2, -c / 2 * (a * a * a * a - 2) + b)
|
||||
}
|
||||
};
|
||||
var c = function () {
|
||||
var c = {
|
||||
math: {
|
||||
polarToCartesian: function (a, b) {
|
||||
return {x: a * Math.cos(b * Math.PI / 180), y: a * Math.sin(b * Math.PI / 180)}
|
||||
}
|
||||
}
|
||||
}, d = function () {
|
||||
function d(b) {
|
||||
var c = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
|
||||
e = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : document;
|
||||
_classCallCheck(this, d);
|
||||
var f = void 0;
|
||||
if ("string" == typeof b && (b = e.querySelector(b)), !b) throw new Error("CircleProgress: you must pass the container element as the first argument");
|
||||
return b.circleProgress ? b.circleProgress : (b.circleProgress = this, this.doc = e, b.setAttribute("role", "progressbar"), this.el = b, c = _extends({}, d.defaults, c), Object.defineProperty(this, "_attrs", {
|
||||
value: {},
|
||||
enumerable: !1
|
||||
}), f = "valueOnCircle" === c.textFormat ? 16 : 6, this.graph = {
|
||||
paper: a(b, 100, 100),
|
||||
angle: 0
|
||||
}, this.graph.circle = this.graph.paper.element("circle").attr({
|
||||
"class": "circle-progress-circle",
|
||||
cx: 50,
|
||||
cy: 50,
|
||||
r: 50 - f / 2,
|
||||
fill: "none",
|
||||
stroke: "#eaeef2",
|
||||
"stroke-width": f
|
||||
}), this.graph.sector = this.graph.paper.path(d._makeSectorPath(50, 50, 50 - f / 2, 0, 0)).attr({
|
||||
"class": "circle-progress-value",
|
||||
fill: "none",
|
||||
stroke: "#00CC00",
|
||||
"stroke-width": f,
|
||||
"stroke-linecap": "round"
|
||||
}), this.graph.text = this.graph.paper.element("text", {
|
||||
"class": "circle-progress-text",
|
||||
x: 50,
|
||||
y: 50,
|
||||
font: "22px Arial, sans-serif",
|
||||
"font-size": "22px",
|
||||
"text-anchor": "middle",
|
||||
fill: "#515a6e"
|
||||
}), this._initText(), void this.attr(["indeterminateText", "textFormat", "startAngle", "clockwise", "animation", "animationDuration", "constrain", "min", "max", "value"].filter(function (a) {
|
||||
return a in c
|
||||
}).map(function (a) {
|
||||
return [a, c[a]]
|
||||
})))
|
||||
}
|
||||
|
||||
return _createClass(d, [{
|
||||
key: "value", get: function () {
|
||||
return this._attrs.value
|
||||
}, set: function (a) {
|
||||
this.attr("value", a)
|
||||
}
|
||||
}, {
|
||||
key: "min", get: function () {
|
||||
return this._attrs.min
|
||||
}, set: function (a) {
|
||||
this.attr("min", a)
|
||||
}
|
||||
}, {
|
||||
key: "max", get: function () {
|
||||
return this._attrs.max
|
||||
}, set: function (a) {
|
||||
this.attr("max", a)
|
||||
}
|
||||
}, {
|
||||
key: "startAngle", get: function () {
|
||||
return this._attrs.startAngle
|
||||
}, set: function (a) {
|
||||
this.attr("startAngle", a)
|
||||
}
|
||||
}, {
|
||||
key: "clockwise", get: function () {
|
||||
return this._attrs.clockwise
|
||||
}, set: function (a) {
|
||||
this.attr("clockwise", a)
|
||||
}
|
||||
}, {
|
||||
key: "constrain", get: function () {
|
||||
return this._attrs.constrain
|
||||
}, set: function (a) {
|
||||
this.attr("constrain", a)
|
||||
}
|
||||
}, {
|
||||
key: "indeterminateText", get: function () {
|
||||
return this._attrs.indeterminateText
|
||||
}, set: function (a) {
|
||||
this.attr("indeterminateText", a)
|
||||
}
|
||||
}, {
|
||||
key: "textFormat", get: function () {
|
||||
return this._attrs.textFormat
|
||||
}, set: function (a) {
|
||||
this.attr("textFormat", a)
|
||||
}
|
||||
}, {
|
||||
key: "animation", get: function () {
|
||||
return this._attrs.animation
|
||||
}, set: function (a) {
|
||||
this.attr("animation", a)
|
||||
}
|
||||
}, {
|
||||
key: "animationDuration", get: function () {
|
||||
return this._attrs.animationDuration
|
||||
}, set: function (a) {
|
||||
this.attr("animationDuration", a)
|
||||
}
|
||||
}]), _createClass(d, [{
|
||||
key: "attr", value: function (a) {
|
||||
var b = this;
|
||||
if ("string" == typeof a) return 1 === arguments.length ? this._attrs[a] : (this._set(arguments[0], arguments[1]), this._updateGraph(), this);
|
||||
if ("object" !== ("undefined" == typeof a ? "undefined" : _typeof(a))) throw new TypeError('Wrong argument passed to attr. Expected object, got "' + ("undefined" == typeof a ? "undefined" : _typeof(a)) + '"');
|
||||
return Array.isArray(a) || (a = Object.keys(a).map(function (b) {
|
||||
return [b, a[b]]
|
||||
})), a.forEach(function (a) {
|
||||
return b._set(a[0], a[1])
|
||||
}), this._updateGraph(), this
|
||||
}
|
||||
}, {
|
||||
key: "_set", value: function (a, b) {
|
||||
var c = {value: "aria-valuenow", min: "aria-valuemin", max: "aria-valuemax"}, d = void 0;
|
||||
if (b = this._formatValue(a, b), void 0 === b) throw new TypeError("Failed to set the " + a + " property on CircleProgress: The provided value is non-finite.");
|
||||
this._attrs[a] !== b && ("min" === a && b >= this.max || "max" === a && b <= this.min || ("value" === a && void 0 !== b && this.constrain && (null != this.min && b < this.min && (b = this.min), null != this.max && b > this.max && (b = this.max)), this._attrs[a] = b, a in c && (void 0 !== b ? this.el.setAttribute(c[a], b) : this.el.removeAttribute(c[a])), -1 !== ["min", "max", "constrain"].indexOf(a) && (this.value > this.max || this.value < this.min) && (this.value = Math.min(this.max, Math.max(this.min, this.value))), "textFormat" === a && (this._initText(), d = "valueOnCircle" === b ? 16 : 6, this.graph.sector.attr("stroke-width", d), this.graph.circle.attr("stroke-width", d))))
|
||||
}
|
||||
}, {
|
||||
key: "_formatValue", value: function (a, c) {
|
||||
switch (a) {
|
||||
case"value":
|
||||
case"min":
|
||||
case"max":
|
||||
c = parseFloat(c), isFinite(c) || (c = void 0);
|
||||
break;
|
||||
case"startAngle":
|
||||
c = parseFloat(c), c = isFinite(c) ? Math.max(0, Math.min(360, c)) : void 0;
|
||||
break;
|
||||
case"clockwise":
|
||||
case"constrain":
|
||||
c = !!c;
|
||||
break;
|
||||
case"indeterminateText":
|
||||
c = "" + c;
|
||||
break;
|
||||
case"textFormat":
|
||||
if ("function" != typeof c && -1 === ["valueOnCircle", "horizontal", "vertical", "percent", "value", "none"].indexOf(c)) throw new Error('Failed to set the "textFormat" property on CircleProgress: the provided value "' + c + '" is not a legal textFormat identifier.');
|
||||
break;
|
||||
case"animation":
|
||||
if ("string" != typeof c) throw new TypeError('Failed to set "animation" property on CircleProgress: the value must be string, ' + ("undefined" == typeof c ? "undefined" : _typeof(c)) + " passed.");
|
||||
if ("none" !== c && !b.easings[c]) throw new Error('Failed to set "animation" on CircleProgress: the provided value ' + c + " is not a legal easing function name.")
|
||||
}
|
||||
return c
|
||||
}
|
||||
}, {
|
||||
key: "_valToAngle", value: function () {
|
||||
var a;
|
||||
return this._isIndeterminate() ? 0 : 0 === this.max ? this.value ? 360 : 0 : (a = (this.value - this.min) / this.max * 360, a = Math.min(360, Math.max(0, a)))
|
||||
}
|
||||
}, {
|
||||
key: "_isIndeterminate", value: function () {
|
||||
return !("number" == typeof this.value && "number" == typeof this.max && "number" == typeof this.min)
|
||||
}
|
||||
}, {
|
||||
key: "_positionValueText", value: function (a) {
|
||||
var b = c.math.polarToCartesian(this._getRadius(), a);
|
||||
this.graph.textVal.attr({x: 50 + b.x, y: 50 + b.y - 4})
|
||||
}
|
||||
}, {
|
||||
key: "_initText", value: function () {
|
||||
switch (this.graph.text.content(""), this.textFormat) {
|
||||
case"valueOnCircle":
|
||||
this.graph.textVal = this.graph.paper.element("tspan", {
|
||||
x: 0,
|
||||
y: 0,
|
||||
"class": "circle-progress-text-value",
|
||||
"font-size": "12",
|
||||
fill: "valueOnCircle" === this.textFormat ? "#fff" : "#888"
|
||||
}, "", this.graph.text), this.graph.textMax = this.graph.paper.element("tspan", {
|
||||
x: 50,
|
||||
y: 50,
|
||||
"class": "circle-progress-text-max",
|
||||
"font-size": "22"
|
||||
}, "", this.graph.text), this.graph.text.el.hasAttribute("dominant-baseline") || this.graph.textMax.attr("dy", "0.4em");
|
||||
break;
|
||||
case"horizontal":
|
||||
this.graph.textVal = this.graph.paper.element("tspan", {
|
||||
"class": "circle-progress-text-value",
|
||||
"font-size": "20"
|
||||
}, "", this.graph.text), this.graph.textSeparator = this.graph.paper.element("tspan", {
|
||||
"class": "circle-progress-text-separator",
|
||||
"font-size": "20"
|
||||
}, "/", this.graph.text), this.graph.textMax = this.graph.paper.element("tspan", {
|
||||
"class": "circle-progress-text-max",
|
||||
"font-size": "20"
|
||||
}, "", this.graph.text);
|
||||
break;
|
||||
case"vertical":
|
||||
this.graph.text.el.hasAttribute("dominant-baseline") && this.graph.text.attr("dominant-baseline", "text-after-edge"), this.graph.textVal = this.graph.paper.element("tspan", {
|
||||
"class": "circle-progress-text-value",
|
||||
x: 50,
|
||||
dy: "-0.2em",
|
||||
"font-size": "20"
|
||||
}, "", this.graph.text), this.graph.textSeparator = this.graph.paper.element("tspan", {
|
||||
"class": "circle-progress-text-separator",
|
||||
x: 50,
|
||||
dy: "0.1em",
|
||||
"font-family": "Arial, sans-serif",
|
||||
"font-size": "20"
|
||||
}, "___", this.graph.text), this.graph.textMax = this.graph.paper.element("tspan", {
|
||||
"class": "circle-progress-text-max",
|
||||
x: 50,
|
||||
dy: "1.2em",
|
||||
"font-size": "20"
|
||||
}, "", this.graph.text)
|
||||
}
|
||||
"vertical" !== this.textFormat && (this.graph.text.el.hasAttribute("dominant-baseline") ? this.graph.text.attr("dominant-baseline", "central") : this.graph.text.attr("dy", "0.4em"))
|
||||
}
|
||||
}, {
|
||||
key: "_updateGraph", value: function () {
|
||||
var a = this, c = this.startAngle - 90, e = void 0, f = void 0, g = void 0;
|
||||
this._isIndeterminate() ? "valueOnCircle" === this.textFormat && this._positionValueText(c) : (e = this._valToAngle(this.value), f = this._getRadius(), g = this.clockwise, "none" !== this.animation && e !== this.graph.angle ? b(this.animation, this.graph.angle, e - this.graph.angle, this.animationDuration, function (b) {
|
||||
a.graph.sector.attr("d", d._makeSectorPath(50, 50, f, c, b, g)), a.graph.circle.attr("r", f)
|
||||
}) : (this.graph.sector.attr("d", d._makeSectorPath(50, 50, f, c, e, g)), this.graph.circle.attr("r", f)), this.graph.angle = e, "valueOnCircle" === this.textFormat && this._positionValueText((2 * c + e) / 2)), "function" == typeof this.textFormat ? this.graph.text.content(this.textFormat(this.value, this.max)) : "value" === this.textFormat ? this.graph.text.el.textContent = void 0 !== this.value ? this.value : this.indeterminateText : "percent" === this.textFormat ? this.graph.text.el.textContent = (void 0 !== this.value && null != this.max ? Math.round(this.value / this.max * 100) : this.indeterminateText) + "%" : "none" === this.textFormat ? this.graph.text.el.textContent = "" : (this.graph.textVal.el.textContent = void 0 !== this.value ? this.value : this.indeterminateText, this.graph.textMax.el.textContent = void 0 !== this.max ? this.max : this.indeterminateText)
|
||||
}
|
||||
}, {
|
||||
key: "_getRadius", value: function () {
|
||||
return 50 - Math.max(parseFloat(this.doc.defaultView.getComputedStyle(this.graph.circle.el, null)["stroke-width"]), parseFloat(this.doc.defaultView.getComputedStyle(this.graph.sector.el, null)["stroke-width"])) / 2
|
||||
}
|
||||
}], [{
|
||||
key: "_makeSectorPath", value: function (a, b, d, e, f, g) {
|
||||
g = !!g;
|
||||
var h = e + (360 === f ? f - .001 : f) * (2 * g - 1), i = c.math.polarToCartesian(d, e),
|
||||
j = c.math.polarToCartesian(d, h), k = a + i.x, l = a + j.x, m = b + i.y, n = b + j.y;
|
||||
return ["M", k, m, "A", d, d, 0, +(f > 180), +g, l, n].join(" ")
|
||||
}
|
||||
}]), d
|
||||
}();
|
||||
return d.defaults = {
|
||||
startAngle: 0,
|
||||
min: 0,
|
||||
max: 1,
|
||||
constrain: !0,
|
||||
indeterminateText: "?",
|
||||
clockwise: !0,
|
||||
textFormat: "horizontal",
|
||||
animation: "easeInOutCubic",
|
||||
animationDuration: 600
|
||||
}, d
|
||||
}();
|
||||
return c
|
||||
}();
|
||||
|
||||
exports('CircleProgress', CircleProgress);
|
||||
});
|
||||
1131
public/static/system/module/QRCode.js
Normal file
2647
public/static/system/module/admin.js
Normal file
1649
public/static/system/module/cascader/cascader.css
Normal file
2088
public/static/system/module/cascader/cascader.js
Normal file
218
public/static/system/module/content.js
Normal file
@@ -0,0 +1,218 @@
|
||||
/* 内容管理模块 */
|
||||
layui.define(['jquery','form', 'layer'], function (exports) {
|
||||
|
||||
var $ = layui.jquery;
|
||||
var form = layui.form;
|
||||
var layer = layui.layer;
|
||||
var content = {
|
||||
tinymce: function (elem) {
|
||||
elem = elem || 'content';
|
||||
var obj = tinymce.init({
|
||||
selector: '#' + elem,
|
||||
language: 'zh_CN',
|
||||
plugins: 'paylabel imagelocal code print preview searchreplace paste autolink directionality visualblocks visualchars fullscreen image link media template code codesample table charmap hr pagebreak nonbreaking anchor quickbars insertdatetime advlist lists wordcount textpattern emoticons autosave bdmap indent2em autoresize formatpainter axupimgs',
|
||||
toolbar: 'code undo redo restoredraft | cut copy paste pastetext table | image imagelocal axupimgs media print preview bdmap paylabel forecolor backcolor formatpainter bold italic underline strikethrough link anchor fullscreen | alignleft aligncenter alignright alignjustify outdent indent | \
|
||||
styleselect formatselect fontselect fontsizeselect | bullist numlist | blockquote subscript superscript removeformat | \
|
||||
charmap emoticons hr pagebreak insertdatetime| indent2em lineheight ',
|
||||
height: 650, //编辑器高度
|
||||
min_height: 400,
|
||||
max_width: 1200,
|
||||
importcss_append: true,
|
||||
relative_urls: false,
|
||||
remove_script_host: false,
|
||||
// 图片本地化
|
||||
download: _global_.app + '/Ajax/getImage',
|
||||
images_upload_handler: function (block, success, failure) {
|
||||
var file = block.blob();
|
||||
var reader = new FileReader();
|
||||
reader.readAsDataURL(file);
|
||||
reader.onload = function (e) {
|
||||
var formData = new FormData();
|
||||
formData.append('file', file);
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: _global_.app + '/Ajax/upload',
|
||||
data: formData,
|
||||
async: false,
|
||||
cache: false,
|
||||
contentType: false,
|
||||
processData: false,
|
||||
success: function (res) {
|
||||
if (res.code === 200) {
|
||||
success(res.url);
|
||||
layer.msg(res.msg);
|
||||
} else {
|
||||
failure(res.msg);
|
||||
return;
|
||||
}
|
||||
},// 请求失败触发的方法
|
||||
error: function (XMLHttpRequest, textStatus, errorThrown) {
|
||||
failure(textStatus);
|
||||
return;
|
||||
}
|
||||
});
|
||||
};
|
||||
},
|
||||
init_instance_callback: function (editor) {
|
||||
},
|
||||
setup: function (editor) {
|
||||
editor.on('change', function () {
|
||||
editor.save();
|
||||
});
|
||||
},
|
||||
toolbar_sticky: true,
|
||||
branding: false,
|
||||
autosave_ask_before_unload: false,
|
||||
});
|
||||
return obj;
|
||||
},
|
||||
markdown: function (id, elem) {
|
||||
$(elem).hide();
|
||||
let height = $(elem).data('height') || '400px';
|
||||
let _id = 'markdown_' + Math.round(Math.random() * 36);
|
||||
$(elem).after('<div id="' + _id + '" ></div>');
|
||||
window.cherry = new Cherry({
|
||||
id: _id,
|
||||
value: $(elem).text(),
|
||||
toolbars: {
|
||||
theme: 'light',
|
||||
toolbar: [
|
||||
'switchModel',
|
||||
'undo',
|
||||
'|',
|
||||
'bold',
|
||||
'italic',
|
||||
'strikethrough',
|
||||
'|',
|
||||
'color',
|
||||
'header',
|
||||
'|',
|
||||
'list',
|
||||
{
|
||||
insert: ['image','code', 'table','link', 'hr'],
|
||||
},
|
||||
'|',
|
||||
// 'fullScreen',
|
||||
'settings',
|
||||
'export',
|
||||
|
||||
],
|
||||
float: false,
|
||||
bubble : false // array or false
|
||||
},
|
||||
editor: {
|
||||
height: height,
|
||||
defaultModel: 'editOnly',
|
||||
},
|
||||
fileUpload(file, callback) {
|
||||
let formData = new FormData();
|
||||
formData.append('file', file, file.name);
|
||||
$.ajax({
|
||||
url: _global_.app + '/ajax/upload'
|
||||
, type: 'post'
|
||||
, data: formData
|
||||
, contentType: false
|
||||
, processData: false
|
||||
, dataType: 'json'
|
||||
//成功回调
|
||||
, success: function (res) {
|
||||
if (res.code === 200) {
|
||||
callback(res.url);
|
||||
layer.msg(res.msg);
|
||||
}else {
|
||||
layer.msg(res.msg, 'error');
|
||||
}
|
||||
}
|
||||
//异常回调
|
||||
, error: function () {
|
||||
layer.msg('服务器异常','info');
|
||||
}
|
||||
});
|
||||
},
|
||||
callback: {
|
||||
afterChange: function(){
|
||||
$(elem).text(cherry.getMarkdown());
|
||||
},
|
||||
afterInit: function(){
|
||||
/**
|
||||
* 初始化回调
|
||||
*/
|
||||
$('#'+_id).find('.cherry').css('min-height', height);
|
||||
},
|
||||
}
|
||||
});
|
||||
},
|
||||
xmselect: function (elem, data, initvalue, group = true, category = false) // 下拉菜单
|
||||
{
|
||||
if (!elem) {
|
||||
layer.msg('elem error', 'error');
|
||||
return false;
|
||||
}
|
||||
|
||||
if (group) {
|
||||
return xmSelect.render({
|
||||
el: '#' + elem,
|
||||
name: elem,
|
||||
tips: '请选择',
|
||||
size: 'small',
|
||||
theme: {
|
||||
color: '#0081ff',
|
||||
},
|
||||
prop: {
|
||||
name: 'title',
|
||||
value: 'id',
|
||||
},
|
||||
data: data,
|
||||
initValue: initvalue,
|
||||
})
|
||||
} else {
|
||||
return xmSelect.render({
|
||||
el: '#' + elem,
|
||||
name: elem,
|
||||
tips: '请选择',
|
||||
height: 'auto',
|
||||
data: data,
|
||||
radio: true,
|
||||
clickClose: true,
|
||||
initValue: initvalue,
|
||||
prop: {
|
||||
value: 'id',
|
||||
name: 'title'
|
||||
},
|
||||
tree: {
|
||||
show: true,
|
||||
strict: false,
|
||||
showLine: false,
|
||||
clickExpand: false,
|
||||
},
|
||||
model: {
|
||||
icon: 'hidden',
|
||||
label: {
|
||||
type: 'text'
|
||||
}
|
||||
},
|
||||
on: function (e) {
|
||||
if (category && e.arr[0]) {
|
||||
const pid = e.arr[0].id;
|
||||
let url = location.pathname;
|
||||
// xmSelect 无改变之前属性 RELOAD
|
||||
url = url.substring(0, url.indexOf('?'));
|
||||
location.href = url + '?pid=' + pid;
|
||||
}
|
||||
},
|
||||
theme: {
|
||||
color: '#1890FF'
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
form.on('select(change_category)', function (e) {
|
||||
let url = location.pathname;
|
||||
url = url.substring(0, url.indexOf('?'));
|
||||
location.href = url + '?pid=' + e.value;
|
||||
})
|
||||
|
||||
exports('content', content);
|
||||
});
|
||||
27
public/static/system/module/echarts/china.js
Normal file
1777
public/static/system/module/echarts/echarts-wordcloud.js
Normal file
3
public/static/system/module/echarts/echarts-wordcloud.min.js
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/*!
|
||||
* wordcloud2.js
|
||||
* http://timdream.org/wordcloud2.js/
|
||||
*
|
||||
* Copyright 2011 - 2019 Tim Guan-tin Chien and contributors.
|
||||
* Released under the MIT license
|
||||
*/
|
||||
45
public/static/system/module/echarts/echarts.js
Normal file
386
public/static/system/module/fileManager/fileManager.js
Normal file
@@ -0,0 +1,386 @@
|
||||
/*!
|
||||
* 文件管理组件
|
||||
* by meystack to www.swiftadmin.net
|
||||
* Apache2.0 Licensed
|
||||
*/
|
||||
layui.define(['laypage'], function (exports) {
|
||||
"use strict";
|
||||
|
||||
var $ = layui.$
|
||||
|
||||
, laypage = layui.laypage
|
||||
//模块名
|
||||
, MOD_NAME = 'fileManager'
|
||||
, MOD_INDEX = 'layui_' + MOD_NAME + '_index' //模块索引名
|
||||
, TAG_NAME = undefined
|
||||
//外部接口
|
||||
, MODULE_FILE_NAME = {
|
||||
config: {}
|
||||
, index: layui[MOD_NAME] ? (layui[MOD_NAME].index + 10000) : 0
|
||||
|
||||
//设置全局项
|
||||
, set: function (options) {
|
||||
var that = this;
|
||||
that.config = $.extend({}, that.config, options);
|
||||
return that;
|
||||
}
|
||||
|
||||
//事件
|
||||
, on: function (events, callback) {
|
||||
return layui.onevent.call(this, MOD_NAME, events, callback);
|
||||
}
|
||||
}
|
||||
|
||||
//操作当前实例
|
||||
, thisTags = function () {
|
||||
var that = this
|
||||
, options = that.config
|
||||
, id = options.id || that.index;
|
||||
|
||||
thisTags.that[id] = that; //记录当前实例对象
|
||||
|
||||
return {
|
||||
config: options
|
||||
//重置实例
|
||||
, reload: function (options) {
|
||||
that.reload.call(that, options);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//字符常量
|
||||
, STR_ELEM = 'layui-MODULE_FILE_NAME', STR_HIDE = 'layui-hide', STR_DISABLED = 'layui-disabled',
|
||||
STR_NONE = 'layui-none'
|
||||
, LAY_TAG_THIS = 'layui-tag-this', LAY_TAGS_RESULT = 'layui-tags-ajax'
|
||||
|
||||
//主模板
|
||||
, TPL_MAIN = [''].join('')
|
||||
|
||||
, TPL_NONE = [
|
||||
'<div style="text-align: center;margin-top:30px ">',
|
||||
"<svg style=\"margin-top: 10px\" width=\"64\" height=\"41\" viewBox=\"0 0 64 41\"><g transform=\"translate(0 1)\" fill=\"none\" fill-rule=\"evenodd\"><ellipse class=\"ant-empty-img-simple-ellipse\" fill=\"#F5F5F5\" cx=\"32\" cy=\"33\" rx=\"32\" ry=\"7\"></ellipse><g class=\"ant-empty-img-simple-g\" fill-rule=\"nonzero\" stroke=\"#D9D9D9\"><path d=\"M55 12.76L44.854 1.258C44.367.474 43.656 0 42.907 0H21.093c-.749 0-1.46.474-1.947 1.257L9 12.761V22h46v-9.24z\"></path><path d=\"M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35h-40.1C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z\" fill=\"#FAFAFA\" class=\"ant-empty-img-simple-path\"></path></g></g></svg>",
|
||||
'<div style="text-align: center; color: #d0cdcd">暂无数据</div>',
|
||||
'</div>',
|
||||
].join('')
|
||||
|
||||
//构造器
|
||||
, Class = function (options) {
|
||||
var that = this;
|
||||
that.index = ++MODULE_FILE_NAME.index;
|
||||
that.config = $.extend({}, that.config, MODULE_FILE_NAME.config, options);
|
||||
that.render();
|
||||
};
|
||||
|
||||
//默认配置
|
||||
Class.prototype.config = {
|
||||
url: undefined, // ajax的URL地址
|
||||
choose: false, // 是否可选择文件
|
||||
limit: 30, // 限定数量
|
||||
thumb: {
|
||||
width: 90, // 宽度
|
||||
height: 90 // 高度
|
||||
},
|
||||
icons: [{ // 图标
|
||||
suffix: ['ppt', 'pptx'],
|
||||
icon: 'ppt'
|
||||
}, {
|
||||
suffix: ['doc', 'docx'],
|
||||
icon: 'doc'
|
||||
}, {
|
||||
suffix: ['xls', 'xlsx'],
|
||||
icon: 'xls'
|
||||
}, {
|
||||
suffix: ['pdf'],
|
||||
icon: 'pdf'
|
||||
}, {
|
||||
suffix: ['html', 'htm'],
|
||||
icon: 'htm'
|
||||
}, {
|
||||
suffix: ['txt'],
|
||||
icon: 'txt'
|
||||
}, {
|
||||
suffix: ['swf', 'docx'],
|
||||
icon: 'flash'
|
||||
}, {
|
||||
suffix: ['zip', 'rar', '7z'],
|
||||
icon: 'zip'
|
||||
}, {
|
||||
suffix: ['mp3', 'wav'],
|
||||
icon: 'mp3'
|
||||
}, {
|
||||
suffix: ['mp4', '3gp', 'rmvb', 'avi', 'flv'],
|
||||
icon: 'mp4'
|
||||
}, {
|
||||
suffix: ['psd'],
|
||||
icon: 'psd'
|
||||
}, {
|
||||
suffix: ['ttf'],
|
||||
icon: 'ttf'
|
||||
}, {
|
||||
suffix: ['apk'],
|
||||
icon: 'apk'
|
||||
}, {
|
||||
suffix: ['exe'],
|
||||
icon: 'exe'
|
||||
}, {
|
||||
suffix: ['torrent'],
|
||||
icon: 'bt'
|
||||
}, {
|
||||
suffix: ['gif', 'png', 'jpeg', 'jpg', 'bmp'],
|
||||
icon: 'img'
|
||||
}],
|
||||
};
|
||||
|
||||
// 重载实例
|
||||
Class.prototype.reload = function (options) {
|
||||
var that = this;
|
||||
|
||||
// 防止数组深度合并
|
||||
layui.each(options, function (key, item) {
|
||||
if (layui._typeof(item) === 'array') delete that.config[key];
|
||||
});
|
||||
|
||||
that.config = $.extend(true, {}, that.config, options);
|
||||
that.render();
|
||||
};
|
||||
|
||||
//渲染
|
||||
Class.prototype.render = function () {
|
||||
var that = this
|
||||
, options = that.config;
|
||||
|
||||
// 获取当前元素
|
||||
var othis = options.elem = $(options.elem);
|
||||
if (!othis[0]) return;
|
||||
|
||||
this.getData();
|
||||
that.events();
|
||||
};
|
||||
|
||||
// 获取请求的数据
|
||||
Class.prototype.getData = function (page = 1, type = '', filename = '') {
|
||||
|
||||
let that = this,
|
||||
options = this.config;
|
||||
|
||||
$.ajax({
|
||||
url: options.url,
|
||||
type: 'post',
|
||||
data: {
|
||||
page: page,
|
||||
type: type,
|
||||
filename: filename,
|
||||
limit: options.limit
|
||||
},
|
||||
success: function (res) {
|
||||
if (res.code === 200) {
|
||||
that.renderData(res);
|
||||
} else {
|
||||
layer.error(res.msg);
|
||||
}
|
||||
},
|
||||
error: function (err) {
|
||||
layer.error('请求失败');
|
||||
}
|
||||
})
|
||||
};
|
||||
|
||||
// 渲染请求的数据
|
||||
Class.prototype.renderData = function (data) {
|
||||
let that = this, options = this.config;
|
||||
let html = '';
|
||||
|
||||
for (let index = 0; index < data.data.length; index++) {
|
||||
const element = data.data[index];
|
||||
html += '<div class="file-list-item" data-index="' + element.id + '" data-url="' + element.url + '">';
|
||||
html += '<div class="intro">';
|
||||
html += '<div style="height: ' + options.thumb.height + 'px">';
|
||||
html += '<img class="icon" data-ext="' + element.extension + '" ';
|
||||
if (element.mimetype && element.mimetype.indexOf('image') !== -1) {
|
||||
html += 'src="' + element.url + '" ';
|
||||
html += 'alt="' + element.filename + '" width="' + options.thumb.width + '" height="' + options.thumb.height + '" />';
|
||||
} else {
|
||||
html += 'src="' + that.fileExt(element.extension) + '" style="padding-top: 15px"';
|
||||
html += 'alt="' + element.filename + '" width="50" height="50" />';
|
||||
}
|
||||
|
||||
html += '</div>';
|
||||
html += '<span class="name" >' + element.filename + '</span>';
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
}
|
||||
|
||||
options.elem.find('#files-content').html(html || TPL_NONE);
|
||||
$(options.elem).find('.file-list-item').each(function (index, item) {
|
||||
|
||||
let data = [
|
||||
{
|
||||
title: '下载'
|
||||
, type: 'down'
|
||||
, id: $(item).data('url')
|
||||
},
|
||||
{
|
||||
title: '编辑'
|
||||
, type: 'edit'
|
||||
, id: $(item).data('index')
|
||||
}
|
||||
, {
|
||||
title: '<span style="color: red; ">删除</span>'
|
||||
, type: 'delete'
|
||||
, id: $(item).data('index')
|
||||
}];
|
||||
|
||||
if (options.choose) {
|
||||
data.unshift({
|
||||
title: '选择',
|
||||
type: 'choose',
|
||||
id: item
|
||||
});
|
||||
}
|
||||
|
||||
layui.dropdown.render({
|
||||
elem: item
|
||||
, trigger: 'contextmenu'
|
||||
, id: 'file' + index
|
||||
, show: true
|
||||
, data: data
|
||||
, click: function (obj) {
|
||||
|
||||
let fileEl = '#files-ajax',
|
||||
elem = '<div id="files-ajax" lay-open data-url="' + options.url + 'edit?id=' + obj.id + '" data-title="编辑附件" data-area="520px,398px">';
|
||||
|
||||
if (obj.type === 'down') {
|
||||
window.open(obj.id);
|
||||
} else if (obj.type === 'choose') {
|
||||
that.choose(obj.id);
|
||||
} else {
|
||||
if (obj.type === 'delete') {
|
||||
elem = '<div id="files-ajax" lay-ajax data-url="' + options.url + 'del?id=' + obj.id + '">';
|
||||
}
|
||||
$(options.elem).append(elem);
|
||||
$(fileEl).trigger('click');
|
||||
obj.type === 'delete' && that.reload();
|
||||
}
|
||||
$(fileEl).remove();
|
||||
}
|
||||
});
|
||||
})
|
||||
|
||||
if (!options.elem.find('#files-page>div').length) {
|
||||
laypage.render({
|
||||
elem: options.elem.find('#files-page'),
|
||||
count: data.count,
|
||||
limit: options.limit,
|
||||
jump: function (obj, first) {
|
||||
if (!first) {
|
||||
that.getData(obj.curr, $('.layui-tab-title li.layui-this').data('type'), $('#filename').val());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 文件扩展名
|
||||
Class.prototype.fileExt = function (ext) {
|
||||
let type = 'file';
|
||||
let icons = this.config.icons;
|
||||
for (let i = 0; i < icons.length; i++) {
|
||||
icons[i].suffix.find(function (item) {
|
||||
if (ext.toLowerCase() === item) {
|
||||
type = icons[i].icon;
|
||||
}
|
||||
})
|
||||
}
|
||||
return layui.cache.base + 'fileManager/ico/' + type + '.png';
|
||||
}
|
||||
|
||||
//事件
|
||||
Class.prototype.events = function () {
|
||||
var that = this
|
||||
, options = that.config;
|
||||
|
||||
$(options.elem).on('click', '.layui-tab-title li', function (res) {
|
||||
let type = $(this).data('type');
|
||||
$(options.elem).find('#files-page').html('');
|
||||
that.getData(1, type, $('#filename').val());
|
||||
});
|
||||
|
||||
$('#file-search').click(function (e) {
|
||||
let filename = $('#filename').val();
|
||||
$(options.elem).find('#files-page').html('');
|
||||
that.getData(1, options.type, filename);
|
||||
})
|
||||
|
||||
// 选择回显
|
||||
$(options.elem).on('dblclick', '.file-list-item', function (e) {
|
||||
if (options.choose) {
|
||||
that.choose(this);
|
||||
}
|
||||
})
|
||||
};
|
||||
|
||||
// 选择文件
|
||||
Class.prototype.choose = function (obj) {
|
||||
|
||||
let url = $(obj).data('url'),
|
||||
field = $('#_fileFiled').val(),
|
||||
type = $('#_fileType').val();
|
||||
if (!field || !type) {
|
||||
return layer.info('请先配置选择参数');
|
||||
}
|
||||
|
||||
if (type === 'images') {
|
||||
let o = parent.layui.$('img.' + field);
|
||||
o.prop('src', url);
|
||||
o.parent('div').removeClass('layui-hide');
|
||||
parent.layui.$(o).parents('.layui-upload-drag').find('p,i,hr').addClass('layui-hide');
|
||||
parent.layui.$('input.' + field).val(url);
|
||||
} else if (type === 'multiple') {
|
||||
let boxList = parent.layui.$('[lay-choose="' + field + '"]').parents('.layui-imagesbox').find('.layui-input-inline');
|
||||
let length = boxList.length;
|
||||
$(boxList).each(function (i, item) {
|
||||
$(item).find('input.layui-hide').prop('name', field + '[' + i + '][src]');
|
||||
$(item).find('input.layui-input').prop('name', field + '[' + i + '][title]');
|
||||
})
|
||||
let html = '<div class="layui-input-inline layui-uplpad-image">';
|
||||
html += '<img src="' + url + '" >';
|
||||
html += '<input type="text" name="' + field + '[' + (length - 1) + '][src]" class="layui-hide" value="' + url + '">';
|
||||
html += '<input type="text" name="' + field + '[' + (length - 1) + '][title]" class="layui-input" placeholder="图片简介">';
|
||||
html += '<span class="layui-badge layui-badge-red" onclick="layui.$(this).parent().remove();">删除</span></div>';
|
||||
let elem = parent.layui.$('[lay-upload="' + field + '"]');
|
||||
parent.layui.$(elem).parent().before(html);
|
||||
parent.layui.$(elem).parents('form').find('input#' + field + '_clear').remove();
|
||||
} else {
|
||||
parent.layui.$('input.' + field).val(url);
|
||||
}
|
||||
parent.layer.close($('#_fileChoose').data('index'));
|
||||
}
|
||||
|
||||
//记录所有实例
|
||||
thisTags.that = {};
|
||||
|
||||
//获取当前实例对象
|
||||
thisTags.getThis = function (id) {
|
||||
var that = thisTags.that[id];
|
||||
if (!that) hint.error(id ? (MOD_NAME + ' instance with ID \'' + id + '\' not found') : 'ID argument required');
|
||||
return that
|
||||
};
|
||||
|
||||
//重载实例
|
||||
MODULE_FILE_NAME.reload = function (id, options) {
|
||||
var that = thisTags.that[id];
|
||||
that.reload(options);
|
||||
|
||||
return thisTags.call(that);
|
||||
};
|
||||
|
||||
//核心入口
|
||||
MODULE_FILE_NAME.render = function (options) {
|
||||
var inst = new Class(options);
|
||||
return thisTags.call(inst);
|
||||
};
|
||||
|
||||
$('body').append('<style>.file-list-item{position:relative;display:inline-block;vertical-align:top;padding:8px 9px;margin:8px 0;cursor:pointer;}.file-list-item:hover{background-color:#F8F8F8;}.file-list-item .icon{overflow:hidden;margin:0 auto;display:block;}.file-list-item .name{width:90px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#333;font-size:12px;text-align:center;margin-top:12px;display:block;}</style>');
|
||||
exports(MOD_NAME, MODULE_FILE_NAME);
|
||||
})
|
||||
|
||||
BIN
public/static/system/module/fileManager/ico/ai.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/apk.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/bt.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/cad.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/cloud.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/code.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/dir.png
Normal file
|
After Width: | Height: | Size: 265 B |
BIN
public/static/system/module/fileManager/ico/doc.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/eps.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/exe.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/file.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/fla.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/flash.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/fonts.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/htm.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
public/static/system/module/fileManager/ico/img.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/ipa.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/keynote.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/links.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/mm.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/mmap.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/mp3.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
public/static/system/module/fileManager/ico/mp4.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
public/static/system/module/fileManager/ico/number.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/pages.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/pdf.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/ppt.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/ps.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/psd.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/rar.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/ttf.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/txt.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
public/static/system/module/fileManager/ico/visio.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/web.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
public/static/system/module/fileManager/ico/xls.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/xmind.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/static/system/module/fileManager/ico/zip.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
526
public/static/system/module/i18n/jquery.i18n.properties.js
Normal file
@@ -0,0 +1,526 @@
|
||||
/******************************************************************************
|
||||
* jquery.i18n.properties
|
||||
*
|
||||
* Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and
|
||||
* MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses.
|
||||
*
|
||||
* @version 1.2.7
|
||||
* @url https://github.com/jquery-i18n-properties/jquery-i18n-properties
|
||||
* @inspiration Localisation assistance for jQuery (http://keith-wood.name/localisation.html)
|
||||
* by Keith Wood (kbwood{at}iinet.com.au) June 2007
|
||||
*
|
||||
*****************************************************************************/
|
||||
layui.define(function (exports) {
|
||||
"use strict";
|
||||
|
||||
var $ = layui.$;
|
||||
|
||||
$.i18n = {};
|
||||
|
||||
/**
|
||||
* Map holding bundle keys if mode is 'map' or 'both'. Values of this can also be an
|
||||
* Object, in which case the key is a namespace.
|
||||
*/
|
||||
$.i18n.map = {};
|
||||
|
||||
var debug = function (message) {
|
||||
window.console && console.log('i18n::' + message);
|
||||
};
|
||||
|
||||
/**
|
||||
* Load and parse message bundle files (.properties),
|
||||
* making bundles keys available as javascript variables.
|
||||
*
|
||||
* i18n files are named <name>.js, or <name>_<language>.js or <name>_<language>_<country>.js
|
||||
* Where:
|
||||
* The <language> argument is a valid ISO Language Code. These codes are the lower-case,
|
||||
* two-letter codes as defined by ISO-639. You can find a full list of these codes at a
|
||||
* number of sites, such as: http://www.loc.gov/standards/iso639-2/englangn.html
|
||||
* The <country> argument is a valid ISO Country Code. These codes are the upper-case,
|
||||
* two-letter codes as defined by ISO-3166. You can find a full list of these codes at a
|
||||
* number of sites, such as: http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html
|
||||
*
|
||||
* Sample usage for a bundles/Messages.properties bundle:
|
||||
* $.i18n.properties({
|
||||
* name: 'Messages',
|
||||
* language: 'en_US',
|
||||
* path: 'bundles'
|
||||
* });
|
||||
* @param name (string/string[], optional) names of file to load (eg, 'Messages' or ['Msg1','Msg2']). Defaults to "Messages"
|
||||
* @param language (string, optional) language/country code (eg, 'en', 'en_US', 'pt_BR'). if not specified, language reported by the browser will be used instead.
|
||||
* @param path (string, optional) path of directory that contains file to load
|
||||
* @param mode (string, optional) whether bundles keys are available as JavaScript variables/functions or as a map (eg, 'vars' or 'map')
|
||||
* @param debug (boolean, optional) whether debug statements are logged at the console
|
||||
* @param cache (boolean, optional) whether bundles should be cached by the browser, or forcibly reloaded on each page load. Defaults to false (i.e. forcibly reloaded)
|
||||
* @param encoding (string, optional) the encoding to request for bundles. Property file resource bundles are specified to be in ISO-8859-1 format. Defaults to UTF-8 for backward compatibility.
|
||||
* @param callback (function, optional) callback function to be called after script is terminated
|
||||
*/
|
||||
$.i18n.properties = function (settings) {
|
||||
|
||||
var defaults = {
|
||||
name: 'Messages',
|
||||
language: '',
|
||||
path: '',
|
||||
namespace: null,
|
||||
mode: 'vars',
|
||||
cache: false,
|
||||
debug: false,
|
||||
encoding: 'UTF-8',
|
||||
async: false,
|
||||
callback: null
|
||||
};
|
||||
|
||||
settings = $.extend(defaults, settings);
|
||||
|
||||
if (settings.namespace && typeof settings.namespace == 'string') {
|
||||
// A namespace has been supplied, initialise it.
|
||||
if (settings.namespace.match(/^[a-z]*$/)) {
|
||||
$.i18n.map[settings.namespace] = {};
|
||||
} else {
|
||||
debug('Namespaces can only be lower case letters, a - z');
|
||||
settings.namespace = null;
|
||||
}
|
||||
}
|
||||
|
||||
// Ensure a trailing slash on the path
|
||||
if (!settings.path.match(/\/$/)) settings.path += '/';
|
||||
|
||||
// Try to ensure that we have at a least a two letter language code
|
||||
settings.language = this.normaliseLanguageCode(settings);
|
||||
|
||||
// Ensure an array
|
||||
var files = (settings.name && settings.name.constructor === Array) ? settings.name : [settings.name];
|
||||
|
||||
// A locale is at least a language code which means at least two files per name. If
|
||||
// we also have a country code, thats an extra file per name.
|
||||
settings.totalFiles = (files.length * 2) + ((settings.language.length >= 5) ? files.length : 0);
|
||||
if (settings.debug) {
|
||||
debug('totalFiles: ' + settings.totalFiles);
|
||||
}
|
||||
|
||||
settings.filesLoaded = 0;
|
||||
|
||||
files.forEach(function (file) {
|
||||
|
||||
var defaultFileName, shortFileName, longFileName, fileNames;
|
||||
// 1. load base (eg, Messages.properties)
|
||||
defaultFileName = settings.path + file + '.properties';
|
||||
// 2. with language code (eg, Messages_pt.properties)
|
||||
var shortCode = settings.language.substring(0, 2);
|
||||
|
||||
shortFileName = settings.path + file + '_' + shortCode + '.properties';
|
||||
// 3. with language code and country code (eg, Messages_pt_BR.properties)
|
||||
if (settings.language.length >= 5) {
|
||||
var longCode = settings.language.substring(0, 5);
|
||||
longCode = longCode.replace('_','-');
|
||||
longFileName = settings.path + file + '_' + longCode + '.properties';
|
||||
// fileNames = [defaultFileName, shortFileName, longFileName];
|
||||
fileNames = [longFileName];
|
||||
} else {
|
||||
fileNames = [defaultFileName, shortFileName];
|
||||
}
|
||||
|
||||
loadAndParseFiles(fileNames, settings);
|
||||
});
|
||||
|
||||
// call callback
|
||||
if (settings.callback && !settings.async) {
|
||||
settings.callback();
|
||||
}
|
||||
}; // properties
|
||||
|
||||
/**
|
||||
* When configured with mode: 'map', allows access to bundle values by specifying its key.
|
||||
* Eg, jQuery.i18n.prop('com.company.bundles.menu_add')
|
||||
*/
|
||||
$.i18n.prop = function (key /* Add parameters as function arguments as necessary */) {
|
||||
|
||||
var args = [].slice.call(arguments);
|
||||
|
||||
var phvList, namespace;
|
||||
if (args.length == 2) {
|
||||
if ($.isArray(args[1])) {
|
||||
// An array was passed as the second parameter, so assume it is the list of place holder values.
|
||||
phvList = args[1];
|
||||
} else if (typeof args[1] === 'object') {
|
||||
// Second argument is an options object {namespace: 'mynamespace', replacements: ['egg', 'nog']}
|
||||
namespace = args[1].namespace;
|
||||
var replacements = args[1].replacements;
|
||||
args.splice(-1, 1);
|
||||
if (replacements) {
|
||||
Array.prototype.push.apply(args, replacements);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var value = (namespace) ? $.i18n.map[namespace][key] : $.i18n.map[key];
|
||||
if (value === null || typeof value == 'undefined') {
|
||||
return ((namespace) ? namespace + '#' + key : key);
|
||||
}
|
||||
|
||||
// Place holder replacement
|
||||
/**
|
||||
* Tested with:
|
||||
* test.t1=asdf ''{0}''
|
||||
* test.t2=asdf '{0}' '{1}'{1}'zxcv
|
||||
* test.t3=This is \"a quote" 'a''{0}''s'd{fgh{ij'
|
||||
* test.t4="'''{'0}''" {0}{a}
|
||||
* test.t5="'''{0}'''" {1}
|
||||
* test.t6=a {1} b {0} c
|
||||
* test.t7=a 'quoted \\ s\ttringy' \t\t x
|
||||
*
|
||||
* Produces:
|
||||
* test.t1, p1 ==> asdf 'p1'
|
||||
* test.t2, p1 ==> asdf {0} {1}{1}zxcv
|
||||
* test.t3, p1 ==> This is "a quote" a'{0}'sd{fgh{ij
|
||||
* test.t4, p1 ==> "'{0}'" p1{a}
|
||||
* test.t5, p1 ==> "'{0}'" {1}
|
||||
* test.t6, p1 ==> a {1} b p1 c
|
||||
* test.t6, p1, p2 ==> a p2 b p1 c
|
||||
* test.t6, p1, p2, p3 ==> a p2 b p1 c
|
||||
* test.t7 ==> a quoted \ s tringy x
|
||||
*/
|
||||
|
||||
var i;
|
||||
if (typeof (value) == 'string') {
|
||||
// Handle escape characters. Done separately from the tokenizing loop below because escape characters are
|
||||
// active in quoted strings.
|
||||
i = 0;
|
||||
while ((i = value.indexOf('\\', i)) != -1) {
|
||||
if (value.charAt(i + 1) == 't') {
|
||||
value = value.substring(0, i) + '\t' + value.substring((i++) + 2); // tab
|
||||
} else if (value.charAt(i + 1) == 'r') {
|
||||
value = value.substring(0, i) + '\r' + value.substring((i++) + 2); // return
|
||||
} else if (value.charAt(i + 1) == 'n') {
|
||||
value = value.substring(0, i) + '\n' + value.substring((i++) + 2); // line feed
|
||||
} else if (value.charAt(i + 1) == 'f') {
|
||||
value = value.substring(0, i) + '\f' + value.substring((i++) + 2); // form feed
|
||||
} else if (value.charAt(i + 1) == '\\') {
|
||||
value = value.substring(0, i) + '\\' + value.substring((i++) + 2); // \
|
||||
} else {
|
||||
value = value.substring(0, i) + value.substring(i + 1); // Quietly drop the character
|
||||
}
|
||||
}
|
||||
|
||||
// Lazily convert the string to a list of tokens.
|
||||
var arr = [], j, index;
|
||||
i = 0;
|
||||
while (i < value.length) {
|
||||
if (value.charAt(i) == '\'') {
|
||||
// Handle quotes
|
||||
if (i == value.length - 1) {
|
||||
value = value.substring(0, i); // Silently drop the trailing quote
|
||||
} else if (value.charAt(i + 1) == '\'') {
|
||||
value = value.substring(0, i) + value.substring(++i); // Escaped quote
|
||||
} else {
|
||||
// Quoted string
|
||||
j = i + 2;
|
||||
while ((j = value.indexOf('\'', j)) != -1) {
|
||||
if (j == value.length - 1 || value.charAt(j + 1) != '\'') {
|
||||
// Found start and end quotes. Remove them
|
||||
value = value.substring(0, i) + value.substring(i + 1, j) + value.substring(j + 1);
|
||||
i = j - 1;
|
||||
break;
|
||||
} else {
|
||||
// Found a double quote, reduce to a single quote.
|
||||
value = value.substring(0, j) + value.substring(++j);
|
||||
}
|
||||
}
|
||||
|
||||
if (j == -1) {
|
||||
// There is no end quote. Drop the start quote
|
||||
value = value.substring(0, i) + value.substring(i + 1);
|
||||
}
|
||||
}
|
||||
} else if (value.charAt(i) == '{') {
|
||||
// Beginning of an unquoted place holder.
|
||||
j = value.indexOf('}', i + 1);
|
||||
if (j == -1) {
|
||||
i++; // No end. Process the rest of the line. Java would throw an exception
|
||||
} else {
|
||||
// Add 1 to the index so that it aligns with the function arguments.
|
||||
index = parseInt(value.substring(i + 1, j));
|
||||
if (!isNaN(index) && index >= 0) {
|
||||
// Put the line thus far (if it isn't empty) into the array
|
||||
var s = value.substring(0, i);
|
||||
if (s !== "") {
|
||||
arr.push(s);
|
||||
}
|
||||
// Put the parameter reference into the array
|
||||
arr.push(index);
|
||||
// Start the processing over again starting from the rest of the line.
|
||||
i = 0;
|
||||
value = value.substring(j + 1);
|
||||
} else {
|
||||
i = j + 1; // Invalid parameter. Leave as is.
|
||||
}
|
||||
}
|
||||
} else {
|
||||
i++;
|
||||
}
|
||||
} // while
|
||||
|
||||
// Put the remainder of the no-empty line into the array.
|
||||
if (value !== "") {
|
||||
arr.push(value);
|
||||
}
|
||||
value = arr;
|
||||
|
||||
// Make the array the value for the entry.
|
||||
if (namespace) {
|
||||
$.i18n.map[settings.namespace][key] = arr;
|
||||
} else {
|
||||
$.i18n.map[key] = arr;
|
||||
}
|
||||
}
|
||||
|
||||
if (value.length === 0) {
|
||||
return "";
|
||||
}
|
||||
if (value.length == 1 && typeof (value[0]) == "string") {
|
||||
return value[0];
|
||||
}
|
||||
|
||||
var str = "";
|
||||
for (i = 0, j = value.length; i < j; i++) {
|
||||
if (typeof (value[i]) == "string") {
|
||||
str += value[i];
|
||||
} else if (phvList && value[i] < phvList.length) {
|
||||
// Must be a number
|
||||
str += phvList[value[i]];
|
||||
} else if (!phvList && value[i] + 1 < args.length) {
|
||||
str += args[value[i] + 1];
|
||||
} else {
|
||||
str += "{" + value[i] + "}";
|
||||
}
|
||||
}
|
||||
|
||||
return str;
|
||||
};
|
||||
|
||||
function callbackIfComplete(settings) {
|
||||
|
||||
if (settings.debug) {
|
||||
debug('callbackIfComplete()');
|
||||
debug('totalFiles: ' + settings.totalFiles);
|
||||
debug('filesLoaded: ' + settings.filesLoaded);
|
||||
}
|
||||
|
||||
if (settings.async) {
|
||||
if (settings.filesLoaded === settings.totalFiles) {
|
||||
if (settings.callback) {
|
||||
settings.callback();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function loadAndParseFiles(fileNames, settings) {
|
||||
|
||||
if (settings.debug) debug('loadAndParseFiles');
|
||||
|
||||
if (fileNames !== null && fileNames.length > 0) {
|
||||
loadAndParseFile(fileNames[0], settings, function () {
|
||||
fileNames.shift();
|
||||
loadAndParseFiles(fileNames, settings);
|
||||
});
|
||||
} else {
|
||||
callbackIfComplete(settings);
|
||||
}
|
||||
}
|
||||
|
||||
/** Load and parse .properties files */
|
||||
function loadAndParseFile(filename, settings, nextFile) {
|
||||
|
||||
if (settings.debug) {
|
||||
debug('loadAndParseFile(\'' + filename + '\')');
|
||||
debug('totalFiles: ' + settings.totalFiles);
|
||||
debug('filesLoaded: ' + settings.filesLoaded);
|
||||
}
|
||||
|
||||
if (filename !== null && typeof filename !== 'undefined') {
|
||||
$.ajax({
|
||||
url: filename,
|
||||
async: settings.async,
|
||||
cache: settings.cache,
|
||||
dataType: 'text',
|
||||
success: function (data, status) {
|
||||
|
||||
if (settings.debug) {
|
||||
debug('Succeeded in downloading ' + filename + '.');
|
||||
debug(data);
|
||||
}
|
||||
|
||||
parseData(data, settings);
|
||||
nextFile();
|
||||
},
|
||||
error: function (jqXHR, textStatus, errorThrown) {
|
||||
|
||||
if (settings.debug) {
|
||||
debug('Failed to download or parse ' + filename + '. errorThrown: ' + errorThrown);
|
||||
}
|
||||
if (jqXHR.status === 404) {
|
||||
settings.totalFiles -= 1;
|
||||
}
|
||||
nextFile();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/** Parse .properties files */
|
||||
function parseData(data, settings) {
|
||||
|
||||
var parsed = '';
|
||||
var lines = data.split(/\n/);
|
||||
var regPlaceHolder = /(\{\d+})/g;
|
||||
var regRepPlaceHolder = /\{(\d+)}/g;
|
||||
var unicodeRE = /(\\u.{4})/ig;
|
||||
for (var i = 0, j = lines.length; i < j; i++) {
|
||||
var line = lines[i];
|
||||
|
||||
line = line.trim();
|
||||
if (line.length > 0 && line.match("^#") != "#") { // skip comments
|
||||
var pair = line.split('=');
|
||||
if (pair.length > 0) {
|
||||
/** Process key & value */
|
||||
var name = decodeURI(pair[0]).trim();
|
||||
var value = pair.length == 1 ? "" : pair[1];
|
||||
// process multi-line values
|
||||
while (value.search(/\\$/) != -1) {
|
||||
value = value.substring(0, value.length - 1);
|
||||
value += lines[++i].trimRight();
|
||||
}
|
||||
// Put values with embedded '='s back together
|
||||
for (var s = 2; s < pair.length; s++) {
|
||||
value += '=' + pair[s];
|
||||
}
|
||||
value = value.trim();
|
||||
|
||||
/** Mode: bundle keys in a map */
|
||||
if (settings.mode == 'map' || settings.mode == 'both') {
|
||||
// handle unicode chars possibly left out
|
||||
var unicodeMatches = value.match(unicodeRE);
|
||||
if (unicodeMatches) {
|
||||
unicodeMatches.forEach(function (match) {
|
||||
value = value.replace(match, unescapeUnicode(match));
|
||||
});
|
||||
}
|
||||
// add to map
|
||||
if (settings.namespace) {
|
||||
$.i18n.map[settings.namespace][name] = value;
|
||||
} else {
|
||||
$.i18n.map[name] = value;
|
||||
}
|
||||
}
|
||||
|
||||
/** Mode: bundle keys as vars/functions */
|
||||
if (settings.mode == 'vars' || settings.mode == 'both') {
|
||||
value = value.replace(/"/g, '\\"'); // escape quotation mark (")
|
||||
|
||||
// make sure namespaced key exists (eg, 'some.key')
|
||||
checkKeyNamespace(name);
|
||||
|
||||
// value with variable substitutions
|
||||
if (regPlaceHolder.test(value)) {
|
||||
var parts = value.split(regPlaceHolder);
|
||||
// process function args
|
||||
var first = true;
|
||||
var fnArgs = '';
|
||||
var usedArgs = [];
|
||||
parts.forEach(function (part) {
|
||||
|
||||
if (regPlaceHolder.test(part) && (usedArgs.length === 0 || usedArgs.indexOf(part) == -1)) {
|
||||
if (!first) {
|
||||
fnArgs += ',';
|
||||
}
|
||||
fnArgs += part.replace(regRepPlaceHolder, 'v$1');
|
||||
usedArgs.push(part);
|
||||
first = false;
|
||||
}
|
||||
});
|
||||
parsed += name + '=function(' + fnArgs + '){';
|
||||
// process function body
|
||||
var fnExpr = '"' + value.replace(regRepPlaceHolder, '"+v$1+"') + '"';
|
||||
parsed += 'return ' + fnExpr + ';' + '};';
|
||||
// simple value
|
||||
} else {
|
||||
parsed += name + '="' + value + '";';
|
||||
}
|
||||
} // END: Mode: bundle keys as vars/functions
|
||||
} // END: if(pair.length > 0)
|
||||
} // END: skip comments
|
||||
}
|
||||
eval(parsed);
|
||||
settings.filesLoaded += 1;
|
||||
}
|
||||
|
||||
/** Make sure namespace exists (for keys with dots in name) */
|
||||
// TODO key parts that start with numbers quietly fail. i.e. month.short.1=Jan
|
||||
function checkKeyNamespace(key) {
|
||||
|
||||
var regDot = /\./;
|
||||
if (regDot.test(key)) {
|
||||
var fullname = '';
|
||||
var names = key.split(/\./);
|
||||
for (var i = 0, j = names.length; i < j; i++) {
|
||||
var name = names[i];
|
||||
|
||||
if (i > 0) {
|
||||
fullname += '.';
|
||||
}
|
||||
|
||||
fullname += name;
|
||||
if (eval('typeof ' + fullname + ' == "undefined"')) {
|
||||
eval(fullname + '={};');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Ensure language code is in the format aa_AA. */
|
||||
$.i18n.normaliseLanguageCode = function (settings) {
|
||||
|
||||
var lang = settings.language;
|
||||
if (!lang || lang.length < 2) {
|
||||
if (settings.debug) debug('No language supplied. Pulling it from the browser ...');
|
||||
lang = (navigator.languages && navigator.languages.length > 0) ? navigator.languages[0]
|
||||
: (navigator.language || navigator.userLanguage /* IE */ || 'en');
|
||||
if (settings.debug) debug('Language from browser: ' + lang);
|
||||
}
|
||||
|
||||
lang = lang.toLowerCase();
|
||||
lang = lang.replace(/-/, "_"); // some browsers report language as en-US instead of en_US
|
||||
if (lang.length > 3) {
|
||||
lang = lang.substring(0, 3) + lang.substring(3).toUpperCase();
|
||||
}
|
||||
return lang;
|
||||
};
|
||||
|
||||
/** Unescape unicode chars ('\u00e3') */
|
||||
function unescapeUnicode(str) {
|
||||
|
||||
// unescape unicode codes
|
||||
var codes = [];
|
||||
var code = parseInt(str.substr(2), 16);
|
||||
if (code >= 0 && code < Math.pow(2, 16)) {
|
||||
codes.push(code);
|
||||
}
|
||||
// convert codes to text
|
||||
return codes.reduce(function (acc, val) { return acc + String.fromCharCode(val); }, '');
|
||||
}
|
||||
|
||||
$.i18n.render = function (type) {
|
||||
$.i18n.properties({
|
||||
name: 'language',
|
||||
path: layui.cache.base + 'i18n/properties',
|
||||
mode: 'map',
|
||||
cache: true, // 禁止缓存
|
||||
language: type,
|
||||
async : false,
|
||||
callback: function () { }
|
||||
});
|
||||
}
|
||||
|
||||
exports('i18n', $.i18n);
|
||||
})
|
||||
10
public/static/system/module/i18n/jquery.i18n.properties.min.js
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
(function(h){function v(a){a.debug&&(f("callbackIfComplete()"),f("totalFiles: "+a.totalFiles),f("filesLoaded: "+a.filesLoaded));a.async&&a.filesLoaded===a.totalFiles&&a.callback&&a.callback()}function n(a,c){c.debug&&f("loadAndParseFiles");null!==a&&0<a.length?w(a[0],c,function(){a.shift();n(a,c)}):v(c)}function w(a,c,m){c.debug&&(f("loadAndParseFile('"+a+"')"),f("totalFiles: "+c.totalFiles),f("filesLoaded: "+c.filesLoaded));null!==a&&"undefined"!==typeof a&&h.ajax({url:a,async:c.async,cache:c.cache,
|
||||
dataType:"text",success:function(e,b){c.debug&&(f("Succeeded in downloading "+a+"."),f(e));x(e,c);m()},error:function(e,b,d){c.debug&&f("Failed to download or parse "+a+". errorThrown: "+d);404===e.status&&--c.totalFiles;m()}})}function x(a,c){for(var m="",e=a.split(/\n/),b=/(\{\d+})/g,d=/\{(\d+)}/g,k=/(\\u.{4})/ig,f=0,n=e.length;f<n;f++){var l=e[f],l=l.trim();if(0<l.length&&"#"!=l.match("^#")){var p=l.split("=");if(0<p.length){for(var l=decodeURI(p[0]).trim(),g=1==p.length?"":p[1];-1!=g.search(/\\$/);)g=
|
||||
g.substring(0,g.length-1),g+=e[++f].trimRight();for(var q=2;q<p.length;q++)g+="="+p[q];g=g.trim();if("map"==c.mode||"both"==c.mode)(p=g.match(k))&&p.forEach(function(a){g=g.replace(a,y(a))}),c.namespace?h.i18n.map[c.namespace][l]=g:h.i18n.map[l]=g;if("vars"==c.mode||"both"==c.mode)if(g=g.replace(/"/g,'\\"'),z(l),b.test(g)){var u=!0,r="",t=[];g.split(b).forEach(function(a){!b.test(a)||0!==t.length&&-1!=t.indexOf(a)||(u||(r+=","),r+=a.replace(d,"v$1"),t.push(a),u=!1)});m+=l+"=function("+r+"){";l='"'+
|
||||
g.replace(d,'"+v$1+"')+'"';m+="return "+l+";};"}else m+=l+'="'+g+'";'}}}eval(m);c.filesLoaded+=1}function z(a){if(/\./.test(a)){var c="";a=a.split(/\./);for(var m=0,e=a.length;m<e;m++){var b=a[m];0<m&&(c+=".");c+=b;eval("typeof "+c+' == "undefined"')&&eval(c+"={};")}}}function y(a){var c=[];a=parseInt(a.substr(2),16);0<=a&&a<Math.pow(2,16)&&c.push(a);return c.reduce(function(a,c){return a+String.fromCharCode(c)},"")}h.i18n={};h.i18n.map={};var f=function(a){window.console&&console.log("i18n::"+a)};
|
||||
h.i18n.properties=function(a){a=h.extend({name:"Messages",language:"",path:"",namespace:null,mode:"vars",cache:!1,debug:!1,encoding:"UTF-8",async:!1,callback:null},a);a.namespace&&"string"==typeof a.namespace&&(a.namespace.match(/^[a-z]*$/)?h.i18n.map[a.namespace]={}:(f("Namespaces can only be lower case letters, a - z"),a.namespace=null));a.path.match(/\/$/)||(a.path+="/");a.language=this.normaliseLanguageCode(a);var c=a.name&&a.name.constructor===Array?a.name:[a.name];a.totalFiles=2*c.length+(5<=
|
||||
a.language.length?c.length:0);a.debug&&f("totalFiles: "+a.totalFiles);a.filesLoaded=0;c.forEach(function(c){var e=a.path+c+".properties";var b=a.language.substring(0,2);b=a.path+c+"_"+b+".properties";if(5<=a.language.length){var d=a.language.substring(0,5);c=a.path+c+"_"+d+".properties";e=[e,b,c]}else e=[e,b];n(e,a)});a.callback&&!a.async&&a.callback()};h.i18n.prop=function(a){var c=[].slice.call(arguments);if(2==c.length)if(h.isArray(c[1]))var f=c[1];else if("object"===typeof c[1]){var e=c[1].namespace;
|
||||
var b=c[1].replacements;c.splice(-1,1);b&&Array.prototype.push.apply(c,b)}b=e?h.i18n.map[e][a]:h.i18n.map[a];if(null===b)return"["+(e?e+"#"+a:a)+"]";var d;if("string"==typeof b){for(d=0;-1!=(d=b.indexOf("\\",d));)b="t"==b.charAt(d+1)?b.substring(0,d)+"\t"+b.substring(d++ +2):"r"==b.charAt(d+1)?b.substring(0,d)+"\r"+b.substring(d++ +2):"n"==b.charAt(d+1)?b.substring(0,d)+"\n"+b.substring(d++ +2):"f"==b.charAt(d+1)?b.substring(0,d)+"\f"+b.substring(d++ +2):"\\"==b.charAt(d+1)?b.substring(0,d)+"\\"+
|
||||
b.substring(d++ +2):b.substring(0,d)+b.substring(d+1);var k=[];for(d=0;d<b.length;)if("'"==b.charAt(d))if(d==b.length-1)b=b.substring(0,d);else if("'"==b.charAt(d+1))b=b.substring(0,d)+b.substring(++d);else{for(e=d+2;-1!=(e=b.indexOf("'",e));)if(e==b.length-1||"'"!=b.charAt(e+1)){b=b.substring(0,d)+b.substring(d+1,e)+b.substring(e+1);d=e-1;break}else b=b.substring(0,e)+b.substring(++e);-1==e&&(b=b.substring(0,d)+b.substring(d+1))}else if("{"==b.charAt(d))if(e=b.indexOf("}",d+1),-1==e)d++;else{var n=
|
||||
parseInt(b.substring(d+1,e));!isNaN(n)&&0<=n?(d=b.substring(0,d),""!==d&&k.push(d),k.push(n),d=0,b=b.substring(e+1)):d=e+1}else d++;""!==b&&k.push(b);b=k;settings.namespace?h.i18n.map[settings.namespace][a]=k:h.i18n.map[a]=k}if(0===b.length)return"";if(1==b.length&&"string"==typeof b[0])return b[0];k="";d=0;for(e=b.length;d<e;d++)k="string"==typeof b[d]?k+b[d]:f&&b[d]<f.length?k+f[b[d]]:!f&&b[d]+1<c.length?k+c[b[d]+1]:k+("{"+b[d]+"}");return k};h.i18n.normaliseLanguageCode=function(a){var c=a.language;
|
||||
if(!c||2>c.length)a.debug&&f("No language supplied. Pulling it from the browser ..."),c=navigator.languages&&0<navigator.languages.length?navigator.languages[0]:navigator.language||navigator.userLanguage||"en",a.debug&&f("Language from browser: "+c);c=c.toLowerCase();c=c.replace(/-/,"_");3<c.length&&(c=c.substring(0,3)+c.substring(3).toUpperCase());return c}})(jQuery);
|
||||
@@ -0,0 +1,16 @@
|
||||
主页=Home
|
||||
未定义=this undefined
|
||||
请不要关闭主页=Plase NOT Close HomePage
|
||||
data-url未定义=data-url NoSeting
|
||||
没有权限!=NO Permissions!
|
||||
文件上传中...=File Upload...
|
||||
菜单地址不能为空=Menu addr not empty!
|
||||
最大打开=Max Open
|
||||
标签页=TAB
|
||||
提示=Tips
|
||||
没有URL属性=not url attr
|
||||
请勾选数据=Plase check data
|
||||
确定要批量操作=sure you want to batch operation?
|
||||
确定要删除吗=Sure you want to delete
|
||||
控制器或操作定义!=controller or action undefined!
|
||||
卸载前请先禁用插件=Please disable the plugin before unloading
|
||||