From 538b2711e815bcbc49127586de58b309906e5586 Mon Sep 17 00:00:00 2001 From: wangbing Date: Sun, 7 Feb 2021 23:27:26 +0800 Subject: [PATCH] aaaa --- nginx-admin.db3 | Bin 36864 -> 36864 bytes .../wbsite/module/admin/ent/Locations.java | 12 +- .../module/admin/mgr/ServicesManagerImpl.java | 27 +- .../module/admin/mpr/LocationsMapper.xml | 18 +- .../admin/req/LocationsCreateRequest.java | 12 +- .../admin/req/LocationsFindRequest.java | 10 +- .../admin/req/LocationsUpdateRequest.java | 12 +- .../admin/req/ServicesCreateRequest.java | 1 + src/main/resources/nginx-admin.db3 | Bin 36864 -> 36864 bytes .../SQLite_ALL_TABLE.sql | 4 +- .../SQLite_CONFIG.sql | 0 .../SQLite_CONFIG_DATA.sql | 0 .../SQLite_LOCATIONS.sql | 2 +- .../SQLite_SERVICES.sql | 2 +- src/main/resources/pt/nginx-admin.xml | 2 +- src/main/resources/static/img/http.png | Bin 0 -> 13418 bytes src/main/resources/static/img/reload.png | Bin 0 -> 3980 bytes src/main/resources/static/img/reload_.png | Bin 0 -> 3182 bytes src/main/resources/static/img/start.png | Bin 0 -> 2354 bytes src/main/resources/static/img/start_.png | Bin 0 -> 2051 bytes src/main/resources/static/img/stop.png | Bin 0 -> 2174 bytes src/main/resources/static/img/stop_.png | Bin 0 -> 1889 bytes src/main/resources/templates/control/nav.ftl | 23 +- src/main/resources/templates/layout/home.ftl | 15 ++ .../templates/screen/admin/locations.ftl | 43 ++-- .../templates/screen/admin/services.ftl | 15 +- .../resources/templates/screen/helpDev.ftl | 2 +- src/main/resources/templates/screen/home.ftl | 232 ++++++++++++++++++ src/main/resources/templates/screen/index.ftl | 126 ++++++---- .../java/xyz/wbsite/admin/LocationsTest.java | 10 +- 30 files changed, 398 insertions(+), 170 deletions(-) rename src/main/resources/pt/{admina_table => admin_table}/SQLite_ALL_TABLE.sql (97%) rename src/main/resources/pt/{admina_table => admin_table}/SQLite_CONFIG.sql (100%) rename src/main/resources/pt/{admina_table => admin_table}/SQLite_CONFIG_DATA.sql (100%) rename src/main/resources/pt/{admina_table => admin_table}/SQLite_LOCATIONS.sql (95%) rename src/main/resources/pt/{admina_table => admin_table}/SQLite_SERVICES.sql (95%) create mode 100644 src/main/resources/static/img/http.png create mode 100644 src/main/resources/static/img/reload.png create mode 100644 src/main/resources/static/img/reload_.png create mode 100644 src/main/resources/static/img/start.png create mode 100644 src/main/resources/static/img/start_.png create mode 100644 src/main/resources/static/img/stop.png create mode 100644 src/main/resources/static/img/stop_.png diff --git a/nginx-admin.db3 b/nginx-admin.db3 index 0493de4581d4b5ed869c17ee5b3d041bdad75441..c15888f12934bbedb84f70083f92170a43b08fcb 100644 GIT binary patch delta 347 zcmZozz|^pSX@WE(`$QRMS#}0Ji4(m1KNvXJ`55?E`Hym+<2}I{$32yuk5hfKpui-y z&HU_vOq?dH?Bc4bj2+sOGdc5Eg5y11Ca>d=-29nS(2awMzm9?b5Puy|c@clT6B9oh zn>w#BCkHPF2Zu2O1B1}N1v3i*K=kBAEddNq`+J{GnD}J(;^!0E4E0kCjSP$obq$Pk z4a^mcjIE4JtPD+T7=dQU^YSB`G2g`jVaBrsJ6~*H|8!rAKALVLek&7mE}*4M{LdNq zzwkc?I_fsRG7mEwBg`F4+{|p8Kn~bIUZ7G&{!I-0n}7;e@T>X&ZB~_6Wkj|a?CO`h kXS`UqJ*&sdx0P&|`cK`qY delta 158 zcmZozz|^pSX@WE(>qHr6Syl!;i4(m1KNvXJ`5E|F`Hym+<2}I{&pnl$pHpMApul9d z&3x>EOq|B7?Bc4bj2)VjGdS}md-KR_{>&-pwwOggfsK)W9RvS5pxPz;ngNXbY`XHQ zjGP?292^|R3=9lHe^ykM1u(qaJ>$i?B~Nzjel};9hJ}IVf{9EK)VhQ?OLW}6y* J@v}kH0RUr2EolG% diff --git a/src/main/java/xyz/wbsite/module/admin/ent/Locations.java b/src/main/java/xyz/wbsite/module/admin/ent/Locations.java index a08add1..15c20fa 100644 --- a/src/main/java/xyz/wbsite/module/admin/ent/Locations.java +++ b/src/main/java/xyz/wbsite/module/admin/ent/Locations.java @@ -17,11 +17,11 @@ import xyz.wbsite.frame.base.BaseEntity; public class Locations extends BaseEntity { /** - * SERVICE_ID - 服务主键 + * SERVICES_ID - 服务主键 */ @ExcelProperty("服务主键") @ExcelNote("") - private Long serviceId; + private Long servicesId; /** * LOCAL_TITLE - 配置标题 */ @@ -61,12 +61,12 @@ public class Locations extends BaseEntity { @ExcelNote("") private String filterConf; - public Long getServiceId() { - return this.serviceId; + public Long getServicesId() { + return this.servicesId; } - public void setServiceId(Long serviceId) { - this.serviceId = serviceId; + public void setServicesId(Long servicesId) { + this.servicesId = servicesId; } public String getLocalTitle() { diff --git a/src/main/java/xyz/wbsite/module/admin/mgr/ServicesManagerImpl.java b/src/main/java/xyz/wbsite/module/admin/mgr/ServicesManagerImpl.java index 5f7a085..8545099 100644 --- a/src/main/java/xyz/wbsite/module/admin/mgr/ServicesManagerImpl.java +++ b/src/main/java/xyz/wbsite/module/admin/mgr/ServicesManagerImpl.java @@ -52,41 +52,16 @@ public class ServicesManagerImpl implements ServicesManager { return response; } - {// 主机标题唯一检查 - ServicesFindRequest servicesFindRequest = new ServicesFindRequest(); - servicesFindRequest.setTitle(request.getTitle()); - ServicesFindResponse servicesFindResponse = this.find(servicesFindRequest, token); - if (servicesFindResponse.hasError()) { - response.addErrors(servicesFindResponse.getErrors()); - return response; - } else if (servicesFindResponse.getTotalCount() > 0) { - response.addError(ErrorType.UNIQUENESS_ERROR, "[title]主机标题已存在,请检查!"); - return response; - } - } - {// 主机域名唯一检查 ServicesFindRequest servicesFindRequest = new ServicesFindRequest(); servicesFindRequest.setDomain(request.getDomain()); - ServicesFindResponse servicesFindResponse = this.find(servicesFindRequest, token); - if (servicesFindResponse.hasError()) { - response.addErrors(servicesFindResponse.getErrors()); - return response; - } else if (servicesFindResponse.getTotalCount() > 0) { - response.addError(ErrorType.UNIQUENESS_ERROR, "[domain]主机域名已存在,请检查!"); - return response; - } - } - - {// 服务端口唯一检查 - ServicesFindRequest servicesFindRequest = new ServicesFindRequest(); servicesFindRequest.setPort(request.getPort()); ServicesFindResponse servicesFindResponse = this.find(servicesFindRequest, token); if (servicesFindResponse.hasError()) { response.addErrors(servicesFindResponse.getErrors()); return response; } else if (servicesFindResponse.getTotalCount() > 0) { - response.addError(ErrorType.UNIQUENESS_ERROR, "[port]服务端口已存在,请检查!"); + response.addError(ErrorType.UNIQUENESS_ERROR, "虚拟主机已存在,请检查!"); return response; } } diff --git a/src/main/java/xyz/wbsite/module/admin/mpr/LocationsMapper.xml b/src/main/java/xyz/wbsite/module/admin/mpr/LocationsMapper.xml index 9fd48a2..3200af3 100644 --- a/src/main/java/xyz/wbsite/module/admin/mpr/LocationsMapper.xml +++ b/src/main/java/xyz/wbsite/module/admin/mpr/LocationsMapper.xml @@ -7,12 +7,12 @@ "NA_LOCATIONS" - "ID","SERVICE_ID","LOCAL_TITLE","LOCAL_NOTE","LOCAL_PATH","LOCAL_VALID","FILTER","FILTER_CONF","ROW_VERSION","IS_DELETED","CREATE_BY","CREATE_TIME","LAST_UPDATE_BY","LAST_UPDATE_TIME" + "ID","SERVICES_ID","LOCAL_TITLE","LOCAL_NOTE","LOCAL_PATH","LOCAL_VALID","FILTER","FILTER_CONF","ROW_VERSION","IS_DELETED","CREATE_BY","CREATE_TIME","LAST_UPDATE_BY","LAST_UPDATE_TIME" - + @@ -36,7 +36,7 @@ VALUES ( #{request.id}, - #{request.serviceId,jdbcType=BIGINT}, + #{request.servicesId,jdbcType=BIGINT}, #{request.localTitle,jdbcType=VARCHAR}, #{request.localNote,jdbcType=VARCHAR}, #{request.localPath,jdbcType=VARCHAR}, @@ -61,7 +61,7 @@ VALUES #{item.id}, - #{item.serviceId,jdbcType=BIGINT}, + #{item.servicesId,jdbcType=BIGINT}, #{item.localTitle,jdbcType=VARCHAR}, #{item.localNote,jdbcType=VARCHAR}, #{item.localPath,jdbcType=VARCHAR}, @@ -100,7 +100,7 @@ UPDATE SET - SERVICE_ID = #{request.serviceId,jdbcType=BIGINT}, + SERVICES_ID = #{request.servicesId,jdbcType=BIGINT}, LOCAL_TITLE = #{request.localTitle,jdbcType=VARCHAR}, LOCAL_NOTE = #{request.localNote,jdbcType=VARCHAR}, LOCAL_PATH = #{request.localPath,jdbcType=VARCHAR}, @@ -121,8 +121,8 @@ FROM WHERE "IS_DELETED" = 0 - - AND "SERVICE_ID" = #{request.serviceId} + + AND "SERVICES_ID" = #{request.servicesId} AND "LOCAL_TITLE" = #{request.localTitle} @@ -144,8 +144,8 @@ FROM WHERE "IS_DELETED" = 0 - - AND "SERVICE_ID" = #{request.serviceId} + + AND "SERVICES_ID" = #{request.servicesId} AND "LOCAL_TITLE" = #{request.localTitle} diff --git a/src/main/java/xyz/wbsite/module/admin/req/LocationsCreateRequest.java b/src/main/java/xyz/wbsite/module/admin/req/LocationsCreateRequest.java index 76621b2..f1fb030 100644 --- a/src/main/java/xyz/wbsite/module/admin/req/LocationsCreateRequest.java +++ b/src/main/java/xyz/wbsite/module/admin/req/LocationsCreateRequest.java @@ -17,8 +17,8 @@ public class LocationsCreateRequest extends BaseRequest { /** * 服务主键. */ - @NotNull(message = "[serviceId]服务主键不能为NULL") - private Long serviceId; + @NotNull(message = "[servicesId]服务主键不能为NULL") + private Long servicesId; /** * 配置标题. @@ -58,12 +58,12 @@ public class LocationsCreateRequest extends BaseRequest { @Length(min = 0, max = 500, message = "[filterConf]过滤配置长度不合法(0-500)") private String filterConf; - public Long getServiceId() { - return this.serviceId; + public Long getServicesId() { + return this.servicesId; } - public void setServiceId(Long serviceId) { - this.serviceId = serviceId; + public void setServicesId(Long servicesId) { + this.servicesId = servicesId; } public String getLocalTitle() { diff --git a/src/main/java/xyz/wbsite/module/admin/req/LocationsFindRequest.java b/src/main/java/xyz/wbsite/module/admin/req/LocationsFindRequest.java index a57f247..30f22f9 100644 --- a/src/main/java/xyz/wbsite/module/admin/req/LocationsFindRequest.java +++ b/src/main/java/xyz/wbsite/module/admin/req/LocationsFindRequest.java @@ -15,7 +15,7 @@ public class LocationsFindRequest extends BaseFindRequest { /** * 服务主键. */ - private Long serviceId; + private Long servicesId; /** * 配置标题. @@ -62,12 +62,12 @@ public class LocationsFindRequest extends BaseFindRequest { */ private Date endDate; - public Long getServiceId() { - return this.serviceId; + public Long getServicesId() { + return this.servicesId; } - public void setServiceId(Long serviceId) { - this.serviceId = serviceId; + public void setServicesId(Long servicesId) { + this.servicesId = servicesId; } public String getLocalTitle() { diff --git a/src/main/java/xyz/wbsite/module/admin/req/LocationsUpdateRequest.java b/src/main/java/xyz/wbsite/module/admin/req/LocationsUpdateRequest.java index 912f65c..604e880 100644 --- a/src/main/java/xyz/wbsite/module/admin/req/LocationsUpdateRequest.java +++ b/src/main/java/xyz/wbsite/module/admin/req/LocationsUpdateRequest.java @@ -24,8 +24,8 @@ public class LocationsUpdateRequest extends BaseUpdateRequest { /** * 服务主键. */ - @NotNull(message = "[serviceId]服务主键不能为NULL") - private Long serviceId; + @NotNull(message = "[servicesId]服务主键不能为NULL") + private Long servicesId; /** * 配置标题. @@ -73,12 +73,12 @@ public class LocationsUpdateRequest extends BaseUpdateRequest { this.id = id; } - public Long getServiceId() { - return this.serviceId; + public Long getServicesId() { + return this.servicesId; } - public void setServiceId(Long serviceId) { - this.serviceId = serviceId; + public void setServicesId(Long servicesId) { + this.servicesId = servicesId; } public String getLocalTitle() { diff --git a/src/main/java/xyz/wbsite/module/admin/req/ServicesCreateRequest.java b/src/main/java/xyz/wbsite/module/admin/req/ServicesCreateRequest.java index 3b2afd0..7c30178 100644 --- a/src/main/java/xyz/wbsite/module/admin/req/ServicesCreateRequest.java +++ b/src/main/java/xyz/wbsite/module/admin/req/ServicesCreateRequest.java @@ -50,6 +50,7 @@ public class ServicesCreateRequest extends BaseRequest { /** * 是否启用. */ + @NotNull(message = "[valid]是否启用不能为NULL") private Boolean valid; /** diff --git a/src/main/resources/nginx-admin.db3 b/src/main/resources/nginx-admin.db3 index 6fb414735a525acee0a8f41cd705a0041d06e5a7..179f4e30df14edacba0a132185ddbfcd92b14fca 100644 GIT binary patch delta 65 zcmV-H0KWf#paOuP0+4DF4gd}X55)`44af;z3zY{B2`94=5RwM74+l{K2{Z)<7bPVD Xh%1w632p>aUr9uht_T^k^9c=xHa-!6 delta 60 zcmZozz|^pSX+o9|KLZ~t|55I9yeBy0xu>%8b82iB6qwAmnU6h?iPM;sU0hX_u|som Q24~)6ZyuS=pE-Hk0OkM>;Q#;t diff --git a/src/main/resources/pt/admina_table/SQLite_ALL_TABLE.sql b/src/main/resources/pt/admin_table/SQLite_ALL_TABLE.sql similarity index 97% rename from src/main/resources/pt/admina_table/SQLite_ALL_TABLE.sql rename to src/main/resources/pt/admin_table/SQLite_ALL_TABLE.sql index 1883232..b057c8f 100644 --- a/src/main/resources/pt/admina_table/SQLite_ALL_TABLE.sql +++ b/src/main/resources/pt/admin_table/SQLite_ALL_TABLE.sql @@ -10,7 +10,7 @@ CREATE TABLE IF NOT EXISTS NA_SERVICES ( "DOMAIN" VARCHAR(50) NOT NULL, "TYPE" VARCHAR(20) NOT NULL, "PORT" MEDIUMINT NOT NULL, - "VALID" BOOLEAN, + "VALID" BOOLEAN NOT NULL, "FILTER" BOOLEAN NOT NULL, "FILTER_CONF" VARCHAR(500), "ROW_VERSION" BIGINT NOT NULL, @@ -29,7 +29,7 @@ CREATE TABLE IF NOT EXISTS NA_SERVICES ( -- ---------------------------- CREATE TABLE IF NOT EXISTS NA_LOCATIONS ( "ID" BIGINT PRIMARY KEY NOT NULL, - "SERVICE_ID" BIGINT NOT NULL, + "SERVICES_ID" BIGINT NOT NULL, "LOCAL_TITLE" VARCHAR(50) NOT NULL, "LOCAL_NOTE" VARCHAR(250), "LOCAL_PATH" VARCHAR(50) NOT NULL, diff --git a/src/main/resources/pt/admina_table/SQLite_CONFIG.sql b/src/main/resources/pt/admin_table/SQLite_CONFIG.sql similarity index 100% rename from src/main/resources/pt/admina_table/SQLite_CONFIG.sql rename to src/main/resources/pt/admin_table/SQLite_CONFIG.sql diff --git a/src/main/resources/pt/admina_table/SQLite_CONFIG_DATA.sql b/src/main/resources/pt/admin_table/SQLite_CONFIG_DATA.sql similarity index 100% rename from src/main/resources/pt/admina_table/SQLite_CONFIG_DATA.sql rename to src/main/resources/pt/admin_table/SQLite_CONFIG_DATA.sql diff --git a/src/main/resources/pt/admina_table/SQLite_LOCATIONS.sql b/src/main/resources/pt/admin_table/SQLite_LOCATIONS.sql similarity index 95% rename from src/main/resources/pt/admina_table/SQLite_LOCATIONS.sql rename to src/main/resources/pt/admin_table/SQLite_LOCATIONS.sql index 77e10d0..258797a 100644 --- a/src/main/resources/pt/admina_table/SQLite_LOCATIONS.sql +++ b/src/main/resources/pt/admin_table/SQLite_LOCATIONS.sql @@ -6,7 +6,7 @@ -- ---------------------------- CREATE TABLE IF NOT EXISTS NA_LOCATIONS ( "ID" BIGINT PRIMARY KEY NOT NULL, - "SERVICE_ID" BIGINT NOT NULL, + "SERVICES_ID" BIGINT NOT NULL, "LOCAL_TITLE" VARCHAR(50) NOT NULL, "LOCAL_NOTE" VARCHAR(250), "LOCAL_PATH" VARCHAR(50) NOT NULL, diff --git a/src/main/resources/pt/admina_table/SQLite_SERVICES.sql b/src/main/resources/pt/admin_table/SQLite_SERVICES.sql similarity index 95% rename from src/main/resources/pt/admina_table/SQLite_SERVICES.sql rename to src/main/resources/pt/admin_table/SQLite_SERVICES.sql index 72af3c6..b9511eb 100644 --- a/src/main/resources/pt/admina_table/SQLite_SERVICES.sql +++ b/src/main/resources/pt/admin_table/SQLite_SERVICES.sql @@ -10,7 +10,7 @@ CREATE TABLE IF NOT EXISTS NA_SERVICES ( "DOMAIN" VARCHAR(50) NOT NULL, "TYPE" VARCHAR(20) NOT NULL, "PORT" MEDIUMINT NOT NULL, - "VALID" BOOLEAN, + "VALID" BOOLEAN NOT NULL, "FILTER" BOOLEAN NOT NULL, "FILTER_CONF" VARCHAR(500), "ROW_VERSION" BIGINT NOT NULL, diff --git a/src/main/resources/pt/nginx-admin.xml b/src/main/resources/pt/nginx-admin.xml index 13501e7..2efcbed 100644 --- a/src/main/resources/pt/nginx-admin.xml +++ b/src/main/resources/pt/nginx-admin.xml @@ -26,7 +26,7 @@ - + diff --git a/src/main/resources/static/img/http.png b/src/main/resources/static/img/http.png new file mode 100644 index 0000000000000000000000000000000000000000..ab5a15767894f3f5174781f6d1f2201a114abf7b GIT binary patch literal 13418 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 bynM&=gxsE~MnQd?Ap%H?D~MHoGYb5Fn7#p` literal 0 HcmV?d00001 diff --git a/src/main/resources/static/img/reload.png b/src/main/resources/static/img/reload.png new file mode 100644 index 0000000000000000000000000000000000000000..410ab46d68f9ccd2a096db635c4d84bd20d68e33 GIT binary patch literal 3980 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 b;qw0ge}tBkMP14(00000NkvXXu0mjf2J1)x literal 0 HcmV?d00001 diff --git a/src/main/resources/templates/control/nav.ftl b/src/main/resources/templates/control/nav.ftl index ab435e7..34cde4b 100644 --- a/src/main/resources/templates/control/nav.ftl +++ b/src/main/resources/templates/control/nav.ftl @@ -1121,30 +1121,25 @@ toHome: function () { location.href = this.context + "/" }, - // 打开一个新Tab - tabOpen: function (tab) { + // 打开新标签 nav.openTab({title:"",name:"",url:""}) + openTab: function (tab) { if (window.index) { - window.index.addTab(tab) + window.index.openTab(tab) } else if (window.parent.index) { - window.parent.index.addTab(tab) + window.parent.index.openTab(tab) } }, - // 关闭Tab - tabClose: function (tabName) { + // 关闭标签,tabName为空时,关闭当前 + closeTab: function (tabName) { + if (!tabName) { + tabName = window.index.activeTabName + } if (window.index) { window.index.removeTab(tabName) } else if (window.parent.index) { window.parent.index.removeTab(tabName) } }, - // 关闭当前Tab - tabCloseCur: function () { - if (window.index) { - window.index.removeTab(window.index.activeTabName) - } else if (window.parent.index) { - window.parent.index.removeTab(window.parent.index.activeTabName) - } - }, // 全屏 screenFull: function () { if (window.isFull)return; diff --git a/src/main/resources/templates/layout/home.ftl b/src/main/resources/templates/layout/home.ftl index e69de29..ac31e87 100644 --- a/src/main/resources/templates/layout/home.ftl +++ b/src/main/resources/templates/layout/home.ftl @@ -0,0 +1,15 @@ + + + + ${title?default("管理系统")} + + + + + + + +<#include controlHolder("nav")/> +<#include screenHolder()/> + + diff --git a/src/main/resources/templates/screen/admin/locations.ftl b/src/main/resources/templates/screen/admin/locations.ftl index 7b4f8d7..a17e7d8 100644 --- a/src/main/resources/templates/screen/admin/locations.ftl +++ b/src/main/resources/templates/screen/admin/locations.ftl @@ -1,9 +1,6 @@
@@ -60,8 +69,14 @@ 关于 - 开发指导 - 使用指导 + + 开发指导 + + + 使用指导 + @@ -94,13 +109,16 @@ :visible.sync="form.formShow"> - + - + - + @@ -145,18 +163,18 @@ z-index: 99; } - #loadingBar div[role=progressbar] .el-progress-bar__outer{ + #loadingBar div[role=progressbar] .el-progress-bar__outer { background-color: transparent; } - #devMarker{ + #devMarker { position: absolute; bottom: 50px; right: 50px; } - #devMarker:after{ - pointer-events:none; + #devMarker:after { + pointer-events: none; content: attr(marker-value); font-size: 100px; color: rgba(188, 188, 188, 0.5); @@ -257,18 +275,18 @@ line-height: 20px; } - #content,#content .el-tabs__content { + #content, #content .el-tabs__content { padding: 0; height: calc(100% - 40px); } - #content > div,#content .el-tab-pane { + #content > div, #content .el-tab-pane { padding: 0; border: 0; height: 100%; } - #content div[role=tab]{ + #content div[role=tab] { padding: 0 10px; } @@ -282,19 +300,19 @@ prop: { menu: '', tabName: '', - open: <#if prop.open>true<#else>false, - coll: <#if prop.coll>true<#else>false, - tran: <#if prop.tran>true<#else>false, - full: <#if prop.full>true<#else>false + open: <#if prop.open>true<#else>false, + coll: <#if prop.coll>true<#else>false, + tran: <#if prop.tran>true<#else>false, + full: <#if prop.full>true<#else>false }, - barStatus:null, + barStatus: null, barPercent: 0, barInterval: null, - form:{ - formShow:false, - password:'', - newPassword:'', - newPassword_:'' + form: { + formShow: false, + password: '', + newPassword: '', + newPassword_: '' }, formRules: { password: [ @@ -306,22 +324,24 @@ ], newPassword_: [ {required: true, message: '密码确认不能为空', trigger: 'blur'}, - { validator: function (rule, value, callback) { - if (value === '') { - callback(new Error('请再次输入密码')); - } else if (value !== index.form.newPassword) { - callback(new Error('两次输入密码不一致!')); - } else { - callback(); - } - }, trigger: 'blur' } + { + validator: function (rule, value, callback) { + if (value === '') { + callback(new Error('请再次输入密码')); + } else if (value !== index.form.newPassword) { + callback(new Error('两次输入密码不一致!')); + } else { + callback(); + } + }, trigger: 'blur' + } ] }, - resultUnRead:[] + resultUnRead: [] }, methods: { onHome: function () { - this.addTab({ + this.openTab({ title: '首页', name: 'home', url: this.context + '/home.htm' @@ -357,11 +377,15 @@ handleSelect: function (index) { this.prop.menu = index; }, - addTab: function (tab) { + openTab: function (tab) { //查找是否存在该tab var tempTabs = this.tabs.filter(function (tab_) { return tab_.name === tab.name; - }) + }); + //检查url + if (!tab.url.startsWith(this.context)) { + this.tab.url = this.context + this.tab.url; + }; //不存在则添加 if (tempTabs.length <= 0) { this.tabs.push(tab) @@ -387,7 +411,7 @@ return tab.name !== tabName }) }, - onChangePwd:function () { + onChangePwd: function () { this.$refs['form'].validate(function (valid) { if (valid) { new Ajax("wadmin", "user", "changePwd").post(this.form, function (response) { @@ -400,9 +424,9 @@ } }.bind(this)) }, - onLogout: function() { - nav.boxYesNo("退出提示", "是否退出当前登录账户?" ,function (result) { - if (result){ + onLogout: function () { + nav.boxYesNo("退出提示", "是否退出当前登录账户?", function (result) { + if (result) { new Ajax("wframe", "auth", "logout").post({}, function (response) { if (response.errors.length > 0) { nav.e(response.errors[0].message); @@ -415,7 +439,7 @@ }.bind(this)) }, onLogoutForChangePwd: function () { - nav.boxYes("退出提示", "密码修改成功立即重新登录?" ,function (result) { + nav.boxYes("退出提示", "密码修改成功立即重新登录?", function (result) { new Ajax("wadmin", "user").method("logout").post({}, function (response) { if (response.errors.length > 0) { nav.e(response.errors[0].message); @@ -426,7 +450,7 @@ }.bind(this)); }.bind(this)) }, - switchFullScreen:function(){ + switchFullScreen: function () { this.prop.full = !this.prop.full; if (this.prop.full) { nav.screenFull() @@ -455,14 +479,14 @@ var tabs = $.getSessionStorage("tabs"); if (tabs) { this.tabs = JSON.parse(tabs); - }else { + } else { this.onHome(); // 开发模式,默认打开指导页 - if (this.active === 'dev') { - this.addTab({ + if (this.active === 'dev') { + this.openTab({ title: '开发指导', name: 'helpDev', - url: this.context + '/helpDev.htm' + url: '/helpDev.htm' }) } } @@ -479,7 +503,7 @@ }.bind(this)); }, watch: { - "prop.tabName":function () { + "prop.tabName": function () { this.onSaveState(); } } diff --git a/src/test/java/xyz/wbsite/admin/LocationsTest.java b/src/test/java/xyz/wbsite/admin/LocationsTest.java index 1648bb1..24d82c0 100644 --- a/src/test/java/xyz/wbsite/admin/LocationsTest.java +++ b/src/test/java/xyz/wbsite/admin/LocationsTest.java @@ -40,7 +40,7 @@ public class LocationsTest { @Test public void testCreate() { LocationsCreateRequest request = new LocationsCreateRequest(); - request.setServiceId(1L); + request.setServicesId(1L); request.setLocalTitle("配置标题"); request.setLocalNote("配置备注"); request.setLocalPath("配置路径"); @@ -58,7 +58,7 @@ public class LocationsTest { //创建数据 LocationsCreateRequest createRequest = new LocationsCreateRequest(); - createRequest.setServiceId(1L); + createRequest.setServicesId(1L); createRequest.setLocalTitle("配置标题"); createRequest.setLocalNote("配置备注"); createRequest.setLocalPath("配置路径"); @@ -82,7 +82,7 @@ public class LocationsTest { public void testUpdate() { //创建数据 LocationsCreateRequest createRequest = new LocationsCreateRequest(); - createRequest.setServiceId(1L); + createRequest.setServicesId(1L); createRequest.setLocalTitle("配置标题"); createRequest.setLocalNote("配置备注"); createRequest.setLocalPath("配置路径"); @@ -97,7 +97,7 @@ public class LocationsTest { //更新数据 LocationsUpdateRequest request = new LocationsUpdateRequest(); request.setId(createResponse.getId()); - request.setServiceId(1L); + request.setServicesId(1L); request.setLocalTitle("配置标题"); request.setLocalNote("配置备注"); request.setLocalPath("配置路径"); @@ -113,7 +113,7 @@ public class LocationsTest { @Test public void testFind() { LocationsFindRequest request = new LocationsFindRequest(); - request.setServiceId(1L); + request.setServicesId(1L); request.setLocalTitle("配置标题"); request.setLocalPath("配置路径"); request.setLocalValid(true);