├── 1.png ├── 2.png ├── LICENSE ├── README.md ├── bbr.sh ├── install.sh ├── pom.xml ├── sprov-ui.sh └── src └── main ├── java └── xyz │ └── sprov │ └── blog │ └── sprovui │ ├── SprovUISparkApp.java │ ├── bean │ ├── InboundTraffic.java │ ├── Msg.java │ ├── Status.java │ └── User.java │ ├── controller │ ├── InboundsController.java │ ├── ServerController.java │ ├── SprovUIController.java │ └── V2rayController.java │ ├── entity │ └── Exec.java │ ├── exception │ ├── SprovUIException.java │ ├── V2rayConfigException.java │ └── V2rayException.java │ ├── filter │ ├── EncodingFilter.java │ └── LoginFilter.java │ ├── route │ ├── BaseRoute.java │ ├── InboundsRoute.java │ ├── ServerRoute.java │ └── V2rayRoute.java │ ├── service │ ├── ExtraConfigService.java │ ├── ReportService.java │ ├── SecureService.java │ ├── ServerService.java │ ├── SprovUIService.java │ ├── ThreadService.java │ ├── V2rayConfigService.java │ └── V2rayService.java │ ├── transformer │ └── JsonTransformer.java │ ├── util │ ├── Config.java │ ├── Context.java │ ├── DateUtil.java │ ├── ExecUtil.java │ ├── FileUtil.java │ ├── HttpUtil.java │ ├── SecureRandomUtil.java │ ├── SessionUtil.java │ ├── SparkUtil.java │ └── V2ctlUtil.java │ └── venum │ └── Protocol.java └── resources ├── static └── res │ ├── axios │ └── axios.min.js │ ├── base64 │ └── base64.min.js │ ├── clipboard │ └── clipboard.min.js │ ├── css │ └── custom.css │ ├── element-ui │ ├── alert.js │ ├── aside.js │ ├── autocomplete.js │ ├── badge.js │ ├── breadcrumb-item.js │ ├── breadcrumb.js │ ├── button-group.js │ ├── button.js │ ├── card.js │ ├── carousel-item.js │ ├── carousel.js │ ├── cascader.js │ ├── checkbox-button.js │ ├── checkbox-group.js │ ├── checkbox.js │ ├── col.js │ ├── collapse-item.js │ ├── collapse.js │ ├── color-picker.js │ ├── container.js │ ├── date-picker.js │ ├── dialog.js │ ├── directives │ │ ├── mousewheel.js │ │ └── repeat-click.js │ ├── dropdown-item.js │ ├── dropdown-menu.js │ ├── dropdown.js │ ├── element-ui.common.js │ ├── footer.js │ ├── form-item.js │ ├── form.js │ ├── header.js │ ├── icon.js │ ├── index.js │ ├── input-number.js │ ├── input.js │ ├── loading.js │ ├── locale │ │ ├── format.js │ │ ├── index.js │ │ └── lang │ │ │ ├── af-ZA.js │ │ │ ├── ar.js │ │ │ ├── bg.js │ │ │ ├── ca.js │ │ │ ├── cs-CZ.js │ │ │ ├── da.js │ │ │ ├── de.js │ │ │ ├── ee.js │ │ │ ├── el.js │ │ │ ├── en.js │ │ │ ├── es.js │ │ │ ├── fa.js │ │ │ ├── fi.js │ │ │ ├── fr.js │ │ │ ├── he.js │ │ │ ├── hu.js │ │ │ ├── id.js │ │ │ ├── it.js │ │ │ ├── ja.js │ │ │ ├── km.js │ │ │ ├── ko.js │ │ │ ├── ku.js │ │ │ ├── kz.js │ │ │ ├── lt.js │ │ │ ├── lv.js │ │ │ ├── mn.js │ │ │ ├── nb-NO.js │ │ │ ├── nl.js │ │ │ ├── pl.js │ │ │ ├── pt-br.js │ │ │ ├── pt.js │ │ │ ├── ro.js │ │ │ ├── ru-RU.js │ │ │ ├── sk.js │ │ │ ├── sl.js │ │ │ ├── sv-SE.js │ │ │ ├── ta.js │ │ │ ├── th.js │ │ │ ├── tk.js │ │ │ ├── tr-TR.js │ │ │ ├── ua.js │ │ │ ├── ug-CN.js │ │ │ ├── vi.js │ │ │ ├── zh-CN.js │ │ │ └── zh-TW.js │ ├── main.js │ ├── menu-item-group.js │ ├── menu-item.js │ ├── menu.js │ ├── message-box.js │ ├── message.js │ ├── mixins │ │ ├── emitter.js │ │ ├── focus.js │ │ ├── locale.js │ │ └── migrating.js │ ├── notification.js │ ├── option-group.js │ ├── option.js │ ├── pagination.js │ ├── popover.js │ ├── progress.js │ ├── radio-button.js │ ├── radio-group.js │ ├── radio.js │ ├── rate.js │ ├── row.js │ ├── scrollbar.js │ ├── select.js │ ├── slider.js │ ├── spinner.js │ ├── step.js │ ├── steps.js │ ├── submenu.js │ ├── switch.js │ ├── tab-pane.js │ ├── table-column.js │ ├── table.js │ ├── tabs.js │ ├── tag.js │ ├── theme-chalk │ │ ├── alert.css │ │ ├── aside.css │ │ ├── autocomplete.css │ │ ├── badge.css │ │ ├── base.css │ │ ├── breadcrumb-item.css │ │ ├── breadcrumb.css │ │ ├── button-group.css │ │ ├── button.css │ │ ├── card.css │ │ ├── carousel-item.css │ │ ├── carousel.css │ │ ├── cascader.css │ │ ├── checkbox-button.css │ │ ├── checkbox-group.css │ │ ├── checkbox.css │ │ ├── col.css │ │ ├── collapse-item.css │ │ ├── collapse.css │ │ ├── color-picker.css │ │ ├── container.css │ │ ├── date-picker.css │ │ ├── dialog.css │ │ ├── display.css │ │ ├── dropdown-item.css │ │ ├── dropdown-menu.css │ │ ├── dropdown.css │ │ ├── fonts │ │ │ ├── element-icons.ttf │ │ │ └── element-icons.woff │ │ ├── footer.css │ │ ├── form-item.css │ │ ├── form.css │ │ ├── header.css │ │ ├── icon.css │ │ ├── index.css │ │ ├── input-number.css │ │ ├── input.css │ │ ├── loading.css │ │ ├── main.css │ │ ├── menu-item-group.css │ │ ├── menu-item.css │ │ ├── menu.css │ │ ├── message-box.css │ │ ├── message.css │ │ ├── notification.css │ │ ├── option-group.css │ │ ├── option.css │ │ ├── pagination.css │ │ ├── popover.css │ │ ├── popper.css │ │ ├── progress.css │ │ ├── radio-button.css │ │ ├── radio-group.css │ │ ├── radio.css │ │ ├── rate.css │ │ ├── reset.css │ │ ├── row.css │ │ ├── scrollbar.css │ │ ├── select-dropdown.css │ │ ├── select.css │ │ ├── slider.css │ │ ├── spinner.css │ │ ├── step.css │ │ ├── steps.css │ │ ├── submenu.css │ │ ├── switch.css │ │ ├── tab-pane.css │ │ ├── table-column.css │ │ ├── table.css │ │ ├── tabs.css │ │ ├── tag.css │ │ ├── time-picker.css │ │ ├── time-select.css │ │ ├── tooltip.css │ │ ├── transfer.css │ │ ├── tree.css │ │ └── upload.css │ ├── time-picker.js │ ├── time-select.js │ ├── tooltip.js │ ├── transfer.js │ ├── transitions │ │ └── collapse-transition.js │ ├── tree.js │ ├── umd │ │ └── locale │ │ │ ├── af-ZA.js │ │ │ ├── ar.js │ │ │ ├── bg.js │ │ │ ├── ca.js │ │ │ ├── cs-CZ.js │ │ │ ├── da.js │ │ │ ├── de.js │ │ │ ├── ee.js │ │ │ ├── el.js │ │ │ ├── en.js │ │ │ ├── es.js │ │ │ ├── fa.js │ │ │ ├── fi.js │ │ │ ├── fr.js │ │ │ ├── he.js │ │ │ ├── hu.js │ │ │ ├── id.js │ │ │ ├── it.js │ │ │ ├── ja.js │ │ │ ├── km.js │ │ │ ├── ko.js │ │ │ ├── ku.js │ │ │ ├── kz.js │ │ │ ├── lt.js │ │ │ ├── lv.js │ │ │ ├── mn.js │ │ │ ├── nb-NO.js │ │ │ ├── nl.js │ │ │ ├── pl.js │ │ │ ├── pt-br.js │ │ │ ├── pt.js │ │ │ ├── ro.js │ │ │ ├── ru-RU.js │ │ │ ├── sk.js │ │ │ ├── sl.js │ │ │ ├── sv-SE.js │ │ │ ├── ta.js │ │ │ ├── th.js │ │ │ ├── tk.js │ │ │ ├── tr-TR.js │ │ │ ├── ua.js │ │ │ ├── ug-CN.js │ │ │ ├── vi.js │ │ │ ├── zh-CN.js │ │ │ └── zh-TW.js │ ├── upload.js │ └── utils │ │ ├── after-leave.js │ │ ├── aria-dialog.js │ │ ├── aria-utils.js │ │ ├── clickoutside.js │ │ ├── date.js │ │ ├── dom.js │ │ ├── menu │ │ ├── aria-menubar.js │ │ ├── aria-menuitem.js │ │ └── aria-submenu.js │ │ ├── merge.js │ │ ├── popper.js │ │ ├── popup │ │ ├── index.js │ │ └── popup-manager.js │ │ ├── resize-event.js │ │ ├── scroll-into-view.js │ │ ├── scrollbar-width.js │ │ ├── shared.js │ │ ├── util.js │ │ ├── vdom.js │ │ └── vue-popper.js │ ├── icon │ ├── iconfont.css │ ├── iconfont.eot │ ├── iconfont.svg │ ├── iconfont.ttf │ └── iconfont.woff │ ├── js │ ├── application.js │ ├── axios-init.js │ ├── login.js │ ├── v2ray │ │ ├── accounts.js │ │ └── index.js │ └── vue-init.js │ ├── qrcode │ └── qrious.min.js │ ├── qs │ └── qs.min.js │ └── vue │ └── vue.min.js └── templates ├── common ├── common_head.html └── common_js.html ├── index.html └── v2ray ├── account_dialog.html ├── accounts.html ├── clients.html ├── footer.html ├── header.html └── index.html /1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuyeah/sprov-ui/64d06d4eb11a74420411eaa369becfec4750002d/1.png -------------------------------------------------------------------------------- /2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuyeah/sprov-ui/64d06d4eb11a74420411eaa369becfec4750002d/2.png -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | xyz.sprov.ui 6 | sprov-ui 7 | 1.1.0 8 | sprov-ui 9 | 一个支持多协议多用户的v2ray Web面板 10 | 11 | 12 | 1.8 13 | 14 | 15 | 16 | 17 | 18 | com.sparkjava 19 | spark-core 20 | 2.9.0 21 | 22 | 23 | com.sparkjava 24 | spark-template-thymeleaf 25 | 2.7.1 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | com.alibaba 35 | fastjson 36 | 1.2.56 37 | 38 | 39 | 40 | commons-io 41 | commons-io 42 | 2.2 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | junit 52 | junit 53 | 4.8.1 54 | test 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | org.apache.maven.plugins 63 | maven-compiler-plugin 64 | 3.1 65 | 66 | ${java.version} 67 | ${java.version} 68 | utf-8 69 | 70 | 71 | 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /src/main/java/xyz/sprov/blog/sprovui/bean/InboundTraffic.java: -------------------------------------------------------------------------------- 1 | package xyz.sprov.blog.sprovui.bean; 2 | 3 | public class InboundTraffic { 4 | 5 | private String tag; 6 | private long downlink; 7 | private long uplink; 8 | 9 | public String getTag() { 10 | return tag; 11 | } 12 | 13 | public void setTag(String tag) { 14 | this.tag = tag; 15 | } 16 | 17 | public long getDownlink() { 18 | return downlink; 19 | } 20 | 21 | public void setDownlink(long downlink) { 22 | this.downlink = downlink; 23 | } 24 | 25 | public long getUplink() { 26 | return uplink; 27 | } 28 | 29 | public void setUplink(long uplink) { 30 | this.uplink = uplink; 31 | } 32 | 33 | @Override 34 | public String toString() { 35 | return "InboundTraffic{" + 36 | "tag='" + tag + '\'' + 37 | ", downlink=" + downlink + 38 | ", uplink=" + uplink + 39 | '}'; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/xyz/sprov/blog/sprovui/bean/Msg.java: -------------------------------------------------------------------------------- 1 | package xyz.sprov.blog.sprovui.bean; 2 | 3 | import com.alibaba.fastjson.JSONObject; 4 | import com.alibaba.fastjson.serializer.SerializerFeature; 5 | //import org.springframework.validation.BindingResult; 6 | 7 | /** 8 | * 保存从服务器返回到用户的消息 9 | */ 10 | public class Msg { 11 | 12 | private boolean success; 13 | private String msg; 14 | private Object obj; 15 | 16 | public Msg(boolean success) { 17 | this.success = success; 18 | } 19 | 20 | public Msg(String msg) { 21 | this.msg = msg; 22 | } 23 | 24 | public Msg(boolean success, String msg) { 25 | this.success = success; 26 | this.msg = msg; 27 | } 28 | 29 | public Msg(boolean success, Object obj) { 30 | this.success = success; 31 | this.obj = obj; 32 | } 33 | 34 | public Msg(boolean success, String msg, Object obj) { 35 | this.success = success; 36 | this.msg = msg; 37 | this.obj = obj; 38 | } 39 | 40 | public boolean getSuccess() { 41 | return success; 42 | } 43 | 44 | public void setSuccess(boolean success) { 45 | this.success = success; 46 | } 47 | 48 | public String getMsg() { 49 | return msg; 50 | } 51 | 52 | public void setMsg(String msg) { 53 | this.msg = msg; 54 | } 55 | 56 | public Object getObj() { 57 | return obj; 58 | } 59 | 60 | public void setObj(Object obj) { 61 | this.obj = obj; 62 | } 63 | 64 | @Override 65 | public String toString() { 66 | return JSONObject.toJSONString(this, SerializerFeature.WriteMapNullValue); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /src/main/java/xyz/sprov/blog/sprovui/bean/Status.java: -------------------------------------------------------------------------------- 1 | package xyz.sprov.blog.sprovui.bean; 2 | 3 | public class Status { 4 | 5 | private String name; 6 | private String value; 7 | private String tag = ""; 8 | private String color = ""; 9 | 10 | public Status(String name, String value) { 11 | this.name = name; 12 | this.value = value; 13 | } 14 | 15 | public Status(String name, String value, String tag, String color) { 16 | this.name = name; 17 | this.value = value; 18 | this.tag = tag; 19 | this.color = color; 20 | } 21 | 22 | public String getName() { 23 | return name; 24 | } 25 | 26 | public void setName(String name) { 27 | this.name = name; 28 | } 29 | 30 | public String getValue() { 31 | return value; 32 | } 33 | 34 | public void setValue(String value) { 35 | this.value = value; 36 | } 37 | 38 | public String getTag() { 39 | return tag; 40 | } 41 | 42 | public void setTag(String tag) { 43 | this.tag = tag; 44 | } 45 | 46 | public String getColor() { 47 | return color; 48 | } 49 | 50 | public void setColor(String color) { 51 | this.color = color; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/main/java/xyz/sprov/blog/sprovui/bean/User.java: -------------------------------------------------------------------------------- 1 | package xyz.sprov.blog.sprovui.bean; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * 登录凭证 7 | */ 8 | public class User implements Serializable { 9 | 10 | private String username; 11 | private String password; 12 | 13 | public User() { 14 | } 15 | 16 | public User(String username, String password) { 17 | this.username = username; 18 | this.password = password; 19 | } 20 | 21 | public String getUsername() { 22 | return username; 23 | } 24 | 25 | public void setUsername(String username) { 26 | this.username = username; 27 | } 28 | 29 | public String getPassword() { 30 | return password; 31 | } 32 | 33 | public void setPassword(String password) { 34 | this.password = password; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/xyz/sprov/blog/sprovui/controller/ServerController.java: -------------------------------------------------------------------------------- 1 | package xyz.sprov.blog.sprovui.controller; 2 | 3 | import xyz.sprov.blog.sprovui.bean.Msg; 4 | import xyz.sprov.blog.sprovui.exception.V2rayException; 5 | import xyz.sprov.blog.sprovui.service.ServerService; 6 | import xyz.sprov.blog.sprovui.util.Context; 7 | 8 | import javax.servlet.http.HttpServletRequest; 9 | 10 | //@Controller 11 | //@RequestMapping("server") 12 | public class ServerController { 13 | 14 | // @Autowired 15 | private ServerService service = Context.serverService; 16 | 17 | // @ResponseBody 18 | // @PostMapping("status") 19 | public Msg status(HttpServletRequest request) { 20 | try { 21 | return new Msg(true, service.statuses(request)); 22 | } catch (V2rayException e) { 23 | return new Msg(false, "刷新状态失败:" + e.getMessage(), e.getObject()); 24 | } catch (Exception e) { 25 | return new Msg(false, "刷新状态失败:" + e.getMessage()); 26 | } 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/xyz/sprov/blog/sprovui/controller/SprovUIController.java: -------------------------------------------------------------------------------- 1 | package xyz.sprov.blog.sprovui.controller; 2 | 3 | import spark.Route; 4 | import xyz.sprov.blog.sprovui.bean.Msg; 5 | import xyz.sprov.blog.sprovui.exception.SprovUIException; 6 | import xyz.sprov.blog.sprovui.service.SprovUIService; 7 | import xyz.sprov.blog.sprovui.util.Context; 8 | 9 | public class SprovUIController { 10 | 11 | private SprovUIService service = Context.sprovUIService; 12 | 13 | public Route isLastVersion() { 14 | return (request, response) -> new Msg(true, service.lastVersion(), service.getCurrentVersion()); 15 | } 16 | 17 | public Route update() { 18 | return (request, response) -> { 19 | try { 20 | service.update(); 21 | return new Msg(true, "面板升级成功,请重启面板"); 22 | } catch (SprovUIException e) { 23 | return new Msg(true, e.getMessage()); 24 | } catch (Exception e) { 25 | return new Msg(false, "面板升级失败:" + e.getMessage()); 26 | } 27 | }; 28 | } 29 | 30 | public Route restart() { 31 | return (request, response) -> { 32 | try { 33 | service.restart(); 34 | return new Msg(true, "操作成功,请在几秒后刷新页面"); 35 | } catch (Exception e) { 36 | return new Msg(false, "重启失败:" + e.getMessage()); 37 | } 38 | }; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/xyz/sprov/blog/sprovui/exception/SprovUIException.java: -------------------------------------------------------------------------------- 1 | package xyz.sprov.blog.sprovui.exception; 2 | 3 | public class SprovUIException extends RuntimeException { 4 | 5 | public SprovUIException() {} 6 | 7 | public SprovUIException(String msg) { 8 | super(msg); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/xyz/sprov/blog/sprovui/exception/V2rayConfigException.java: -------------------------------------------------------------------------------- 1 | package xyz.sprov.blog.sprovui.exception; 2 | 3 | public class V2rayConfigException extends RuntimeException { 4 | 5 | public V2rayConfigException() {} 6 | 7 | public V2rayConfigException(String msg) { 8 | super(msg); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/xyz/sprov/blog/sprovui/exception/V2rayException.java: -------------------------------------------------------------------------------- 1 | package xyz.sprov.blog.sprovui.exception; 2 | 3 | public class V2rayException extends RuntimeException { 4 | 5 | private Object object; 6 | 7 | public V2rayException() {} 8 | 9 | public V2rayException(String msg) { 10 | super(msg); 11 | } 12 | 13 | public V2rayException(String msg, Object object) { 14 | super(msg); 15 | this.object = object; 16 | } 17 | 18 | public V2rayException(String msg, Throwable cause) { 19 | super(msg, cause); 20 | } 21 | 22 | public V2rayException(Throwable cause) { 23 | super(cause); 24 | } 25 | 26 | public V2rayException(Throwable cause, Object object) { 27 | super(cause); 28 | this.object = object; 29 | } 30 | 31 | public Object getObject() { 32 | return object; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/xyz/sprov/blog/sprovui/filter/EncodingFilter.java: -------------------------------------------------------------------------------- 1 | package xyz.sprov.blog.sprovui.filter; 2 | 3 | import spark.Filter; 4 | import spark.Request; 5 | import spark.Response; 6 | 7 | public class EncodingFilter implements Filter { 8 | @Override 9 | public void handle(Request request, Response response) throws Exception { 10 | request.raw().setCharacterEncoding("UTF-8"); 11 | response.raw().setCharacterEncoding("UTF-8"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/xyz/sprov/blog/sprovui/filter/LoginFilter.java: -------------------------------------------------------------------------------- 1 | package xyz.sprov.blog.sprovui.filter; 2 | 3 | import spark.Filter; 4 | import spark.Request; 5 | import spark.Response; 6 | import xyz.sprov.blog.sprovui.bean.Msg; 7 | import xyz.sprov.blog.sprovui.util.SessionUtil; 8 | import xyz.sprov.blog.sprovui.util.SparkUtil; 9 | 10 | import static spark.Spark.halt; 11 | 12 | public class LoginFilter implements Filter { 13 | 14 | @Override 15 | public void handle(Request request, Response response) { 16 | if (SessionUtil.getUser(request) == null) { 17 | if (SparkUtil.isAjax(request)) { 18 | response.type("text/json"); 19 | halt(new Msg(false, "您的登录时效已过,请重新登录").toString()); 20 | } else { 21 | response.redirect("/"); 22 | halt(); 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/xyz/sprov/blog/sprovui/route/BaseRoute.java: -------------------------------------------------------------------------------- 1 | package xyz.sprov.blog.sprovui.route; 2 | 3 | import spark.Route; 4 | import spark.utils.StringUtils; 5 | import xyz.sprov.blog.sprovui.bean.Msg; 6 | import xyz.sprov.blog.sprovui.bean.User; 7 | import xyz.sprov.blog.sprovui.service.SecureService; 8 | import xyz.sprov.blog.sprovui.util.Config; 9 | import xyz.sprov.blog.sprovui.util.Context; 10 | import xyz.sprov.blog.sprovui.util.SessionUtil; 11 | import xyz.sprov.blog.sprovui.util.SparkUtil; 12 | 13 | import java.util.HashMap; 14 | import java.util.Map; 15 | 16 | public class BaseRoute { 17 | 18 | private SecureService secureService = Context.secureService; 19 | 20 | private String username = Config.username(); 21 | 22 | private String password = Config.password(); 23 | 24 | private String loginTitle = Config.loginTitle(); 25 | private String loginFooter = Config.loginFooter(); 26 | 27 | public Route index() { 28 | return (request, response) -> { 29 | if (SessionUtil.getUser(request) != null) { 30 | response.redirect("/v2ray/"); 31 | } 32 | Map model = new HashMap<>(); 33 | model.put("loginTitle", loginTitle); 34 | model.put("loginFooter", loginFooter); 35 | return SparkUtil.render(model, "/index"); 36 | }; 37 | } 38 | 39 | public Route login() { 40 | return (request, response) -> { 41 | String user = request.queryParams("username"); 42 | String pwd = request.queryParams("password"); 43 | if (StringUtils.isEmpty(user) || StringUtils.isEmpty(pwd)) { 44 | return new Msg(false, "用户名和密码不能为空"); 45 | } else if (secureService.isBlackList(request)) { 46 | return new Msg(false, "用户名或密码错误"); 47 | } else if (username.equals(user) && password.equals(pwd)) { 48 | SessionUtil.setUser(request, new User(user, pwd)); 49 | return new Msg(true, "登录成功"); 50 | } 51 | return new Msg(false, "用户名或密码错误"); 52 | }; 53 | } 54 | 55 | public Route logout() { 56 | return (request, response) -> { 57 | SessionUtil.removeUser(request); 58 | response.redirect(Config.basePath() + "/"); 59 | return ""; 60 | }; 61 | } 62 | 63 | public Route robots() { 64 | return (request, response) -> { 65 | response.type("text/plain"); 66 | return "User-agent: *\n" + "Disallow: /"; 67 | }; 68 | } 69 | 70 | } 71 | -------------------------------------------------------------------------------- /src/main/java/xyz/sprov/blog/sprovui/route/ServerRoute.java: -------------------------------------------------------------------------------- 1 | package xyz.sprov.blog.sprovui.route; 2 | 3 | import spark.Route; 4 | import xyz.sprov.blog.sprovui.controller.ServerController; 5 | import xyz.sprov.blog.sprovui.util.Context; 6 | 7 | public class ServerRoute { 8 | 9 | private ServerController controller = Context.serverController; 10 | 11 | public Route status() { 12 | return (request, response) -> controller.status(request.raw()); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/xyz/sprov/blog/sprovui/route/V2rayRoute.java: -------------------------------------------------------------------------------- 1 | package xyz.sprov.blog.sprovui.route; 2 | 3 | import spark.Route; 4 | import xyz.sprov.blog.sprovui.controller.V2rayController; 5 | import xyz.sprov.blog.sprovui.util.Context; 6 | 7 | public class V2rayRoute { 8 | 9 | private V2rayController controller = Context.v2rayController; 10 | 11 | public Route status() { 12 | return (request, response) -> controller.status(); 13 | } 14 | 15 | public Route start() { 16 | return (request, response) -> controller.start(); 17 | } 18 | 19 | public Route stop() { 20 | return (request, response) -> controller.stop(); 21 | } 22 | 23 | public Route restart() { 24 | return (request, response) -> controller.restart(); 25 | } 26 | 27 | public Route config() { 28 | return (request, response) -> controller.config(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/xyz/sprov/blog/sprovui/service/ReportService.java: -------------------------------------------------------------------------------- 1 | package xyz.sprov.blog.sprovui.service; 2 | 3 | import com.alibaba.fastjson.JSONArray; 4 | import com.alibaba.fastjson.JSONObject; 5 | import spark.utils.StringUtils; 6 | import xyz.sprov.blog.sprovui.util.Config; 7 | import xyz.sprov.blog.sprovui.util.Context; 8 | import xyz.sprov.blog.sprovui.util.HttpUtil; 9 | 10 | import java.util.HashMap; 11 | import java.util.Map; 12 | import java.util.concurrent.TimeUnit; 13 | 14 | public class ReportService { 15 | 16 | private static final String REPORT_URL = "https://blog.sprov.xyz/sprov-ui/report"; 17 | 18 | private V2rayConfigService v2rayConfigService = Context.v2rayConfigService; 19 | 20 | public ReportService() { 21 | Context.threadService.scheduleAtFixedRate(new ReportThread(), 30, 30, TimeUnit.MINUTES); 22 | } 23 | 24 | private class ReportThread implements Runnable { 25 | 26 | @Override 27 | public void run() { 28 | try { 29 | JSONObject config = v2rayConfigService.getConfig(); 30 | JSONArray inbounds = config.getJSONArray("inbounds"); 31 | Map map = new HashMap<>(); 32 | for (Object obj : inbounds) { 33 | JSONObject inbound = (JSONObject) obj; 34 | String protocol = inbound.getString("protocol"); 35 | if (StringUtils.isEmpty(protocol)) { 36 | continue; 37 | } 38 | int n = (Integer) map.getOrDefault(protocol, 0); 39 | map.put(protocol, n + 1); 40 | map.put("version", Config.currentVersion()); 41 | } 42 | HttpUtil.post(REPORT_URL, map); 43 | } catch (Exception ignore) {} 44 | } 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/xyz/sprov/blog/sprovui/service/SecureService.java: -------------------------------------------------------------------------------- 1 | package xyz.sprov.blog.sprovui.service; 2 | 3 | import spark.Request; 4 | import xyz.sprov.blog.sprovui.util.Config; 5 | import xyz.sprov.blog.sprovui.util.Context; 6 | 7 | import java.util.HashMap; 8 | import java.util.Iterator; 9 | import java.util.Map; 10 | import java.util.concurrent.TimeUnit; 11 | import java.util.concurrent.locks.Lock; 12 | import java.util.concurrent.locks.ReadWriteLock; 13 | import java.util.concurrent.locks.ReentrantReadWriteLock; 14 | 15 | public class SecureService { 16 | 17 | private final Map wrongPassCountMap = new HashMap<>(); 18 | 19 | private final ReadWriteLock lock = new ReentrantReadWriteLock(); 20 | private final Lock readLock = lock.readLock(); 21 | private final Lock writeLock = lock.writeLock(); 22 | 23 | private int maxWrongPassCount = Config.maxWrongPassCount(); 24 | 25 | public SecureService() { 26 | Context.threadService.scheduleAtFixedRate(new SecurityJob(), 29, 29, TimeUnit.MINUTES); 27 | } 28 | 29 | public boolean isBlackList(Request request) { 30 | String ip = request.ip(); 31 | int count = getCount(ip); 32 | putCount(ip, count + 1); 33 | return count >= maxWrongPassCount; 34 | } 35 | 36 | private int getCount(String ip) { 37 | Integer count; 38 | try { 39 | readLock.lock(); 40 | count = wrongPassCountMap.get(ip); 41 | } finally { 42 | readLock.unlock(); 43 | } 44 | if (count == null) { 45 | return 0; 46 | } 47 | return count; 48 | } 49 | 50 | private void putCount(String ip, int count) { 51 | try { 52 | writeLock.lock(); 53 | wrongPassCountMap.put(ip, count); 54 | } finally { 55 | writeLock.unlock(); 56 | } 57 | } 58 | 59 | private class SecurityJob implements Runnable { 60 | 61 | @Override 62 | public void run() { 63 | try { 64 | writeLock.lock(); 65 | Iterator> iterator = wrongPassCountMap.entrySet().iterator(); 66 | while (iterator.hasNext()) { 67 | Map.Entry entry = iterator.next(); 68 | int count = entry.getValue(); 69 | if (count == 1) { 70 | iterator.remove(); 71 | } else { 72 | entry.setValue(count - 1); 73 | } 74 | } 75 | } finally { 76 | writeLock.unlock(); 77 | } 78 | System.gc(); 79 | } 80 | } 81 | 82 | } 83 | -------------------------------------------------------------------------------- /src/main/java/xyz/sprov/blog/sprovui/service/ThreadService.java: -------------------------------------------------------------------------------- 1 | package xyz.sprov.blog.sprovui.service; 2 | 3 | import java.util.concurrent.ScheduledThreadPoolExecutor; 4 | 5 | public class ThreadService extends ScheduledThreadPoolExecutor { 6 | 7 | public ThreadService() { 8 | super(1); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/xyz/sprov/blog/sprovui/transformer/JsonTransformer.java: -------------------------------------------------------------------------------- 1 | package xyz.sprov.blog.sprovui.transformer; 2 | 3 | import com.alibaba.fastjson.JSON; 4 | import com.alibaba.fastjson.serializer.SerializerFeature; 5 | import spark.ResponseTransformer; 6 | 7 | public class JsonTransformer implements ResponseTransformer { 8 | 9 | @Override 10 | public String render(Object model) { 11 | return JSON.toJSONString(model, SerializerFeature.WriteMapNullValue); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/xyz/sprov/blog/sprovui/util/Context.java: -------------------------------------------------------------------------------- 1 | package xyz.sprov.blog.sprovui.util; 2 | 3 | import xyz.sprov.blog.sprovui.controller.InboundsController; 4 | import xyz.sprov.blog.sprovui.controller.ServerController; 5 | import xyz.sprov.blog.sprovui.controller.SprovUIController; 6 | import xyz.sprov.blog.sprovui.controller.V2rayController; 7 | import xyz.sprov.blog.sprovui.filter.EncodingFilter; 8 | import xyz.sprov.blog.sprovui.filter.LoginFilter; 9 | import xyz.sprov.blog.sprovui.route.BaseRoute; 10 | import xyz.sprov.blog.sprovui.route.InboundsRoute; 11 | import xyz.sprov.blog.sprovui.route.ServerRoute; 12 | import xyz.sprov.blog.sprovui.route.V2rayRoute; 13 | import xyz.sprov.blog.sprovui.service.*; 14 | import xyz.sprov.blog.sprovui.transformer.JsonTransformer; 15 | 16 | public class Context { 17 | 18 | public static final LoginFilter loginFilter = new LoginFilter(); 19 | public static final EncodingFilter encodingFilter = new EncodingFilter(); 20 | 21 | public static final JsonTransformer jsonTransformer = new JsonTransformer(); 22 | 23 | public static final ThreadService threadService = new ThreadService(); 24 | public static final ExtraConfigService extraConfigService = new ExtraConfigService(); 25 | public static final V2rayService v2rayService = new V2rayService(); 26 | public static final V2rayConfigService v2rayConfigService = new V2rayConfigService(); 27 | public static final ServerService serverService = new ServerService(); 28 | public static final SprovUIService sprovUIService = new SprovUIService(); 29 | public static final ReportService reportService = new ReportService(); 30 | public static final SecureService secureService = new SecureService(); 31 | 32 | public static final V2rayController v2rayController = new V2rayController(); 33 | public static final InboundsController inboundsController = new InboundsController(); 34 | public static final ServerController serverController = new ServerController(); 35 | public static final SprovUIController sprovUIController = new SprovUIController(); 36 | 37 | public static final BaseRoute baseRoute = new BaseRoute(); 38 | public static final V2rayRoute v2rayRoute = new V2rayRoute(); 39 | public static final ServerRoute serverRoute = new ServerRoute(); 40 | public static final InboundsRoute inboundsRoute = new InboundsRoute(); 41 | 42 | 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/xyz/sprov/blog/sprovui/util/DateUtil.java: -------------------------------------------------------------------------------- 1 | package xyz.sprov.blog.sprovui.util; 2 | 3 | public class DateUtil { 4 | 5 | public static final long ONE_SECOND = 1; 6 | 7 | public static final long ONE_MINUTE = ONE_SECOND * 60; 8 | 9 | public static final long ONE_HOUR = ONE_MINUTE * 60; 10 | 11 | public static final long ONE_DAY = ONE_HOUR * 24; 12 | 13 | /** 14 | * 格式化秒 15 | */ 16 | public static String formatSecond(long second) { 17 | if (second < ONE_MINUTE) { 18 | return second + " 秒"; 19 | } else if (second < ONE_HOUR) { 20 | return second / ONE_MINUTE + " 分钟"; 21 | } else if (second < ONE_DAY) { 22 | return second / ONE_HOUR + " 小时"; 23 | } else { 24 | return second / ONE_DAY + " 天"; 25 | } 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/xyz/sprov/blog/sprovui/util/ExecUtil.java: -------------------------------------------------------------------------------- 1 | package xyz.sprov.blog.sprovui.util; 2 | 3 | import xyz.sprov.blog.sprovui.entity.Exec; 4 | 5 | import java.io.IOException; 6 | import java.util.concurrent.TimeUnit; 7 | 8 | public class ExecUtil { 9 | 10 | private ExecUtil() {} 11 | 12 | public static String execForResult(String ... commands) throws IOException, InterruptedException { 13 | Exec exec = new Exec(commands); 14 | return exec.waitForResult(); 15 | } 16 | 17 | public static String execForResult(String command) throws IOException, InterruptedException { 18 | Exec exec = new Exec(command); 19 | return exec.waitForResult(); 20 | } 21 | 22 | public static String execForResult(String command, long timeout, TimeUnit timeUnit) throws IOException, InterruptedException { 23 | Exec exec = new Exec(command); 24 | return exec.waitForResult(timeout, timeUnit); 25 | } 26 | 27 | public static String execForResult(long timeout, TimeUnit timeUnit, String... commands) throws IOException, InterruptedException { 28 | Exec exec = new Exec(commands); 29 | return exec.waitForResult(timeout, timeUnit); 30 | } 31 | 32 | public static int execForStatus(String command) throws IOException, InterruptedException { 33 | Exec exec = new Exec(command); 34 | return exec.waitFor(); 35 | } 36 | 37 | public static int execForStatus(String command, long timeout, TimeUnit timeUnit) throws IOException, InterruptedException { 38 | Exec exec = new Exec(command); 39 | if (exec.waitFor(timeout, timeUnit)) { 40 | return exec.getExitValue(); 41 | } 42 | throw new IOException("wait timeout:" + command); 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/xyz/sprov/blog/sprovui/util/FileUtil.java: -------------------------------------------------------------------------------- 1 | package xyz.sprov.blog.sprovui.util; 2 | 3 | public class FileUtil { 4 | 5 | public static final long ONE_KB = 1024; 6 | private static final long ONE_MB = ONE_KB * 1024; 7 | private static final long ONE_GB = ONE_MB * 1024; 8 | private static final long ONE_TB = ONE_GB * 1024; 9 | 10 | public static String formatSize(long size) { 11 | if (size < ONE_KB) { 12 | return size + " B"; 13 | } else if (size < ONE_MB) { 14 | return String.format("%.2f", 1.0 * size / ONE_KB) + " KB"; 15 | } else if (size < ONE_GB) { 16 | return String.format("%.2f", 1.0 * size / ONE_MB) + " MB"; 17 | } else if (size < ONE_TB) { 18 | return String.format("%.2f", 1.0 * size / ONE_GB) + " GB"; 19 | } else { 20 | return String.format("%.2f", 1.0 * size / ONE_TB) + " TB"; 21 | } 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/xyz/sprov/blog/sprovui/util/HttpUtil.java: -------------------------------------------------------------------------------- 1 | package xyz.sprov.blog.sprovui.util; 2 | 3 | import java.io.IOException; 4 | import java.io.InputStream; 5 | import java.io.OutputStream; 6 | import java.io.UnsupportedEncodingException; 7 | import java.net.HttpURLConnection; 8 | import java.net.URL; 9 | import java.net.URLEncoder; 10 | import java.util.Map; 11 | 12 | public class HttpUtil { 13 | 14 | public static String getRealUrl(String url) throws IOException { 15 | HttpURLConnection conn = null; 16 | try { 17 | URL u = new URL(url); 18 | conn = (HttpURLConnection) u.openConnection(); 19 | conn.setConnectTimeout(10000); 20 | conn.connect(); 21 | conn.getResponseCode(); 22 | return conn.getURL().toString(); 23 | } finally { 24 | if (conn != null) { 25 | conn.disconnect(); 26 | } 27 | } 28 | } 29 | 30 | public static InputStream download(String url) throws IOException { 31 | URL u = new URL(url); 32 | return u.openStream(); 33 | } 34 | 35 | public static void post(String url, Map data) throws IOException { 36 | HttpURLConnection conn = null; 37 | URL u = new URL(url); 38 | try { 39 | conn = (HttpURLConnection) u.openConnection(); 40 | conn.setRequestMethod("POST"); 41 | conn.setConnectTimeout(10000); 42 | conn.setDoOutput(true); 43 | conn.setDoInput(true); 44 | conn.setRequestProperty("Connection", "close"); 45 | conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded; charset=UTF-8"); 46 | conn.connect(); 47 | 48 | StringBuilder content = new StringBuilder(); 49 | data.forEach((key, value) -> { 50 | try { 51 | content.append(key) 52 | .append('=') 53 | .append(URLEncoder.encode(String.valueOf(value), "UTF-8")) 54 | .append('&'); 55 | } catch (UnsupportedEncodingException ignore) {} 56 | }); 57 | if (content.length() > 0) { 58 | content.setLength(content.length() - 1); 59 | } 60 | try (OutputStream out = conn.getOutputStream()) { 61 | out.write(content.toString().getBytes()); 62 | out.flush(); 63 | } 64 | conn.getInputStream().close(); 65 | } finally { 66 | if (conn != null) { 67 | conn.disconnect(); 68 | } 69 | } 70 | } 71 | 72 | } 73 | -------------------------------------------------------------------------------- /src/main/java/xyz/sprov/blog/sprovui/util/SecureRandomUtil.java: -------------------------------------------------------------------------------- 1 | package xyz.sprov.blog.sprovui.util; 2 | 3 | import java.security.SecureRandom; 4 | 5 | public class SecureRandomUtil { 6 | 7 | private static final char[] LOWER_SEQUENCE = new char[26]; 8 | private static final char[] UPPER_SEQUENCE = new char[26]; 9 | private static final char[] NUMBER_SEQUENCE = new char[10]; 10 | 11 | private static final char[] LETTER_SEQUENCE = new char[52]; 12 | private static final char[] LOW_NUM_SEQUENCE = new char[36]; 13 | private static final char[] UP_NUM_SEQUENCE = new char[36]; 14 | 15 | private static final char[] LETTER_NUM_SEQUENCE = new char[62]; 16 | 17 | private static final SecureRandom random = new SecureRandom(); 18 | 19 | static { 20 | for (int i = 0; i < 26; ++i) { 21 | LOWER_SEQUENCE[i] = (char) (i + 'a'); 22 | UPPER_SEQUENCE[i] = (char) (i + 'A'); 23 | LETTER_SEQUENCE[i] = LOWER_SEQUENCE[i]; 24 | LETTER_SEQUENCE[i + 26] = UPPER_SEQUENCE[i]; 25 | LOW_NUM_SEQUENCE[i] = LOWER_SEQUENCE[i]; 26 | UP_NUM_SEQUENCE[i] = UPPER_SEQUENCE[i]; 27 | 28 | LETTER_NUM_SEQUENCE[i] = LOWER_SEQUENCE[i]; 29 | LETTER_NUM_SEQUENCE[i + 26] = UPPER_SEQUENCE[i]; 30 | if (i < 10) { 31 | NUMBER_SEQUENCE[i] = (char) (i + '0'); 32 | LOW_NUM_SEQUENCE[i + 26] = NUMBER_SEQUENCE[i]; 33 | UP_NUM_SEQUENCE[i + 26] = NUMBER_SEQUENCE[i]; 34 | LETTER_NUM_SEQUENCE[i + 52] = NUMBER_SEQUENCE[i]; 35 | } 36 | } 37 | shuffle(LOWER_SEQUENCE); 38 | shuffle(UPPER_SEQUENCE); 39 | shuffle(NUMBER_SEQUENCE); 40 | 41 | shuffle(LETTER_SEQUENCE); 42 | shuffle(LOW_NUM_SEQUENCE); 43 | shuffle(UP_NUM_SEQUENCE); 44 | 45 | shuffle(LETTER_NUM_SEQUENCE); 46 | } 47 | 48 | private static void shuffle(char[] arr) { 49 | for (int i = arr.length - 1; i > 0; i--) { 50 | int index = random.nextInt(i + 1); 51 | char temp = arr[index]; 52 | arr[index] = arr[i]; 53 | arr[i] = temp; 54 | } 55 | } 56 | 57 | private static String randomSequence(char[] sequence, int len) { 58 | StringBuilder builder = new StringBuilder(len); 59 | int length = sequence.length; 60 | for (int i = 0; i < len; ++i) { 61 | builder.append(sequence[random.nextInt(length)]); 62 | } 63 | return builder.toString(); 64 | } 65 | 66 | public static String randomLetter(int len) { 67 | return randomSequence(LETTER_SEQUENCE, len); 68 | } 69 | 70 | public static String randomLowNum(int len) { 71 | return randomSequence(LOW_NUM_SEQUENCE, len); 72 | } 73 | 74 | public static String randomLetterNum(int len) { 75 | return randomSequence(LETTER_NUM_SEQUENCE, len); 76 | } 77 | 78 | } 79 | -------------------------------------------------------------------------------- /src/main/java/xyz/sprov/blog/sprovui/util/SessionUtil.java: -------------------------------------------------------------------------------- 1 | package xyz.sprov.blog.sprovui.util; 2 | 3 | import spark.Request; 4 | import xyz.sprov.blog.sprovui.bean.User; 5 | 6 | public class SessionUtil { 7 | 8 | private static final String USER_LOGIN = "USER_LOGIN"; 9 | 10 | private SessionUtil() {} 11 | 12 | public static User getUser(Request request) { 13 | return request.session().attribute(USER_LOGIN); 14 | } 15 | 16 | public static void setUser(Request request, User user) { 17 | request.session().attribute(USER_LOGIN, user); 18 | } 19 | 20 | public static void removeUser(Request request) { 21 | request.session().removeAttribute(USER_LOGIN); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/xyz/sprov/blog/sprovui/util/SparkUtil.java: -------------------------------------------------------------------------------- 1 | package xyz.sprov.blog.sprovui.util; 2 | 3 | import org.thymeleaf.templatemode.TemplateMode; 4 | import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver; 5 | import spark.ModelAndView; 6 | import spark.Request; 7 | import spark.Route; 8 | import spark.TemplateEngine; 9 | import spark.template.thymeleaf.ThymeleafTemplateEngine; 10 | 11 | import java.util.HashMap; 12 | import java.util.Map; 13 | 14 | public class SparkUtil { 15 | 16 | private static TemplateEngine templateEngine; 17 | 18 | static { 19 | ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver(); 20 | templateResolver.setCharacterEncoding("UTF-8"); 21 | templateResolver.setTemplateMode(TemplateMode.HTML); 22 | templateResolver.setPrefix("templates/"); 23 | templateResolver.setSuffix(".html"); 24 | templateResolver.setCacheTTLMs(3600000L); 25 | 26 | templateEngine = new ThymeleafTemplateEngine(templateResolver); 27 | // templateEngine = new VelocityTemplateEngine("UTF-8"); 28 | } 29 | 30 | private SparkUtil() {} 31 | 32 | public static boolean isAjax(Request request) { 33 | return "XMLHttpRequest".equals(request.headers("X-Requested-With")); 34 | } 35 | 36 | public static String render(String path) { 37 | return render(new HashMap<>(), path); 38 | } 39 | 40 | public static String render(Map model, String path) { 41 | if (model == null) { 42 | model = new HashMap<>(); 43 | } 44 | model.put("basePath", Config.basePath()); 45 | return templateEngine.render(new ModelAndView(model, path)); 46 | } 47 | 48 | public static Route view(String path) { 49 | return (request, response) -> render(path); 50 | } 51 | 52 | } 53 | -------------------------------------------------------------------------------- /src/main/java/xyz/sprov/blog/sprovui/venum/Protocol.java: -------------------------------------------------------------------------------- 1 | package xyz.sprov.blog.sprovui.venum; 2 | 3 | import spark.utils.StringUtils; 4 | 5 | public enum Protocol { 6 | 7 | DOKODEMO_DOOR("dokodemo-door"), // 端口转发 8 | VMESS("vmess"), // VMess协议 9 | MT_PROTO("mtproto"), // Telegram代理 10 | SHADOWSOCKS("shadowsocks"), // shadowsocks 11 | SOCKS("socks"), // socks 代理 12 | HTTP("http"); // http 代理 13 | 14 | private static String[] protocolNames; 15 | 16 | static { 17 | Protocol[] protocols = Protocol.values(); 18 | protocolNames = new String[protocols.length]; 19 | for (int i = 0; i < protocolNames.length; ++i) { 20 | protocolNames[i] = protocols[i].protocol; 21 | } 22 | } 23 | 24 | private String protocol; 25 | 26 | Protocol(String protocol) { 27 | this.protocol = protocol; 28 | } 29 | 30 | public String getValue() { 31 | return protocol; 32 | } 33 | 34 | public static boolean checkProtocol(String protocol) { 35 | if (StringUtils.isBlank(protocol)) { 36 | return false; 37 | } 38 | for (String name : protocolNames) { 39 | if (name.equals(protocol)) { 40 | return true; 41 | } 42 | } 43 | return false; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/resources/static/res/css/custom.css: -------------------------------------------------------------------------------- 1 | [v-cloak] { 2 | display: none; 3 | } 4 | 5 | body { 6 | margin: 0; 7 | background-color: #f6f6f6; 8 | } 9 | 10 | .el-card { 11 | border-radius: 20px !important; 12 | } 13 | 14 | .el-tag,.el-alert,.el-button { 15 | border-radius: 20px !important; 16 | } 17 | 18 | .el-progress-bar__inner { 19 | transition: 0.5s; 20 | } 21 | -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/directives/mousewheel.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | 5 | var _normalizeWheel = require('normalize-wheel'); 6 | 7 | var _normalizeWheel2 = _interopRequireDefault(_normalizeWheel); 8 | 9 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 10 | 11 | var isFirefox = typeof navigator !== 'undefined' && navigator.userAgent.toLowerCase().indexOf('firefox') > -1; 12 | 13 | var mousewheel = function mousewheel(element, callback) { 14 | if (element && element.addEventListener) { 15 | element.addEventListener(isFirefox ? 'DOMMouseScroll' : 'mousewheel', function (event) { 16 | var normalized = (0, _normalizeWheel2.default)(event); 17 | callback && callback.apply(this, [event, normalized]); 18 | }); 19 | } 20 | }; 21 | 22 | exports.default = { 23 | bind: function bind(el, binding) { 24 | mousewheel(el, binding.value); 25 | } 26 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/directives/repeat-click.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | 5 | var _dom = require('element-ui/lib/utils/dom'); 6 | 7 | exports.default = { 8 | bind: function bind(el, binding, vnode) { 9 | var interval = null; 10 | var startTime = void 0; 11 | var handler = function handler() { 12 | return vnode.context[binding.expression].apply(); 13 | }; 14 | var clear = function clear() { 15 | if (new Date() - startTime < 100) { 16 | handler(); 17 | } 18 | clearInterval(interval); 19 | interval = null; 20 | }; 21 | 22 | (0, _dom.on)(el, 'mousedown', function (e) { 23 | if (e.button !== 0) return; 24 | startTime = new Date(); 25 | (0, _dom.once)(document, 'mouseup', clear); 26 | clearInterval(interval); 27 | interval = setInterval(handler, 100); 28 | }); 29 | } 30 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/format.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | 5 | var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; 6 | 7 | exports.default = function (Vue) { 8 | 9 | /** 10 | * template 11 | * 12 | * @param {String} string 13 | * @param {Array} ...args 14 | * @return {String} 15 | */ 16 | 17 | function template(string) { 18 | for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { 19 | args[_key - 1] = arguments[_key]; 20 | } 21 | 22 | if (args.length === 1 && _typeof(args[0]) === 'object') { 23 | args = args[0]; 24 | } 25 | 26 | if (!args || !args.hasOwnProperty) { 27 | args = {}; 28 | } 29 | 30 | return string.replace(RE_NARGS, function (match, prefix, i, index) { 31 | var result = void 0; 32 | 33 | if (string[index - 1] === '{' && string[index + match.length] === '}') { 34 | return i; 35 | } else { 36 | result = (0, _util.hasOwn)(args, i) ? args[i] : null; 37 | if (result === null || result === undefined) { 38 | return ''; 39 | } 40 | 41 | return result; 42 | } 43 | }); 44 | } 45 | 46 | return template; 47 | }; 48 | 49 | var _util = require('element-ui/lib/utils/util'); 50 | 51 | var RE_NARGS = /(%|)\{([0-9a-zA-Z_]+)\}/g; 52 | /** 53 | * String format template 54 | * - Inspired: 55 | * https://github.com/Matt-Esch/string-template/index.js 56 | */ -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.i18n = exports.use = exports.t = undefined; 5 | 6 | var _zhCN = require('element-ui/lib/locale/lang/zh-CN'); 7 | 8 | var _zhCN2 = _interopRequireDefault(_zhCN); 9 | 10 | var _vue = require('vue'); 11 | 12 | var _vue2 = _interopRequireDefault(_vue); 13 | 14 | var _deepmerge = require('deepmerge'); 15 | 16 | var _deepmerge2 = _interopRequireDefault(_deepmerge); 17 | 18 | var _format = require('./format'); 19 | 20 | var _format2 = _interopRequireDefault(_format); 21 | 22 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 23 | 24 | var format = (0, _format2.default)(_vue2.default); 25 | var lang = _zhCN2.default; 26 | var merged = false; 27 | var i18nHandler = function i18nHandler() { 28 | var vuei18n = Object.getPrototypeOf(this || _vue2.default).$t; 29 | if (typeof vuei18n === 'function' && !!_vue2.default.locale) { 30 | if (!merged) { 31 | merged = true; 32 | _vue2.default.locale(_vue2.default.config.lang, (0, _deepmerge2.default)(lang, _vue2.default.locale(_vue2.default.config.lang) || {}, { clone: true })); 33 | } 34 | return vuei18n.apply(this, arguments); 35 | } 36 | }; 37 | 38 | var t = exports.t = function t(path, options) { 39 | var value = i18nHandler.apply(this, arguments); 40 | if (value !== null && value !== undefined) return value; 41 | 42 | var array = path.split('.'); 43 | var current = lang; 44 | 45 | for (var i = 0, j = array.length; i < j; i++) { 46 | var property = array[i]; 47 | value = current[property]; 48 | if (i === j - 1) return format(value, options); 49 | if (!value) return ''; 50 | current = value; 51 | } 52 | return ''; 53 | }; 54 | 55 | var use = exports.use = function use(l) { 56 | lang = l || lang; 57 | }; 58 | 59 | var i18n = exports.i18n = function i18n(fn) { 60 | i18nHandler = fn || i18nHandler; 61 | }; 62 | 63 | exports.default = { use: use, t: t, i18n: i18n }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/lang/af-ZA.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.default = { 5 | el: { 6 | colorpicker: { 7 | confirm: 'Bevestig', 8 | clear: 'Maak skoon' 9 | }, 10 | datepicker: { 11 | now: 'Nou', 12 | today: 'Vandag', 13 | cancel: 'Kanselleer', 14 | clear: 'Maak skoon', 15 | confirm: 'Bevestig', 16 | selectDate: 'Kies datum', 17 | selectTime: 'Kies tyd', 18 | startDate: 'Begindatum', 19 | startTime: 'Begintyd', 20 | endDate: 'Einddatum', 21 | endTime: 'Eindtyd', 22 | prevYear: 'Previous Year', // to be translated 23 | nextYear: 'Next Year', // to be translated 24 | prevMonth: 'Previous Month', // to be translated 25 | nextMonth: 'Next Month', // to be translated 26 | year: 'Jaar', 27 | month1: 'Jan', 28 | month2: 'Feb', 29 | month3: 'Mrt', 30 | month4: 'Apr', 31 | month5: 'Mei', 32 | month6: 'Jun', 33 | month7: 'Jul', 34 | month8: 'Aug', 35 | month9: 'Sep', 36 | month10: 'Okt', 37 | month11: 'Nov', 38 | month12: 'Des', 39 | // week: 'week', 40 | weeks: { 41 | sun: 'So', 42 | mon: 'Ma', 43 | tue: 'Di', 44 | wed: 'Wo', 45 | thu: 'Do', 46 | fri: 'Vr', 47 | sat: 'Sa' 48 | }, 49 | months: { 50 | jan: 'Jan', 51 | feb: 'Feb', 52 | mar: 'Mrt', 53 | apr: 'Apr', 54 | may: 'Mei', 55 | jun: 'Jun', 56 | jul: 'Jul', 57 | aug: 'Aug', 58 | sep: 'Sep', 59 | oct: 'Okt', 60 | nov: 'Nov', 61 | dec: 'Des' 62 | } 63 | }, 64 | select: { 65 | loading: 'Laai', 66 | noMatch: 'Geen toepaslike data', 67 | noData: 'Geen data', 68 | placeholder: 'Kies' 69 | }, 70 | cascader: { 71 | noMatch: 'Geen toepaslike data', 72 | loading: 'Laai', 73 | placeholder: 'Kies' 74 | }, 75 | pagination: { 76 | goto: 'Gaan na', 77 | pagesize: '/page', 78 | total: 'Totaal {total}', 79 | pageClassifier: '' 80 | }, 81 | messagebox: { 82 | title: 'Boodskap', 83 | confirm: 'Bevestig', 84 | cancel: 'Kanselleer', 85 | error: 'Ongeldige invoer' 86 | }, 87 | upload: { 88 | deleteTip: 'press delete to remove', // to be translated 89 | delete: 'Verwyder', 90 | preview: 'Voorskou', 91 | continue: 'Gaan voort' 92 | }, 93 | table: { 94 | emptyText: 'Geen Data', 95 | confirmFilter: 'Bevestig', 96 | resetFilter: 'Herstel', 97 | clearFilter: 'Alles', 98 | sumText: 'Som' 99 | }, 100 | tree: { 101 | emptyText: 'Geen Data' 102 | }, 103 | transfer: { 104 | noMatch: 'Geen toepaslike data', 105 | noData: 'Geen data', 106 | titles: ['Lys 1', 'Lys 2'], 107 | filterPlaceholder: 'Voer sleutelwoord in', 108 | noCheckedFormat: '{total} items', 109 | hasCheckedFormat: '{checked}/{total} gekies' 110 | } 111 | } 112 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/lang/ar.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.default = { 5 | el: { 6 | colorpicker: { 7 | confirm: 'موافق', 8 | clear: 'إزالة' 9 | }, 10 | datepicker: { 11 | now: 'الآن', 12 | today: 'اليوم', 13 | cancel: 'إلغاء', 14 | clear: 'إزالة', 15 | confirm: 'موافق', 16 | selectDate: 'أختر التاريخ', 17 | selectTime: 'أختر الوقت', 18 | startDate: 'تاريخ البدء', 19 | startTime: 'وقت البدء', 20 | endDate: 'تاريخ الانتهاء', 21 | endTime: 'وقت الانتهاء', 22 | prevYear: 'Previous Year', // to be translated 23 | nextYear: 'Next Year', // to be translated 24 | prevMonth: 'Previous Month', // to be translated 25 | nextMonth: 'Next Month', // to be translated 26 | year: '', 27 | month1: 'يناير', 28 | month2: 'فبراير', 29 | month3: 'مارس', 30 | month4: 'ابريل', 31 | month5: 'مايو', 32 | month6: 'يونيو', 33 | month7: 'يوليو', 34 | month8: 'أغسطس', 35 | month9: 'سبتمبر', 36 | month10: 'أكتوبر', 37 | month11: 'نوفمبر', 38 | month12: 'ديسمبر', 39 | week: 'أسبوع', 40 | weeks: { 41 | sun: 'الأحد', 42 | mon: 'الأثنين', 43 | tue: 'الثلاثاء', 44 | wed: 'الأربعاء', 45 | thu: 'الخميس', 46 | fri: 'الجمعة', 47 | sat: 'السبت' 48 | }, 49 | months: { 50 | jan: 'يناير', 51 | feb: 'فبراير', 52 | mar: 'مارس', 53 | apr: 'أبريل', 54 | may: 'مايو', 55 | jun: 'يونيو', 56 | jul: 'يوليو', 57 | aug: 'أغسطس', 58 | sep: 'سبتمبر', 59 | oct: 'أكتوبر', 60 | nov: 'نوفمبر', 61 | dec: 'ديسمبر' 62 | } 63 | }, 64 | select: { 65 | loading: 'جار التحميل', 66 | noMatch: 'لايوجد بيانات مطابقة', 67 | noData: 'لايوجد بيانات', 68 | placeholder: 'أختر' 69 | }, 70 | cascader: { 71 | noMatch: 'لايوجد بيانات مطابقة', 72 | loading: 'جار التحميل', 73 | placeholder: 'أختر' 74 | }, 75 | pagination: { 76 | goto: 'أذهب إلى', 77 | pagesize: '/صفحة', 78 | total: 'الكل {total}', 79 | pageClassifier: '' 80 | }, 81 | messagebox: { 82 | title: 'الرسالة', 83 | confirm: 'موافق', 84 | cancel: 'إلغاء', 85 | error: 'مدخل غير صحيح' 86 | }, 87 | upload: { 88 | delete: 'حذف', 89 | preview: 'عرض', 90 | continue: 'إستمرار' 91 | }, 92 | table: { 93 | emptyText: 'لايوجد بيانات', 94 | confirmFilter: 'تأكيد', 95 | resetFilter: 'حذف', 96 | clearFilter: 'الكل', 97 | sumText: 'المجموع' 98 | }, 99 | tree: { 100 | emptyText: 'لايوجد بيانات' 101 | }, 102 | transfer: { 103 | noMatch: 'لايوجد بيانات مطابقة', 104 | noData: 'لايوجد بيانات', 105 | titles: ['قائمة 1', 'قائمة 2'], 106 | filterPlaceholder: 'ادخل كلمة', 107 | noCheckedFormat: '{total} عناصر', 108 | hasCheckedFormat: '{checked}/{total} مختار' 109 | } 110 | } 111 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/lang/cs-CZ.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.default = { 5 | el: { 6 | colorpicker: { 7 | confirm: 'OK', 8 | clear: 'Vymazat' 9 | }, 10 | datepicker: { 11 | now: 'Teď', 12 | today: 'Dnes', 13 | cancel: 'Zrušit', 14 | clear: 'Vymazat', 15 | confirm: 'OK', 16 | selectDate: 'Vybrat datum', 17 | selectTime: 'Vybrat čas', 18 | startDate: 'Datum začátku', 19 | startTime: 'Čas začátku', 20 | endDate: 'Datum konce', 21 | endTime: 'Čas konce', 22 | prevYear: 'Předchozí rok', 23 | nextYear: 'Příští rok', 24 | prevMonth: 'Předchozí měsíc', 25 | nextMonth: 'Příští měsíc', 26 | day: 'Den', 27 | week: 'Týden', 28 | month: 'Měsíc', 29 | year: 'Rok', 30 | month1: 'Leden', 31 | month2: 'Únor', 32 | month3: 'Březen', 33 | month4: 'Duben', 34 | month5: 'Květen', 35 | month6: 'Červen', 36 | month7: 'Červenec', 37 | month8: 'Srpen', 38 | month9: 'Září', 39 | month10: 'Říjen', 40 | month11: 'Listopad', 41 | month12: 'Prosinec', 42 | weeks: { 43 | sun: 'Ne', 44 | mon: 'Po', 45 | tue: 'Út', 46 | wed: 'St', 47 | thu: 'Čt', 48 | fri: 'Pá', 49 | sat: 'So' 50 | }, 51 | months: { 52 | jan: 'Led', 53 | feb: 'Úno', 54 | mar: 'Bře', 55 | apr: 'Dub', 56 | may: 'Kvě', 57 | jun: 'Čer', 58 | jul: 'Čvc', 59 | aug: 'Srp', 60 | sep: 'Zář', 61 | oct: 'Říj', 62 | nov: 'Lis', 63 | dec: 'Pro' 64 | } 65 | }, 66 | select: { 67 | loading: 'Načítání', 68 | noMatch: 'Žádná shoda', 69 | noData: 'Žádná data', 70 | placeholder: 'Vybrat' 71 | }, 72 | cascader: { 73 | noMatch: 'Žádná shoda', 74 | loading: 'Načítání', 75 | placeholder: 'Vybrat' 76 | }, 77 | pagination: { 78 | goto: 'Jít na', 79 | pagesize: 'na stranu', 80 | total: 'Celkem {total}', 81 | pageClassifier: '' 82 | }, 83 | messagebox: { 84 | title: 'Zpráva', 85 | confirm: 'OK', 86 | cancel: 'Zrušit', 87 | error: 'Neplatný vstup' 88 | }, 89 | upload: { 90 | deleteTip: 'Stisknout pro smazání', 91 | delete: 'Vymazat', 92 | preview: 'Náhled', 93 | continue: 'Pokračovat' 94 | }, 95 | table: { 96 | emptyText: 'Žádná data', 97 | confirmFilter: 'Potvrdit', 98 | resetFilter: 'Resetovat', 99 | clearFilter: 'Vše', 100 | sumText: 'Celkem' 101 | }, 102 | tree: { 103 | emptyText: 'Žádná data' 104 | }, 105 | transfer: { 106 | noMatch: 'Žádná shoda', 107 | noData: 'Žádná data', 108 | titles: ['Seznam 1', 'Seznam 2'], 109 | filterPlaceholder: 'Klíčové slovo', 110 | noCheckedFormat: '{total} položek', 111 | hasCheckedFormat: '{checked}/{total} vybráno' 112 | } 113 | } 114 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/lang/da.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.default = { 5 | el: { 6 | colorpicker: { 7 | confirm: 'OK', 8 | clear: 'Ryd' 9 | }, 10 | datepicker: { 11 | now: 'Nu', 12 | today: 'I dag', 13 | cancel: 'Annuller', 14 | clear: 'Ryd', 15 | confirm: 'OK', 16 | selectDate: 'Vælg dato', 17 | selectTime: 'Vælg tidspunkt', 18 | startDate: 'Startdato', 19 | startTime: 'Starttidspunkt', 20 | endDate: 'Slutdato', 21 | endTime: 'Sluttidspunkt', 22 | prevYear: 'Forrige år', 23 | nextYear: 'Næste år', 24 | prevMonth: 'Forrige måned', 25 | nextMonth: 'Næste måned', 26 | year: '', 27 | month1: 'Januar', 28 | month2: 'Februar', 29 | month3: 'Marts', 30 | month4: 'April', 31 | month5: 'Maj', 32 | month6: 'Juni', 33 | month7: 'Juli', 34 | month8: 'August', 35 | month9: 'September', 36 | month10: 'Oktober', 37 | month11: 'November', 38 | month12: 'December', 39 | week: 'uge', 40 | weeks: { 41 | sun: 'Søn', 42 | mon: 'Man', 43 | tue: 'Tir', 44 | wed: 'Ons', 45 | thu: 'Tor', 46 | fri: 'Fre', 47 | sat: 'Lør' 48 | }, 49 | months: { 50 | jan: 'Jan', 51 | feb: 'Feb', 52 | mar: 'Mar', 53 | apr: 'Apr', 54 | may: 'Maj', 55 | jun: 'Jun', 56 | jul: 'Jul', 57 | aug: 'Aug', 58 | sep: 'Sep', 59 | oct: 'Okt', 60 | nov: 'Nov', 61 | dec: 'Dec' 62 | } 63 | }, 64 | select: { 65 | loading: 'Henter', 66 | noMatch: 'Ingen matchende data', 67 | noData: 'Ingen data', 68 | placeholder: 'Vælg' 69 | }, 70 | cascader: { 71 | noMatch: 'Ingen matchende data', 72 | loading: 'Henter', 73 | placeholder: 'Vælg' 74 | }, 75 | pagination: { 76 | goto: 'Gå til', 77 | pagesize: '/side', 78 | total: 'Total {total}', 79 | pageClassifier: '' 80 | }, 81 | messagebox: { 82 | confirm: 'OK', 83 | cancel: 'Annuller', 84 | error: 'Ugyldig input' 85 | }, 86 | upload: { 87 | deleteTip: 'tryk slet for at fjerne', 88 | delete: 'Slet', 89 | preview: 'Forhåndsvisning', 90 | continue: 'Fortsæt' 91 | }, 92 | table: { 93 | emptyText: 'Ingen data', 94 | confirmFilter: 'Bekræft', 95 | resetFilter: 'Nulstil', 96 | clearFilter: 'Alle', 97 | sumText: 'Sum' 98 | }, 99 | tree: { 100 | emptyText: 'Ingen data' 101 | }, 102 | transfer: { 103 | noMatch: 'Ingen matchende data', 104 | noData: 'Ingen data', 105 | titles: ['Liste 1', 'Liste 2'], 106 | filterPlaceholder: 'Indtast søgeord', 107 | noCheckedFormat: '{total} emner', 108 | hasCheckedFormat: '{checked}/{total} valgt' 109 | } 110 | } 111 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/lang/de.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.default = { 5 | el: { 6 | colorpicker: { 7 | confirm: 'OK', 8 | clear: 'Leeren' 9 | }, 10 | datepicker: { 11 | now: 'Jetzt', 12 | today: 'Heute', 13 | cancel: 'Abbrechen', 14 | clear: 'Leeren', 15 | confirm: 'OK', 16 | selectDate: 'Datum wählen', 17 | selectTime: 'Uhrzeit wählen', 18 | startDate: 'Startdatum', 19 | startTime: 'Startzeit', 20 | endDate: 'Enddatum', 21 | endTime: 'Endzeit', 22 | prevYear: 'Letztes Jahr', 23 | nextYear: 'Nächtes Jahr', 24 | prevMonth: 'Letzter Monat', 25 | nextMonth: 'Nächster Monat', 26 | day: 'Tag', 27 | week: 'Woche', 28 | month: 'Monat', 29 | year: '', 30 | month1: 'Januar', 31 | month2: 'Februar', 32 | month3: 'März', 33 | month4: 'April', 34 | month5: 'Mai', 35 | month6: 'Juni', 36 | month7: 'Juli', 37 | month8: 'August', 38 | month9: 'September', 39 | month10: 'Oktober', 40 | month11: 'November', 41 | month12: 'Dezember', 42 | weeks: { 43 | sun: 'So', 44 | mon: 'Mo', 45 | tue: 'Di', 46 | wed: 'Mi', 47 | thu: 'Do', 48 | fri: 'Fr', 49 | sat: 'Sa' 50 | }, 51 | months: { 52 | jan: 'Jan', 53 | feb: 'Feb', 54 | mar: 'Mär', 55 | apr: 'Apr', 56 | may: 'Mai', 57 | jun: 'Jun', 58 | jul: 'Jul', 59 | aug: 'Aug', 60 | sep: 'Sep', 61 | oct: 'Okt', 62 | nov: 'Nov', 63 | dec: 'Dez' 64 | } 65 | }, 66 | select: { 67 | loading: 'Lädt.', 68 | noMatch: 'Nichts gefunden.', 69 | noData: 'Keine Daten', 70 | placeholder: 'Daten wählen' 71 | }, 72 | cascader: { 73 | noMatch: 'Nichts gefunden.', 74 | loading: 'Lädt.', 75 | placeholder: 'Daten wählen' 76 | }, 77 | pagination: { 78 | goto: 'Gehe zu', 79 | pagesize: ' pro Seite', 80 | total: 'Gesamt {total}', 81 | pageClassifier: '' 82 | }, 83 | messagebox: { 84 | confirm: 'OK', 85 | cancel: 'Abbrechen', 86 | error: 'Fehler' 87 | }, 88 | upload: { 89 | deleteTip: 'Klicke löschen zum entfernen', 90 | delete: 'Löschen', 91 | preview: 'Vorschau', 92 | continue: 'Fortsetzen' 93 | }, 94 | table: { 95 | emptyText: 'Keine Daten', 96 | confirmFilter: 'Anwenden', 97 | resetFilter: 'Zurücksetzen', 98 | clearFilter: 'Alles ', 99 | sumText: 'Summe' 100 | }, 101 | tree: { 102 | emptyText: 'Keine Einträge' 103 | }, 104 | transfer: { 105 | noMatch: 'Nichts gefunden.', 106 | noData: 'Keine Einträge', 107 | titles: ['Liste 1', 'Liste 2'], 108 | filterPlaceholder: 'Einträge filtern', 109 | noCheckedFormat: '{total} Einträge', 110 | hasCheckedFormat: '{checked}/{total} ausgewählt' 111 | } 112 | } 113 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/lang/ee.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.default = { 5 | el: { 6 | colorpicker: { 7 | confirm: 'OK', 8 | clear: 'Tühjenda' 9 | }, 10 | datepicker: { 11 | now: 'Praegu', 12 | today: 'Täna', 13 | cancel: 'Tühista', 14 | clear: 'Tühjenda', 15 | confirm: 'OK', 16 | selectDate: 'Vali kuupäev', 17 | selectTime: 'Vali kellaaeg', 18 | startDate: 'Alguskuupäev', 19 | startTime: 'Algusaeg', 20 | endDate: 'Lõpukuupäev', 21 | endTime: 'Lõpuaeg', 22 | prevYear: 'Eelmine aasta', 23 | nextYear: 'Järgmine aasta', 24 | prevMonth: 'Eelmine kuu', 25 | nextMonth: 'Järgmine kuu', 26 | year: '', 27 | month1: 'Jaanuar', 28 | month2: 'Veebruar', 29 | month3: 'Märts', 30 | month4: 'Aprill', 31 | month5: 'Mai', 32 | month6: 'Juuni', 33 | month7: 'Juuli', 34 | month8: 'August', 35 | month9: 'September', 36 | month10: 'Oktoober', 37 | month11: 'November', 38 | month12: 'Detsember', 39 | // week: 'nädal', 40 | weeks: { 41 | sun: 'P', 42 | mon: 'E', 43 | tue: 'T', 44 | wed: 'K', 45 | thu: 'N', 46 | fri: 'R', 47 | sat: 'L' 48 | }, 49 | months: { 50 | jan: 'Jaan', 51 | feb: 'Veeb', 52 | mar: 'Mär', 53 | apr: 'Apr', 54 | may: 'Mai', 55 | jun: 'Juun', 56 | jul: 'Juul', 57 | aug: 'Aug', 58 | sep: 'Sept', 59 | oct: 'Okt', 60 | nov: 'Nov', 61 | dec: 'Dets' 62 | } 63 | }, 64 | select: { 65 | loading: 'Laadimine', 66 | noMatch: 'Sobivad andmed puuduvad', 67 | noData: 'Andmed puuduvad', 68 | placeholder: 'Vali' 69 | }, 70 | cascader: { 71 | noMatch: 'Sobivad andmed puuduvad', 72 | loading: 'Laadimine', 73 | placeholder: 'Vali' 74 | }, 75 | pagination: { 76 | goto: 'Mine lehele', 77 | pagesize: '/page', 78 | total: 'Kokku {total}', 79 | pageClassifier: '' 80 | }, 81 | messagebox: { 82 | title: 'Teade', 83 | confirm: 'OK', 84 | cancel: 'Tühista', 85 | error: 'Vigane sisend' 86 | }, 87 | upload: { 88 | deleteTip: 'Vajuta kustuta et eemaldada', 89 | delete: 'Kustuta', 90 | preview: 'Eelvaate', 91 | continue: 'Jätka' 92 | }, 93 | table: { 94 | emptyText: 'Andmed puuduvad', 95 | confirmFilter: 'Kinnita', 96 | resetFilter: 'Taasta', 97 | clearFilter: 'Kõik', 98 | sumText: 'Summa' 99 | }, 100 | tree: { 101 | emptyText: 'Andmed puuduvad' 102 | }, 103 | transfer: { 104 | noMatch: 'Sobivad andmed puuduvad', 105 | noData: 'Andmed puuduvad', 106 | titles: ['Loend 1', 'Loend 2'], 107 | filterPlaceholder: 'Sisesta märksõna', 108 | noCheckedFormat: '{total} objekti', 109 | hasCheckedFormat: '{checked}/{total} valitud' 110 | } 111 | } 112 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/lang/en.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.default = { 5 | el: { 6 | colorpicker: { 7 | confirm: 'OK', 8 | clear: 'Clear' 9 | }, 10 | datepicker: { 11 | now: 'Now', 12 | today: 'Today', 13 | cancel: 'Cancel', 14 | clear: 'Clear', 15 | confirm: 'OK', 16 | selectDate: 'Select date', 17 | selectTime: 'Select time', 18 | startDate: 'Start Date', 19 | startTime: 'Start Time', 20 | endDate: 'End Date', 21 | endTime: 'End Time', 22 | prevYear: 'Previous Year', 23 | nextYear: 'Next Year', 24 | prevMonth: 'Previous Month', 25 | nextMonth: 'Next Month', 26 | year: '', 27 | month1: 'January', 28 | month2: 'February', 29 | month3: 'March', 30 | month4: 'April', 31 | month5: 'May', 32 | month6: 'June', 33 | month7: 'July', 34 | month8: 'August', 35 | month9: 'September', 36 | month10: 'October', 37 | month11: 'November', 38 | month12: 'December', 39 | // week: 'week', 40 | weeks: { 41 | sun: 'Sun', 42 | mon: 'Mon', 43 | tue: 'Tue', 44 | wed: 'Wed', 45 | thu: 'Thu', 46 | fri: 'Fri', 47 | sat: 'Sat' 48 | }, 49 | months: { 50 | jan: 'Jan', 51 | feb: 'Feb', 52 | mar: 'Mar', 53 | apr: 'Apr', 54 | may: 'May', 55 | jun: 'Jun', 56 | jul: 'Jul', 57 | aug: 'Aug', 58 | sep: 'Sep', 59 | oct: 'Oct', 60 | nov: 'Nov', 61 | dec: 'Dec' 62 | } 63 | }, 64 | select: { 65 | loading: 'Loading', 66 | noMatch: 'No matching data', 67 | noData: 'No data', 68 | placeholder: 'Select' 69 | }, 70 | cascader: { 71 | noMatch: 'No matching data', 72 | loading: 'Loading', 73 | placeholder: 'Select' 74 | }, 75 | pagination: { 76 | goto: 'Go to', 77 | pagesize: '/page', 78 | total: 'Total {total}', 79 | pageClassifier: '' 80 | }, 81 | messagebox: { 82 | title: 'Message', 83 | confirm: 'OK', 84 | cancel: 'Cancel', 85 | error: 'Illegal input' 86 | }, 87 | upload: { 88 | deleteTip: 'press delete to remove', 89 | delete: 'Delete', 90 | preview: 'Preview', 91 | continue: 'Continue' 92 | }, 93 | table: { 94 | emptyText: 'No Data', 95 | confirmFilter: 'Confirm', 96 | resetFilter: 'Reset', 97 | clearFilter: 'All', 98 | sumText: 'Sum' 99 | }, 100 | tree: { 101 | emptyText: 'No Data' 102 | }, 103 | transfer: { 104 | noMatch: 'No matching data', 105 | noData: 'No data', 106 | titles: ['List 1', 'List 2'], // to be translated 107 | filterPlaceholder: 'Enter keyword', // to be translated 108 | noCheckedFormat: '{total} items', // to be translated 109 | hasCheckedFormat: '{checked}/{total} checked' // to be translated 110 | } 111 | } 112 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/lang/he.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.default = { 5 | el: { 6 | colorpicker: { 7 | confirm: 'אישור', 8 | clear: 'נקה' 9 | }, 10 | datepicker: { 11 | now: 'כעת', 12 | today: 'היום', 13 | cancel: 'בטל', 14 | clear: 'נקה', 15 | confirm: 'אישור', 16 | selectDate: 'בחר תאריך', 17 | selectTime: 'בחר זמן', 18 | startDate: 'תאריך התחלה', 19 | startTime: 'זמן התחלה', 20 | endDate: 'תאריך סיום', 21 | endTime: 'זמן סיום', 22 | prevYear: 'Previous Year', // to be translated 23 | nextYear: 'Next Year', // to be translated 24 | prevMonth: 'Previous Month', // to be translated 25 | nextMonth: 'Next Month', // to be translated 26 | year: '', 27 | month1: 'ינואר', 28 | month2: 'פברואר', 29 | month3: 'מרץ', 30 | month4: 'אפריל', 31 | month5: 'מאי', 32 | month6: 'יוני', 33 | month7: 'יולי', 34 | month8: 'אוגוסט', 35 | month9: 'ספטמבר', 36 | month10: 'אוקטובר', 37 | month11: 'נובמבר', 38 | month12: 'דצמבר', 39 | // week: 'week', 40 | weeks: { 41 | sun: 'א׳', 42 | mon: 'ב׳', 43 | tue: 'ג׳', 44 | wed: 'ד׳', 45 | thu: 'ה׳', 46 | fri: 'ו׳', 47 | sat: 'שבת' 48 | }, 49 | months: { 50 | jan: 'ינואר', 51 | feb: 'פברואר', 52 | mar: 'מרץ', 53 | apr: 'אפריל', 54 | may: 'מאי', 55 | jun: 'יוני', 56 | jul: 'יולי', 57 | aug: 'אוגוסט', 58 | sep: 'ספטמבר', 59 | oct: 'אוקטובר', 60 | nov: 'נובמבר', 61 | dec: 'דצמבר' 62 | } 63 | }, 64 | select: { 65 | loading: 'טוען', 66 | noMatch: 'לא נמצאו נתונים', 67 | noData: 'ללא נתונים', 68 | placeholder: 'בחר' 69 | }, 70 | cascader: { 71 | noMatch: 'ללא נתונים מתאימים', 72 | loading: 'טוען', 73 | placeholder: 'בחר' 74 | }, 75 | pagination: { 76 | goto: 'עבור ל', 77 | pagesize: '/page', 78 | total: 'כולל {total}', 79 | pageClassifier: '' 80 | }, 81 | messagebox: { 82 | title: 'הודעה', 83 | confirm: 'אישור', 84 | cancel: 'בטל', 85 | error: 'קלט לא תקין' 86 | }, 87 | upload: { 88 | deleteTip: 'press delete to remove', // to be translated 89 | delete: 'מחק', 90 | preview: 'תצוגה מקדימה', 91 | continue: 'המשך' 92 | }, 93 | table: { 94 | emptyText: 'אין נתונים', 95 | confirmFilter: 'אישור', 96 | resetFilter: 'נקה', 97 | clearFilter: 'הכל', 98 | sumText: 'סך' 99 | }, 100 | tree: { 101 | emptyText: 'אין נתונים' 102 | }, 103 | transfer: { 104 | noMatch: 'אין נתונים מתאימים', 105 | noData: 'ללא נתונים', 106 | titles: ['רשימה 1', 'רשימה 2'], 107 | filterPlaceholder: 'הקלד', 108 | noCheckedFormat: 'פריטים {total}', 109 | hasCheckedFormat: ' אישור {checked}/{total}' 110 | } 111 | } 112 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/lang/hu.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.default = { 5 | el: { 6 | colorpicker: { 7 | confirm: 'OK', 8 | clear: 'Törlés' 9 | }, 10 | datepicker: { 11 | now: 'Most', 12 | today: 'Ma', 13 | cancel: 'Mégse', 14 | clear: 'Törlés', 15 | confirm: 'OK', 16 | selectDate: 'Dátum', 17 | selectTime: 'Időpont', 18 | startDate: 'Dátum-tól', 19 | startTime: 'Időpont-tól', 20 | endDate: 'Dátum-ig', 21 | endTime: 'Időpont-ig', 22 | prevYear: 'Előző év', 23 | nextYear: 'Következő év', 24 | prevMonth: 'Előző hónap', 25 | nextMonth: 'Következő hónap', 26 | year: '', 27 | month1: 'Január', 28 | month2: 'Február', 29 | month3: 'Március', 30 | month4: 'Április', 31 | month5: 'Május', 32 | month6: 'Június', 33 | month7: 'Július', 34 | month8: 'Augusztus', 35 | month9: 'Szeptember', 36 | month10: 'Október', 37 | month11: 'November', 38 | month12: 'December', 39 | weeks: { 40 | sun: 'Vas', 41 | mon: 'Hét', 42 | tue: 'Ked', 43 | wed: 'Sze', 44 | thu: 'Csü', 45 | fri: 'Pén', 46 | sat: 'Szo' 47 | }, 48 | months: { 49 | jan: 'Jan', 50 | feb: 'Feb', 51 | mar: 'Már', 52 | apr: 'Ápr', 53 | may: 'Máj', 54 | jun: 'Jún', 55 | jul: 'Júl', 56 | aug: 'Aug', 57 | sep: 'Szep', 58 | oct: 'Okt', 59 | nov: 'Nov', 60 | dec: 'Dec' 61 | } 62 | }, 63 | select: { 64 | loading: 'Betöltés', 65 | noMatch: 'Nincs találat', 66 | noData: 'Nincs adat', 67 | placeholder: 'Válassz' 68 | }, 69 | cascader: { 70 | noMatch: 'Nincs találat', 71 | loading: 'Betöltés', 72 | placeholder: 'Válassz' 73 | }, 74 | pagination: { 75 | goto: 'Ugrás', 76 | pagesize: '/page', 77 | total: 'Össz {total}', 78 | pageClassifier: '' 79 | }, 80 | messagebox: { 81 | title: 'Üzenet', 82 | confirm: 'OK', 83 | cancel: 'Mégse', 84 | error: 'Hibás adat' 85 | }, 86 | upload: { 87 | deleteTip: 'kattints a törléshez', 88 | delete: 'Törlés', 89 | preview: 'Előnézet', 90 | continue: 'Tovább' 91 | }, 92 | table: { 93 | emptyText: 'Nincs adat', 94 | confirmFilter: 'Megerősít', 95 | resetFilter: 'Alaphelyet', 96 | clearFilter: 'Mind', 97 | sumText: 'Összeg' 98 | }, 99 | tree: { 100 | emptyText: 'Nincs adat' 101 | }, 102 | transfer: { 103 | noMatch: 'Nincs találat', 104 | noData: 'Nincs adat', 105 | titles: ['Lista 1', 'Lista 2'], 106 | filterPlaceholder: 'Kulcsszó', 107 | noCheckedFormat: '{total} elem', 108 | hasCheckedFormat: '{checked}/{total} kiválasztva' 109 | } 110 | } 111 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/lang/it.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.default = { 5 | el: { 6 | colorpicker: { 7 | confirm: 'OK', 8 | clear: 'Pulisci' 9 | }, 10 | datepicker: { 11 | now: 'Ora', 12 | today: 'Oggi', 13 | cancel: 'Cancella', 14 | clear: 'Pulisci', 15 | confirm: 'OK', 16 | selectDate: 'Seleziona data', 17 | selectTime: 'Seleziona ora', 18 | startDate: 'Data inizio', 19 | startTime: 'Ora inizio', 20 | endDate: 'Data fine', 21 | endTime: 'Ora fine', 22 | prevYear: 'Anno precedente', 23 | nextYear: 'Anno successivo', 24 | prevMonth: 'Mese precedente', 25 | nextMonth: 'Mese successivo', 26 | year: '', 27 | month1: 'Gennaio', 28 | month2: 'Febbraio', 29 | month3: 'Marzo', 30 | month4: 'Aprile', 31 | month5: 'Maggio', 32 | month6: 'Giugno', 33 | month7: 'Luglio', 34 | month8: 'Agosto', 35 | month9: 'Settembre', 36 | month10: 'Ottobre', 37 | month11: 'Novembre', 38 | month12: 'Dicembre', 39 | // week: 'settimana', 40 | weeks: { 41 | sun: 'Dom', 42 | mon: 'Lun', 43 | tue: 'Mar', 44 | wed: 'Mer', 45 | thu: 'Gio', 46 | fri: 'Ven', 47 | sat: 'Sab' 48 | }, 49 | months: { 50 | jan: 'Gen', 51 | feb: 'Feb', 52 | mar: 'Mar', 53 | apr: 'Apr', 54 | may: 'Mag', 55 | jun: 'Giu', 56 | jul: 'Lug', 57 | aug: 'Ago', 58 | sep: 'Set', 59 | oct: 'Ott', 60 | nov: 'Nov', 61 | dec: 'Dic' 62 | } 63 | }, 64 | select: { 65 | loading: 'Caricamento', 66 | noMatch: 'Nessuna corrispondenza', 67 | noData: 'Nessun dato', 68 | placeholder: 'Seleziona' 69 | }, 70 | cascader: { 71 | noMatch: 'Nessuna corrispondenza', 72 | loading: 'Caricamento', 73 | placeholder: 'Seleziona' 74 | }, 75 | pagination: { 76 | goto: 'Vai a', 77 | pagesize: '/page', 78 | total: 'Totale {total}', 79 | pageClassifier: '' 80 | }, 81 | messagebox: { 82 | confirm: 'OK', 83 | cancel: 'Cancella', 84 | error: 'Input non valido' 85 | }, 86 | upload: { 87 | deleteTip: 'Premi cancella per rimuovere', 88 | delete: 'Cancella', 89 | preview: 'Anteprima', 90 | continue: 'Continua' 91 | }, 92 | table: { 93 | emptyText: 'Nessun dato', 94 | confirmFilter: 'Conferma', 95 | resetFilter: 'Reset', 96 | clearFilter: 'Tutti', 97 | sumText: 'Somma' 98 | }, 99 | tree: { 100 | emptyText: 'Nessun dato' 101 | }, 102 | transfer: { 103 | noMatch: 'Nessuna corrispondenza', 104 | noData: 'Nessun dato', 105 | titles: ['Lista 1', 'Lista 2'], 106 | filterPlaceholder: 'Inserisci filtro', 107 | noCheckedFormat: '{total} elementi', 108 | hasCheckedFormat: '{checked}/{total} selezionati' 109 | } 110 | } 111 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/lang/ja.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.default = { 5 | el: { 6 | colorpicker: { 7 | confirm: 'OK', 8 | clear: 'クリア' 9 | }, 10 | datepicker: { 11 | now: '現在', 12 | today: '今日', 13 | cancel: 'キャンセル', 14 | clear: 'クリア', 15 | confirm: 'OK', 16 | selectDate: '日付を選択', 17 | selectTime: '時間を選択', 18 | startDate: '開始日', 19 | startTime: '開始時間', 20 | endDate: '終了日', 21 | endTime: '終了時間', 22 | prevYear: '前年', 23 | nextYear: '翌年', 24 | prevMonth: '前月', 25 | nextMonth: '翌月', 26 | year: '年', 27 | month1: '1月', 28 | month2: '2月', 29 | month3: '3月', 30 | month4: '4月', 31 | month5: '5月', 32 | month6: '6月', 33 | month7: '7月', 34 | month8: '8月', 35 | month9: '9月', 36 | month10: '10月', 37 | month11: '11月', 38 | month12: '12月', 39 | // week: '週次', 40 | weeks: { 41 | sun: '日', 42 | mon: '月', 43 | tue: '火', 44 | wed: '水', 45 | thu: '木', 46 | fri: '金', 47 | sat: '土' 48 | }, 49 | months: { 50 | jan: '1月', 51 | feb: '2月', 52 | mar: '3月', 53 | apr: '4月', 54 | may: '5月', 55 | jun: '6月', 56 | jul: '7月', 57 | aug: '8月', 58 | sep: '9月', 59 | oct: '10月', 60 | nov: '11月', 61 | dec: '12月' 62 | } 63 | }, 64 | select: { 65 | loading: 'ロード中', 66 | noMatch: 'データなし', 67 | noData: 'データなし', 68 | placeholder: '選択してください' 69 | }, 70 | cascader: { 71 | noMatch: 'データなし', 72 | loading: 'ロード中', 73 | placeholder: '選択してください' 74 | }, 75 | pagination: { 76 | goto: '', 77 | pagesize: '件/ページ', 78 | total: '総計 {total} 件', 79 | pageClassifier: 'ページ目へ' 80 | }, 81 | messagebox: { 82 | title: 'メッセージ', 83 | confirm: 'OK', 84 | cancel: 'キャンセル', 85 | error: '正しくない入力' 86 | }, 87 | upload: { 88 | deleteTip: 'Delキーを押して削除する', 89 | delete: '削除する', 90 | preview: 'プレビュー', 91 | continue: '続行する' 92 | }, 93 | table: { 94 | emptyText: 'データなし', 95 | confirmFilter: '確認', 96 | resetFilter: '初期化', 97 | clearFilter: 'すべて', 98 | sumText: '合計' 99 | }, 100 | tree: { 101 | emptyText: 'データなし' 102 | }, 103 | transfer: { 104 | noMatch: 'データなし', 105 | noData: 'データなし', 106 | titles: ['リスト 1', 'リスト 2'], 107 | filterPlaceholder: 'キーワードを入力', 108 | noCheckedFormat: '総計 {total} 件', 109 | hasCheckedFormat: '{checked}/{total} を選択した' 110 | } 111 | } 112 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/lang/km.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.default = { 5 | el: { 6 | colorpicker: { 7 | confirm: 'យល់ព្រម', 8 | clear: 'លុប' 9 | }, 10 | datepicker: { 11 | now: 'ឥឡូវ​នេះ', 12 | today: 'ថ្ងៃនេះ', 13 | cancel: 'បោះបង់', 14 | clear: 'លុប', 15 | confirm: 'យល់ព្រម', 16 | selectDate: 'ជ្រើសរើសថ្ងៃ', 17 | selectTime: 'ជ្រើសរើសម៉ោង', 18 | startDate: 'ថ្ងៃចាប់ផ្តើម', 19 | startTime: 'ម៉ោងចាប់ផ្តើម', 20 | endDate: 'ថ្ងៃបញ្ចប់', 21 | endTime: 'ម៉ោងបញ្ចប់', 22 | prevYear: 'ឆ្នាំមុន', 23 | nextYear: 'ឆ្នាំក្រោយ', 24 | prevMonth: 'ខែមុន', 25 | nextMonth: 'ខែក្រោយ', 26 | year: 'ឆ្នាំ', 27 | month1: 'មករា', 28 | month2: 'កុម្ភៈ', 29 | month3: 'មីនា', 30 | month4: 'មេសា', 31 | month5: 'ឧសភា', 32 | month6: 'មិថុនា', 33 | month7: 'កក្កដា', 34 | month8: 'សីហា', 35 | month9: 'កញ្ញា', 36 | month10: 'តុលា', 37 | month11: 'វិច្ឆកា', 38 | month12: 'ធ្នូ', 39 | // week: 'week', 40 | weeks: { 41 | sun: 'អាទិត្យ', 42 | mon: 'Mon', 43 | tue: 'អង្គារ', 44 | wed: 'ពុធ', 45 | thu: 'ព្រ.ហ', 46 | fri: 'សុក្រ', 47 | sat: 'សៅរ៏' 48 | }, 49 | months: { 50 | jan: 'មករា', 51 | feb: 'កុម្ភៈ', 52 | mar: 'មីនា', 53 | apr: 'មេសា', 54 | may: 'ឧសភា', 55 | jun: 'មិថុនា', 56 | jul: 'កក្កដា', 57 | aug: 'សីហា', 58 | sep: 'កញ្ញា', 59 | oct: 'តុលា', 60 | nov: 'វិច្ឆកា', 61 | dec: 'ធ្នូ' 62 | } 63 | }, 64 | select: { 65 | loading: 'កំពុងផ្ទុក', 66 | noMatch: 'គ្មានទិន្ន័យដូច', 67 | noData: 'គ្មានទិន្ន័យ', 68 | placeholder: 'ជ្រើសរើស' 69 | }, 70 | cascader: { 71 | noMatch: 'គ្មានទិន្ន័យដូច', 72 | loading: 'កំពុងផ្ទុក', 73 | placeholder: 'ជ្រើសរើស' 74 | }, 75 | pagination: { 76 | goto: 'ទៅកាន់', 77 | pagesize: '/ទំព័រ', 78 | total: 'សរុប {total}', 79 | pageClassifier: '' 80 | }, 81 | messagebox: { 82 | title: 'សារ', 83 | confirm: 'យល់ព្រម', 84 | cancel: 'បោះបង់', 85 | error: 'ការបញ្ចូលមិនអនុញ្ញាត' 86 | }, 87 | upload: { 88 | deleteTip: 'ចុចលុបដើម្បីដកចេញ', 89 | delete: 'លុប', 90 | preview: 'មើល', 91 | continue: 'បន្ត' 92 | }, 93 | table: { 94 | emptyText: 'គ្មានទិន្ន័យ', 95 | confirmFilter: 'យល់ព្រម', 96 | resetFilter: 'កំណត់ឡើងវិញ', 97 | clearFilter: 'ទាំងអស់', 98 | sumText: 'បូក' 99 | }, 100 | tree: { 101 | emptyText: 'គ្មានទិន្ន័យ' 102 | }, 103 | transfer: { 104 | noMatch: 'គ្មានទិន្ន័យដូច', 105 | noData: 'គ្មានទិន្ន័យ', 106 | titles: ['បញ្ជី ១', 'បញ្ជី ២'], 107 | filterPlaceholder: 'បញ្ចូលពាក្យ', 108 | noCheckedFormat: '{total} ធាតុ', 109 | hasCheckedFormat: '{checked}/{total} បានគូសធីក' 110 | } 111 | } 112 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/lang/ko.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.default = { 5 | el: { 6 | colorpicker: { 7 | confirm: '확인', 8 | clear: '초기화' 9 | }, 10 | datepicker: { 11 | now: '지금', 12 | today: '오늘', 13 | cancel: '취소', 14 | clear: '초기화', 15 | confirm: '확인', 16 | selectDate: '날짜 선택', 17 | selectTime: '시간 선택', 18 | startDate: '시작 날짜', 19 | startTime: '시작 시간', 20 | endDate: '종료 날짜', 21 | endTime: '종료 시간', 22 | prevYear: '지난해', 23 | nextYear: '다음해', 24 | prevMonth: '지난달', 25 | nextMonth: '다음달', 26 | year: '년', 27 | month1: '1월', 28 | month2: '2월', 29 | month3: '3월', 30 | month4: '4월', 31 | month5: '5월', 32 | month6: '6월', 33 | month7: '7월', 34 | month8: '8월', 35 | month9: '9월', 36 | month10: '10월', 37 | month11: '11월', 38 | month12: '12월', 39 | // week: 'week', 40 | weeks: { 41 | sun: '일', 42 | mon: '월', 43 | tue: '화', 44 | wed: '수', 45 | thu: '목', 46 | fri: '금', 47 | sat: '토' 48 | }, 49 | months: { 50 | jan: '1월', 51 | feb: '2월', 52 | mar: '3월', 53 | apr: '4월', 54 | may: '5월', 55 | jun: '6월', 56 | jul: '7월', 57 | aug: '8월', 58 | sep: '9월', 59 | oct: '10월', 60 | nov: '11월', 61 | dec: '12월' 62 | } 63 | }, 64 | select: { 65 | loading: '불러오는 중', 66 | noMatch: '맞는 데이터가 없습니다', 67 | noData: '데이터 없음', 68 | placeholder: '선택' 69 | }, 70 | cascader: { 71 | noMatch: '맞는 데이터가 없습니다', 72 | loading: '불러오는 중', 73 | placeholder: '선택' 74 | }, 75 | pagination: { 76 | goto: '이동', 77 | pagesize: '/page', 78 | total: '총 {total}', 79 | pageClassifier: '' 80 | }, 81 | messagebox: { 82 | title: '메시지', 83 | confirm: '확인', 84 | cancel: '취소', 85 | error: '올바르지 않은 입력' 86 | }, 87 | upload: { 88 | deleteTip: '클릭시 삭제됩니다', 89 | delete: '삭제', 90 | preview: '미리보기', 91 | continue: '계속하기' 92 | }, 93 | table: { 94 | emptyText: '데이터 없음', 95 | confirmFilter: '확인', 96 | resetFilter: '초기화', 97 | clearFilter: '전체', 98 | sumText: '합' 99 | }, 100 | tree: { 101 | emptyText: '데이터 없음' 102 | }, 103 | transfer: { 104 | noMatch: '맞는 데이터가 없습니다', 105 | noData: '데이터 없음', 106 | titles: ['리스트 1', '리스트 2'], 107 | filterPlaceholder: ' 입력하세요', 108 | noCheckedFormat: '{total} 항목', 109 | hasCheckedFormat: '{checked}/{total} 선택됨' 110 | } 111 | } 112 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/lang/ku.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.default = { 5 | el: { 6 | colorpicker: { 7 | confirm: 'Temam', 8 | clear: 'Paqij bike' 9 | }, 10 | datepicker: { 11 | now: 'Niha', 12 | today: 'Îro', 13 | cancel: 'Betal bike', 14 | clear: 'Paqij bike', 15 | confirm: 'Temam', 16 | selectDate: 'Dîrokê bibijêre', 17 | selectTime: 'Demê bibijêre', 18 | startDate: 'Dîroka Destpêkê', 19 | startTime: 'Dema Destpêkê', 20 | endDate: 'Dîroka Dawî', 21 | endTime: 'Dema Dawî', 22 | prevYear: 'Sala Pêş', 23 | nextYear: 'Sala Paş', 24 | prevMonth: 'Meha Pêş', 25 | nextMonth: 'Meha Paş', 26 | year: 'Sal', 27 | month1: 'Rêbendan', 28 | month2: 'Reşemeh', 29 | month3: 'Adar', 30 | month4: 'Avrêl', 31 | month5: 'Gulan', 32 | month6: 'Pûşber', 33 | month7: 'Tîrmeh', 34 | month8: 'Gilavêj', 35 | month9: 'Rezber', 36 | month10: 'Kewçêr', 37 | month11: 'Sarmawaz', 38 | month12: 'Berfanbar', 39 | // week: 'week', 40 | weeks: { 41 | sun: 'Yek', 42 | mon: 'Duş', 43 | tue: 'Sêş', 44 | wed: 'Çar', 45 | thu: 'Pên', 46 | fri: 'În', 47 | sat: 'Şem' 48 | }, 49 | months: { 50 | jan: 'Rêb', 51 | feb: 'Reş', 52 | mar: 'Ada', 53 | apr: 'Avr', 54 | may: 'Gul', 55 | jun: 'Pûş', 56 | jul: 'Tîr', 57 | aug: 'Gil', 58 | sep: 'Rez', 59 | oct: 'Kew', 60 | nov: 'Sar', 61 | dec: 'Ber' 62 | } 63 | }, 64 | select: { 65 | loading: 'Bardibe', 66 | noMatch: 'Li hembere ve agahî tune', 67 | noData: 'Agahî tune', 68 | placeholder: 'Bibijêre' 69 | }, 70 | cascader: { 71 | noMatch: 'Li hembere ve agahî tune', 72 | loading: 'Bardibe', 73 | placeholder: 'Bibijêre' 74 | }, 75 | pagination: { 76 | goto: 'Biçe', 77 | pagesize: '/rupel', 78 | total: 'Tevahî {total}', 79 | pageClassifier: '' 80 | }, 81 | messagebox: { 82 | title: 'Peyam', 83 | confirm: 'Temam', 84 | cancel: 'Betal bike', 85 | error: 'Beyana çewt' 86 | }, 87 | upload: { 88 | deleteTip: 'ji bo rake pêl "delete" bike', 89 | delete: 'Rake', 90 | preview: 'Pêşdîtin', 91 | continue: 'Berdewam' 92 | }, 93 | table: { 94 | emptyText: 'Agahî tune', 95 | confirmFilter: 'Piştrast bike', 96 | resetFilter: 'Jê bibe', 97 | clearFilter: 'Hemû', 98 | sumText: 'Kom' 99 | }, 100 | tree: { 101 | emptyText: 'Agahî tune' 102 | }, 103 | transfer: { 104 | noMatch: 'Li hembere ve agahî tune', 105 | noData: 'Agahî tune', 106 | titles: ['Lîste 1', 'Lîste 2'], 107 | filterPlaceholder: 'Binivîse', 108 | noCheckedFormat: '{total} lib', 109 | hasCheckedFormat: '{checked}/{total} bijartin' 110 | } 111 | } 112 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/lang/kz.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.default = { 5 | el: { 6 | colorpicker: { 7 | confirm: 'Қабылдау', 8 | clear: 'Тазалау' 9 | }, 10 | datepicker: { 11 | now: 'Қазір', 12 | today: 'Бүгін', 13 | cancel: 'Болдырмау', 14 | clear: 'Тазалау', 15 | confirm: 'Қабылдау', 16 | selectDate: 'Күнді таңдаңыз', 17 | selectTime: 'Сағатты таңдаңыз', 18 | startDate: 'Басталу күні', 19 | startTime: 'Басталу сағаты', 20 | endDate: 'Аяқталу күні', 21 | endTime: 'Аяқталу сағаты', 22 | prevYear: 'Алдыңғы жыл', 23 | nextYear: 'Келесі жыл', 24 | prevMonth: 'Алдыңғы ай', 25 | nextMonth: 'Келесі ай', 26 | year: 'Жыл', 27 | month1: 'Қаңтар', 28 | month2: 'Ақпан', 29 | month3: 'Наурыз', 30 | month4: 'Сәуір', 31 | month5: 'Мамыр', 32 | month6: 'Маусым', 33 | month7: 'Шілде', 34 | month8: 'Тамыз', 35 | month9: 'Қыркүйек', 36 | month10: 'Қазан', 37 | month11: 'Қараша', 38 | month12: 'Желтоқсан', 39 | week: 'Апта', 40 | weeks: { 41 | sun: 'Жек', 42 | mon: 'Дүй', 43 | tue: 'Сей', 44 | wed: 'Сәр', 45 | thu: 'Бей', 46 | fri: 'Жұм', 47 | sat: 'Сен' 48 | }, 49 | months: { 50 | jan: 'Қаң', 51 | feb: 'Ақп', 52 | mar: 'Нау', 53 | apr: 'Сәу', 54 | may: 'Мам', 55 | jun: 'Мау', 56 | jul: 'Шіл', 57 | aug: 'Там', 58 | sep: 'Қыр', 59 | oct: 'Қаз', 60 | nov: 'Қар', 61 | dec: 'Жел' 62 | } 63 | }, 64 | select: { 65 | loading: 'Жүктелуде', 66 | noMatch: 'Сәйкес деректер жоқ', 67 | noData: 'Деректер жоқ', 68 | placeholder: 'Таңдаңыз' 69 | }, 70 | cascader: { 71 | noMatch: 'Сәйкес деректер жоқ', 72 | loading: 'Жүктелуде', 73 | placeholder: 'Таңдаңыз' 74 | }, 75 | pagination: { 76 | goto: 'Бару', 77 | pagesize: '/page', 78 | total: 'Барлығы {total}', 79 | pageClassifier: '' 80 | }, 81 | messagebox: { 82 | title: 'Хабар', 83 | confirm: 'Қабылдау', 84 | cancel: 'Болдырмау', 85 | error: 'Жарамсыз енгізулер' 86 | }, 87 | upload: { 88 | deleteTip: 'Өшіруді басып өшіріңіз', 89 | delete: 'Өшіру', 90 | preview: 'Алдын ала қарау', 91 | continue: 'Жалғастыру' 92 | }, 93 | table: { 94 | emptyText: 'Деректер жоқ', 95 | confirmFilter: 'Қабылдау', 96 | resetFilter: 'Қалпына келтіру', 97 | clearFilter: 'Барлығы', 98 | sumText: 'Сомасы' 99 | }, 100 | tree: { 101 | emptyText: 'Деректер жоқ' 102 | }, 103 | transfer: { 104 | noMatch: 'Сәйкес деректер жоқ', 105 | noData: 'Деректер жоқ', 106 | titles: ['List 1', 'List 2'], 107 | filterPlaceholder: 'Кілт сөзді енгізіңіз', 108 | noCheckedFormat: '{total} элэмэнт', 109 | hasCheckedFormat: '{checked}/{total} құсбелгісі қойылды' 110 | } 111 | } 112 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/lang/lt.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.default = { 5 | el: { 6 | colorpicker: { 7 | confirm: 'OK', 8 | clear: 'Valyti' 9 | }, 10 | datepicker: { 11 | now: 'Dabar', 12 | today: 'Šiandien', 13 | cancel: 'Atšaukti', 14 | clear: 'Valyti', 15 | confirm: 'OK', 16 | selectDate: 'Pasirink datą', 17 | selectTime: 'Pasirink laiką', 18 | startDate: 'Data nuo', 19 | startTime: 'Laikas nuo', 20 | endDate: 'Data iki', 21 | endTime: 'Laikas iki', 22 | prevYear: 'Metai atgal', 23 | nextYear: 'Metai į priekį', 24 | prevMonth: 'Mėn. atgal', 25 | nextMonth: 'Mėn. į priekį', 26 | year: '', 27 | month1: 'Sausis', 28 | month2: 'Vasaris', 29 | month3: 'Kovas', 30 | month4: 'Balandis', 31 | month5: 'Gegužė', 32 | month6: 'Birželis', 33 | month7: 'Liepa', 34 | month8: 'Rugpjūtis', 35 | month9: 'Rugsėjis', 36 | month10: 'Spalis', 37 | month11: 'Lapkritis', 38 | month12: 'Gruodis', 39 | // week: 'savaitė', 40 | weeks: { 41 | sun: 'S.', 42 | mon: 'Pr.', 43 | tue: 'A.', 44 | wed: 'T.', 45 | thu: 'K.', 46 | fri: 'Pn.', 47 | sat: 'Š.' 48 | }, 49 | months: { 50 | jan: 'Sau', 51 | feb: 'Vas', 52 | mar: 'Kov', 53 | apr: 'Bal', 54 | may: 'Geg', 55 | jun: 'Bir', 56 | jul: 'Lie', 57 | aug: 'Rugp', 58 | sep: 'Rugs', 59 | oct: 'Spa', 60 | nov: 'Lap', 61 | dec: 'Gruo' 62 | } 63 | }, 64 | select: { 65 | loading: 'Kraunasi', 66 | noMatch: 'Duomenų nerasta', 67 | noData: 'Nėra duomenų', 68 | placeholder: 'Pasirink' 69 | }, 70 | cascader: { 71 | noMatch: 'Duomenų nerasta', 72 | loading: 'Kraunasi', 73 | placeholder: 'Pasirink' 74 | }, 75 | pagination: { 76 | goto: 'Eiti į', 77 | pagesize: '/p', 78 | total: 'Viso {total}', 79 | pageClassifier: '' 80 | }, 81 | messagebox: { 82 | title: 'Žinutė', 83 | confirm: 'OK', 84 | cancel: 'Atšaukti', 85 | error: 'Klaida įvestuose duomenyse' 86 | }, 87 | upload: { 88 | deleteTip: 'spauskite "Trinti" norėdami pašalinti', 89 | delete: 'Trinti', 90 | preview: 'Peržiūrėti', 91 | continue: 'Toliau' 92 | }, 93 | table: { 94 | emptyText: 'Duomenų nerasta', 95 | confirmFilter: 'Patvirtinti', 96 | resetFilter: 'Atstatyti', 97 | clearFilter: 'Išvalyti', 98 | sumText: 'Suma' 99 | }, 100 | tree: { 101 | emptyText: 'Nėra duomenų' 102 | }, 103 | transfer: { 104 | noMatch: 'Duomenų nerasta', 105 | noData: 'Nėra duomenų', 106 | titles: ['Sąrašas 1', 'Sąrašas 2'], 107 | filterPlaceholder: 'Įvesk raktažodį', 108 | noCheckedFormat: 'Viso: {total}', 109 | hasCheckedFormat: 'Pažymėta {checked} iš {total}' 110 | } 111 | } 112 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/lang/lv.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.default = { 5 | el: { 6 | colorpicker: { 7 | confirm: 'Labi', 8 | clear: 'Notīrīt' 9 | }, 10 | datepicker: { 11 | now: 'Tagad', 12 | today: 'Šodien', 13 | cancel: 'Atcelt', 14 | clear: 'Notīrīt', 15 | confirm: 'Labi', 16 | selectDate: 'Izvēlēties datumu', 17 | selectTime: 'Izvēlēties laiku', 18 | startDate: 'Sākuma datums', 19 | startTime: 'Sākuma laiks', 20 | endDate: 'Beigu datums', 21 | endTime: 'Beigu laiks', 22 | prevYear: 'Iepriekšējais gads', 23 | nextYear: 'Nākamais gads', 24 | prevMonth: 'Iepriekšējais mēnesis', 25 | nextMonth: 'Nākamais mēnesis', 26 | year: '', 27 | month1: 'Janvāris', 28 | month2: 'Februāris', 29 | month3: 'Marts', 30 | month4: 'Aprīlis', 31 | month5: 'Maijs', 32 | month6: 'Jūnijs', 33 | month7: 'Jūlijs', 34 | month8: 'Augusts', 35 | month9: 'Septembris', 36 | month10: 'Oktobris', 37 | month11: 'Novembris', 38 | month12: 'Decembris', 39 | // week: 'nedēļa', 40 | weeks: { 41 | sun: 'Sv', 42 | mon: 'Pr', 43 | tue: 'Ot', 44 | wed: 'Tr', 45 | thu: 'Ce', 46 | fri: 'Pk', 47 | sat: 'Se' 48 | }, 49 | months: { 50 | jan: 'Jan', 51 | feb: 'Feb', 52 | mar: 'Mar', 53 | apr: 'Apr', 54 | may: 'Mai', 55 | jun: 'Jūn', 56 | jul: 'Jūl', 57 | aug: 'Aug', 58 | sep: 'Sep', 59 | oct: 'Okt', 60 | nov: 'Nov', 61 | dec: 'Dec' 62 | } 63 | }, 64 | select: { 65 | loading: 'Ielādē', 66 | noMatch: 'Nav atbilstošu datu', 67 | noData: 'Nav datu', 68 | placeholder: 'Izvēlēties' 69 | }, 70 | cascader: { 71 | noMatch: 'Nav atbilstošu datu', 72 | loading: 'Ielādē', 73 | placeholder: 'Izvēlēties' 74 | }, 75 | pagination: { 76 | goto: 'Iet uz', 77 | pagesize: '/lapa', 78 | total: 'Kopā {total}', 79 | pageClassifier: '' 80 | }, 81 | messagebox: { 82 | title: 'Paziņojums', 83 | confirm: 'Labi', 84 | cancel: 'Atcelt', 85 | error: 'Nederīga ievade' 86 | }, 87 | upload: { 88 | deleteTip: 'Nospiediet dzēst lai izņemtu', 89 | delete: 'Dzēst', 90 | preview: 'Priekšskatīt', 91 | continue: 'Turpināt' 92 | }, 93 | table: { 94 | emptyText: 'Nav datu', 95 | confirmFilter: 'Apstiprināt', 96 | resetFilter: 'Atiestatīt', 97 | clearFilter: 'Visi', 98 | sumText: 'Summa' 99 | }, 100 | tree: { 101 | emptyText: 'Nav datu' 102 | }, 103 | transfer: { 104 | noMatch: 'Nav atbilstošu datu', 105 | noData: 'Nav datu', 106 | titles: ['Saraksts 1', 'Saraksts 2'], 107 | filterPlaceholder: 'Ievadīt atslēgvārdu', 108 | noCheckedFormat: '{total} vienības', 109 | hasCheckedFormat: '{checked}/{total} atzīmēti' 110 | } 111 | } 112 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/lang/mn.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.default = { 5 | el: { 6 | colorpicker: { 7 | confirm: 'Тийм', 8 | clear: 'Цэвэрлэх' 9 | }, 10 | datepicker: { 11 | now: 'Одоо', 12 | today: 'Өнөөдөр', 13 | cancel: 'Болих', 14 | clear: 'Цэвэрлэх', 15 | confirm: 'Тийм', 16 | selectDate: 'Огноог сонго', 17 | selectTime: 'Цагийг сонго', 18 | startDate: 'Эхлэх огноо', 19 | startTime: 'Эхлэх цаг', 20 | endDate: 'Дуусах огноо', 21 | endTime: 'Дуусах цаг', 22 | prevYear: 'Өмнөх жил', 23 | nextYear: 'Дараа жил', 24 | prevMonth: 'Өмнөх сар', 25 | nextMonth: 'Дараа сар', 26 | year: 'он', 27 | month1: '1 сар', 28 | month2: '2 сар', 29 | month3: '3 сар', 30 | month4: '4 сар', 31 | month5: '5 сар', 32 | month6: '6 сар', 33 | month7: '7 сар', 34 | month8: '8 сар', 35 | month9: '9 сар', 36 | month10: '10 сар', 37 | month11: '11 сар', 38 | month12: '12 сар', 39 | week: 'Долоо хоног', 40 | weeks: { 41 | sun: 'Ням', 42 | mon: 'Дав', 43 | tue: 'Мяг', 44 | wed: 'Лха', 45 | thu: 'Пүр', 46 | fri: 'Баа', 47 | sat: 'Бям' 48 | }, 49 | months: { 50 | jan: '1 сар', 51 | feb: '2 сар', 52 | mar: '3 сар', 53 | apr: '4 сар', 54 | may: '5 сар', 55 | jun: '6 сар', 56 | jul: '7 сар', 57 | aug: '8 сар', 58 | sep: '9 сар', 59 | oct: '10 сар', 60 | nov: '11 сар', 61 | dec: '12 сар' 62 | } 63 | }, 64 | select: { 65 | loading: 'Ачаалж байна', 66 | noMatch: 'Тохирох өгөгдөл байхгүй', 67 | noData: 'Өгөгдөл байхгүй', 68 | placeholder: 'Сонгох' 69 | }, 70 | cascader: { 71 | noMatch: 'Тохирох өгөгдөл байхгүй', 72 | loading: 'Ачаалж байна', 73 | placeholder: 'Сонгох' 74 | }, 75 | pagination: { 76 | goto: 'Очих', 77 | pagesize: '/хуудас', 78 | total: 'Нийт {total}', 79 | pageClassifier: '' 80 | }, 81 | messagebox: { 82 | title: 'Зурвас', 83 | confirm: 'Тийм', 84 | cancel: 'Болих', 85 | error: 'Буруу утга' 86 | }, 87 | upload: { 88 | deleteTip: 'Устгахын дарж арилга', 89 | delete: 'Устгах', 90 | preview: 'Өмнөх', 91 | continue: 'Үргэлжлүүлэх' 92 | }, 93 | table: { 94 | emptyText: 'Өгөгдөл байхгүй', 95 | confirmFilter: 'Зөвшөөрөх', 96 | resetFilter: 'Цэвэрлэх', 97 | clearFilter: 'Бүгд', 98 | sumText: 'Нийт' 99 | }, 100 | tree: { 101 | emptyText: 'Өгөгдөл байхгүй' 102 | }, 103 | transfer: { 104 | noMatch: 'Тохирох өгөгдөл байхгүй', 105 | noData: 'Өгөгдөл байхгүй', 106 | titles: ['Жагсаалт 1', 'Жагсаалт 2'], 107 | filterPlaceholder: 'Утга оруул', 108 | noCheckedFormat: '{total} өгөгдөл', 109 | hasCheckedFormat: '{checked}/{total} сонгосон' 110 | } 111 | } 112 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/lang/nl.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.default = { 5 | el: { 6 | colorpicker: { 7 | confirm: 'Bevestig', 8 | clear: 'Wissen' 9 | }, 10 | datepicker: { 11 | now: 'Nu', 12 | today: 'Vandaag', 13 | cancel: 'Annuleren', 14 | clear: 'Legen', 15 | confirm: 'Bevestig', 16 | selectDate: 'Selecteer datum', 17 | selectTime: 'Selecteer tijd', 18 | startDate: 'Startdatum', 19 | startTime: 'Starttijd', 20 | endDate: 'Einddatum', 21 | endTime: 'Eindtijd', 22 | prevYear: 'Vorig jaar', 23 | nextYear: 'Volgend jaar', 24 | prevMonth: 'Vorige maand', 25 | nextMonth: 'Volgende maand', 26 | year: '', 27 | month1: 'januari', 28 | month2: 'februari', 29 | month3: 'maart', 30 | month4: 'april', 31 | month5: 'mei', 32 | month6: 'juni', 33 | month7: 'juli', 34 | month8: 'augustus', 35 | month9: 'september', 36 | month10: 'oktober', 37 | month11: 'november', 38 | month12: 'december', 39 | // week: 'week', 40 | weeks: { 41 | sun: 'Zo', 42 | mon: 'Ma', 43 | tue: 'Di', 44 | wed: 'Wo', 45 | thu: 'Do', 46 | fri: 'Vr', 47 | sat: 'Za' 48 | }, 49 | months: { 50 | jan: 'jan', 51 | feb: 'feb', 52 | mar: 'maa', 53 | apr: 'apr', 54 | may: 'mei', 55 | jun: 'jun', 56 | jul: 'jul', 57 | aug: 'aug', 58 | sep: 'sep', 59 | oct: 'okt', 60 | nov: 'nov', 61 | dec: 'dec' 62 | } 63 | }, 64 | select: { 65 | loading: 'Laden', 66 | noMatch: 'Geen overeenkomende resultaten', 67 | noData: 'Geen data', 68 | placeholder: 'Selecteer' 69 | }, 70 | cascader: { 71 | noMatch: 'Geen overeenkomende resultaten', 72 | loading: 'Laden', 73 | placeholder: 'Selecteer' 74 | }, 75 | pagination: { 76 | goto: 'Ga naar', 77 | pagesize: '/pagina', 78 | total: 'Totaal {total}', 79 | pageClassifier: '' 80 | }, 81 | messagebox: { 82 | title: 'Bericht', 83 | confirm: 'Bevestig', 84 | cancel: 'Annuleren', 85 | error: 'Ongeldige invoer' 86 | }, 87 | upload: { 88 | deleteTip: 'Kies verwijder om te wissen', 89 | delete: 'Verwijder', 90 | preview: 'Voorbeeld', 91 | continue: 'Doorgaan' 92 | }, 93 | table: { 94 | emptyText: 'Geen data', 95 | confirmFilter: 'Bevestigen', 96 | resetFilter: 'Reset', 97 | clearFilter: 'Alles', 98 | sumText: 'Som' 99 | }, 100 | tree: { 101 | emptyText: 'Geen data' 102 | }, 103 | transfer: { 104 | noMatch: 'Geen overeenkomende resultaten', 105 | noData: 'Geen data', 106 | titles: ['Lijst 1', 'Lijst 2'], 107 | filterPlaceholder: 'Geef zoekwoerd', 108 | noCheckedFormat: '{total} items', 109 | hasCheckedFormat: '{checked}/{total} geselecteerd' 110 | } 111 | } 112 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/lang/pt-br.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.default = { 5 | el: { 6 | colorpicker: { 7 | confirm: 'Confirmar', 8 | clear: 'Limpar' 9 | }, 10 | datepicker: { 11 | now: 'Agora', 12 | today: 'Hoje', 13 | cancel: 'Cancelar', 14 | clear: 'Limpar', 15 | confirm: 'Confirmar', 16 | selectDate: 'Selecione a data', 17 | selectTime: 'Selecione a hora', 18 | startDate: 'Data inicial', 19 | startTime: 'Hora inicial', 20 | endDate: 'Data final', 21 | endTime: 'Hora final', 22 | prevYear: 'Ano anterior', 23 | nextYear: 'Próximo ano', 24 | prevMonth: 'Mês anterior', 25 | nextMonth: 'Próximo mês', 26 | year: '', 27 | month1: 'Janeiro', 28 | month2: 'Fevereiro', 29 | month3: 'Março', 30 | month4: 'Abril', 31 | month5: 'Maio', 32 | month6: 'Junho', 33 | month7: 'Julho', 34 | month8: 'Agosto', 35 | month9: 'Setembro', 36 | month10: 'Outubro', 37 | month11: 'Novembro', 38 | month12: 'Dezembro', 39 | // week: 'semana', 40 | weeks: { 41 | sun: 'Dom', 42 | mon: 'Seg', 43 | tue: 'Ter', 44 | wed: 'Qua', 45 | thu: 'Qui', 46 | fri: 'Sex', 47 | sat: 'Sab' 48 | }, 49 | months: { 50 | jan: 'Jan', 51 | feb: 'Fev', 52 | mar: 'Mar', 53 | apr: 'Abr', 54 | may: 'Mai', 55 | jun: 'Jun', 56 | jul: 'Jul', 57 | aug: 'Ago', 58 | sep: 'Set', 59 | oct: 'Out', 60 | nov: 'Nov', 61 | dec: 'Dez' 62 | } 63 | }, 64 | select: { 65 | loading: 'Carregando', 66 | noMatch: 'Sem resultados', 67 | noData: 'Sem dados', 68 | placeholder: 'Selecione' 69 | }, 70 | cascader: { 71 | noMatch: 'Sem resultados', 72 | loading: 'Carregando', 73 | placeholder: 'Selecione' 74 | }, 75 | pagination: { 76 | goto: 'Ir para', 77 | pagesize: '/página', 78 | total: 'Total {total}', 79 | pageClassifier: '' 80 | }, 81 | messagebox: { 82 | title: 'Mensagem', 83 | confirm: 'Confirmar', 84 | cancel: 'Cancelar', 85 | error: 'Erro!' 86 | }, 87 | upload: { 88 | deleteTip: 'aperte delete para apagar', 89 | delete: 'Apagar', 90 | preview: 'Pré-visualizar', 91 | continue: 'Continuar' 92 | }, 93 | table: { 94 | emptyText: 'Sem dados', 95 | confirmFilter: 'Confirmar', 96 | resetFilter: 'Limpar', 97 | clearFilter: 'Todos', 98 | sumText: 'Total' 99 | }, 100 | tree: { 101 | emptyText: 'Sem dados' 102 | }, 103 | transfer: { 104 | noMatch: 'Sem resultados', 105 | noData: 'Sem dados', 106 | titles: ['Lista 1', 'Lista 2'], 107 | filterPlaceholder: 'Digite uma palavra-chave', 108 | noCheckedFormat: '{total} itens', 109 | hasCheckedFormat: '{checked}/{total} selecionados' 110 | } 111 | } 112 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/lang/ru-RU.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.default = { 5 | el: { 6 | colorpicker: { 7 | confirm: 'OK', 8 | clear: 'Очистить' 9 | }, 10 | datepicker: { 11 | now: 'Сейчас', 12 | today: 'Сегодня', 13 | cancel: 'Отмена', 14 | clear: 'Очистить', 15 | confirm: 'OK', 16 | selectDate: 'Выбрать дату', 17 | selectTime: 'Выбрать время', 18 | startDate: 'Дата начала', 19 | startTime: 'Время начала', 20 | endDate: 'Дата окончания', 21 | endTime: 'Время окончания', 22 | prevYear: 'Предыдущий год', 23 | nextYear: 'Следующий год', 24 | prevMonth: 'Предыдущий месяц', 25 | nextMonth: 'Следующий месяц', 26 | year: '', 27 | month1: 'Январь', 28 | month2: 'Февраль', 29 | month3: 'Март', 30 | month4: 'Апрель', 31 | month5: 'Май', 32 | month6: 'Июнь', 33 | month7: 'Июль', 34 | month8: 'Август', 35 | month9: 'Сентябрь', 36 | month10: 'Октябрь', 37 | month11: 'Ноябрь', 38 | month12: 'Декабрь', 39 | // week: 'week', 40 | weeks: { 41 | sun: 'Вс', 42 | mon: 'Пн', 43 | tue: 'Вт', 44 | wed: 'Ср', 45 | thu: 'Чт', 46 | fri: 'Пт', 47 | sat: 'Сб' 48 | }, 49 | months: { 50 | jan: 'Янв', 51 | feb: 'Фев', 52 | mar: 'Мар', 53 | apr: 'Апр', 54 | may: 'Май', 55 | jun: 'Июн', 56 | jul: 'Июл', 57 | aug: 'Авг', 58 | sep: 'Сен', 59 | oct: 'Окт', 60 | nov: 'Ноя', 61 | dec: 'Дек' 62 | } 63 | }, 64 | select: { 65 | loading: 'Загрузка', 66 | noMatch: 'Совпадений не найдено', 67 | noData: 'Нет данных', 68 | placeholder: 'Выбрать' 69 | }, 70 | cascader: { 71 | noMatch: 'Совпадений не найдено', 72 | loading: 'Загрузка', 73 | placeholder: 'Выбрать' 74 | }, 75 | pagination: { 76 | goto: 'Перейти', 77 | pagesize: ' на странице', 78 | total: 'Всего {total}', 79 | pageClassifier: '' 80 | }, 81 | messagebox: { 82 | title: 'Сообщение', 83 | confirm: 'OK', 84 | cancel: 'Отмена', 85 | error: 'Недопустимый ввод данных' 86 | }, 87 | upload: { 88 | deleteTip: 'Нажмите [Удалить] для удаления', 89 | delete: 'Удалить', 90 | preview: 'Превью', 91 | continue: 'Продолжить' 92 | }, 93 | table: { 94 | emptyText: 'Нет данных', 95 | confirmFilter: 'Подтвердить', 96 | resetFilter: 'Сбросить', 97 | clearFilter: 'Все', 98 | sumText: 'Сумма' 99 | }, 100 | tree: { 101 | emptyText: 'Нет данных' 102 | }, 103 | transfer: { 104 | noMatch: 'Совпадений не найдено', 105 | noData: 'Нет данных', 106 | titles: ['Список 1', 'Список 2'], 107 | filterPlaceholder: 'Введите ключевое слово', 108 | noCheckedFormat: '{total} пунктов', 109 | hasCheckedFormat: '{checked}/{total} выбрано' 110 | } 111 | } 112 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/lang/sk.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.default = { 5 | el: { 6 | colorpicker: { 7 | confirm: 'OK', 8 | clear: 'Zmazať' 9 | }, 10 | datepicker: { 11 | now: 'Teraz', 12 | today: 'Dnes', 13 | cancel: 'Zrušiť', 14 | clear: 'Zmazať', 15 | confirm: 'OK', 16 | selectDate: 'Vybrať dátum', 17 | selectTime: 'Vybrať čas', 18 | startDate: 'Dátum začiatku', 19 | startTime: 'Čas začiatku', 20 | endDate: 'Dátum konca', 21 | endTime: 'Čas konca', 22 | prevYear: 'Predošlý rok', 23 | nextYear: 'Ďalší rok', 24 | prevMonth: 'Predošlý mesiac', 25 | nextMonth: 'Ďalší mesiac', 26 | day: 'Deň', 27 | week: 'Týždeň', 28 | month: 'Mesiac', 29 | year: 'Rok', 30 | month1: 'Január', 31 | month2: 'Február', 32 | month3: 'Marec', 33 | month4: 'Apríl', 34 | month5: 'Máj', 35 | month6: 'Jún', 36 | month7: 'Júl', 37 | month8: 'August', 38 | month9: 'September', 39 | month10: 'Október', 40 | month11: 'November', 41 | month12: 'December', 42 | weeks: { 43 | sun: 'Ne', 44 | mon: 'Po', 45 | tue: 'Ut', 46 | wed: 'St', 47 | thu: 'Št', 48 | fri: 'Pi', 49 | sat: 'So' 50 | }, 51 | months: { 52 | jan: 'Jan', 53 | feb: 'Feb', 54 | mar: 'Mar', 55 | apr: 'Apr', 56 | may: 'Máj', 57 | jun: 'Jún', 58 | jul: 'Júl', 59 | aug: 'Aug', 60 | sep: 'Sep', 61 | oct: 'Okt', 62 | nov: 'Nov', 63 | dec: 'Dec' 64 | } 65 | }, 66 | select: { 67 | loading: 'Načítavanie', 68 | noMatch: 'Žiadna zhoda', 69 | noData: 'Žiadne dáta', 70 | placeholder: 'Vybrať' 71 | }, 72 | cascader: { 73 | noMatch: 'Žiadna zhoda', 74 | loading: 'Načítavanie', 75 | placeholder: 'Vybrať' 76 | }, 77 | pagination: { 78 | goto: 'Choď na', 79 | pagesize: 'na stranu', 80 | total: 'Všetko {total}', 81 | pageClassifier: '' 82 | }, 83 | messagebox: { 84 | title: 'Správa', 85 | confirm: 'OK', 86 | cancel: 'Zrušiť', 87 | error: 'Neplatný vstup' 88 | }, 89 | upload: { 90 | deleteTip: 'pre odstránenie stisni klávesu Delete', 91 | delete: 'Vymazať', 92 | preview: 'Prehliadať', 93 | continue: 'Pokračovať' 94 | }, 95 | table: { 96 | emptyText: 'Žiadne dáta', 97 | confirmFilter: 'Potvrdiť', 98 | resetFilter: 'Zresetovať', 99 | clearFilter: 'Všetko', 100 | sumText: 'Spolu' 101 | }, 102 | tree: { 103 | emptyText: 'Žiadne dáta' 104 | }, 105 | transfer: { 106 | noMatch: 'Žiadna zhoda', 107 | noData: 'Žiadne dáta', 108 | titles: ['Zoznam 1', 'Zoznam 2'], 109 | filterPlaceholder: 'Filtrovať podľa', 110 | noCheckedFormat: '{total} položiek', 111 | hasCheckedFormat: '{checked}/{total} označených' 112 | } 113 | } 114 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/lang/tk.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.default = { 5 | el: { 6 | colorpicker: { 7 | confirm: 'OK', 8 | clear: 'Arassala' 9 | }, 10 | datepicker: { 11 | now: 'Şuwagt', 12 | today: 'Şügün', 13 | cancel: 'Bes et', 14 | clear: 'Arassala', 15 | confirm: 'OK', 16 | selectDate: 'Güni saýlaň', 17 | selectTime: 'Wagty saýlaň', 18 | startDate: 'Başlaýan güni', 19 | startTime: 'Başlaýan wagty', 20 | endDate: 'Gutarýan güni', 21 | endTime: 'Gutarýan wagty', 22 | prevYear: 'Previous Year', // to be translated 23 | nextYear: 'Next Year', // to be translated 24 | prevMonth: 'Previous Month', // to be translated 25 | nextMonth: 'Next Month', // to be translated 26 | year: '', 27 | month1: 'Ýan', 28 | month2: 'Few', 29 | month3: 'Mar', 30 | month4: 'Apr', 31 | month5: 'Maý', 32 | month6: 'Iýn', 33 | month7: 'Iýl', 34 | month8: 'Awg', 35 | month9: 'Sen', 36 | month10: 'Okt', 37 | month11: 'Noý', 38 | month12: 'Dek', 39 | // week: 'week', 40 | weeks: { 41 | sun: 'Ýek', 42 | mon: 'Duş', 43 | tue: 'Siş', 44 | wed: 'Çar', 45 | thu: 'Pen', 46 | fri: 'Ann', 47 | sat: 'Şen' 48 | }, 49 | months: { 50 | jan: 'Ýan', 51 | feb: 'Few', 52 | mar: 'Mar', 53 | apr: 'Apr', 54 | may: 'Maý', 55 | jun: 'Iýn', 56 | jul: 'Iýl', 57 | aug: 'Awg', 58 | sep: 'Sep', 59 | oct: 'Okt', 60 | nov: 'Noý', 61 | dec: 'Dek' 62 | } 63 | }, 64 | select: { 65 | loading: 'Indirilýär', 66 | noMatch: 'Hiçzat tapylmady', 67 | noData: 'Hiçzat ýok', 68 | placeholder: 'Saýla' 69 | }, 70 | cascader: { 71 | noMatch: 'Hiçzat tapylmady', 72 | loading: 'Indirilýär', 73 | placeholder: 'Saýlaň' 74 | }, 75 | pagination: { 76 | goto: 'Git', 77 | pagesize: '/sahypa', 78 | total: 'Umumy {total}', 79 | pageClassifier: '' 80 | }, 81 | messagebox: { 82 | title: 'Hat', 83 | confirm: 'OK', 84 | cancel: 'Bes et', 85 | error: 'Ýalňyş girizme' 86 | }, 87 | upload: { 88 | deleteTip: 'Pozmak üçin "poz" düwmä basyň', 89 | delete: 'Poz', 90 | preview: 'Gör', 91 | continue: 'Dowam et' 92 | }, 93 | table: { 94 | emptyText: 'Maglumat ýok', 95 | confirmFilter: 'Tassykla', 96 | resetFilter: 'Arassala', 97 | clearFilter: 'Hemmesi', 98 | sumText: 'Jemi' 99 | }, 100 | tree: { 101 | emptyText: 'Maglumat ýok' 102 | }, 103 | transfer: { 104 | noMatch: 'Hiçzat tapylmady', 105 | noData: 'Hiçzat ýok', 106 | titles: ['Sanaw 1', 'Sanaw 2'], 107 | filterPlaceholder: 'Gözleg sözlerini giriziň', 108 | noCheckedFormat: '{total} sany', 109 | hasCheckedFormat: '{checked}/{total} saýlanan' 110 | } 111 | } 112 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/lang/tr-TR.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.default = { 5 | el: { 6 | colorpicker: { 7 | confirm: 'Onayla', 8 | clear: 'Temizle' 9 | }, 10 | datepicker: { 11 | now: 'Şimdi', 12 | today: 'Bugün', 13 | cancel: 'İptal', 14 | clear: 'Temizle', 15 | confirm: 'Onayla', 16 | selectDate: 'Tarih seç', 17 | selectTime: 'Saat seç', 18 | startDate: 'Başlangıç Tarihi', 19 | startTime: 'Başlangıç Saati', 20 | endDate: 'Bitiş Tarihi', 21 | endTime: 'Bitiş Saati', 22 | prevYear: 'Önceki Yıl', 23 | nextYear: 'Sonraki Yıl', 24 | prevMonth: 'Önceki Ay', 25 | nextMonth: 'Sonraki Ay', 26 | year: '', 27 | month1: 'Ocak', 28 | month2: 'Şubat', 29 | month3: 'Mart', 30 | month4: 'Nisan', 31 | month5: 'Mayıs', 32 | month6: 'Haziran', 33 | month7: 'Temmuz', 34 | month8: 'Ağustos', 35 | month9: 'Eylül', 36 | month10: 'Ekim', 37 | month11: 'Kasım', 38 | month12: 'Aralık', 39 | // week: 'week', 40 | weeks: { 41 | sun: 'Paz', 42 | mon: 'Pzt', 43 | tue: 'Sal', 44 | wed: 'Çar', 45 | thu: 'Per', 46 | fri: 'Cum', 47 | sat: 'Cmt' 48 | }, 49 | months: { 50 | jan: 'Oca', 51 | feb: 'Şub', 52 | mar: 'Mar', 53 | apr: 'Nis', 54 | may: 'May', 55 | jun: 'Haz', 56 | jul: 'Tem', 57 | aug: 'Ağu', 58 | sep: 'Eyl', 59 | oct: 'Eki', 60 | nov: 'Kas', 61 | dec: 'Ara' 62 | } 63 | }, 64 | select: { 65 | loading: 'Yükleniyor', 66 | noMatch: 'Eşleşen veri bulunamadı', 67 | noData: 'Veri yok', 68 | placeholder: 'Seç' 69 | }, 70 | cascader: { 71 | noMatch: 'Eşleşen veri bulunamadı', 72 | loading: 'Yükleniyor', 73 | placeholder: 'Seç' 74 | }, 75 | pagination: { 76 | goto: 'Git', 77 | pagesize: '/sayfa', 78 | total: 'Toplam {total}', 79 | pageClassifier: '' 80 | }, 81 | messagebox: { 82 | title: 'Mesaj', 83 | confirm: 'Onayla', 84 | cancel: 'İptal', 85 | error: 'İllegal giriş' 86 | }, 87 | upload: { 88 | deleteTip: 'kaldırmak için delete tuşuna bas', 89 | delete: 'Sil', 90 | preview: 'Görüntüle', 91 | continue: 'Devam' 92 | }, 93 | table: { 94 | emptyText: 'Veri yok', 95 | confirmFilter: 'Onayla', 96 | resetFilter: 'Sıfırla', 97 | clearFilter: 'Hepsi', 98 | sumText: 'Sum' 99 | }, 100 | tree: { 101 | emptyText: 'Veri yok' 102 | }, 103 | transfer: { 104 | noMatch: 'Eşleşen veri bulunamadı', 105 | noData: 'Veri yok', 106 | titles: ['Liste 1', 'Liste 2'], 107 | filterPlaceholder: 'Anahtar kelimeleri gir', 108 | noCheckedFormat: '{total} adet', 109 | hasCheckedFormat: '{checked}/{total} seçildi' 110 | } 111 | } 112 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/lang/zh-CN.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.default = { 5 | el: { 6 | colorpicker: { 7 | confirm: '确定', 8 | clear: '清空' 9 | }, 10 | datepicker: { 11 | now: '此刻', 12 | today: '今天', 13 | cancel: '取消', 14 | clear: '清空', 15 | confirm: '确定', 16 | selectDate: '选择日期', 17 | selectTime: '选择时间', 18 | startDate: '开始日期', 19 | startTime: '开始时间', 20 | endDate: '结束日期', 21 | endTime: '结束时间', 22 | prevYear: '前一年', 23 | nextYear: '后一年', 24 | prevMonth: '上个月', 25 | nextMonth: '下个月', 26 | year: '年', 27 | month1: '1 月', 28 | month2: '2 月', 29 | month3: '3 月', 30 | month4: '4 月', 31 | month5: '5 月', 32 | month6: '6 月', 33 | month7: '7 月', 34 | month8: '8 月', 35 | month9: '9 月', 36 | month10: '10 月', 37 | month11: '11 月', 38 | month12: '12 月', 39 | // week: '周次', 40 | weeks: { 41 | sun: '日', 42 | mon: '一', 43 | tue: '二', 44 | wed: '三', 45 | thu: '四', 46 | fri: '五', 47 | sat: '六' 48 | }, 49 | months: { 50 | jan: '一月', 51 | feb: '二月', 52 | mar: '三月', 53 | apr: '四月', 54 | may: '五月', 55 | jun: '六月', 56 | jul: '七月', 57 | aug: '八月', 58 | sep: '九月', 59 | oct: '十月', 60 | nov: '十一月', 61 | dec: '十二月' 62 | } 63 | }, 64 | select: { 65 | loading: '加载中', 66 | noMatch: '无匹配数据', 67 | noData: '无数据', 68 | placeholder: '请选择' 69 | }, 70 | cascader: { 71 | noMatch: '无匹配数据', 72 | loading: '加载中', 73 | placeholder: '请选择' 74 | }, 75 | pagination: { 76 | goto: '前往', 77 | pagesize: '条/页', 78 | total: '共 {total} 条', 79 | pageClassifier: '页' 80 | }, 81 | messagebox: { 82 | title: '提示', 83 | confirm: '确定', 84 | cancel: '取消', 85 | error: '输入的数据不合法!' 86 | }, 87 | upload: { 88 | deleteTip: '按 delete 键可删除', 89 | delete: '删除', 90 | preview: '查看图片', 91 | continue: '继续上传' 92 | }, 93 | table: { 94 | emptyText: '暂无数据', 95 | confirmFilter: '筛选', 96 | resetFilter: '重置', 97 | clearFilter: '全部', 98 | sumText: '合计' 99 | }, 100 | tree: { 101 | emptyText: '暂无数据' 102 | }, 103 | transfer: { 104 | noMatch: '无匹配数据', 105 | noData: '无数据', 106 | titles: ['列表 1', '列表 2'], 107 | filterPlaceholder: '请输入搜索内容', 108 | noCheckedFormat: '共 {total} 项', 109 | hasCheckedFormat: '已选 {checked}/{total} 项' 110 | } 111 | } 112 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/locale/lang/zh-TW.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.default = { 5 | el: { 6 | colorpicker: { 7 | confirm: '確認', 8 | clear: '清空' 9 | }, 10 | datepicker: { 11 | now: '現在', 12 | today: '今天', 13 | cancel: '取消', 14 | clear: '清空', 15 | confirm: '確認', 16 | selectDate: '選擇日期', 17 | selectTime: '選擇時間', 18 | startDate: '開始日期', 19 | startTime: '開始時間', 20 | endDate: '結束日期', 21 | endTime: '結束時間', 22 | prevYear: '前一年', 23 | nextYear: '後一年', 24 | prevMonth: '上個月', 25 | nextMonth: '下個月', 26 | year: '年', 27 | month1: '1 月', 28 | month2: '2 月', 29 | month3: '3 月', 30 | month4: '4 月', 31 | month5: '5 月', 32 | month6: '6 月', 33 | month7: '7 月', 34 | month8: '8 月', 35 | month9: '9 月', 36 | month10: '10 月', 37 | month11: '11 月', 38 | month12: '12 月', 39 | // week: '周次', 40 | weeks: { 41 | sun: '日', 42 | mon: '一', 43 | tue: '二', 44 | wed: '三', 45 | thu: '四', 46 | fri: '五', 47 | sat: '六' 48 | }, 49 | months: { 50 | jan: '一月', 51 | feb: '二月', 52 | mar: '三月', 53 | apr: '四月', 54 | may: '五月', 55 | jun: '六月', 56 | jul: '七月', 57 | aug: '八月', 58 | sep: '九月', 59 | oct: '十月', 60 | nov: '十一月', 61 | dec: '十二月' 62 | } 63 | }, 64 | select: { 65 | loading: '加載中', 66 | noMatch: '無匹配資料', 67 | noData: '無資料', 68 | placeholder: '請選擇' 69 | }, 70 | cascader: { 71 | noMatch: '無匹配資料', 72 | loading: '加載中', 73 | placeholder: '請選擇' 74 | }, 75 | pagination: { 76 | goto: '前往', 77 | pagesize: '項/頁', 78 | total: '共 {total} 項', 79 | pageClassifier: '頁' 80 | }, 81 | messagebox: { 82 | title: '提示', 83 | confirm: '確定', 84 | cancel: '取消', 85 | error: '輸入的資料不符規定!' 86 | }, 87 | upload: { 88 | deleteTip: '按 delete 鍵可刪除', 89 | delete: '刪除', 90 | preview: '查看圖片', 91 | continue: '繼續上傳' 92 | }, 93 | table: { 94 | emptyText: '暫無資料', 95 | confirmFilter: '篩選', 96 | resetFilter: '重置', 97 | clearFilter: '全部', 98 | sumText: 'Sum' // to be translated 99 | }, 100 | tree: { 101 | emptyText: '暫無資料' 102 | }, 103 | transfer: { 104 | noMatch: '無匹配資料', 105 | noData: '無資料', 106 | titles: ['List 1', 'List 2'], // to be translated 107 | filterPlaceholder: 'Enter keyword', // to be translated 108 | noCheckedFormat: '{total} items', // to be translated 109 | hasCheckedFormat: '{checked}/{total} checked' // to be translated 110 | } 111 | } 112 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/mixins/emitter.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | exports.__esModule = true; 4 | function _broadcast(componentName, eventName, params) { 5 | this.$children.forEach(function (child) { 6 | var name = child.$options.componentName; 7 | 8 | if (name === componentName) { 9 | child.$emit.apply(child, [eventName].concat(params)); 10 | } else { 11 | _broadcast.apply(child, [componentName, eventName].concat([params])); 12 | } 13 | }); 14 | } 15 | exports.default = { 16 | methods: { 17 | dispatch: function dispatch(componentName, eventName, params) { 18 | var parent = this.$parent || this.$root; 19 | var name = parent.$options.componentName; 20 | 21 | while (parent && (!name || name !== componentName)) { 22 | parent = parent.$parent; 23 | 24 | if (parent) { 25 | name = parent.$options.componentName; 26 | } 27 | } 28 | if (parent) { 29 | parent.$emit.apply(parent, [eventName].concat(params)); 30 | } 31 | }, 32 | broadcast: function broadcast(componentName, eventName, params) { 33 | _broadcast.call(this, componentName, eventName, params); 34 | } 35 | } 36 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/mixins/focus.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | exports.__esModule = true; 4 | 5 | exports.default = function (ref) { 6 | return { 7 | methods: { 8 | focus: function focus() { 9 | this.$refs[ref].focus(); 10 | } 11 | } 12 | }; 13 | }; 14 | 15 | ; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/mixins/locale.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | 5 | var _locale = require('element-ui/lib/locale'); 6 | 7 | exports.default = { 8 | methods: { 9 | t: function t() { 10 | for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { 11 | args[_key] = arguments[_key]; 12 | } 13 | 14 | return _locale.t.apply(this, args); 15 | } 16 | } 17 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/mixins/migrating.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | /** 5 | * Show migrating guide in browser console. 6 | * 7 | * Usage: 8 | * import Migrating from 'element-ui/src/mixins/migrating'; 9 | * 10 | * mixins: [Migrating] 11 | * 12 | * add getMigratingConfig method for your component. 13 | * getMigratingConfig() { 14 | * return { 15 | * props: { 16 | * 'allow-no-selection': 'allow-no-selection is removed.', 17 | * 'selection-mode': 'selection-mode is removed.' 18 | * }, 19 | * events: { 20 | * selectionchange: 'selectionchange is renamed to selection-change.' 21 | * } 22 | * }; 23 | * }, 24 | */ 25 | exports.default = { 26 | mounted: function mounted() { 27 | if (process.env.NODE_ENV === 'production') return; 28 | if (!this.$vnode) return; 29 | 30 | var _getMigratingConfig = this.getMigratingConfig(), 31 | _getMigratingConfig$p = _getMigratingConfig.props, 32 | props = _getMigratingConfig$p === undefined ? {} : _getMigratingConfig$p, 33 | _getMigratingConfig$e = _getMigratingConfig.events, 34 | events = _getMigratingConfig$e === undefined ? {} : _getMigratingConfig$e; 35 | 36 | var _$vnode = this.$vnode, 37 | data = _$vnode.data, 38 | componentOptions = _$vnode.componentOptions; 39 | 40 | var definedProps = data.attrs || {}; 41 | var definedEvents = componentOptions.listeners || {}; 42 | 43 | for (var propName in definedProps) { 44 | if (definedProps.hasOwnProperty(propName) && props[propName]) { 45 | console.warn('[Element Migrating][' + this.$options.name + '][Attribute]: ' + props[propName]); 46 | } 47 | } 48 | 49 | for (var eventName in definedEvents) { 50 | if (definedEvents.hasOwnProperty(eventName) && events[eventName]) { 51 | console.warn('[Element Migrating][' + this.$options.name + '][Event]: ' + events[eventName]); 52 | } 53 | } 54 | }, 55 | 56 | methods: { 57 | getMigratingConfig: function getMigratingConfig() { 58 | return { 59 | props: {}, 60 | events: {} 61 | }; 62 | } 63 | } 64 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/alert.css: -------------------------------------------------------------------------------- 1 | .el-alert{width:100%;padding:8px 16px;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;position:relative;background-color:#fff;overflow:hidden;opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:opacity .2s;transition:opacity .2s}.el-alert.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success{background-color:#f0f9eb;color:#67c23a}.el-alert--success .el-alert__description{color:#67c23a}.el-alert--info{background-color:#f4f4f5;color:#909399}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning{background-color:#fdf6ec;color:#e6a23c}.el-alert--warning .el-alert__description{color:#e6a23c}.el-alert--error{background-color:#fef0f0;color:#f56c6c}.el-alert--error .el-alert__description{color:#f56c6c}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert .el-alert__description{font-size:12px;margin:5px 0 0}.el-alert__closebtn{font-size:12px;color:#c0c4cc;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-alert-fade-enter,.el-alert-fade-leave-active{opacity:0} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/aside.css: -------------------------------------------------------------------------------- 1 | .el-aside{overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/badge.css: -------------------------------------------------------------------------------- 1 | .el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#f56c6c;border-radius:10px;color:#fff;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #fff}.el-badge__content.is-fixed{position:absolute;top:0;right:10px;-webkit-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/breadcrumb-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuyeah/sprov-ui/64d06d4eb11a74420411eaa369becfec4750002d/src/main/resources/static/res/element-ui/theme-chalk/breadcrumb-item.css -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/breadcrumb.css: -------------------------------------------------------------------------------- 1 | .el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb::after,.el-breadcrumb::before{display:table;content:""}.el-breadcrumb::after{clear:both}.el-breadcrumb__separator{margin:0 9px;font-weight:700;color:#c0c4cc}.el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:400}.el-breadcrumb__item{float:left}.el-breadcrumb__inner{color:#606266}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{font-weight:700;text-decoration:none;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1);color:#303133}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:#409EFF;cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{font-weight:400;color:#606266;cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/button-group.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuyeah/sprov-ui/64d06d4eb11a74420411eaa369becfec4750002d/src/main/resources/static/res/element-ui/theme-chalk/button-group.css -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/card.css: -------------------------------------------------------------------------------- 1 | .el-card{border-radius:4px;border:1px solid #ebeef5;background-color:#fff;overflow:hidden;color:#303133;-webkit-transition:.3s;transition:.3s}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-card__header{padding:18px 20px;border-bottom:1px solid #ebeef5;-webkit-box-sizing:border-box;box-sizing:border-box}.el-card__body{padding:20px} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/carousel-item.css: -------------------------------------------------------------------------------- 1 | .el-carousel__item,.el-carousel__mask{position:absolute;height:100%;top:0;left:0}.el-carousel__item{width:100%;display:inline-block;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item.is-animating{-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card{width:50%;-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:2}.el-carousel__mask{width:100%;background-color:#fff;opacity:.24;-webkit-transition:.2s;transition:.2s} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/carousel.css: -------------------------------------------------------------------------------- 1 | .el-carousel{overflow-x:hidden;position:relative}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;outline:0;padding:0;margin:0;height:36px;width:36px;cursor:pointer;-webkit-transition:.3s;transition:.3s;border-radius:50%;background-color:rgba(31,45,61,.11);color:#fff;position:absolute;top:50%;z-index:10;-webkit-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{position:absolute;list-style:none;bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);margin:0;padding:0;z-index:2}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-webkit-transform:none;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:#c0c4cc;opacity:.24}.el-carousel__indicators--labels{left:0;right:0;-webkit-transform:none;transform:none;text-align:center}.el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{display:inline-block;background-color:transparent;padding:12px 4px;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#fff;border:none;outline:0;padding:0;margin:0;cursor:pointer;-webkit-transition:.3s;transition:.3s}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{-webkit-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{-webkit-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/checkbox-button.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuyeah/sprov-ui/64d06d4eb11a74420411eaa369becfec4750002d/src/main/resources/static/res/element-ui/theme-chalk/checkbox-button.css -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/checkbox-group.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuyeah/sprov-ui/64d06d4eb11a74420411eaa369becfec4750002d/src/main/resources/static/res/element-ui/theme-chalk/checkbox-group.css -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/collapse-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuyeah/sprov-ui/64d06d4eb11a74420411eaa369becfec4750002d/src/main/resources/static/res/element-ui/theme-chalk/collapse-item.css -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/container.css: -------------------------------------------------------------------------------- 1 | .el-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-box-sizing:border-box;box-sizing:border-box;min-width:0}.el-container.is-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/dialog.css: -------------------------------------------------------------------------------- 1 | .v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.v-modal-leave{-webkit-animation:v-modal-out .2s ease forwards;animation:v-modal-out .2s ease forwards}@-webkit-keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{100%{opacity:0}}@keyframes v-modal-out{100%{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-popup-parent--hidden{overflow:hidden}.el-dialog{position:relative;margin:0 auto 50px;background:#fff;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3);-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.el-dialog.is-fullscreen{width:100%;margin-top:0;margin-bottom:0;height:100%;overflow:auto}.el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.el-dialog__header{padding:20px 20px 10px}.el-dialog__headerbtn{position:absolute;top:20px;right:20px;padding:0;background:0 0;border:none;outline:0;cursor:pointer;font-size:16px}.el-dialog__headerbtn .el-dialog__close{color:#909399}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#409EFF}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;font-size:14px}.el-dialog__footer{padding:10px 20px 20px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px 25px 30px}.el-dialog--center .el-dialog__footer{text-align:inherit}.dialog-fade-enter-active{-webkit-animation:dialog-fade-in .3s;animation:dialog-fade-in .3s}.dialog-fade-leave-active{-webkit-animation:dialog-fade-out .3s;animation:dialog-fade-out .3s}@-webkit-keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/display.css: -------------------------------------------------------------------------------- 1 | @media only screen and (max-width:767px){.hidden-xs-only{display:none!important}}@media only screen and (min-width:768px){.hidden-sm-and-up{display:none!important}}@media only screen and (min-width:768px) and (max-width:991px){.hidden-sm-only{display:none!important}}@media only screen and (max-width:991px){.hidden-sm-and-down{display:none!important}}@media only screen and (min-width:992px){.hidden-md-and-up{display:none!important}}@media only screen and (min-width:992px) and (max-width:1199px){.hidden-md-only{display:none!important}}@media only screen and (max-width:1199px){.hidden-md-and-down{display:none!important}}@media only screen and (min-width:1200px){.hidden-lg-and-up{display:none!important}}@media only screen and (min-width:1200px) and (max-width:1919px){.hidden-lg-only{display:none!important}}@media only screen and (max-width:1919px){.hidden-lg-and-down{display:none!important}}@media only screen and (min-width:1920px){.hidden-xl-only{display:none!important}} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/dropdown-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuyeah/sprov-ui/64d06d4eb11a74420411eaa369becfec4750002d/src/main/resources/static/res/element-ui/theme-chalk/dropdown-item.css -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/dropdown-menu.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuyeah/sprov-ui/64d06d4eb11a74420411eaa369becfec4750002d/src/main/resources/static/res/element-ui/theme-chalk/dropdown-menu.css -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/fonts/element-icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuyeah/sprov-ui/64d06d4eb11a74420411eaa369becfec4750002d/src/main/resources/static/res/element-ui/theme-chalk/fonts/element-icons.ttf -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/fonts/element-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuyeah/sprov-ui/64d06d4eb11a74420411eaa369becfec4750002d/src/main/resources/static/res/element-ui/theme-chalk/fonts/element-icons.woff -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/footer.css: -------------------------------------------------------------------------------- 1 | .el-footer{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/form-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuyeah/sprov-ui/64d06d4eb11a74420411eaa369becfec4750002d/src/main/resources/static/res/element-ui/theme-chalk/form-item.css -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/form.css: -------------------------------------------------------------------------------- 1 | .el-form--inline .el-form-item,.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form-item::after,.el-form-item__content::after{clear:both}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px}.el-form--inline .el-form-item{margin-right:10px}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form-item__content .el-input-group,.el-form-item__label{vertical-align:middle}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item::after,.el-form-item::before{display:table;content:""}.el-form-item .el-form-item{margin-bottom:0}.el-form-item--mini.el-form-item,.el-form-item--small.el-form-item{margin-bottom:18px}.el-form-item .el-input__validateIcon{display:none}.el-form-item--medium .el-form-item__content,.el-form-item--medium .el-form-item__label{line-height:36px}.el-form-item--small .el-form-item__content,.el-form-item--small .el-form-item__label{line-height:32px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--mini .el-form-item__content,.el-form-item--mini .el-form-item__label{line-height:28px}.el-form-item--mini .el-form-item__error{padding-top:1px}.el-form-item__label{text-align:right;float:left;font-size:14px;color:#606266;line-height:40px;padding:0 12px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-form-item__content{line-height:40px;position:relative;font-size:14px}.el-form-item__content::after,.el-form-item__content::before{display:table;content:""}.el-form-item__error{color:#f56c6c;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required .el-form-item__label:before{content:'*';color:#f56c6c;margin-right:4px}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-input__inner:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus{border-color:#f56c6c}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__validateIcon{color:#f56c6c}.el-form-item.is-success .el-input__inner,.el-form-item.is-success .el-input__inner:focus,.el-form-item.is-success .el-textarea__inner,.el-form-item.is-success .el-textarea__inner:focus{border-color:#67c23a}.el-form-item.is-success .el-input-group__append .el-input__inner,.el-form-item.is-success .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-success .el-input__validateIcon{color:#67c23a}.el-form-item--feedback .el-input__validateIcon{display:inline-block} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/header.css: -------------------------------------------------------------------------------- 1 | .el-header{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/loading.css: -------------------------------------------------------------------------------- 1 | .el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:rgba(255,255,255,.9);margin:0;top:0;right:0;bottom:0;left:0;-webkit-transition:opacity .3s;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-loading-spinner .el-loading-text{color:#409EFF;margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#409EFF;stroke-linecap:round}.el-loading-spinner i{color:#409EFF}.el-loading-fade-enter,.el-loading-fade-leave-active{opacity:0}@-webkit-keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/main.css: -------------------------------------------------------------------------------- 1 | .el-main{display:block;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;padding:20px} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/menu-item-group.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuyeah/sprov-ui/64d06d4eb11a74420411eaa369becfec4750002d/src/main/resources/static/res/element-ui/theme-chalk/menu-item-group.css -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/menu-item.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuyeah/sprov-ui/64d06d4eb11a74420411eaa369becfec4750002d/src/main/resources/static/res/element-ui/theme-chalk/menu-item.css -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/message.css: -------------------------------------------------------------------------------- 1 | .el-message__closeBtn:focus,.el-message__content:focus{outline-width:0}.el-message{min-width:380px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;border-width:1px;border-style:solid;border-color:#ebeef5;position:fixed;left:50%;top:20px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#edf2fc;-webkit-transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,-webkit-transform .4s;transition:opacity .3s,transform .4s;transition:opacity .3s,transform .4s,-webkit-transform .4s;overflow:hidden;padding:15px 15px 15px 20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-message.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message.is-closable .el-message__content{padding-right:16px}.el-message p{margin:0}.el-message--info .el-message__content{color:#909399}.el-message--success{background-color:#f0f9eb;border-color:#e1f3d8}.el-message--success .el-message__content{color:#67c23a}.el-message--warning{background-color:#fdf6ec;border-color:#faecd8}.el-message--warning .el-message__content{color:#e6a23c}.el-message--error{background-color:#fef0f0;border-color:#fde2e2}.el-message--error .el-message__content{color:#f56c6c}.el-message__icon{margin-right:10px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__closeBtn{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:#c0c4cc;font-size:16px}.el-message__closeBtn:hover{color:#909399}.el-message .el-icon-success{color:#67c23a}.el-message .el-icon-error{color:#f56c6c}.el-message .el-icon-info{color:#909399}.el-message .el-icon-warning{color:#e6a23c}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/notification.css: -------------------------------------------------------------------------------- 1 | .el-notification{display:-webkit-box;display:-ms-flexbox;display:flex;width:330px;padding:14px 26px 14px 13px;border-radius:8px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #ebeef5;position:fixed;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;overflow:hidden}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{margin-left:13px}.el-notification__title{font-weight:700;font-size:16px;color:#303133;margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0;color:#606266;text-align:justify}.el-notification__content p{margin:0}.el-notification__icon{height:24px;width:24px;font-size:24px}.el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:#909399;font-size:16px}.el-notification__closeBtn:hover{color:#606266}.el-notification .el-icon-success{color:#67c23a}.el-notification .el-icon-error{color:#f56c6c}.el-notification .el-icon-info{color:#909399}.el-notification .el-icon-warning{color:#e6a23c}.el-notification-fade-enter.right{right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.el-notification-fade-enter.left{left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.el-notification-fade-leave-active{opacity:0} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/option-group.css: -------------------------------------------------------------------------------- 1 | .el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type)::after{content:'';position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#e4e7ed}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/option.css: -------------------------------------------------------------------------------- 1 | .el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:34px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#fff}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#f5f7fa}.el-select-dropdown__item.selected{color:#409EFF;font-weight:700} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/popover.css: -------------------------------------------------------------------------------- 1 | .el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-popover{position:absolute;background:#fff;min-width:150px;border-radius:4px;border:1px solid #ebeef5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-popover--plain{padding:18px 20px}.el-popover__title{color:#303133;font-size:16px;line-height:1;margin-bottom:12px}.el-popover:focus,.el-popover:focus:active,.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing){outline-width:0} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/popper.css: -------------------------------------------------------------------------------- 1 | .el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/progress.css: -------------------------------------------------------------------------------- 1 | .el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle{display:inline-block}.el-progress--circle .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.el-progress--circle .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress-bar,.el-progress-bar__inner::after,.el-progress-bar__innerText{display:inline-block;vertical-align:middle}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:#67c23a}.el-progress.is-success .el-progress__text{color:#67c23a}.el-progress.is-exception .el-progress-bar__inner{background-color:#f56c6c}.el-progress.is-exception .el-progress__text{color:#f56c6c}.el-progress-bar{padding-right:50px;width:100%;margin-right:-55px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#ebeef5;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#409EFF;text-align:right;border-radius:100px;line-height:1;white-space:nowrap}.el-progress-bar__inner::after{content:"";height:100%}.el-progress-bar__innerText{color:#fff;font-size:12px;margin:0 5px}@-webkit-keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}@keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/radio-button.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-radio-button,.el-radio-button__inner{display:inline-block;position:relative;outline:0}.el-radio-button__inner{line-height:1;white-space:nowrap;vertical-align:middle;background:#fff;border:1px solid #dcdfe6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;cursor:pointer;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-radio-button__inner.is-round{padding:12px 20px}.el-radio-button__inner:hover{color:#409EFF}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-radio-button__orig-radio{opacity:0;outline:0;position:absolute;z-index:-1}.el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#fff;background-color:#409EFF;border-color:#409EFF;-webkit-box-shadow:-1px 0 0 0 #409EFF;box-shadow:-1px 0 0 0 #409EFF}.el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#f2f6fc}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px}.el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled){-webkit-box-shadow:0 0 2px 2px #409EFF;box-shadow:0 0 2px 2px #409EFF} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/radio-group.css: -------------------------------------------------------------------------------- 1 | .el-radio-group{display:inline-block;line-height:1;vertical-align:middle;font-size:0} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/radio.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";.el-radio,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.el-radio,.el-radio__input{white-space:nowrap;line-height:1;outline:0}.el-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-radio{color:#606266;font-weight:500;cursor:pointer;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px}.el-radio.is-bordered.is-checked{border-color:#409EFF}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#ebeef5}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#f5f7fa;border-color:#e4e7ed}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--mini.is-bordered .el-radio__label,.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio+.el-radio{margin-left:30px}.el-radio__input{cursor:pointer;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner::after{cursor:not-allowed;background-color:#f5f7fa}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner::after{background-color:#c0c4cc}.el-radio__input.is-disabled+span.el-radio__label{color:#c0c4cc;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#409EFF;background:#409EFF}.el-radio__input.is-checked .el-radio__inner::after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#409EFF}.el-radio__input.is-focus .el-radio__inner{border-color:#409EFF}.el-radio__inner{border:1px solid #dcdfe6;border-radius:100%;width:14px;height:14px;background-color:#fff;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box}.el-radio__inner:hover{border-color:#409EFF}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#fff;content:"";position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #409EFF;box-shadow:0 0 2px 2px #409EFF}.el-radio__label{font-size:14px;padding-left:10px} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/rate.css: -------------------------------------------------------------------------------- 1 | .el-rate__icon,.el-rate__item{position:relative;display:inline-block}.el-rate{height:20px;line-height:1}.el-rate:active,.el-rate:focus{outline-width:0}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:#c0c4cc;-webkit-transition:.3s;transition:.3s}.el-rate__decimal,.el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate__icon.hover{-webkit-transform:scale(1.15);transform:scale(1.15)}.el-rate__decimal{display:inline-block;overflow:hidden}.el-rate__text{font-size:14px;vertical-align:middle} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/reset.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8";body{font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;font-weight:400;font-size:14px;color:#000;-webkit-font-smoothing:antialiased}a{color:#409EFF;text-decoration:none}a:focus,a:hover{color:#66b1ff}a:active{color:#3a8ee6}h1,h2,h3,h4,h5,h6{color:#606266;font-weight:inherit}h1:first-child,h2:first-child,h3:first-child,h4:first-child,h5:first-child,h6:first-child,p:first-child{margin-top:0}h1:last-child,h2:last-child,h3:last-child,h4:last-child,h5:last-child,h6:last-child,p:last-child{margin-bottom:0}h1{font-size:20px}h2{font-size:18px}h3{font-size:16px}h4,h5,h6,p{font-size:inherit}p{line-height:1.8}sub,sup{font-size:13px}small{font-size:12px}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/row.css: -------------------------------------------------------------------------------- 1 | .el-row{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box}.el-row::after,.el-row::before{display:table;content:""}.el-row::after{clear:both}.el-row--flex{display:-webkit-box;display:-ms-flexbox;display:flex}.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-row--flex.is-justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-align-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-row--flex.is-align-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/scrollbar.css: -------------------------------------------------------------------------------- 1 | .el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity 120ms ease-out;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/select-dropdown.css: -------------------------------------------------------------------------------- 1 | .el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-select-dropdown{position:absolute;z-index:1001;border:1px solid #e4e7ed;border-radius:4px;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:5px 0}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#409EFF;background-color:#fff}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#f5f7fa}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:20px;font-family:element-icons;content:"\E611";font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/spinner.css: -------------------------------------------------------------------------------- 1 | .el-time-spinner{width:100%;white-space:nowrap}.el-spinner{display:inline-block;vertical-align:middle}.el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/steps.css: -------------------------------------------------------------------------------- 1 | .el-steps{display:-webkit-box;display:-ms-flexbox;display:flex}.el-steps--simple{padding:13px 8%;border-radius:4px;background:#f5f7fa}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{height:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/submenu.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuyeah/sprov-ui/64d06d4eb11a74420411eaa369becfec4750002d/src/main/resources/static/res/element-ui/theme-chalk/submenu.css -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/switch.css: -------------------------------------------------------------------------------- 1 | .el-switch{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;font-size:14px;line-height:20px;height:20px;vertical-align:middle}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__core,.el-switch__label{display:inline-block;cursor:pointer;vertical-align:middle}.el-switch__label{-webkit-transition:.2s;transition:.2s;height:20px;font-size:14px;font-weight:500;color:#303133}.el-switch__label.is-active{color:#409EFF}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__input:focus~.el-switch__core{outline:#409EFF solid 1px}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:0;border-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#dcdfe6;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s}.el-switch__core:after{content:"";position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:all .3s;transition:all .3s;width:16px;height:16px;background-color:#fff}.el-switch.is-checked .el-switch__core{border-color:#409EFF;background-color:#409EFF}.el-switch.is-checked .el-switch__core::after{left:100%;margin-left:-17px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/tab-pane.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuyeah/sprov-ui/64d06d4eb11a74420411eaa369becfec4750002d/src/main/resources/static/res/element-ui/theme-chalk/tab-pane.css -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/tag.css: -------------------------------------------------------------------------------- 1 | .el-tag{background-color:rgba(64,158,255,.1);display:inline-block;padding:0 10px;height:32px;line-height:30px;font-size:12px;color:#409EFF;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid rgba(64,158,255,.2);white-space:nowrap}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px;color:#409EFF}.el-tag .el-icon-close::before{display:block}.el-tag .el-icon-close:hover{background-color:#409EFF;color:#fff}.el-tag--info,.el-tag--info .el-tag__close{color:#909399}.el-tag--info{background-color:rgba(144,147,153,.1);border-color:rgba(144,147,153,.2)}.el-tag--info.is-hit{border-color:#909399}.el-tag--info .el-tag__close:hover{background-color:#909399;color:#fff}.el-tag--success{background-color:rgba(103,194,58,.1);border-color:rgba(103,194,58,.2);color:#67c23a}.el-tag--success.is-hit{border-color:#67c23a}.el-tag--success .el-tag__close{color:#67c23a}.el-tag--success .el-tag__close:hover{background-color:#67c23a;color:#fff}.el-tag--warning{background-color:rgba(230,162,60,.1);border-color:rgba(230,162,60,.2);color:#e6a23c}.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--warning .el-tag__close:hover{background-color:#e6a23c;color:#fff}.el-tag--danger{background-color:rgba(245,108,108,.1);border-color:rgba(245,108,108,.2);color:#f56c6c}.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--danger .el-tag__close:hover{background-color:#f56c6c;color:#fff}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/theme-chalk/tooltip.css: -------------------------------------------------------------------------------- 1 | .el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing){outline-width:0}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow::after{content:" ";border-width:5px}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#fff}.el-tooltip__popper.is-light{background:#fff;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#fff}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#fff}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#fff}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#fff} -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/transitions/collapse-transition.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | 5 | var _dom = require('element-ui/lib/utils/dom'); 6 | 7 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 8 | 9 | var Transition = function () { 10 | function Transition() { 11 | _classCallCheck(this, Transition); 12 | } 13 | 14 | Transition.prototype.beforeEnter = function beforeEnter(el) { 15 | (0, _dom.addClass)(el, 'collapse-transition'); 16 | if (!el.dataset) el.dataset = {}; 17 | 18 | el.dataset.oldPaddingTop = el.style.paddingTop; 19 | el.dataset.oldPaddingBottom = el.style.paddingBottom; 20 | 21 | el.style.height = '0'; 22 | el.style.paddingTop = 0; 23 | el.style.paddingBottom = 0; 24 | }; 25 | 26 | Transition.prototype.enter = function enter(el) { 27 | el.dataset.oldOverflow = el.style.overflow; 28 | if (el.scrollHeight !== 0) { 29 | el.style.height = el.scrollHeight + 'px'; 30 | el.style.paddingTop = el.dataset.oldPaddingTop; 31 | el.style.paddingBottom = el.dataset.oldPaddingBottom; 32 | } else { 33 | el.style.height = ''; 34 | el.style.paddingTop = el.dataset.oldPaddingTop; 35 | el.style.paddingBottom = el.dataset.oldPaddingBottom; 36 | } 37 | 38 | el.style.overflow = 'hidden'; 39 | }; 40 | 41 | Transition.prototype.afterEnter = function afterEnter(el) { 42 | // for safari: remove class then reset height is necessary 43 | (0, _dom.removeClass)(el, 'collapse-transition'); 44 | el.style.height = ''; 45 | el.style.overflow = el.dataset.oldOverflow; 46 | }; 47 | 48 | Transition.prototype.beforeLeave = function beforeLeave(el) { 49 | if (!el.dataset) el.dataset = {}; 50 | el.dataset.oldPaddingTop = el.style.paddingTop; 51 | el.dataset.oldPaddingBottom = el.style.paddingBottom; 52 | el.dataset.oldOverflow = el.style.overflow; 53 | 54 | el.style.height = el.scrollHeight + 'px'; 55 | el.style.overflow = 'hidden'; 56 | }; 57 | 58 | Transition.prototype.leave = function leave(el) { 59 | if (el.scrollHeight !== 0) { 60 | // for safari: add class after set height, or it will jump to zero height suddenly, weired 61 | (0, _dom.addClass)(el, 'collapse-transition'); 62 | el.style.height = 0; 63 | el.style.paddingTop = 0; 64 | el.style.paddingBottom = 0; 65 | } 66 | }; 67 | 68 | Transition.prototype.afterLeave = function afterLeave(el) { 69 | (0, _dom.removeClass)(el, 'collapse-transition'); 70 | el.style.height = ''; 71 | el.style.overflow = el.dataset.oldOverflow; 72 | el.style.paddingTop = el.dataset.oldPaddingTop; 73 | el.style.paddingBottom = el.dataset.oldPaddingBottom; 74 | }; 75 | 76 | return Transition; 77 | }(); 78 | 79 | exports.default = { 80 | name: 'ElCollapseTransition', 81 | functional: true, 82 | render: function render(h, _ref) { 83 | var children = _ref.children; 84 | 85 | var data = { 86 | on: new Transition() 87 | }; 88 | 89 | return h('transition', data, children); 90 | } 91 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/utils/after-leave.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | 5 | exports.default = function (instance, callback) { 6 | var speed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 300; 7 | var once = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; 8 | 9 | if (!instance || !callback) throw new Error('instance & callback is required'); 10 | var called = false; 11 | var afterLeaveCallback = function afterLeaveCallback() { 12 | if (called) return; 13 | called = true; 14 | if (callback) { 15 | callback.apply(null, arguments); 16 | } 17 | }; 18 | if (once) { 19 | instance.$once('after-leave', afterLeaveCallback); 20 | } else { 21 | instance.$on('after-leave', afterLeaveCallback); 22 | } 23 | setTimeout(function () { 24 | afterLeaveCallback(); 25 | }, speed + 100); 26 | }; 27 | 28 | ; /** 29 | * Bind after-leave event for vue instance. Make sure after-leave is called in any browsers. 30 | * 31 | * @param {Vue} instance Vue instance. 32 | * @param {Function} callback callback of after-leave event 33 | * @param {Number} speed the speed of transition, default value is 300ms 34 | * @param {Boolean} once weather bind after-leave once. default value is false. 35 | */ -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/utils/clickoutside.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | 5 | var _vue = require('vue'); 6 | 7 | var _vue2 = _interopRequireDefault(_vue); 8 | 9 | var _dom = require('element-ui/lib/utils/dom'); 10 | 11 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 12 | 13 | var nodeList = []; 14 | var ctx = '@@clickoutsideContext'; 15 | 16 | var startClick = void 0; 17 | var seed = 0; 18 | 19 | !_vue2.default.prototype.$isServer && (0, _dom.on)(document, 'mousedown', function (e) { 20 | return startClick = e; 21 | }); 22 | 23 | !_vue2.default.prototype.$isServer && (0, _dom.on)(document, 'mouseup', function (e) { 24 | nodeList.forEach(function (node) { 25 | return node[ctx].documentHandler(e, startClick); 26 | }); 27 | }); 28 | 29 | function createDocumentHandler(el, binding, vnode) { 30 | return function () { 31 | var mouseup = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 32 | var mousedown = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 33 | 34 | if (!vnode || !vnode.context || !mouseup.target || !mousedown.target || el.contains(mouseup.target) || el.contains(mousedown.target) || el === mouseup.target || vnode.context.popperElm && (vnode.context.popperElm.contains(mouseup.target) || vnode.context.popperElm.contains(mousedown.target))) return; 35 | 36 | if (binding.expression && el[ctx].methodName && vnode.context[el[ctx].methodName]) { 37 | vnode.context[el[ctx].methodName](); 38 | } else { 39 | el[ctx].bindingFn && el[ctx].bindingFn(); 40 | } 41 | }; 42 | } 43 | 44 | /** 45 | * v-clickoutside 46 | * @desc 点击元素外面才会触发的事件 47 | * @example 48 | * ```vue 49 | *
50 | * ``` 51 | */ 52 | exports.default = { 53 | bind: function bind(el, binding, vnode) { 54 | nodeList.push(el); 55 | var id = seed++; 56 | el[ctx] = { 57 | id: id, 58 | documentHandler: createDocumentHandler(el, binding, vnode), 59 | methodName: binding.expression, 60 | bindingFn: binding.value 61 | }; 62 | }, 63 | update: function update(el, binding, vnode) { 64 | el[ctx].documentHandler = createDocumentHandler(el, binding, vnode); 65 | el[ctx].methodName = binding.expression; 66 | el[ctx].bindingFn = binding.value; 67 | }, 68 | unbind: function unbind(el) { 69 | var len = nodeList.length; 70 | 71 | for (var i = 0; i < len; i++) { 72 | if (nodeList[i][ctx].id === el[ctx].id) { 73 | nodeList.splice(i, 1); 74 | break; 75 | } 76 | } 77 | delete el[ctx]; 78 | } 79 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/utils/menu/aria-menubar.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | 5 | var _ariaMenuitem = require('./aria-menuitem'); 6 | 7 | var _ariaMenuitem2 = _interopRequireDefault(_ariaMenuitem); 8 | 9 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 10 | 11 | var Menu = function Menu(domNode) { 12 | this.domNode = domNode; 13 | this.init(); 14 | }; 15 | 16 | Menu.prototype.init = function () { 17 | var menuChildren = this.domNode.childNodes; 18 | [].filter.call(menuChildren, function (child) { 19 | return child.nodeType === 1; 20 | }).forEach(function (child) { 21 | new _ariaMenuitem2.default(child); // eslint-disable-line 22 | }); 23 | }; 24 | exports.default = Menu; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/utils/menu/aria-menuitem.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | 5 | var _ariaUtils = require('../aria-utils'); 6 | 7 | var _ariaUtils2 = _interopRequireDefault(_ariaUtils); 8 | 9 | var _ariaSubmenu = require('./aria-submenu'); 10 | 11 | var _ariaSubmenu2 = _interopRequireDefault(_ariaSubmenu); 12 | 13 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 14 | 15 | var MenuItem = function MenuItem(domNode) { 16 | this.domNode = domNode; 17 | this.submenu = null; 18 | this.init(); 19 | }; 20 | 21 | MenuItem.prototype.init = function () { 22 | this.domNode.setAttribute('tabindex', '0'); 23 | var menuChild = this.domNode.querySelector('.el-menu'); 24 | if (menuChild) { 25 | this.submenu = new _ariaSubmenu2.default(this, menuChild); 26 | } 27 | this.addListeners(); 28 | }; 29 | 30 | MenuItem.prototype.addListeners = function () { 31 | var _this = this; 32 | 33 | var keys = _ariaUtils2.default.keys; 34 | this.domNode.addEventListener('keydown', function (event) { 35 | var prevDef = false; 36 | switch (event.keyCode) { 37 | case keys.down: 38 | _ariaUtils2.default.triggerEvent(event.currentTarget, 'mouseenter'); 39 | _this.submenu && _this.submenu.gotoSubIndex(0); 40 | prevDef = true; 41 | break; 42 | case keys.up: 43 | _ariaUtils2.default.triggerEvent(event.currentTarget, 'mouseenter'); 44 | _this.submenu && _this.submenu.gotoSubIndex(_this.submenu.subMenuItems.length - 1); 45 | prevDef = true; 46 | break; 47 | case keys.tab: 48 | _ariaUtils2.default.triggerEvent(event.currentTarget, 'mouseleave'); 49 | break; 50 | case keys.enter: 51 | case keys.space: 52 | prevDef = true; 53 | event.currentTarget.click(); 54 | break; 55 | } 56 | if (prevDef) { 57 | event.preventDefault(); 58 | } 59 | }); 60 | }; 61 | 62 | exports.default = MenuItem; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/utils/menu/aria-submenu.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | 5 | var _ariaUtils = require('../aria-utils'); 6 | 7 | var _ariaUtils2 = _interopRequireDefault(_ariaUtils); 8 | 9 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 10 | 11 | var SubMenu = function SubMenu(parent, domNode) { 12 | this.domNode = domNode; 13 | this.parent = parent; 14 | this.subMenuItems = []; 15 | this.subIndex = 0; 16 | this.init(); 17 | }; 18 | 19 | SubMenu.prototype.init = function () { 20 | this.subMenuItems = this.domNode.querySelectorAll('li'); 21 | this.addListeners(); 22 | }; 23 | 24 | SubMenu.prototype.gotoSubIndex = function (idx) { 25 | if (idx === this.subMenuItems.length) { 26 | idx = 0; 27 | } else if (idx < 0) { 28 | idx = this.subMenuItems.length - 1; 29 | } 30 | this.subMenuItems[idx].focus(); 31 | this.subIndex = idx; 32 | }; 33 | 34 | SubMenu.prototype.addListeners = function () { 35 | var _this = this; 36 | 37 | var keys = _ariaUtils2.default.keys; 38 | var parentNode = this.parent.domNode; 39 | Array.prototype.forEach.call(this.subMenuItems, function (el) { 40 | el.addEventListener('keydown', function (event) { 41 | var prevDef = false; 42 | switch (event.keyCode) { 43 | case keys.down: 44 | _this.gotoSubIndex(_this.subIndex + 1); 45 | prevDef = true; 46 | break; 47 | case keys.up: 48 | _this.gotoSubIndex(_this.subIndex - 1); 49 | prevDef = true; 50 | break; 51 | case keys.tab: 52 | _ariaUtils2.default.triggerEvent(parentNode, 'mouseleave'); 53 | break; 54 | case keys.enter: 55 | case keys.space: 56 | prevDef = true; 57 | event.currentTarget.click(); 58 | break; 59 | } 60 | if (prevDef) { 61 | event.preventDefault(); 62 | event.stopPropagation(); 63 | } 64 | return false; 65 | }); 66 | }); 67 | }; 68 | 69 | exports.default = SubMenu; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/utils/merge.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | exports.__esModule = true; 4 | 5 | exports.default = function (target) { 6 | for (var i = 1, j = arguments.length; i < j; i++) { 7 | var source = arguments[i] || {}; 8 | for (var prop in source) { 9 | if (source.hasOwnProperty(prop)) { 10 | var value = source[prop]; 11 | if (value !== undefined) { 12 | target[prop] = value; 13 | } 14 | } 15 | } 16 | } 17 | 18 | return target; 19 | }; 20 | 21 | ; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/utils/resize-event.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.removeResizeListener = exports.addResizeListener = undefined; 5 | 6 | var _resizeObserverPolyfill = require('resize-observer-polyfill'); 7 | 8 | var _resizeObserverPolyfill2 = _interopRequireDefault(_resizeObserverPolyfill); 9 | 10 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 11 | 12 | var isServer = typeof window === 'undefined'; 13 | 14 | /* istanbul ignore next */ 15 | var resizeHandler = function resizeHandler(entries) { 16 | for (var _iterator = entries, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { 17 | var _ref; 18 | 19 | if (_isArray) { 20 | if (_i >= _iterator.length) break; 21 | _ref = _iterator[_i++]; 22 | } else { 23 | _i = _iterator.next(); 24 | if (_i.done) break; 25 | _ref = _i.value; 26 | } 27 | 28 | var entry = _ref; 29 | 30 | var listeners = entry.target.__resizeListeners__ || []; 31 | if (listeners.length) { 32 | listeners.forEach(function (fn) { 33 | fn(); 34 | }); 35 | } 36 | } 37 | }; 38 | 39 | /* istanbul ignore next */ 40 | var addResizeListener = exports.addResizeListener = function addResizeListener(element, fn) { 41 | if (isServer) return; 42 | if (!element.__resizeListeners__) { 43 | element.__resizeListeners__ = []; 44 | element.__ro__ = new _resizeObserverPolyfill2.default(resizeHandler); 45 | element.__ro__.observe(element); 46 | } 47 | element.__resizeListeners__.push(fn); 48 | }; 49 | 50 | /* istanbul ignore next */ 51 | var removeResizeListener = exports.removeResizeListener = function removeResizeListener(element, fn) { 52 | if (!element || !element.__resizeListeners__) return; 53 | element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1); 54 | if (!element.__resizeListeners__.length) { 55 | element.__ro__.disconnect(); 56 | } 57 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/utils/scroll-into-view.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.default = scrollIntoView; 5 | 6 | var _vue = require('vue'); 7 | 8 | var _vue2 = _interopRequireDefault(_vue); 9 | 10 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 11 | 12 | function scrollIntoView(container, selected) { 13 | if (_vue2.default.prototype.$isServer) return; 14 | 15 | if (!selected) { 16 | container.scrollTop = 0; 17 | return; 18 | } 19 | 20 | var offsetParents = []; 21 | var pointer = selected.offsetParent; 22 | while (pointer && container !== pointer && container.contains(pointer)) { 23 | offsetParents.push(pointer); 24 | pointer = pointer.offsetParent; 25 | } 26 | var top = selected.offsetTop + offsetParents.reduce(function (prev, curr) { 27 | return prev + curr.offsetTop; 28 | }, 0); 29 | var bottom = top + selected.offsetHeight; 30 | var viewRectTop = container.scrollTop; 31 | var viewRectBottom = viewRectTop + container.clientHeight; 32 | 33 | if (top < viewRectTop) { 34 | container.scrollTop = top; 35 | } else if (bottom > viewRectBottom) { 36 | container.scrollTop = bottom - container.clientHeight; 37 | } 38 | } -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/utils/scrollbar-width.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | 5 | exports.default = function () { 6 | if (_vue2.default.prototype.$isServer) return 0; 7 | if (scrollBarWidth !== undefined) return scrollBarWidth; 8 | 9 | var outer = document.createElement('div'); 10 | outer.className = 'el-scrollbar__wrap'; 11 | outer.style.visibility = 'hidden'; 12 | outer.style.width = '100px'; 13 | outer.style.position = 'absolute'; 14 | outer.style.top = '-9999px'; 15 | document.body.appendChild(outer); 16 | 17 | var widthNoScroll = outer.offsetWidth; 18 | outer.style.overflow = 'scroll'; 19 | 20 | var inner = document.createElement('div'); 21 | inner.style.width = '100%'; 22 | outer.appendChild(inner); 23 | 24 | var widthWithScroll = inner.offsetWidth; 25 | outer.parentNode.removeChild(outer); 26 | scrollBarWidth = widthNoScroll - widthWithScroll; 27 | 28 | return scrollBarWidth; 29 | }; 30 | 31 | var _vue = require('vue'); 32 | 33 | var _vue2 = _interopRequireDefault(_vue); 34 | 35 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 36 | 37 | var scrollBarWidth = void 0; 38 | 39 | ; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/utils/shared.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | exports.__esModule = true; 4 | exports.isDef = isDef; 5 | exports.isKorean = isKorean; 6 | function isDef(val) { 7 | return val !== undefined && val !== null; 8 | } 9 | function isKorean(text) { 10 | var reg = /([(\uAC00-\uD7AF)|(\u3130-\u318F)])+/gi; 11 | return reg.test(text); 12 | } -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/utils/util.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | exports.noop = noop; 5 | exports.hasOwn = hasOwn; 6 | exports.toObject = toObject; 7 | exports.getPropByPath = getPropByPath; 8 | var hasOwnProperty = Object.prototype.hasOwnProperty; 9 | 10 | function noop() {}; 11 | 12 | function hasOwn(obj, key) { 13 | return hasOwnProperty.call(obj, key); 14 | }; 15 | 16 | function extend(to, _from) { 17 | for (var key in _from) { 18 | to[key] = _from[key]; 19 | } 20 | return to; 21 | }; 22 | 23 | function toObject(arr) { 24 | var res = {}; 25 | for (var i = 0; i < arr.length; i++) { 26 | if (arr[i]) { 27 | extend(res, arr[i]); 28 | } 29 | } 30 | return res; 31 | }; 32 | 33 | var getValueByPath = exports.getValueByPath = function getValueByPath(object, prop) { 34 | prop = prop || ''; 35 | var paths = prop.split('.'); 36 | var current = object; 37 | var result = null; 38 | for (var i = 0, j = paths.length; i < j; i++) { 39 | var path = paths[i]; 40 | if (!current) break; 41 | 42 | if (i === j - 1) { 43 | result = current[path]; 44 | break; 45 | } 46 | current = current[path]; 47 | } 48 | return result; 49 | }; 50 | 51 | function getPropByPath(obj, path, strict) { 52 | var tempObj = obj; 53 | path = path.replace(/\[(\w+)\]/g, '.$1'); 54 | path = path.replace(/^\./, ''); 55 | 56 | var keyArr = path.split('.'); 57 | var i = 0; 58 | for (var len = keyArr.length; i < len - 1; ++i) { 59 | if (!tempObj && !strict) break; 60 | var key = keyArr[i]; 61 | if (key in tempObj) { 62 | tempObj = tempObj[key]; 63 | } else { 64 | if (strict) { 65 | throw new Error('please transfer a valid prop path to form item!'); 66 | } 67 | break; 68 | } 69 | } 70 | return { 71 | o: tempObj, 72 | k: keyArr[i], 73 | v: tempObj ? tempObj[keyArr[i]] : null 74 | }; 75 | }; 76 | 77 | var generateId = exports.generateId = function generateId() { 78 | return Math.floor(Math.random() * 10000); 79 | }; 80 | 81 | var valueEquals = exports.valueEquals = function valueEquals(a, b) { 82 | // see: https://stackoverflow.com/questions/3115982/how-to-check-if-two-arrays-are-equal-with-javascript 83 | if (a === b) return true; 84 | if (!(a instanceof Array)) return false; 85 | if (!(b instanceof Array)) return false; 86 | if (a.length !== b.length) return false; 87 | for (var i = 0; i !== a.length; ++i) { 88 | if (a[i] !== b[i]) return false; 89 | } 90 | return true; 91 | }; 92 | 93 | var escapeRegexpString = exports.escapeRegexpString = function escapeRegexpString() { 94 | var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; 95 | return String(value).replace(/[|\\{}()[\]^$+*?.]/g, '\\$&'); 96 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/element-ui/utils/vdom.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | exports.__esModule = true; 4 | 5 | var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; 6 | 7 | exports.isVNode = isVNode; 8 | exports.getFirstComponentChild = getFirstComponentChild; 9 | 10 | var _util = require('element-ui/lib/utils/util'); 11 | 12 | function isVNode(node) { 13 | return node !== null && (typeof node === 'undefined' ? 'undefined' : _typeof(node)) === 'object' && (0, _util.hasOwn)(node, 'componentOptions'); 14 | }; 15 | 16 | function getFirstComponentChild(children) { 17 | return children && children.filter(function (c) { 18 | return c && c.tag; 19 | })[0]; 20 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/icon/iconfont.css: -------------------------------------------------------------------------------- 1 | @font-face {font-family: "iconfont"; 2 | src: url('iconfont.eot?t=1549864874778'); /* IE9 */ 3 | src: url('iconfont.eot?t=1549864874778#iefix') format('embedded-opentype'), /* IE6-IE8 */ 4 | url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAKMAAsAAAAABjAAAAJAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCCcAo8VgE2AiQDCAsGAAQgBYRtBy4begURBQTJvsC2YY+CMmcGQp7J7LoBAxBy4LeDM1AAAAAAQDx8jdHe391TTarJNZkkR3w6iVAhdaZDiSSiZyrH88t7/wrSoUU2oBFsa86BY2EjVEnu/OpHlvMFTjMkZ1gJEBLPT+iBQ24ehhhLFvFBqPQjlP3j3ulfAQUyH1COcy7qAoy3BrQ3RpEVUMgN08sXNJCPCdTqMSV29w8ujEKvCsS71y8fTM6lKCxaLVTWHCzikwrV6ac7Pobfj7+mo5qkItN5Jy/2ntkfmLj06rGufYSbgI5XIGMKhbioDR0pwchZ7ek2gKIIfvA/1oi9KgX763RmPeiC4eAH7ogACRQw2oCWUQYKjst14r1VNCc8web/F14sfF8EZZ8ZHx4sbM1f84/5jZWRW83i6r9qNfg25RBWFBmqVzcHv4Hds6UIrpamDbKQOWnIOCRgVi0eaVur72NlHeeMhWodZ7ZU6U4hqzaEFtIUVKgzC5WqmRtQa5J+vE4bkhZdgwl7AKHZFZJGXyBr9kAL6QkVOv2gUnPSUOsqvrDOSKxMCNuMPeiMweoGvrBazkTZFTT6bpuy3JDSQIotL6iSUozq6CPNsSUeGBqzAEGBB2XwHLpuACEFNnZZMpnDkiyLujdJ3cBLZOwgqI2hHtAxBixdAZ/wO7NM6fMVyNDnaqOWppy5AZGYNT5QSZQeqC7yezXdyyuxAYOGMQEIJOABZTAPuVwBENbPs6EuJjFHBEIlsmkn+oqk9SXe1+2CWlqeYoqz8tDvJxIAAA==') format('woff2'), 5 | url('iconfont.woff?t=1549864874778') format('woff'), 6 | url('iconfont.ttf?t=1549864874778') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ 7 | url('iconfont.svg?t=1549864874778#iconfont') format('svg'); /* iOS 4.1- */ 8 | } 9 | 10 | .iconfont { 11 | font-family: "iconfont" !important; 12 | font-size: 16px; 13 | font-style: normal; 14 | -webkit-font-smoothing: antialiased; 15 | -moz-osx-font-smoothing: grayscale; 16 | } 17 | 18 | .icon-menu:before { 19 | content: "\e6a9"; 20 | } 21 | 22 | -------------------------------------------------------------------------------- /src/main/resources/static/res/icon/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuyeah/sprov-ui/64d06d4eb11a74420411eaa369becfec4750002d/src/main/resources/static/res/icon/iconfont.eot -------------------------------------------------------------------------------- /src/main/resources/static/res/icon/iconfont.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | Created by iconfont 9 | 10 | 11 | 12 | 13 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /src/main/resources/static/res/icon/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuyeah/sprov-ui/64d06d4eb11a74420411eaa369becfec4750002d/src/main/resources/static/res/icon/iconfont.ttf -------------------------------------------------------------------------------- /src/main/resources/static/res/icon/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yuyeah/sprov-ui/64d06d4eb11a74420411eaa369becfec4750002d/src/main/resources/static/res/icon/iconfont.woff -------------------------------------------------------------------------------- /src/main/resources/static/res/js/axios-init.js: -------------------------------------------------------------------------------- 1 | axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'; 2 | axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; 3 | 4 | axios.interceptors.request.use( 5 | config => { 6 | config.data = Qs.stringify(config.data, { 7 | arrayFormat: 'repeat' 8 | }); 9 | return config; 10 | }, 11 | error => Promise.reject(error) 12 | ); 13 | 14 | function commonSuccess(response, callback) { 15 | let data = response.data; 16 | // if (data && typeof data === 'object') { 17 | // if (data.success === true) { 18 | // Vue.prototype.$message({ 19 | // message: data.msg, 20 | // type: 'success' 21 | // }); 22 | // } else if (data.success === false) { 23 | // Vue.prototype.$message({ 24 | // message: data.msg, 25 | // type: 'error' 26 | // }); 27 | // } 28 | // } 29 | execute(callback, data, response); 30 | } 31 | 32 | function commonError(e, callback) { 33 | console.log(e); 34 | execute(callback, e); 35 | } 36 | 37 | /** 38 | * POST 请求 39 | */ 40 | window.post = options => { 41 | axios.post(options.url, options.data) 42 | .then(response => commonSuccess(response, options.success)) 43 | .catch(e => commonError(e, options.error)); 44 | }; 45 | 46 | /** 47 | * GET 请求 48 | */ 49 | window.get = options => { 50 | axios.get(options.url, options.data) 51 | .then(response => commonSuccess(response, options.success)) 52 | .catch(e => commonError(e, options.error)); 53 | }; -------------------------------------------------------------------------------- /src/main/resources/static/res/js/login.js: -------------------------------------------------------------------------------- 1 | let app = new Vue({ 2 | el: '#app', 3 | data: { 4 | buttonLoading: false, 5 | user: {} 6 | }, 7 | methods: { 8 | login: function () { 9 | this.buttonLoading = true; 10 | post({ 11 | url: '/login', 12 | data: this.user, 13 | success: data => { 14 | this.buttonLoading = false; 15 | if (data.success) { 16 | location.href = basePath + "/v2ray/"; 17 | } else { 18 | this.error(data.msg); 19 | } 20 | }, 21 | error: () => { 22 | this.buttonLoading = false; 23 | this.error('发生网络错误,请检查网络连接'); 24 | } 25 | }); 26 | } 27 | } 28 | }); -------------------------------------------------------------------------------- /src/main/resources/static/res/js/vue-init.js: -------------------------------------------------------------------------------- 1 | Vue.prototype.loading = function (msg) { 2 | return this.$loading({ 3 | lock: true, 4 | text: msg ? msg : '操作中...', 5 | spinner: 'el-icon-loading', 6 | background: 'rgba(0, 0, 0, 0.7)' 7 | }); 8 | }; 9 | 10 | function addProperty(obj) { 11 | if (obj === undefined) { 12 | obj = { center: true }; 13 | } else if (typeof obj === 'object') { 14 | obj.center = true; 15 | } 16 | return obj; 17 | } 18 | 19 | Vue.prototype.alert = function (message, title, options) { 20 | title = addProperty(title); 21 | options = addProperty(options); 22 | return this.$alert(message, title, options); 23 | }; 24 | 25 | Vue.prototype.confirm = function (message, title, options) { 26 | title = addProperty(title); 27 | options = addProperty(options); 28 | options.type = isEmpty(options.type) ? 'warning' : options.type; 29 | return this.$confirm(message, title, options); 30 | }; 31 | 32 | Vue.prototype.prompt = function (message, title, options) { 33 | title = addProperty(title); 34 | options = addProperty(options); 35 | return this.$prompt(message, title, options); 36 | }; 37 | 38 | Vue.prototype.validate = function (form, func) { 39 | this.$refs[form].validate(valid => { 40 | if (valid) { 41 | execute(func); 42 | } 43 | }) 44 | }; 45 | 46 | Vue.prototype.resetFields = function (form) { 47 | this.$refs[form] && this.$refs[form].resetFields(); 48 | }; 49 | 50 | Vue.prototype.sizeFormat = window.sizeFormat; 51 | 52 | Vue.prototype.loading = function () { 53 | this.fullscreenLoading = true; 54 | }; 55 | 56 | Vue.prototype.closeLoading = function () { 57 | this.fullscreenLoading = false; 58 | }; 59 | 60 | Vue.prototype.message = Vue.prototype.$message; 61 | Vue.prototype.success = Vue.prototype.$message.success; 62 | Vue.prototype.error = Vue.prototype.$message.error; 63 | Vue.prototype.info = Vue.prototype.$message.info; -------------------------------------------------------------------------------- /src/main/resources/templates/common/common_head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/main/resources/templates/common/common_js.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 19 |
20 | 21 | -------------------------------------------------------------------------------- /src/main/resources/templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |

17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | {{ buttonLoading ? '登录中...' : '登录' }} 27 | 28 | 29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 | 41 |
42 | 43 | 44 | -------------------------------------------------------------------------------- /src/main/resources/templates/v2ray/clients.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |

12 | v2rayW(Windows): 13 | Github 14 |

15 |

16 | V2RayN(Windows): 17 | Github

18 |

19 | v2rayX(macOS): 20 | Github 21 |

22 |

23 | V2RayU(macOS): 24 | Github 25 |

26 |

27 | Shadowrocket(iOS): 28 | itunes 29 |

30 |

31 | i2Ray(iOS): 32 | itunes 33 |

34 |

35 | Quantumult(iOS): 36 | itunes 37 |

38 |

39 | BifrostV(Android): 40 | Play商店 | 41 | ApkPure 42 |

43 |

44 | V2RayNG(Android): 45 | Play商店 | 46 | Github 47 |

48 |
49 |
50 |
51 |
52 | 53 |
54 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /src/main/resources/templates/v2ray/footer.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Github - sprov-ui
8 |
9 |
10 | 11 | 12 | -------------------------------------------------------------------------------- /src/main/resources/templates/v2ray/header.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 14 | 运行状态 15 | 账号列表 16 | 客户端 17 | 退出 18 | 19 | 22 | 23 | 菜单 24 | 25 | 26 | 运行状态 27 | 账号列表 28 | 客户端 29 | 退出 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /src/main/resources/templates/v2ray/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 重启面板 27 | 一键升级 28 |
29 | 30 | 31 | 32 | 43 | 44 | 45 |
46 |
47 |
48 | 49 |
50 | 51 |
52 | 53 | 54 | --------------------------------------------------------------------------------