pioneer
2 years ago
commit
2421153370
63 changed files with 19715 additions and 0 deletions
@ -0,0 +1,6 @@
|
||||
# open-JSD-9934 |
||||
|
||||
JSD-11642 做目录权限控制,通过不同的url过滤掉不同的目录结构。并且不同url单点过来的平台使用不同的主题样式\ |
||||
免责说明:该源码为第三方爱好者提供,不保证源码和方案的可靠性,也不提供任何形式的源码教学指导和协助!\ |
||||
仅作为开发者学习参考使用!禁止用于任何商业用途!\ |
||||
为保护开发者隐私,开发者信息已隐去!若原开发者希望公开自己的信息,可联系【pioneer】处理。 |
Binary file not shown.
@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
||||
<plugin> |
||||
<id>com.fr.plugin.cpic.home</id> |
||||
<name><![CDATA[cpic-多门户配置]]></name> |
||||
<active>yes</active> |
||||
<version>1.1.4</version> |
||||
<env-version>11.0</env-version> |
||||
<jartime>2021-02-10</jartime> |
||||
<vendor>fr.open</vendor> |
||||
<main-package>com.fr.plugin</main-package> |
||||
<create-day>2022-12-21</create-day> |
||||
<description><![CDATA[2022-12-22 插件初始化]]> |
||||
</description> |
||||
<!-- 功能点 --> |
||||
<function-recorder class="com.fr.plugin.cpic.recorder.FunctionRecoder"/> |
||||
<!-- 生命周期 --> |
||||
<lifecycle-monitor class="com.fr.plugin.cpic.config.CpicLifeCycleMonitor"/> |
||||
<extra-core> |
||||
<!-- 注册Db自定义数据库--> |
||||
<DBAccessProvider class="com.fr.plugin.cpic.db.CpicDBAccessProvider"/> |
||||
</extra-core> |
||||
<extra-decision> |
||||
<!-- 拦截器 --> |
||||
<GlobalRequestFilterProvider class="com.fr.plugin.cpic.filter.EntryFilter"/> |
||||
<GlobalRequestFilterProvider class="com.fr.plugin.cpic.filter.LogoutFilter"/> |
||||
<!-- 新增管理菜单 --> |
||||
<SystemOptionProvider class="com.fr.plugin.cpic.web.CpicHomeOptionProvider"/> |
||||
<!-- 注册Spring的Controller --> |
||||
<ControllerRegisterProvider class="com.fr.plugin.cpic.web.CpicControllerRegisterProvider"/> |
||||
<!-- 注入JS(管理主页) --> |
||||
<WebResourceProvider class="com.fr.plugin.cpic.web.CpicWebResourceProvider"/> |
||||
</extra-decision> |
||||
</plugin> |
@ -0,0 +1,53 @@
|
||||
package com.fr.plugin.cpic.config; |
||||
|
||||
import com.fr.config.*; |
||||
import com.fr.config.holder.Conf; |
||||
import com.fr.config.holder.factory.Holders; |
||||
|
||||
/** |
||||
* 插件参数配置 |
||||
**/ |
||||
@Visualization(category = "cpic-插件设置") |
||||
public class CpicCustomConfig extends DefaultConfiguration { |
||||
|
||||
private static volatile CpicCustomConfig config = null; |
||||
|
||||
public static CpicCustomConfig getInstance() { |
||||
if (config == null) { |
||||
config = ConfigContext.getConfigInstance(CpicCustomConfig.class); |
||||
} |
||||
return config; |
||||
} |
||||
|
||||
// IP白名单
|
||||
@Identifier(value = "ipWhiteValue", name = "IP白名单", description = "IP白名单,支持配置多个,用英文分号(;)分隔,示例:192.168.1.1;192.168.2.*;192.168.3.17-192.168.3.38", status = Status.SHOW) |
||||
private Conf<String> ipWhiteValue = Holders.simple(""); |
||||
|
||||
// 报表快照缓存地址
|
||||
@Identifier(value = "cachePath", name = "报表快照缓存地址", description = "请输入绝对地址,示例:(windows)D:\\cache; (linux)/tmp/cache", status = Status.SHOW) |
||||
private Conf<String> cachePath = Holders.simple(""); |
||||
|
||||
public String getIpWhiteValue() { |
||||
return ipWhiteValue.get(); |
||||
} |
||||
|
||||
public void setIpWhiteValue(String ipWhiteValue) { |
||||
this.ipWhiteValue.set(ipWhiteValue); |
||||
} |
||||
|
||||
public String getCachePath() { |
||||
return cachePath.get(); |
||||
} |
||||
|
||||
public void setCachePath(String cachePath) { |
||||
this.cachePath.set(cachePath); |
||||
} |
||||
|
||||
@Override |
||||
public Object clone() throws CloneNotSupportedException { |
||||
CpicCustomConfig cloned = (CpicCustomConfig) super.clone(); |
||||
cloned.ipWhiteValue = (Conf<String>) ipWhiteValue.clone(); |
||||
cloned.cachePath = (Conf<String>) cachePath.clone(); |
||||
return cloned; |
||||
} |
||||
} |
@ -0,0 +1,18 @@
|
||||
package com.fr.plugin.cpic.config; |
||||
|
||||
import com.fr.plugin.context.PluginContext; |
||||
import com.fr.plugin.observer.inner.AbstractPluginLifecycleMonitor; |
||||
|
||||
public class CpicLifeCycleMonitor extends AbstractPluginLifecycleMonitor { |
||||
@Override |
||||
public void afterRun(PluginContext pluginContext) { |
||||
// 初始化自定义配置
|
||||
CpicCustomConfig.getInstance(); |
||||
} |
||||
|
||||
@Override |
||||
public void beforeStop(PluginContext pluginContext) { |
||||
|
||||
} |
||||
|
||||
} |
@ -0,0 +1,31 @@
|
||||
package com.fr.plugin.cpic.db; |
||||
|
||||
import com.fr.db.fun.impl.AbstractDBAccessProvider; |
||||
import com.fr.plugin.cpic.db.dao.CpicEntryDao; |
||||
import com.fr.plugin.cpic.db.dao.CpicHomeDao; |
||||
import com.fr.plugin.cpic.db.dao.CpicUserDao; |
||||
import com.fr.stable.db.accessor.DBAccessor; |
||||
import com.fr.stable.db.dao.DAOProvider; |
||||
|
||||
public class CpicDBAccessProvider extends AbstractDBAccessProvider { |
||||
|
||||
private static DBAccessor accessor; |
||||
|
||||
public static DBAccessor getAccessor() { |
||||
return accessor; |
||||
} |
||||
|
||||
@Override |
||||
public DAOProvider[] registerDAO() { |
||||
return new DAOProvider[]{ |
||||
CpicHomeDao.DAO, |
||||
CpicEntryDao.DAO, |
||||
CpicUserDao.DAO, |
||||
}; |
||||
} |
||||
|
||||
@Override |
||||
public void onDBAvailable(DBAccessor dbAccessor) { |
||||
accessor = dbAccessor; |
||||
} |
||||
} |
@ -0,0 +1,74 @@
|
||||
package com.fr.plugin.cpic.db.bean; |
||||
|
||||
public class CpicEntryBean { |
||||
|
||||
public CpicEntryBean() { |
||||
} |
||||
|
||||
private String id; |
||||
private String homeId; |
||||
private String homeName; |
||||
private String entryId; |
||||
private String entryName; |
||||
private String del; |
||||
|
||||
public String getId() { |
||||
return id; |
||||
} |
||||
|
||||
public void setId(String id) { |
||||
this.id = id; |
||||
} |
||||
|
||||
public String getHomeId() { |
||||
return homeId; |
||||
} |
||||
|
||||
public void setHomeId(String homeId) { |
||||
this.homeId = homeId; |
||||
} |
||||
|
||||
public String getHomeName() { |
||||
return homeName; |
||||
} |
||||
|
||||
public void setHomeName(String homeName) { |
||||
this.homeName = homeName; |
||||
} |
||||
|
||||
public String getEntryId() { |
||||
return entryId; |
||||
} |
||||
|
||||
public void setEntryId(String entryId) { |
||||
this.entryId = entryId; |
||||
} |
||||
|
||||
public String getEntryName() { |
||||
return entryName; |
||||
} |
||||
|
||||
public void setEntryName(String entryName) { |
||||
this.entryName = entryName; |
||||
} |
||||
|
||||
public String getDel() { |
||||
return del; |
||||
} |
||||
|
||||
public void setDel(String del) { |
||||
this.del = del; |
||||
} |
||||
|
||||
@Override |
||||
public String toString() { |
||||
return "CpicEntryBean{" + |
||||
"id='" + id + '\'' + |
||||
", homeId='" + homeId + '\'' + |
||||
", homeName='" + homeName + '\'' + |
||||
", entryId='" + entryId + '\'' + |
||||
", entryName='" + entryName + '\'' + |
||||
", del='" + del + '\'' + |
||||
'}'; |
||||
} |
||||
} |
@ -0,0 +1,96 @@
|
||||
package com.fr.plugin.cpic.db.bean; |
||||
|
||||
import java.util.Date; |
||||
|
||||
public class CpicHomeBean { |
||||
|
||||
public CpicHomeBean() { |
||||
} |
||||
|
||||
private String id; |
||||
private String name; |
||||
private String themeId; |
||||
private String themeName; |
||||
private String path; |
||||
private String mhpath; |
||||
private String del; |
||||
|
||||
private Date editDate; |
||||
|
||||
public String getId() { |
||||
return id; |
||||
} |
||||
|
||||
public void setId(String id) { |
||||
this.id = id; |
||||
} |
||||
|
||||
public String getName() { |
||||
return name; |
||||
} |
||||
|
||||
public void setName(String name) { |
||||
this.name = name; |
||||
} |
||||
|
||||
public String getThemeId() { |
||||
return themeId; |
||||
} |
||||
|
||||
public void setThemeId(String themeId) { |
||||
this.themeId = themeId; |
||||
} |
||||
|
||||
public String getThemeName() { |
||||
return themeName; |
||||
} |
||||
|
||||
public void setThemeName(String themeName) { |
||||
this.themeName = themeName; |
||||
} |
||||
|
||||
public String getPath() { |
||||
return path; |
||||
} |
||||
|
||||
public void setPath(String path) { |
||||
this.path = path; |
||||
} |
||||
|
||||
public String getMhpath() { |
||||
return mhpath; |
||||
} |
||||
|
||||
public void setMhpath(String mhpath) { |
||||
this.mhpath = mhpath; |
||||
} |
||||
|
||||
public String getDel() { |
||||
return del; |
||||
} |
||||
|
||||
public void setDel(String del) { |
||||
this.del = del; |
||||
} |
||||
|
||||
public Date getEditDate() { |
||||
return editDate; |
||||
} |
||||
|
||||
public void setEditDate(Date editDate) { |
||||
this.editDate = editDate; |
||||
} |
||||
|
||||
@Override |
||||
public String toString() { |
||||
return "CpicHomeBean{" + |
||||
"id='" + id + '\'' + |
||||
", name='" + name + '\'' + |
||||
", themeId='" + themeId + '\'' + |
||||
", themeName='" + themeName + '\'' + |
||||
", path='" + path + '\'' + |
||||
", del='" + del + '\'' + |
||||
", editDate=" + editDate + |
||||
'}'; |
||||
} |
||||
} |
@ -0,0 +1,84 @@
|
||||
package com.fr.plugin.cpic.db.bean; |
||||
|
||||
public class CpicUserBean { |
||||
|
||||
public CpicUserBean() { |
||||
} |
||||
|
||||
private String id; |
||||
private String homeId; |
||||
private String homeName; |
||||
private String userId; |
||||
private String userAccount; |
||||
private String userName; |
||||
private String del; |
||||
|
||||
public String getId() { |
||||
return id; |
||||
} |
||||
|
||||
public void setId(String id) { |
||||
this.id = id; |
||||
} |
||||
|
||||
public String getHomeId() { |
||||
return homeId; |
||||
} |
||||
|
||||
public void setHomeId(String homeId) { |
||||
this.homeId = homeId; |
||||
} |
||||
|
||||
public String getHomeName() { |
||||
return homeName; |
||||
} |
||||
|
||||
public void setHomeName(String homeName) { |
||||
this.homeName = homeName; |
||||
} |
||||
|
||||
public String getUserId() { |
||||
return userId; |
||||
} |
||||
|
||||
public void setUserId(String userId) { |
||||
this.userId = userId; |
||||
} |
||||
|
||||
public String getUserAccount() { |
||||
return userAccount; |
||||
} |
||||
|
||||
public void setUserAccount(String userAccount) { |
||||
this.userAccount = userAccount; |
||||
} |
||||
|
||||
public String getUserName() { |
||||
return userName; |
||||
} |
||||
|
||||
public void setUserName(String userName) { |
||||
this.userName = userName; |
||||
} |
||||
|
||||
public String getDel() { |
||||
return del; |
||||
} |
||||
|
||||
public void setDel(String del) { |
||||
this.del = del; |
||||
} |
||||
|
||||
@Override |
||||
public String toString() { |
||||
return "CpicUserBean{" + |
||||
"id='" + id + '\'' + |
||||
", homeId='" + homeId + '\'' + |
||||
", homeName='" + homeName + '\'' + |
||||
", userId='" + userId + '\'' + |
||||
", userAccount='" + userAccount + '\'' + |
||||
", userName='" + userName + '\'' + |
||||
", del='" + del + '\'' + |
||||
'}'; |
||||
} |
||||
} |
@ -0,0 +1,84 @@
|
||||
package com.fr.plugin.cpic.db.dao; |
||||
|
||||
import com.fanruan.api.util.StringKit; |
||||
import com.fr.plugin.cpic.db.entity.CpicEntryEntity; |
||||
import com.fr.stable.db.dao.BaseDAO; |
||||
import com.fr.stable.db.dao.DAOProvider; |
||||
import com.fr.stable.db.session.DAOSession; |
||||
import com.fr.stable.query.QueryFactory; |
||||
import com.fr.stable.query.condition.QueryCondition; |
||||
import com.fr.stable.query.restriction.RestrictionFactory; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
public class CpicEntryDao extends BaseDAO<CpicEntryEntity> { |
||||
|
||||
public CpicEntryDao(DAOSession daoSession) { |
||||
super(daoSession); |
||||
} |
||||
|
||||
/** |
||||
* 如果重写了getEntityClass方法,就可以不重写其他所有DAO<T>接口中的方法 |
||||
* 推荐只重写getEntityClass方法,保留原写法作为兼容 |
||||
* |
||||
* @return |
||||
*/ |
||||
@Override |
||||
protected Class<CpicEntryEntity> getEntityClass() { |
||||
return CpicEntryEntity.class; |
||||
} |
||||
|
||||
public final static DAOProvider DAO = new DAOProvider() { |
||||
@Override |
||||
public Class getEntityClass() { |
||||
return CpicEntryEntity.class; |
||||
} |
||||
|
||||
@Override |
||||
public Class<? extends BaseDAO> getDAOClass() { |
||||
return CpicEntryDao.class; |
||||
} |
||||
}; |
||||
|
||||
public CpicEntryEntity findById(String id) throws Exception { |
||||
QueryCondition condition = QueryFactory.create(); |
||||
if (StringKit.isNotBlank(id)) { |
||||
condition.addRestriction(RestrictionFactory.eq("id", id)); |
||||
condition.addRestriction(RestrictionFactory.eq("del", "0")); |
||||
} else { |
||||
return null; |
||||
} |
||||
return findOne(condition); |
||||
} |
||||
|
||||
public List<CpicEntryEntity> findEntryList(String homeId) throws Exception { |
||||
QueryCondition condition = QueryFactory.create(); |
||||
if (StringKit.isNotBlank(homeId)) { |
||||
condition.addRestriction(RestrictionFactory.eq("homeId", homeId)); |
||||
condition.addRestriction(RestrictionFactory.eq("del", "0")); |
||||
} else { |
||||
return null; |
||||
} |
||||
return find(condition); |
||||
} |
||||
|
||||
public void realDel(String id) throws Exception { |
||||
QueryCondition condition = QueryFactory.create(); |
||||
if (StringKit.isNotBlank(id)) { |
||||
condition.addRestriction(RestrictionFactory.eq("id", id)); |
||||
remove(condition); |
||||
} |
||||
} |
||||
|
||||
public void logicDelByHomeId(String homeId) throws Exception { |
||||
Map<String, Object> updateParams = new HashMap<>(); |
||||
updateParams.put("del", "1"); |
||||
QueryCondition condition = QueryFactory.create(); |
||||
if (StringKit.isNotBlank(homeId)) { |
||||
condition.addRestriction(RestrictionFactory.eq("homeId", homeId)); |
||||
update(updateParams, condition); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,100 @@
|
||||
package com.fr.plugin.cpic.db.dao; |
||||
|
||||
import com.fanruan.api.util.StringKit; |
||||
import com.fr.plugin.cpic.db.entity.CpicHomeEntity; |
||||
import com.fr.stable.db.dao.BaseDAO; |
||||
import com.fr.stable.db.dao.DAOProvider; |
||||
import com.fr.stable.db.session.DAOSession; |
||||
import com.fr.stable.query.QueryFactory; |
||||
import com.fr.stable.query.condition.QueryCondition; |
||||
import com.fr.stable.query.restriction.RestrictionFactory; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
public class CpicHomeDao extends BaseDAO<CpicHomeEntity> { |
||||
|
||||
public CpicHomeDao(DAOSession daoSession) { |
||||
super(daoSession); |
||||
} |
||||
|
||||
/** |
||||
* 如果重写了getEntityClass方法,就可以不重写其他所有DAO<T>接口中的方法 |
||||
* 推荐只重写getEntityClass方法,保留原写法作为兼容 |
||||
* |
||||
* @return |
||||
*/ |
||||
@Override |
||||
protected Class<CpicHomeEntity> getEntityClass() { |
||||
return CpicHomeEntity.class; |
||||
} |
||||
|
||||
public final static DAOProvider DAO = new DAOProvider() { |
||||
@Override |
||||
public Class getEntityClass() { |
||||
return CpicHomeEntity.class; |
||||
} |
||||
|
||||
@Override |
||||
public Class<? extends BaseDAO> getDAOClass() { |
||||
return CpicHomeDao.class; |
||||
} |
||||
}; |
||||
|
||||
public CpicHomeEntity findById(String id) throws Exception { |
||||
QueryCondition condition = QueryFactory.create(); |
||||
if (StringKit.isNotBlank(id)) { |
||||
condition.addRestriction(RestrictionFactory.eq("id", id)); |
||||
condition.addRestriction(RestrictionFactory.eq("del", "0")); |
||||
} else { |
||||
return null; |
||||
} |
||||
return findOne(condition); |
||||
} |
||||
|
||||
public CpicHomeEntity findByName(String name, String id) throws Exception { |
||||
QueryCondition condition = QueryFactory.create(); |
||||
if (StringKit.isNotBlank(id)) { |
||||
condition.addRestriction(RestrictionFactory.neq("id", id)); |
||||
} |
||||
if (StringKit.isNotBlank(name)) { |
||||
condition.addRestriction(RestrictionFactory.eq("name", name)); |
||||
condition.addRestriction(RestrictionFactory.eq("del", "0")); |
||||
} else { |
||||
return null; |
||||
} |
||||
return findOne(condition); |
||||
} |
||||
|
||||
public CpicHomeEntity findByPath(String path, String id) throws Exception { |
||||
QueryCondition condition = QueryFactory.create(); |
||||
if (StringKit.isNotBlank(id)) { |
||||
condition.addRestriction(RestrictionFactory.neq("id", id)); |
||||
} |
||||
if (StringKit.isNotBlank(path)) { |
||||
condition.addRestriction(RestrictionFactory.eq("path", path)); |
||||
condition.addRestriction(RestrictionFactory.eq("del", "0")); |
||||
} else { |
||||
return null; |
||||
} |
||||
return findOne(condition); |
||||
} |
||||
|
||||
public void logicDel(String id) throws Exception { |
||||
Map<String, Object> updateParams = new HashMap<>(); |
||||
updateParams.put("del", "1"); |
||||
QueryCondition condition = QueryFactory.create(); |
||||
if (StringKit.isNotBlank(id)) { |
||||
condition.addRestriction(RestrictionFactory.eq("id", id)); |
||||
update(updateParams, condition); |
||||
} |
||||
} |
||||
|
||||
public List<CpicHomeEntity> findList() throws Exception { |
||||
QueryCondition condition = QueryFactory.create(); |
||||
condition.addRestriction(RestrictionFactory.eq("del", "0")); |
||||
condition.addSort("editDate", true); |
||||
return find(condition); |
||||
} |
||||
} |
@ -0,0 +1,96 @@
|
||||
package com.fr.plugin.cpic.db.dao; |
||||
|
||||
import com.fanruan.api.util.StringKit; |
||||
import com.fr.plugin.cpic.db.entity.CpicUserEntity; |
||||
import com.fr.stable.db.dao.BaseDAO; |
||||
import com.fr.stable.db.dao.DAOProvider; |
||||
import com.fr.stable.db.session.DAOSession; |
||||
import com.fr.stable.query.QueryFactory; |
||||
import com.fr.stable.query.condition.QueryCondition; |
||||
import com.fr.stable.query.restriction.RestrictionFactory; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
public class CpicUserDao extends BaseDAO<CpicUserEntity> { |
||||
|
||||
public CpicUserDao(DAOSession daoSession) { |
||||
super(daoSession); |
||||
} |
||||
|
||||
/** |
||||
* 如果重写了getEntityClass方法,就可以不重写其他所有DAO<T>接口中的方法 |
||||
* 推荐只重写getEntityClass方法,保留原写法作为兼容 |
||||
* |
||||
* @return |
||||
*/ |
||||
@Override |
||||
protected Class<CpicUserEntity> getEntityClass() { |
||||
return CpicUserEntity.class; |
||||
} |
||||
|
||||
public final static DAOProvider DAO = new DAOProvider() { |
||||
@Override |
||||
public Class getEntityClass() { |
||||
return CpicUserEntity.class; |
||||
} |
||||
|
||||
@Override |
||||
public Class<? extends BaseDAO> getDAOClass() { |
||||
return CpicUserDao.class; |
||||
} |
||||
}; |
||||
|
||||
public CpicUserEntity findById(String id) throws Exception { |
||||
QueryCondition condition = QueryFactory.create(); |
||||
if (StringKit.isNotBlank(id)) { |
||||
condition.addRestriction(RestrictionFactory.eq("id", id)); |
||||
condition.addRestriction(RestrictionFactory.eq("del", "0")); |
||||
} else { |
||||
return null; |
||||
} |
||||
return findOne(condition); |
||||
} |
||||
|
||||
public CpicUserEntity findHomeUserByUserId(String homeId, String id) throws Exception { |
||||
QueryCondition condition = QueryFactory.create(); |
||||
if (StringKit.isNotBlank(id)) { |
||||
condition.addRestriction(RestrictionFactory.eq("homeId", homeId)); |
||||
condition.addRestriction(RestrictionFactory.eq("userId", id)); |
||||
condition.addRestriction(RestrictionFactory.eq("del", "0")); |
||||
} else { |
||||
return null; |
||||
} |
||||
return findOne(condition); |
||||
} |
||||
|
||||
public List<CpicUserEntity> findUserList(String homeId) throws Exception { |
||||
QueryCondition condition = QueryFactory.create(); |
||||
if (StringKit.isNotBlank(homeId)) { |
||||
condition.addRestriction(RestrictionFactory.eq("homeId", homeId)); |
||||
condition.addRestriction(RestrictionFactory.eq("del", "0")); |
||||
} else { |
||||
return null; |
||||
} |
||||
return find(condition); |
||||
} |
||||
|
||||
public void realDel(String id) throws Exception { |
||||
QueryCondition condition = QueryFactory.create(); |
||||
if (StringKit.isNotBlank(id)) { |
||||
condition.addRestriction(RestrictionFactory.eq("id", id)); |
||||
remove(condition); |
||||
} |
||||
} |
||||
|
||||
public void logicDelByHomeId(String homeId) throws Exception { |
||||
Map<String, Object> updateParams = new HashMap<>(); |
||||
updateParams.put("del", "1"); |
||||
QueryCondition condition = QueryFactory.create(); |
||||
if (StringKit.isNotBlank(homeId)) { |
||||
condition.addRestriction(RestrictionFactory.eq("homeId", homeId)); |
||||
update(updateParams, condition); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,71 @@
|
||||
package com.fr.plugin.cpic.db.entity; |
||||
|
||||
import com.fr.stable.db.entity.BaseEntity; |
||||
import com.fr.third.javax.persistence.Column; |
||||
import com.fr.third.javax.persistence.Entity; |
||||
import com.fr.third.javax.persistence.Table; |
||||
|
||||
@Entity |
||||
@Table(name = "fine_plugin_cpic_entry") |
||||
public class CpicEntryEntity extends BaseEntity { |
||||
|
||||
private static final long serialVersionUID = -2004581862888013344L; |
||||
|
||||
public CpicEntryEntity() { |
||||
} |
||||
|
||||
@Column(name = "homeId", length = 255) |
||||
private String homeId; |
||||
|
||||
@Column(name = "homeName", length = 255) |
||||
private String homeName; |
||||
|
||||
@Column(name = "entryId", length = 255) |
||||
private String entryId; |
||||
|
||||
@Column(name = "entryName", length = 255) |
||||
private String entryName; |
||||
|
||||
@Column(name = "del", length = 255) |
||||
private String del; |
||||
|
||||
public String getHomeId() { |
||||
return homeId; |
||||
} |
||||
|
||||
public void setHomeId(String homeId) { |
||||
this.homeId = homeId; |
||||
} |
||||
|
||||
public String getHomeName() { |
||||
return homeName; |
||||
} |
||||
|
||||
public void setHomeName(String homeName) { |
||||
this.homeName = homeName; |
||||
} |
||||
|
||||
public String getEntryId() { |
||||
return entryId; |
||||
} |
||||
|
||||
public void setEntryId(String entryId) { |
||||
this.entryId = entryId; |
||||
} |
||||
|
||||
public String getEntryName() { |
||||
return entryName; |
||||
} |
||||
|
||||
public void setEntryName(String entryName) { |
||||
this.entryName = entryName; |
||||
} |
||||
|
||||
public String getDel() { |
||||
return del; |
||||
} |
||||
|
||||
public void setDel(String del) { |
||||
this.del = del; |
||||
} |
||||
} |
@ -0,0 +1,94 @@
|
||||
package com.fr.plugin.cpic.db.entity; |
||||
|
||||
import com.fr.stable.db.entity.BaseEntity; |
||||
import com.fr.third.javax.persistence.Column; |
||||
import com.fr.third.javax.persistence.Entity; |
||||
import com.fr.third.javax.persistence.Table; |
||||
|
||||
import java.util.Date; |
||||
|
||||
@Entity |
||||
@Table(name = "fine_plugin_cpic_home") |
||||
public class CpicHomeEntity extends BaseEntity { |
||||
|
||||
private static final long serialVersionUID = -638785764795126993L; |
||||
|
||||
public CpicHomeEntity() { |
||||
} |
||||
|
||||
@Column(name = "name", length = 255) |
||||
private String name; |
||||
|
||||
@Column(name = "themeId", length = 255) |
||||
private String themeId; |
||||
|
||||
@Column(name = "themeName", length = 255) |
||||
private String themeName; |
||||
|
||||
@Column(name = "path", length = 255) |
||||
private String path; |
||||
@Column(name = "mhpath", length = 255) |
||||
private String mhpath; |
||||
|
||||
@Column(name = "del", length = 255) |
||||
private String del; |
||||
|
||||
@Column(name = "editDate") |
||||
private Date editDate; |
||||
|
||||
public String getName() { |
||||
return name; |
||||
} |
||||
|
||||
public void setName(String name) { |
||||
this.name = name; |
||||
} |
||||
|
||||
public String getThemeId() { |
||||
return themeId; |
||||
} |
||||
|
||||
public void setThemeId(String themeId) { |
||||
this.themeId = themeId; |
||||
} |
||||
|
||||
public String getThemeName() { |
||||
return themeName; |
||||
} |
||||
|
||||
public void setThemeName(String themeName) { |
||||
this.themeName = themeName; |
||||
} |
||||
|
||||
public String getPath() { |
||||
return path; |
||||
} |
||||
|
||||
public void setPath(String path) { |
||||
this.path = path; |
||||
} |
||||
|
||||
public String getMhpath() { |
||||
return mhpath; |
||||
} |
||||
|
||||
public void setMhpath(String mhpath) { |
||||
this.mhpath = mhpath; |
||||
} |
||||
|
||||
public String getDel() { |
||||
return del; |
||||
} |
||||
|
||||
public void setDel(String del) { |
||||
this.del = del; |
||||
} |
||||
|
||||
public Date getEditDate() { |
||||
return editDate; |
||||
} |
||||
|
||||
public void setEditDate(Date editDate) { |
||||
this.editDate = editDate; |
||||
} |
||||
} |
@ -0,0 +1,82 @@
|
||||
package com.fr.plugin.cpic.db.entity; |
||||
|
||||
import com.fr.stable.db.entity.BaseEntity; |
||||
import com.fr.third.javax.persistence.Column; |
||||
import com.fr.third.javax.persistence.Entity; |
||||
import com.fr.third.javax.persistence.Table; |
||||
|
||||
@Entity |
||||
@Table(name = "fine_plugin_cpic_user") |
||||
public class CpicUserEntity extends BaseEntity { |
||||
|
||||
private static final long serialVersionUID = -2986626466229549903L; |
||||
|
||||
public CpicUserEntity() { |
||||
} |
||||
|
||||
@Column(name = "homeId", length = 255) |
||||
private String homeId; |
||||
|
||||
@Column(name = "homeName", length = 255) |
||||
private String homeName; |
||||
|
||||
@Column(name = "userId", length = 255) |
||||
private String userId; |
||||
|
||||
@Column(name = "userAccount", length = 255) |
||||
private String userAccount; |
||||
|
||||
@Column(name = "userName", length = 255) |
||||
private String userName; |
||||
|
||||
@Column(name = "del", length = 255) |
||||
private String del; |
||||
|
||||
public String getHomeId() { |
||||
return homeId; |
||||
} |
||||
|
||||
public void setHomeId(String homeId) { |
||||
this.homeId = homeId; |
||||
} |
||||
|
||||
public String getHomeName() { |
||||
return homeName; |
||||
} |
||||
|
||||
public void setHomeName(String homeName) { |
||||
this.homeName = homeName; |
||||
} |
||||
|
||||
public String getUserId() { |
||||
return userId; |
||||
} |
||||
|
||||
public void setUserId(String userId) { |
||||
this.userId = userId; |
||||
} |
||||
|
||||
public String getUserAccount() { |
||||
return userAccount; |
||||
} |
||||
|
||||
public void setUserAccount(String userAccount) { |
||||
this.userAccount = userAccount; |
||||
} |
||||
|
||||
public String getUserName() { |
||||
return userName; |
||||
} |
||||
|
||||
public void setUserName(String userName) { |
||||
this.userName = userName; |
||||
} |
||||
|
||||
public String getDel() { |
||||
return del; |
||||
} |
||||
|
||||
public void setDel(String del) { |
||||
this.del = del; |
||||
} |
||||
} |
@ -0,0 +1,116 @@
|
||||
package com.fr.plugin.cpic.db.service; |
||||
|
||||
import com.fanruan.api.log.LogKit; |
||||
import com.fanruan.api.util.StringKit; |
||||
import com.fr.plugin.cpic.db.CpicDBAccessProvider; |
||||
import com.fr.plugin.cpic.db.bean.CpicEntryBean; |
||||
import com.fr.plugin.cpic.db.dao.CpicEntryDao; |
||||
import com.fr.plugin.cpic.db.dao.CpicHomeDao; |
||||
import com.fr.plugin.cpic.db.dao.CpicUserDao; |
||||
import com.fr.plugin.cpic.db.entity.CpicEntryEntity; |
||||
import com.fr.stable.core.UUID; |
||||
import com.fr.stable.db.action.DBAction; |
||||
import com.fr.stable.db.dao.DAOContext; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.Collections; |
||||
import java.util.List; |
||||
|
||||
public class CpicEntryService { |
||||
|
||||
/** |
||||
* 新增 |
||||
*/ |
||||
public static void saveOrUpdate(CpicEntryBean bean) { |
||||
try { |
||||
CpicDBAccessProvider.getAccessor().runDMLAction(new DBAction<Boolean>() { |
||||
@Override |
||||
public Boolean run(DAOContext context) throws Exception { |
||||
CpicEntryEntity targetEntity = null; |
||||
// 尝试查询
|
||||
if (bean.getId() != null && StringKit.isNotBlank(bean.getId())) { |
||||
targetEntity = context.getDAO(CpicEntryDao.class).findById(bean.getId()); |
||||
} |
||||
|
||||
if (targetEntity != null) { |
||||
// 更新
|
||||
targetEntity.setHomeId(bean.getHomeId()); |
||||
targetEntity.setHomeName(bean.getHomeName()); |
||||
targetEntity.setEntryId(bean.getEntryId()); |
||||
targetEntity.setEntryName(bean.getEntryName()); |
||||
context.getDAO(CpicEntryDao.class).update(targetEntity); |
||||
} else { |
||||
// 新增
|
||||
targetEntity = new CpicEntryEntity(); |
||||
targetEntity.setId(UUID.randomUUID().toString().toLowerCase()); |
||||
targetEntity.setHomeId(bean.getHomeId()); |
||||
targetEntity.setHomeName(bean.getHomeName()); |
||||
targetEntity.setEntryId(bean.getEntryId()); |
||||
targetEntity.setEntryName(bean.getEntryName()); |
||||
targetEntity.setDel("0"); |
||||
context.getDAO(CpicEntryDao.class).add(targetEntity); |
||||
} |
||||
return true; |
||||
} |
||||
}); |
||||
} catch (Exception e) { |
||||
LogKit.error("新增/更新失败:{}", e.getMessage()); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 查询列表 |
||||
*/ |
||||
public static List<CpicEntryBean> findList(String homeId) { |
||||
try { |
||||
return CpicDBAccessProvider.getAccessor().runQueryAction(new DBAction<List<CpicEntryBean>>() { |
||||
@Override |
||||
public List<CpicEntryBean> run(DAOContext context) throws Exception { |
||||
List<CpicEntryEntity> items = context.getDAO(CpicEntryDao.class).findEntryList(homeId); |
||||
List<CpicEntryBean> result = new ArrayList<>(); |
||||
for (CpicEntryEntity item : items) { |
||||
result.add(entityToBean(item)); |
||||
} |
||||
return result; |
||||
} |
||||
}); |
||||
} catch (Throwable e) { |
||||
LogKit.error("查询失败:{}", e.getMessage()); |
||||
} |
||||
return Collections.emptyList(); |
||||
} |
||||
|
||||
/** |
||||
* 删除 |
||||
* |
||||
* @return |
||||
*/ |
||||
public static void realDel(String id) { |
||||
try { |
||||
CpicDBAccessProvider.getAccessor().runDMLAction(new DBAction<Boolean>() { |
||||
@Override |
||||
public Boolean run(DAOContext context) throws Exception { |
||||
context.getDAO(CpicEntryDao.class).realDel(id); |
||||
return true; |
||||
} |
||||
}); |
||||
} catch (Exception e) { |
||||
LogKit.error("删除失败:{}", e.getMessage()); |
||||
} |
||||
} |
||||
|
||||
public static CpicEntryBean entityToBean(CpicEntryEntity entity) { |
||||
if (null == entity) { |
||||
return null; |
||||
} |
||||
CpicEntryBean bean = new CpicEntryBean(); |
||||
bean.setId(entity.getId()); |
||||
bean.setHomeId(entity.getHomeId()); |
||||
bean.setHomeName(entity.getHomeName()); |
||||
bean.setEntryId(entity.getEntryId()); |
||||
bean.setEntryName(entity.getEntryName()); |
||||
bean.setDel(entity.getDel()); |
||||
return bean; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,177 @@
|
||||
package com.fr.plugin.cpic.db.service; |
||||
|
||||
import com.fanruan.api.log.LogKit; |
||||
import com.fanruan.api.util.StringKit; |
||||
import com.fr.plugin.cpic.db.CpicDBAccessProvider; |
||||
import com.fr.plugin.cpic.db.bean.CpicHomeBean; |
||||
import com.fr.plugin.cpic.db.dao.CpicEntryDao; |
||||
import com.fr.plugin.cpic.db.dao.CpicHomeDao; |
||||
import com.fr.plugin.cpic.db.dao.CpicUserDao; |
||||
import com.fr.plugin.cpic.db.entity.CpicHomeEntity; |
||||
import com.fr.stable.core.UUID; |
||||
import com.fr.stable.db.action.DBAction; |
||||
import com.fr.stable.db.dao.DAOContext; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.Collections; |
||||
import java.util.Date; |
||||
import java.util.List; |
||||
|
||||
public class CpicHomeService { |
||||
|
||||
/** |
||||
* 新增 |
||||
*/ |
||||
public static void saveOrUpdate(CpicHomeBean bean) { |
||||
try { |
||||
CpicDBAccessProvider.getAccessor().runDMLAction(new DBAction<Boolean>() { |
||||
@Override |
||||
public Boolean run(DAOContext context) throws Exception { |
||||
CpicHomeEntity targetEntity = null; |
||||
// 尝试查询
|
||||
if (bean.getId() != null && StringKit.isNotBlank(bean.getId())) { |
||||
targetEntity = context.getDAO(CpicHomeDao.class).findById(bean.getId()); |
||||
} |
||||
|
||||
if (targetEntity != null) { |
||||
// 更新
|
||||
targetEntity.setName(bean.getName()); |
||||
targetEntity.setThemeId(bean.getThemeId()); |
||||
targetEntity.setThemeName(bean.getThemeName()); |
||||
targetEntity.setPath(bean.getPath()); |
||||
targetEntity.setMhpath(bean.getMhpath()); |
||||
targetEntity.setEditDate(new Date()); |
||||
context.getDAO(CpicHomeDao.class).update(targetEntity); |
||||
} else { |
||||
// 新增
|
||||
targetEntity = new CpicHomeEntity(); |
||||
targetEntity.setId(UUID.randomUUID().toString().toLowerCase()); |
||||
targetEntity.setName(bean.getName()); |
||||
targetEntity.setThemeId(bean.getThemeId()); |
||||
targetEntity.setThemeName(bean.getThemeName()); |
||||
targetEntity.setPath(bean.getPath()); |
||||
targetEntity.setMhpath(bean.getMhpath()); |
||||
targetEntity.setDel("0"); |
||||
targetEntity.setEditDate(new Date()); |
||||
context.getDAO(CpicHomeDao.class).add(targetEntity); |
||||
} |
||||
return true; |
||||
} |
||||
}); |
||||
} catch (Exception e) { |
||||
LogKit.error("新增/更新失败:{}", e.getMessage()); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 查询列表 |
||||
*/ |
||||
public static List<CpicHomeBean> findList() { |
||||
try { |
||||
return CpicDBAccessProvider.getAccessor().runQueryAction(new DBAction<List<CpicHomeBean>>() { |
||||
@Override |
||||
public List<CpicHomeBean> run(DAOContext context) throws Exception { |
||||
List<CpicHomeEntity> items = context.getDAO(CpicHomeDao.class).findList(); |
||||
List<CpicHomeBean> result = new ArrayList<>(); |
||||
for (CpicHomeEntity item : items) { |
||||
result.add(entityToBean(item)); |
||||
} |
||||
return result; |
||||
} |
||||
}); |
||||
} catch (Throwable e) { |
||||
LogKit.error("查询失败:{}", e.getMessage()); |
||||
} |
||||
return Collections.emptyList(); |
||||
} |
||||
|
||||
/** |
||||
* 根据id查询 |
||||
*/ |
||||
public static CpicHomeBean findById(String id) { |
||||
try { |
||||
return CpicDBAccessProvider.getAccessor().runQueryAction(new DBAction<CpicHomeBean>() { |
||||
@Override |
||||
public CpicHomeBean run(DAOContext context) throws Exception { |
||||
CpicHomeEntity item = context.getDAO(CpicHomeDao.class).findById(id); |
||||
return entityToBean(item); |
||||
} |
||||
}); |
||||
} catch (Throwable e) { |
||||
LogKit.error("查询失败:{}", e.getMessage()); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
/** |
||||
* 根据name查询 |
||||
*/ |
||||
public static CpicHomeBean findByName(String name, String id) { |
||||
try { |
||||
return CpicDBAccessProvider.getAccessor().runQueryAction(new DBAction<CpicHomeBean>() { |
||||
@Override |
||||
public CpicHomeBean run(DAOContext context) throws Exception { |
||||
CpicHomeEntity item = context.getDAO(CpicHomeDao.class).findByName(name, id); |
||||
return entityToBean(item); |
||||
} |
||||
}); |
||||
} catch (Throwable e) { |
||||
LogKit.error("查询失败:{}", e.getMessage()); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
/** |
||||
* 根据path查询 |
||||
*/ |
||||
public static CpicHomeBean findByPath(String path, String id) { |
||||
try { |
||||
return CpicDBAccessProvider.getAccessor().runQueryAction(new DBAction<CpicHomeBean>() { |
||||
@Override |
||||
public CpicHomeBean run(DAOContext context) throws Exception { |
||||
CpicHomeEntity item = context.getDAO(CpicHomeDao.class).findByPath(path, id); |
||||
return entityToBean(item); |
||||
} |
||||
}); |
||||
} catch (Throwable e) { |
||||
LogKit.error("查询失败:{}", e.getMessage()); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
/** |
||||
* 逻辑删除 |
||||
* |
||||
* @return |
||||
*/ |
||||
public static void logicDel(String id) { |
||||
try { |
||||
CpicDBAccessProvider.getAccessor().runDMLAction(new DBAction<Boolean>() { |
||||
@Override |
||||
public Boolean run(DAOContext context) throws Exception { |
||||
context.getDAO(CpicHomeDao.class).logicDel(id); |
||||
context.getDAO(CpicEntryDao.class).logicDelByHomeId(id); |
||||
context.getDAO(CpicUserDao.class).logicDelByHomeId(id); |
||||
return true; |
||||
} |
||||
}); |
||||
} catch (Exception e) { |
||||
LogKit.error("更新失败:{}", e.getMessage()); |
||||
} |
||||
} |
||||
|
||||
public static CpicHomeBean entityToBean(CpicHomeEntity entity) { |
||||
if (null == entity) { |
||||
return null; |
||||
} |
||||
CpicHomeBean bean = new CpicHomeBean(); |
||||
bean.setId(entity.getId()); |
||||
bean.setName(entity.getName()); |
||||
bean.setThemeId(entity.getThemeId()); |
||||
bean.setThemeName(entity.getThemeName()); |
||||
bean.setPath(null == entity.getPath() ? "" : entity.getPath()); |
||||
bean.setMhpath(null == entity.getMhpath() ? "" : entity.getMhpath()); |
||||
return bean; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,135 @@
|
||||
package com.fr.plugin.cpic.db.service; |
||||
|
||||
import com.fanruan.api.log.LogKit; |
||||
import com.fanruan.api.util.StringKit; |
||||
import com.fr.plugin.cpic.db.CpicDBAccessProvider; |
||||
import com.fr.plugin.cpic.db.bean.CpicUserBean; |
||||
import com.fr.plugin.cpic.db.dao.CpicEntryDao; |
||||
import com.fr.plugin.cpic.db.dao.CpicUserDao; |
||||
import com.fr.plugin.cpic.db.entity.CpicUserEntity; |
||||
import com.fr.stable.core.UUID; |
||||
import com.fr.stable.db.action.DBAction; |
||||
import com.fr.stable.db.dao.DAOContext; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.Collections; |
||||
import java.util.List; |
||||
|
||||
public class CpicUserService { |
||||
|
||||
/** |
||||
* 新增 |
||||
*/ |
||||
public static void saveOrUpdate(CpicUserBean bean) { |
||||
try { |
||||
CpicDBAccessProvider.getAccessor().runDMLAction(new DBAction<Boolean>() { |
||||
@Override |
||||
public Boolean run(DAOContext context) throws Exception { |
||||
CpicUserEntity targetEntity = null; |
||||
// 尝试查询
|
||||
if (bean.getId() != null && StringKit.isNotBlank(bean.getId())) { |
||||
targetEntity = context.getDAO(CpicUserDao.class).findById(bean.getId()); |
||||
} |
||||
|
||||
if (targetEntity != null) { |
||||
// 更新
|
||||
targetEntity.setHomeId(bean.getHomeId()); |
||||
targetEntity.setHomeName(bean.getHomeName()); |
||||
targetEntity.setUserId(bean.getUserId()); |
||||
targetEntity.setUserName(bean.getUserName()); |
||||
targetEntity.setUserAccount(bean.getUserAccount()); |
||||
context.getDAO(CpicUserDao.class).update(targetEntity); |
||||
} else { |
||||
// 新增
|
||||
targetEntity = new CpicUserEntity(); |
||||
targetEntity.setId(UUID.randomUUID().toString().toLowerCase()); |
||||
targetEntity.setHomeId(bean.getHomeId()); |
||||
targetEntity.setHomeName(bean.getHomeName()); |
||||
targetEntity.setUserId(bean.getUserId()); |
||||
targetEntity.setUserName(bean.getUserName()); |
||||
targetEntity.setUserAccount(bean.getUserAccount()); |
||||
targetEntity.setDel("0"); |
||||
context.getDAO(CpicUserDao.class).add(targetEntity); |
||||
} |
||||
return true; |
||||
} |
||||
}); |
||||
} catch (Exception e) { |
||||
LogKit.error("新增/更新失败:{}", e.getMessage()); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 查询用户 |
||||
*/ |
||||
public static CpicUserBean findHomeUserByUserId(String homeId, String userId) { |
||||
try { |
||||
return CpicDBAccessProvider.getAccessor().runQueryAction(new DBAction<CpicUserBean>() { |
||||
@Override |
||||
public CpicUserBean run(DAOContext context) throws Exception { |
||||
CpicUserEntity item = context.getDAO(CpicUserDao.class).findHomeUserByUserId(homeId, userId); |
||||
return entityToBean(item); |
||||
} |
||||
}); |
||||
} catch (Throwable e) { |
||||
LogKit.error("查询失败:{}", e.getMessage()); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
/** |
||||
* 查询列表 |
||||
*/ |
||||
public static List<CpicUserBean> findList(String homeId) { |
||||
try { |
||||
return CpicDBAccessProvider.getAccessor().runQueryAction(new DBAction<List<CpicUserBean>>() { |
||||
@Override |
||||
public List<CpicUserBean> run(DAOContext context) throws Exception { |
||||
List<CpicUserEntity> items = context.getDAO(CpicUserDao.class).findUserList(homeId); |
||||
List<CpicUserBean> result = new ArrayList<>(); |
||||
for (CpicUserEntity item : items) { |
||||
result.add(entityToBean(item)); |
||||
} |
||||
return result; |
||||
} |
||||
}); |
||||
} catch (Throwable e) { |
||||
LogKit.error("查询失败:{}", e.getMessage()); |
||||
} |
||||
return Collections.emptyList(); |
||||
} |
||||
|
||||
/** |
||||
* 删除 |
||||
* |
||||
* @return |
||||
*/ |
||||
public static void realDel(String id) { |
||||
try { |
||||
CpicDBAccessProvider.getAccessor().runDMLAction(new DBAction<Boolean>() { |
||||
@Override |
||||
public Boolean run(DAOContext context) throws Exception { |
||||
context.getDAO(CpicUserDao.class).realDel(id); |
||||
return true; |
||||
} |
||||
}); |
||||
} catch (Exception e) { |
||||
LogKit.error("删除失败:{}", e.getMessage()); |
||||
} |
||||
} |
||||
|
||||
public static CpicUserBean entityToBean(CpicUserEntity entity) { |
||||
if (null == entity) { |
||||
return null; |
||||
} |
||||
CpicUserBean bean = new CpicUserBean(); |
||||
bean.setId(entity.getId()); |
||||
bean.setHomeId(entity.getHomeId()); |
||||
bean.setHomeName(entity.getHomeName()); |
||||
bean.setUserId(entity.getUserId()); |
||||
bean.setUserName(entity.getUserName()); |
||||
bean.setUserAccount(entity.getUserAccount()); |
||||
return bean; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,148 @@
|
||||
package com.fr.plugin.cpic.filter; |
||||
|
||||
import com.fanruan.api.json.JSONKit; |
||||
import com.fanruan.api.log.LogKit; |
||||
import com.fanruan.api.util.StringKit; |
||||
import com.fr.base.ServerConfig; |
||||
import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider; |
||||
import com.fr.decision.webservice.bean.authority.PrivilegeDetailBean; |
||||
import com.fr.decision.webservice.bean.entry.DirectoryBean; |
||||
import com.fr.decision.webservice.bean.entry.EntryBean; |
||||
import com.fr.decision.webservice.v10.entry.EntryService; |
||||
import com.fr.plugin.cpic.db.bean.CpicEntryBean; |
||||
import com.fr.plugin.cpic.db.bean.CpicHomeBean; |
||||
import com.fr.plugin.cpic.db.service.CpicEntryService; |
||||
import com.fr.plugin.cpic.db.service.CpicHomeService; |
||||
import com.fr.plugin.transform.ExecuteFunctionRecord; |
||||
import com.fr.plugin.transform.FunctionRecorder; |
||||
import com.fr.third.org.apache.commons.collections4.CollectionUtils; |
||||
import com.fr.web.utils.WebUtils; |
||||
|
||||
import javax.servlet.FilterChain; |
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
import java.io.PrintWriter; |
||||
import java.util.*; |
||||
|
||||
/** |
||||
* 目录拦截器 |
||||
*/ |
||||
@FunctionRecorder(localeKey = "EntryFilter") |
||||
public class EntryFilter extends AbstractGlobalRequestFilterProvider { |
||||
|
||||
|
||||
@Override |
||||
public String filterName() { |
||||
return "EntryFilter"; |
||||
} |
||||
|
||||
@Override |
||||
public String[] urlPatterns() { |
||||
return new String[]{"/*"}; |
||||
} |
||||
|
||||
@Override |
||||
@ExecuteFunctionRecord |
||||
public void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain filterChain) { |
||||
try { |
||||
// 判断是否拦截
|
||||
// String originalUrl = WebUtils.getOriginalURL(req);
|
||||
String requestURI = req.getRequestURI(); |
||||
if(!requestURI.endsWith("/v10/view/entry/tree") || !req.getMethod().equals("GET")){ |
||||
filterChain.doFilter(req, res); |
||||
return; |
||||
} |
||||
|
||||
// 判断请求来源
|
||||
String referer = req.getHeader("Referer"); |
||||
if (StringKit.isBlank(referer)) { |
||||
filterChain.doFilter(req, res); |
||||
return; |
||||
} |
||||
String[] refererSpArr = referer.split("/"); |
||||
String h1 = ""; |
||||
String h2 = ""; |
||||
if (refererSpArr.length >= 2) { |
||||
h1 = refererSpArr[refererSpArr.length - 2]; |
||||
h2 = refererSpArr[refererSpArr.length - 1]; |
||||
if (StringKit.isBlank(h1) || !StringKit.equals("home", h1)) { |
||||
filterChain.doFilter(req, res); |
||||
return; |
||||
} |
||||
if (StringKit.isBlank(h2)) { |
||||
filterChain.doFilter(req, res); |
||||
return; |
||||
} |
||||
} |
||||
|
||||
// 查询对应home的path是否存在
|
||||
CpicHomeBean homeBean = CpicHomeService.findByPath(h2, ""); |
||||
if (null == homeBean) { |
||||
filterChain.doFilter(req, res); |
||||
return; |
||||
} |
||||
|
||||
// filterChain.doFilter(req, res);
|
||||
|
||||
// 当前门户配置的目录
|
||||
List<CpicEntryBean> cpicEntryBeanList = CpicEntryService.findList(homeBean.getId()); |
||||
LogKit.debug("门户目录: "+JSONKit.createJSONArray(cpicEntryBeanList).toString()); |
||||
// 当前用户配置的目录
|
||||
List<EntryBean> entryBeanList = EntryService.getInstance().getEntryTree(req); |
||||
LogKit.debug("用户目录: "+JSONKit.createJSONArray(entryBeanList).toString()); |
||||
|
||||
// 其中一个为空时交集一定为空,直接返回空
|
||||
if (CollectionUtils.isEmpty(cpicEntryBeanList) || CollectionUtils.isEmpty(entryBeanList)) { |
||||
Map<String, Object> result = new HashMap<>(); |
||||
result.put("data", Collections.EMPTY_LIST); |
||||
PrintWriter printer = res.getWriter(); |
||||
printer.write(JSONKit.create(result).toString()); |
||||
printer.flush(); |
||||
printer.close(); |
||||
} |
||||
|
||||
// 取交集
|
||||
List<EntryBean> resultList = new ArrayList<>(); |
||||
for (EntryBean entry : entryBeanList) { |
||||
CpicEntryBean cpicEntryBean = cpicEntryBeanList.stream().filter(item -> item.getEntryId().equals(entry.getId())).findFirst().orElse(null); |
||||
if (null != cpicEntryBean) { |
||||
resultList.add(entry); |
||||
} |
||||
} |
||||
|
||||
EntryBean root = entryBeanList.stream().filter(item -> "decision-directory-root".equals(item.getId())).findFirst().orElse(null); |
||||
if(null == root){ |
||||
// 手动创建一个根目录
|
||||
root = new DirectoryBean(); |
||||
root.setId("decision-directory-root"); |
||||
root.setText("Dec-Entry_Management"); |
||||
root.setDeviceType(7); |
||||
root.setEntryType(3); |
||||
root.setSortIndex(0); |
||||
root.setIsParent(true); |
||||
root.setOpen(false); |
||||
root.setParentDeviceType(7); |
||||
List<PrivilegeDetailBean> privilegeDetailBeanList = new ArrayList<>(); |
||||
PrivilegeDetailBean privilegeDetailBean = new PrivilegeDetailBean(); |
||||
privilegeDetailBean.setPrivilegeType(1); |
||||
privilegeDetailBean.setPrivilegeValue(3); |
||||
root.setPrivilegeDetailBeanList(privilegeDetailBeanList); |
||||
} |
||||
resultList.add(root); |
||||
|
||||
LogKit.debug("交集目录: "+JSONKit.createJSONArray(resultList).toString()); |
||||
|
||||
res.setContentType("text/html; charset="+ ServerConfig.getInstance().getServerCharset()); |
||||
// 返回数据
|
||||
Map<String, Object> result = new HashMap<>(); |
||||
result.put("data", resultList); |
||||
PrintWriter printer = res.getWriter(); |
||||
printer.write(JSONKit.create(result).toString()); |
||||
printer.flush(); |
||||
printer.close(); |
||||
} catch (Exception e) { |
||||
LogKit.error(e.getMessage()); |
||||
e.printStackTrace(); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,96 @@
|
||||
package com.fr.plugin.cpic.filter; |
||||
|
||||
import com.fanruan.api.log.LogKit; |
||||
import com.fanruan.api.util.StringKit; |
||||
import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider; |
||||
import com.fr.decision.webservice.v10.login.LoginService; |
||||
import com.fr.plugin.cpic.db.bean.CpicHomeBean; |
||||
import com.fr.plugin.cpic.db.service.CpicHomeService; |
||||
import com.fr.plugin.transform.ExecuteFunctionRecord; |
||||
import com.fr.plugin.transform.FunctionRecorder; |
||||
|
||||
import javax.servlet.FilterChain; |
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
|
||||
/** |
||||
* 登出拦截器 |
||||
*/ |
||||
@FunctionRecorder(localeKey = "LogoutFilter") |
||||
public class LogoutFilter extends AbstractGlobalRequestFilterProvider { |
||||
|
||||
|
||||
@Override |
||||
public String filterName() { |
||||
return "LogoutFilter"; |
||||
} |
||||
|
||||
@Override |
||||
public String[] urlPatterns() { |
||||
return new String[]{"/*"}; |
||||
} |
||||
|
||||
@Override |
||||
@ExecuteFunctionRecord |
||||
public void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain filterChain) { |
||||
try { |
||||
// 判断是否拦截
|
||||
// String originalUrl = WebUtils.getOriginalURL(req);
|
||||
String requestURI = req.getRequestURI(); |
||||
if (!requestURI.endsWith("/logout") || !req.getMethod().equals("POST")) { |
||||
filterChain.doFilter(req, res); |
||||
return; |
||||
} |
||||
|
||||
// 判断请求来源
|
||||
String referer = req.getHeader("Referer"); |
||||
if (StringKit.isBlank(referer)) { |
||||
filterChain.doFilter(req, res); |
||||
return; |
||||
} |
||||
String[] refererSpArr = referer.split("/"); |
||||
String h1 = ""; |
||||
String h2 = ""; |
||||
if (refererSpArr.length >= 2) { |
||||
h1 = refererSpArr[refererSpArr.length - 2]; |
||||
h2 = refererSpArr[refererSpArr.length - 1]; |
||||
if (StringKit.isBlank(h1) || !StringKit.equals("home", h1)) { |
||||
filterChain.doFilter(req, res); |
||||
return; |
||||
} |
||||
if (StringKit.isBlank(h2)) { |
||||
filterChain.doFilter(req, res); |
||||
return; |
||||
} |
||||
} |
||||
|
||||
// 查询对应home的path是否存在
|
||||
CpicHomeBean homeBean = CpicHomeService.findByPath(h2, ""); |
||||
if (null == homeBean) { |
||||
filterChain.doFilter(req, res); |
||||
return; |
||||
} |
||||
|
||||
// 登出
|
||||
LoginService.getInstance().logout(req, res); |
||||
|
||||
// 跳转到门户首页
|
||||
this.sendRedirect(res, referer); |
||||
return; |
||||
} catch (Exception e) { |
||||
LogKit.error(e.getMessage()); |
||||
e.printStackTrace(); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 重定向 1 |
||||
* |
||||
* @param res |
||||
* @param url |
||||
*/ |
||||
private void sendRedirect(HttpServletResponse res, String url) { |
||||
res.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY); |
||||
res.setHeader("Location", url); |
||||
} |
||||
} |
@ -0,0 +1,13 @@
|
||||
package com.fr.plugin.cpic.recorder; |
||||
|
||||
import com.fr.plugin.transform.ExecuteFunctionRecord; |
||||
import com.fr.plugin.transform.FunctionRecorder; |
||||
|
||||
@FunctionRecorder |
||||
public class FunctionRecoder { |
||||
|
||||
@ExecuteFunctionRecord |
||||
public void exe() { |
||||
System.out.println("插件功能埋点"); |
||||
} |
||||
} |
@ -0,0 +1,295 @@
|
||||
package com.fr.plugin.cpic.utils; |
||||
|
||||
import com.fanruan.api.json.JSONKit; |
||||
import com.fanruan.api.log.LogKit; |
||||
import com.fanruan.api.util.StringKit; |
||||
import com.fr.decision.authority.data.CustomRole; |
||||
import com.fr.decision.authority.data.Department; |
||||
import com.fr.decision.webservice.bean.entry.EntryBean; |
||||
import com.fr.json.JSONArray; |
||||
import com.fr.plugin.cpic.db.bean.CpicEntryBean; |
||||
import com.fr.plugin.cpic.web.bean.TreeItemBean; |
||||
import com.fr.plugin.cpic.web.bean.UserMenuBean; |
||||
import com.fr.third.org.apache.commons.collections4.CollectionUtils; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
import java.util.stream.Collectors; |
||||
|
||||
public class ConvertUtil { |
||||
|
||||
public static List<TreeItemBean> toTree(List<EntryBean> entryBeanList, List<CpicEntryBean> cpicEntryBeanList) { |
||||
// 转换
|
||||
List<TreeItemBean> items = ConvertUtil.toTreeItems(entryBeanList, cpicEntryBeanList); |
||||
// 生成树
|
||||
List<TreeItemBean> tree = ConvertUtil.toTreeItemBeanList(items); |
||||
return tree; |
||||
} |
||||
|
||||
/** |
||||
* 目录列表转换为List<TreeItemBean> |
||||
* |
||||
* @param entryBeanList |
||||
* @return |
||||
*/ |
||||
public static List<TreeItemBean> toTreeItems(List<EntryBean> entryBeanList, List<CpicEntryBean> cpicEntryBeanList) { |
||||
List<TreeItemBean> list = new ArrayList<>(); |
||||
for (EntryBean entryBean : entryBeanList) { |
||||
TreeItemBean entry = ConvertUtil.toTreeItem(entryBean, cpicEntryBeanList); |
||||
if (null != entry) { |
||||
list.add(entry); |
||||
} |
||||
} |
||||
return list; |
||||
} |
||||
|
||||
/** |
||||
* 转换为TreeItemBean,同时设置是否选中 |
||||
* |
||||
* @param entryBean |
||||
* @param cpicEntryBeanList |
||||
* @return |
||||
*/ |
||||
public static TreeItemBean toTreeItem(EntryBean entryBean, List<CpicEntryBean> cpicEntryBeanList) { |
||||
TreeItemBean item = null; |
||||
if (entryBean != null) { |
||||
item = new TreeItemBean(); |
||||
// 是否根目录
|
||||
if ("decision-directory-root".equals(entryBean.getId())) { |
||||
item.setTitle("根目录"); |
||||
item.setId(entryBean.getId()); |
||||
item.setPid(StringKit.isBlank(entryBean.getpId()) ? "" : entryBean.getpId()); |
||||
item.setField(""); |
||||
item.setHref(""); |
||||
item.setSpread(true); |
||||
item.setChecked(false); |
||||
item.setDisabled(true); |
||||
} else { |
||||
// 查询是否存在配置
|
||||
// CpicEntryBean cpicEntryBean = cpicEntryBeanList.stream().filter(bean -> bean.getEntryId().equals(entryBean.getId())).findFirst().orElse(null);
|
||||
item.setTitle(entryBean.getText()); |
||||
item.setId(entryBean.getId()); |
||||
item.setPid(StringKit.isBlank(entryBean.getpId()) ? "" : entryBean.getpId()); |
||||
item.setField(""); |
||||
item.setHref(""); |
||||
item.setSpread(false); |
||||
item.setChecked(false); |
||||
// if (null == cpicEntryBean) {
|
||||
// } else {
|
||||
// item.setChecked(true);
|
||||
// }
|
||||
item.setDisabled(false); |
||||
} |
||||
} |
||||
return item; |
||||
} |
||||
|
||||
// 返回构建好的树列表
|
||||
public static List<TreeItemBean> toTreeItemBeanList(List<TreeItemBean> allTreeItemBeanList) { |
||||
// 获取所有根节点
|
||||
List<TreeItemBean> treeList = new ArrayList<>(); |
||||
List<String> rootCode = new ArrayList<>(); |
||||
for (TreeItemBean treeItemBean : allTreeItemBeanList) { |
||||
if (rootCode.contains(treeItemBean.getId())) { |
||||
continue; |
||||
} |
||||
// 根据该节点查询根节点
|
||||
TreeItemBean parent = ConvertUtil.getParentCode(allTreeItemBeanList, treeItemBean); |
||||
if (rootCode.contains(parent.getId())) { |
||||
continue; |
||||
} |
||||
treeList.add(parent); |
||||
rootCode.add(parent.getId()); |
||||
} |
||||
|
||||
// 根据所有根节点分别构建树
|
||||
for (TreeItemBean parentItem : treeList) { |
||||
ConvertUtil.buildTree(allTreeItemBeanList, parentItem); |
||||
} |
||||
|
||||
// 输出一下结果
|
||||
JSONArray jsonArray = JSONKit.createJSONArray(treeList); |
||||
LogKit.debug(jsonArray.toString()); |
||||
|
||||
return treeList; |
||||
} |
||||
|
||||
// 构建树
|
||||
private static void buildTree(List<TreeItemBean> allTreeItemBeanList, TreeItemBean parentTreeItemBean) { |
||||
// 查询下级节点
|
||||
List<TreeItemBean> childs = allTreeItemBeanList.stream().filter(item -> item.getPid().equals(parentTreeItemBean.getId())).collect(Collectors.toList()); |
||||
// 下级节点继续构建
|
||||
if (CollectionUtils.isNotEmpty(childs)) { |
||||
for (TreeItemBean treeItemBean : childs) { |
||||
ConvertUtil.buildTree(allTreeItemBeanList, treeItemBean); |
||||
} |
||||
} |
||||
parentTreeItemBean.setChildren(childs); |
||||
} |
||||
|
||||
// 返回根节点
|
||||
private static TreeItemBean getParentCode(List<TreeItemBean> allTreeItemBeanList, TreeItemBean treeItemBean) { |
||||
boolean haveNext = true; |
||||
List<TreeItemBean> parentTreeItemBeans; |
||||
TreeItemBean parentTreeItemBean = treeItemBean; |
||||
while (haveNext) { |
||||
TreeItemBean finalParentTreeItemBean = parentTreeItemBean; |
||||
parentTreeItemBeans = allTreeItemBeanList.stream().filter(item -> item.getId().equals(finalParentTreeItemBean.getPid())).collect(Collectors.toList()); |
||||
if (CollectionUtils.isNotEmpty(parentTreeItemBeans)) { |
||||
// 有父节点
|
||||
parentTreeItemBean = parentTreeItemBeans.get(0); |
||||
} else { |
||||
haveNext = false; |
||||
} |
||||
|
||||
} |
||||
return parentTreeItemBean; |
||||
} |
||||
|
||||
/** |
||||
* 转换list |
||||
* |
||||
* @param tree |
||||
* @return |
||||
*/ |
||||
public static List<CpicEntryBean> itemsToEntrys(List<TreeItemBean> tree) { |
||||
List<CpicEntryBean> result = new ArrayList<>(); |
||||
CpicEntryBean entryBean; |
||||
for (TreeItemBean item : tree) { |
||||
if ("decision-directory-root".equals(item.getId())) { |
||||
continue; |
||||
} |
||||
entryBean = new CpicEntryBean(); |
||||
entryBean.setEntryId(item.getId()); |
||||
entryBean.setEntryName(item.getTitle()); |
||||
result.add(entryBean); |
||||
} |
||||
return result; |
||||
} |
||||
|
||||
/** |
||||
* tree转换为list |
||||
* |
||||
* @param tree |
||||
* @return |
||||
*/ |
||||
public static List<CpicEntryBean> treeToList(List<TreeItemBean> tree) { |
||||
List<CpicEntryBean> result = new ArrayList<>(); |
||||
for (TreeItemBean item : tree) { |
||||
ConvertUtil.buildList(result, item); |
||||
} |
||||
return result; |
||||
} |
||||
|
||||
public static void buildList(List<CpicEntryBean> result, TreeItemBean treeBean) { |
||||
List<TreeItemBean> childrens = treeBean.getChildren(); |
||||
if (CollectionUtils.isNotEmpty(childrens)) { |
||||
CpicEntryBean entryBean; |
||||
for (TreeItemBean item : childrens) { |
||||
ConvertUtil.buildList(result, item); |
||||
entryBean = new CpicEntryBean(); |
||||
entryBean.setEntryId(item.getId()); |
||||
entryBean.setEntryName(item.getTitle()); |
||||
result.add(entryBean); |
||||
} |
||||
} |
||||
} |
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
public static List<UserMenuBean> deptListToMenuList(List<Department> departmentList) { |
||||
// 转换
|
||||
List<UserMenuBean> list = new ArrayList<>(); |
||||
UserMenuBean userMenuBean; |
||||
for (Department department : departmentList) { |
||||
userMenuBean = new UserMenuBean(); |
||||
userMenuBean.setId(department.getId()); |
||||
userMenuBean.setTitle(department.getName()); |
||||
userMenuBean.setMtype("department"); |
||||
userMenuBean.setPid(department.getParentId()); |
||||
list.add(userMenuBean); |
||||
} |
||||
return list; |
||||
} |
||||
public static List<UserMenuBean> roleListToMenuList(List<CustomRole> departmentList) { |
||||
// 转换
|
||||
List<UserMenuBean> list = new ArrayList<>(); |
||||
UserMenuBean userMenuBean; |
||||
for (CustomRole department : departmentList) { |
||||
userMenuBean = new UserMenuBean(); |
||||
userMenuBean.setId(department.getId()); |
||||
userMenuBean.setTitle(department.getName()); |
||||
userMenuBean.setMtype("customrole"); |
||||
// userMenuBean.setPid(department.getParentId());
|
||||
list.add(userMenuBean); |
||||
} |
||||
return list; |
||||
} |
||||
|
||||
public static List<UserMenuBean> departmentListToTree(List<Department> departmentList) { |
||||
// 转换
|
||||
List<UserMenuBean> list = ConvertUtil.deptListToMenuList(departmentList); |
||||
// 生成树
|
||||
List<UserMenuBean> tree = ConvertUtil.departmentListToTreeItemBeanList(list); |
||||
return tree; |
||||
} |
||||
|
||||
private static List<UserMenuBean> departmentListToTreeItemBeanList(List<UserMenuBean> userMenuBeanList) { |
||||
// 获取所有根节点
|
||||
List<UserMenuBean> treeList = new ArrayList<>(); |
||||
List<String> rootCode = new ArrayList<>(); |
||||
for (UserMenuBean treeItemBean : userMenuBeanList) { |
||||
if (rootCode.contains(treeItemBean.getId())) { |
||||
continue; |
||||
} |
||||
// 根据该节点查询根节点
|
||||
UserMenuBean parent = ConvertUtil.getParentCode2(userMenuBeanList, treeItemBean); |
||||
if (rootCode.contains(parent.getId())) { |
||||
continue; |
||||
} |
||||
treeList.add(parent); |
||||
rootCode.add(parent.getId()); |
||||
} |
||||
|
||||
// 根据所有根节点分别构建树
|
||||
for (UserMenuBean parentItem : treeList) { |
||||
ConvertUtil.buildTree2(userMenuBeanList, parentItem); |
||||
} |
||||
return treeList; |
||||
} |
||||
|
||||
// 返回根节点
|
||||
private static UserMenuBean getParentCode2(List<UserMenuBean> allTreeItemBeanList, UserMenuBean treeItemBean) { |
||||
boolean haveNext = true; |
||||
List<UserMenuBean> parentTreeItemBeans; |
||||
UserMenuBean parentTreeItemBean = treeItemBean; |
||||
while (haveNext) { |
||||
UserMenuBean finalParentTreeItemBean = parentTreeItemBean; |
||||
parentTreeItemBeans = allTreeItemBeanList.stream().filter(item -> item.getId().equals(finalParentTreeItemBean.getPid())).collect(Collectors.toList()); |
||||
if (CollectionUtils.isNotEmpty(parentTreeItemBeans)) { |
||||
// 有父节点
|
||||
parentTreeItemBean = parentTreeItemBeans.get(0); |
||||
} else { |
||||
haveNext = false; |
||||
} |
||||
|
||||
} |
||||
return parentTreeItemBean; |
||||
} |
||||
|
||||
// 构建树
|
||||
private static void buildTree2(List<UserMenuBean> allTreeItemBeanList, UserMenuBean parentTreeItemBean) { |
||||
// 查询下级节点
|
||||
List<UserMenuBean> childs = allTreeItemBeanList.stream().filter(item -> item.getPid().equals(parentTreeItemBean.getId())).collect(Collectors.toList()); |
||||
// 下级节点继续构建
|
||||
if (CollectionUtils.isNotEmpty(childs)) { |
||||
for (UserMenuBean treeItemBean : childs) { |
||||
ConvertUtil.buildTree2(allTreeItemBeanList, treeItemBean); |
||||
} |
||||
} |
||||
parentTreeItemBean.setChildren(childs); |
||||
} |
||||
} |
@ -0,0 +1,88 @@
|
||||
package com.fr.plugin.cpic.utils; |
||||
|
||||
|
||||
import java.time.LocalDateTime; |
||||
import java.time.format.DateTimeFormatter; |
||||
import java.util.Calendar; |
||||
import java.util.Date; |
||||
|
||||
public class DateUtils { |
||||
|
||||
/** |
||||
* 返回当前时间 |
||||
* |
||||
* @return |
||||
*/ |
||||
public static String getNowDateStr() { |
||||
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyyMMdd"); |
||||
LocalDateTime date = LocalDateTime.now(); |
||||
return date.format(df); |
||||
} |
||||
|
||||
/** |
||||
* 返回1小时10分钟前时间 |
||||
* |
||||
* @return |
||||
*/ |
||||
public static String get1h10mDateStr() { |
||||
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); |
||||
LocalDateTime date = LocalDateTime.now(); |
||||
date = date.minusHours(1).minusMinutes(10); |
||||
return date.format(df); |
||||
} |
||||
|
||||
/** |
||||
* 返回昨天当前的时间 |
||||
* |
||||
* @return |
||||
*/ |
||||
public static String getYesterdayDateStr() { |
||||
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); |
||||
LocalDateTime date = LocalDateTime.now(); |
||||
date = date.minusDays(1); |
||||
return date.format(df); |
||||
} |
||||
|
||||
/** |
||||
* 返回N天当前的时间 |
||||
* |
||||
* @return |
||||
*/ |
||||
public static String getYesterdayDateStr(int daynum) { |
||||
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); |
||||
LocalDateTime date = LocalDateTime.now(); |
||||
date = date.minusDays(daynum); |
||||
return date.format(df); |
||||
} |
||||
|
||||
/** |
||||
* 返回今天的DATE |
||||
* |
||||
* @return |
||||
*/ |
||||
public static Date getNowDayDate() { |
||||
Calendar calendar1 = Calendar.getInstance(); |
||||
calendar1.setTime(new Date()); |
||||
Calendar calendar2 = Calendar.getInstance(); |
||||
calendar2.set(Calendar.YEAR, calendar1.get(Calendar.YEAR)); |
||||
calendar2.set(Calendar.MONTH, calendar1.get(Calendar.MONTH)); |
||||
calendar2.set(Calendar.DATE, calendar1.get(Calendar.DATE)); |
||||
return calendar2.getTime(); |
||||
} |
||||
|
||||
/** |
||||
* 返回一年后今天的DATE |
||||
* |
||||
* @return |
||||
*/ |
||||
public static Date getYearDayDate() { |
||||
Calendar calendar1 = Calendar.getInstance(); |
||||
calendar1.setTime(new Date()); |
||||
Calendar calendar2 = Calendar.getInstance(); |
||||
calendar2.set(Calendar.YEAR, calendar1.get(Calendar.YEAR) + 1); |
||||
calendar2.set(Calendar.MONTH, calendar1.get(Calendar.MONTH)); |
||||
calendar2.set(Calendar.DATE, calendar1.get(Calendar.DATE)); |
||||
return calendar2.getTime(); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,373 @@
|
||||
package com.fr.plugin.cpic.utils; |
||||
|
||||
/** |
||||
* IP校验类的方法 |
||||
*/ |
||||
|
||||
import com.fanruan.api.util.StringKit; |
||||
import com.fr.plugin.cpic.config.CpicCustomConfig; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
import java.util.ArrayList; |
||||
import java.util.HashSet; |
||||
import java.util.List; |
||||
import java.util.Set; |
||||
import java.util.regex.Pattern; |
||||
|
||||
|
||||
public class IPWhiteListUtil { |
||||
|
||||
private static final String[] PROXYS = {"x-forwarded-for", "Proxy-Client-IP", "WL-Proxy-Client-IP", "X-Real-IP", "HTTP_CLIENT_IP"}; |
||||
|
||||
// IP的正则
|
||||
private static Pattern pattern = Pattern |
||||
.compile("(1\\d{1,2}|2[0-4]\\d|25[0-5]|\\d{1,2})\\." |
||||
+ "(1\\d{1,2}|2[0-4]\\d|25[0-5]|\\d{1,2})\\." |
||||
+ "(1\\d{1,2}|2[0-4]\\d|25[0-5]|\\d{1,2})\\." |
||||
+ "(1\\d{1,2}|2[0-4]\\d|25[0-5]|\\d{1,2})"); |
||||
|
||||
/** |
||||
* getAvaliIpList:(根据IP白名单设置获取可用的IP列表). |
||||
* |
||||
* @return |
||||
*/ |
||||
private static Set getAvaliIpList(String allowIp) { |
||||
Set<String> ipList = new HashSet(); |
||||
for (String allow : allowIp.replaceAll("\\s", "").split(";")) { |
||||
if (allow.indexOf("*") > -1) { |
||||
String[] ips = allow.split("\\."); |
||||
String[] from = new String[]{"0", "0", "0", "0"}; |
||||
String[] end = new String[]{"255", "255", "255", "255"}; |
||||
List<String> tem = new ArrayList(); |
||||
for (int i = 0; i < ips.length; i++) |
||||
if (ips[i].indexOf("*") > -1) { |
||||
tem = complete(ips[i]); |
||||
from[i] = null; |
||||
end[i] = null; |
||||
} else { |
||||
from[i] = ips[i]; |
||||
end[i] = ips[i]; |
||||
} |
||||
StringBuffer fromIP = new StringBuffer(); |
||||
StringBuffer endIP = new StringBuffer(); |
||||
for (int i = 0; i < 4; i++) { |
||||
if (from[i] != null) { |
||||
fromIP.append(from[i]).append("."); |
||||
endIP.append(end[i]).append("."); |
||||
} else { |
||||
fromIP.append("[*]."); |
||||
endIP.append("[*]."); |
||||
} |
||||
} |
||||
fromIP.deleteCharAt(fromIP.length() - 1); |
||||
endIP.deleteCharAt(endIP.length() - 1); |
||||
for (String s : tem) { |
||||
String ip = fromIP.toString().replace("[*]", |
||||
s.split(";")[0]) |
||||
+ "-" |
||||
+ endIP.toString().replace("[*]", s.split(";")[1]); |
||||
|
||||
if (validate(ip)) { |
||||
ipList.add(ip); |
||||
} |
||||
} |
||||
|
||||
} else { |
||||
if (validate(allow)) { |
||||
ipList.add(allow); |
||||
} |
||||
} |
||||
} |
||||
return ipList; |
||||
} |
||||
|
||||
private static Set getAvaliIpList(Set<String> ipSet) { |
||||
Set<String> ipList = new HashSet(); |
||||
for (String allow : ipSet) { |
||||
if (allow.indexOf("*") > -1) { |
||||
String[] ips = allow.split("\\."); |
||||
String[] from = new String[]{"0", "0", "0", "0"}; |
||||
String[] end = new String[]{"255", "255", "255", "255"}; |
||||
List<String> tem = new ArrayList(); |
||||
for (int i = 0; i < ips.length; i++) |
||||
if (ips[i].indexOf("*") > -1) { |
||||
tem = complete(ips[i]); |
||||
from[i] = null; |
||||
end[i] = null; |
||||
} else { |
||||
from[i] = ips[i]; |
||||
end[i] = ips[i]; |
||||
} |
||||
StringBuffer fromIP = new StringBuffer(); |
||||
StringBuffer endIP = new StringBuffer(); |
||||
for (int i = 0; i < 4; i++) { |
||||
if (from[i] != null) { |
||||
fromIP.append(from[i]).append("."); |
||||
endIP.append(end[i]).append("."); |
||||
} else { |
||||
fromIP.append("[*]."); |
||||
endIP.append("[*]."); |
||||
} |
||||
} |
||||
fromIP.deleteCharAt(fromIP.length() - 1); |
||||
|
||||
endIP.deleteCharAt(endIP.length() - 1); |
||||
|
||||
|
||||
for (String s : tem) { |
||||
String ip = fromIP.toString().replace("[*]", |
||||
s.split(";")[0]) |
||||
+ "-" |
||||
+ endIP.toString().replace("[*]", s.split(";")[1]); |
||||
if (validate(ip)) { |
||||
ipList.add(ip); |
||||
} |
||||
} |
||||
} else { |
||||
if (validate(allow)) { |
||||
ipList.add(allow); |
||||
} |
||||
} |
||||
} |
||||
return ipList; |
||||
} |
||||
|
||||
/** |
||||
* 对单个IP节点进行范围限定 |
||||
* |
||||
* @param arg |
||||
* @return 返回限定后的IP范围,格式为List[10;19, 100;199] |
||||
*/ |
||||
|
||||
private static List complete(String arg) { |
||||
List com = new ArrayList(); |
||||
if (arg.length() == 1) { |
||||
com.add("0;255"); |
||||
} else if (arg.length() == 2) { |
||||
String s1 = complete(arg, 1); |
||||
if (s1 != null) { |
||||
com.add(s1); |
||||
} |
||||
String s2 = complete(arg, 2); |
||||
if (s2 != null) { |
||||
com.add(s2); |
||||
} |
||||
} else { |
||||
String s1 = complete(arg, 1); |
||||
if (s1 != null) { |
||||
com.add(s1); |
||||
} |
||||
} |
||||
return com; |
||||
} |
||||
|
||||
private static String complete(String arg, int length) { |
||||
|
||||
String from = ""; |
||||
|
||||
String end = ""; |
||||
|
||||
if (length == 1) { |
||||
|
||||
from = arg.replace("*", "0"); |
||||
|
||||
end = arg.replace("*", "9"); |
||||
|
||||
} else { |
||||
|
||||
from = arg.replace("*", "00"); |
||||
|
||||
end = arg.replace("*", "99"); |
||||
|
||||
} |
||||
|
||||
if (Integer.valueOf(from) > 255) { |
||||
return null; |
||||
} |
||||
if (Integer.valueOf(end) > 255) { |
||||
end = "255"; |
||||
} |
||||
return from + ";" + end; |
||||
|
||||
} |
||||
|
||||
|
||||
/** |
||||
* 在添加至白名单时进行格式校验 |
||||
* |
||||
* @param ip |
||||
* @return |
||||
*/ |
||||
|
||||
private static boolean validate(String ip) { |
||||
|
||||
for (String s : ip.split("-")) { |
||||
if (!pattern.matcher(s).matches()) { |
||||
|
||||
return false; |
||||
|
||||
} |
||||
} |
||||
return true; |
||||
|
||||
} |
||||
|
||||
|
||||
/** |
||||
* checkLoginIP:(根据IP,及可用Ip列表来判断ip是否包含在白名单之中). |
||||
* |
||||
* @param ip |
||||
* @param ipList |
||||
* @return |
||||
*/ |
||||
|
||||
private static boolean checkLoginIP(String ip, Set<String> ipList) { |
||||
if (ipList.contains(ip)) { |
||||
return true; |
||||
} else { |
||||
for (String allow : ipList) { |
||||
if (allow.indexOf("-") > -1) { |
||||
String[] from = allow.split("-")[0].split("\\."); |
||||
String[] end = allow.split("-")[1].split("\\."); |
||||
String[] tag = ip.split("\\."); |
||||
// 对IP从左到右进行逐段匹配
|
||||
boolean check = true; |
||||
for (int i = 0; i < 4; i++) { |
||||
int s = Integer.valueOf(from[i]); |
||||
int t = Integer.valueOf(tag[i]); |
||||
int e = Integer.valueOf(end[i]); |
||||
if (!(s <= t && t <= e)) { |
||||
check = false; |
||||
break; |
||||
} |
||||
} |
||||
if (check) { |
||||
return true; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* checkLoginIP:(根据IP地址,及IP白名单设置规则判断IP是否包含在白名单). |
||||
* |
||||
* @param request |
||||
* @return |
||||
*/ |
||||
|
||||
public static boolean checkIpIsWhite(HttpServletRequest request) { |
||||
// 获取配置
|
||||
CpicCustomConfig config = CpicCustomConfig.getInstance(); |
||||
String ipWhiteValue = config.getIpWhiteValue(); |
||||
if (StringKit.isBlank(ipWhiteValue)) { |
||||
return false; |
||||
} |
||||
|
||||
// 获取当前请求IP
|
||||
String ip = IPWhiteListUtil.getIpAddr(request); |
||||
|
||||
// 获取白名单全部IP
|
||||
Set ipList = getAvaliIpList(ipWhiteValue); |
||||
|
||||
// 返回结果
|
||||
return checkLoginIP(ip, ipList); |
||||
|
||||
} |
||||
|
||||
|
||||
/** |
||||
* ip在ipList中,则返回true |
||||
* |
||||
* @param ip |
||||
* @param ipList |
||||
* @return |
||||
*/ |
||||
|
||||
public static boolean checkIpList(String ip, List<String> ipList) { |
||||
|
||||
Set<String> ipSet = new HashSet(); |
||||
|
||||
for (String ipStr : ipList) { |
||||
|
||||
if (!ipStr.trim().startsWith("#")) { |
||||
|
||||
ipSet.add(ipStr.trim()); |
||||
|
||||
} |
||||
|
||||
} |
||||
|
||||
ipSet = getAvaliIpList(ipSet); |
||||
|
||||
return checkLoginIP(ip, ipSet); |
||||
|
||||
} |
||||
|
||||
/** |
||||
* 获取请求中的IP地址 |
||||
* |
||||
* @param request |
||||
* @return |
||||
*/ |
||||
public static String getIpAddr(HttpServletRequest request) { |
||||
String ipAddress = null; |
||||
|
||||
try { |
||||
for (String proxy : PROXYS) { |
||||
ipAddress = request.getHeader(proxy); |
||||
if (StringKit.isNotBlank(ipAddress) && !"unknown".equalsIgnoreCase(ipAddress)) { |
||||
return ipAddress; |
||||
} |
||||
} |
||||
if (StringKit.isBlank(ipAddress) || "unknown".equalsIgnoreCase(ipAddress)) { |
||||
ipAddress = request.getRemoteAddr(); |
||||
// if (ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")) {
|
||||
// // 根据网卡取本机配置的IP
|
||||
// InetAddress inet = null;
|
||||
// try {
|
||||
// inet = InetAddress.getLocalHost();
|
||||
// } catch (UnknownHostException e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
// ipAddress = inet.getHostAddress();
|
||||
// }
|
||||
} |
||||
// 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
|
||||
// "***.***.***.***".length() = 15
|
||||
if (ipAddress != null && ipAddress.length() > 15) { |
||||
if (ipAddress.indexOf(",") > 0) { |
||||
ipAddress = ipAddress.substring(0, ipAddress.indexOf(",")); |
||||
} |
||||
} |
||||
} catch (Exception e) { |
||||
ipAddress = ""; |
||||
} |
||||
return ipAddress; |
||||
} |
||||
|
||||
|
||||
// 测试
|
||||
|
||||
public static void main(String[] args) { |
||||
|
||||
List<String> ipWhilte = new ArrayList<>(); |
||||
ipWhilte.add("192.168.1.1"); //设置单个IP的白名单
|
||||
ipWhilte.add("192.168.2.*"); //设置ip通配符,对一个ip段进行匹配
|
||||
ipWhilte.add("192.168.3.17-192.168.3.38"); //设置一个IP范围
|
||||
|
||||
System.out.println(ipWhilte); |
||||
boolean flag = checkIpList("192.168.2.2", ipWhilte); |
||||
boolean flag2 = checkIpList("192.168.1.2", ipWhilte); |
||||
boolean flag3 = checkIpList("192.168.3.16", ipWhilte); |
||||
boolean flag4 = checkIpList("192.168.3.17", ipWhilte); |
||||
System.out.println(flag); //true
|
||||
System.out.println(flag2); //false
|
||||
System.out.println(flag3); //false
|
||||
System.out.println(flag4); //true
|
||||
} |
||||
} |
||||
|
||||
|
@ -0,0 +1,48 @@
|
||||
package com.fr.plugin.cpic.utils; |
||||
|
||||
import com.fanruan.api.util.StringKit; |
||||
import com.fr.plugin.context.PluginContext; |
||||
import com.fr.plugin.context.PluginContexts; |
||||
|
||||
import java.net.URL; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* 路径工具 |
||||
*/ |
||||
public class PathUtil { |
||||
|
||||
/** |
||||
* 获取当前插件目录 |
||||
* |
||||
* @return |
||||
* @throws Exception |
||||
*/ |
||||
public static String getLocalCachePath() throws Exception { |
||||
PluginContext contexts = PluginContexts.currentContext(); |
||||
List<URL> urls = contexts.getClassPaths(); |
||||
String classPath = ""; |
||||
for (URL url : urls) { |
||||
if (url.getPath().contains("classes")) { |
||||
classPath = StringKit.subStringByByteLength(url.getPath(), "UTF-8", url.getPath().indexOf("classes")); |
||||
} |
||||
} |
||||
return classPath; |
||||
} |
||||
|
||||
/** |
||||
* 获取后缀名 |
||||
* |
||||
* @param fileName |
||||
* @return |
||||
*/ |
||||
public static String getLastName(String fileName) { |
||||
String[] split = fileName.split("\\."); |
||||
if (split.length > 1) { |
||||
return split[split.length - 1]; |
||||
} else { |
||||
return ""; |
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,83 @@
|
||||
package com.fr.plugin.cpic.utils; |
||||
|
||||
import com.fr.stable.StringUtils; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
import java.util.Map.Entry; |
||||
|
||||
public class UrlUtils { |
||||
|
||||
/** |
||||
* 获取URL的参数列表 |
||||
* |
||||
* @param url |
||||
* @return |
||||
*/ |
||||
public static String getBaseUrl(String url) { |
||||
String baseUrl = ""; |
||||
if (StringUtils.isBlank(url)) { |
||||
return baseUrl; |
||||
} |
||||
url = url.trim(); |
||||
String[] urlParts = url.split("\\?"); |
||||
//没有参数
|
||||
if (urlParts.length >= 1) { |
||||
baseUrl = urlParts[0]; |
||||
} |
||||
return baseUrl; |
||||
} |
||||
|
||||
/** |
||||
* 获取URL的参数列表 |
||||
* |
||||
* @param url |
||||
* @return |
||||
*/ |
||||
public static Map<String, String> getParams(String url) { |
||||
Map<String, String> params = new HashMap<>(); |
||||
if (StringUtils.isBlank(url)) { |
||||
return params; |
||||
} |
||||
url = url.trim(); |
||||
String[] urlParts = url.split("\\?"); |
||||
//没有参数
|
||||
if (urlParts.length <= 1) { |
||||
return params; |
||||
} |
||||
//有参数
|
||||
String[] urlParams = urlParts[1].split("&"); |
||||
for (String param : urlParams) { |
||||
String[] keyValue = param.split("="); |
||||
if (keyValue.length < 2) { |
||||
continue; |
||||
} |
||||
params.put(keyValue[0], keyValue[1]); |
||||
} |
||||
return params; |
||||
} |
||||
|
||||
/** |
||||
* 生成完整url |
||||
* |
||||
* @param baseUrl |
||||
* @param params |
||||
* @return |
||||
*/ |
||||
public static String getUrl(String baseUrl, Map<String, String> params) { |
||||
StringBuilder sb = new StringBuilder(); |
||||
sb.append(baseUrl); |
||||
if (null != params && params.size() > 0) { |
||||
sb.append("?"); |
||||
for (Entry<String, String> entry : params.entrySet()) { |
||||
sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&"); |
||||
} |
||||
} |
||||
String url = sb.toString(); |
||||
if (url.endsWith("&")) { |
||||
url = url.substring(0, url.length() - 1); |
||||
} |
||||
return url; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,22 @@
|
||||
package com.fr.plugin.cpic.web; |
||||
|
||||
import com.fr.decision.fun.impl.AbstractControllerRegisterProvider; |
||||
import com.fr.plugin.cpic.web.controller.CpicEntryController; |
||||
import com.fr.plugin.cpic.web.controller.CpicHomeController; |
||||
import com.fr.plugin.cpic.web.controller.CpicHomeIndexController; |
||||
import com.fr.plugin.cpic.web.controller.CpicUserController; |
||||
|
||||
/** |
||||
* 注册新的接口 |
||||
*/ |
||||
public class CpicControllerRegisterProvider extends AbstractControllerRegisterProvider { |
||||
@Override |
||||
public Class<?>[] getControllers() { |
||||
return new Class[]{ |
||||
CpicHomeIndexController.class, |
||||
CpicHomeController.class, |
||||
CpicUserController.class, |
||||
CpicEntryController.class, |
||||
}; |
||||
} |
||||
} |
@ -0,0 +1,50 @@
|
||||
package com.fr.plugin.cpic.web; |
||||
|
||||
import com.fr.decision.authority.base.AuthorityConstants; |
||||
import com.fr.decision.authority.base.constant.AuthorityStaticItemId; |
||||
import com.fr.decision.fun.impl.AbstractSystemOptionProvider; |
||||
import com.fr.decision.web.MainComponent; |
||||
import com.fr.plugin.cpic.web.component.CpicHomeComponent; |
||||
import com.fr.stable.fun.mark.API; |
||||
import com.fr.web.struct.Atom; |
||||
|
||||
|
||||
@API(level = CpicHomeOptionProvider.CURRENT_LEVEL) |
||||
public class CpicHomeOptionProvider extends AbstractSystemOptionProvider { |
||||
|
||||
private static final String DEC_PLUGIN_HOME_ID = "dec_plugin_home_id"; |
||||
|
||||
@Override |
||||
public String id() { |
||||
return DEC_PLUGIN_HOME_ID; |
||||
} |
||||
|
||||
@Override |
||||
public String displayName() { |
||||
return "门户管理"; |
||||
} |
||||
|
||||
@Override |
||||
public int sortIndex() { |
||||
return 0; |
||||
} |
||||
|
||||
@Override |
||||
public String fullPath() { |
||||
// 判断后台实际权限
|
||||
return AuthorityStaticItemId.DEC_MANAGEMENT_ID + |
||||
AuthorityConstants.FULL_PATH_SPLITTER + |
||||
DEC_PLUGIN_HOME_ID; |
||||
} |
||||
|
||||
@Override |
||||
public Atom attach() { |
||||
return MainComponent.KEY; |
||||
} |
||||
|
||||
@Override |
||||
public Atom client() { |
||||
return CpicHomeComponent.KEY; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,23 @@
|
||||
package com.fr.plugin.cpic.web; |
||||
|
||||
import com.fr.decision.fun.impl.AbstractWebResourceProvider; |
||||
import com.fr.decision.web.MainComponent; |
||||
import com.fr.plugin.cpic.web.component.CpicThemeJsComponent; |
||||
import com.fr.web.struct.Atom; |
||||
|
||||
/** |
||||
* 注入JS |
||||
*/ |
||||
public class CpicWebResourceProvider extends AbstractWebResourceProvider { |
||||
|
||||
@Override |
||||
public Atom attach() { |
||||
return MainComponent.KEY; |
||||
} |
||||
|
||||
public Atom[] clients() { |
||||
return new Atom[]{ |
||||
CpicThemeJsComponent.KEY |
||||
}; |
||||
} |
||||
} |
@ -0,0 +1,88 @@
|
||||
package com.fr.plugin.cpic.web.bean; |
||||
|
||||
import java.util.List; |
||||
|
||||
public class TreeItemBean { |
||||
|
||||
private String title; |
||||
private String id; |
||||
private String field; |
||||
private String href; |
||||
private boolean spread; |
||||
private boolean checked; |
||||
private boolean disabled; |
||||
private String pid; |
||||
private List<TreeItemBean> children; |
||||
|
||||
public String getTitle() { |
||||
return title; |
||||
} |
||||
|
||||
public void setTitle(String title) { |
||||
this.title = title; |
||||
} |
||||
|
||||
public String getId() { |
||||
return id; |
||||
} |
||||
|
||||
public void setId(String id) { |
||||
this.id = id; |
||||
} |
||||
|
||||
public String getField() { |
||||
return field; |
||||
} |
||||
|
||||
public void setField(String field) { |
||||
this.field = field; |
||||
} |
||||
|
||||
public String getHref() { |
||||
return href; |
||||
} |
||||
|
||||
public void setHref(String href) { |
||||
this.href = href; |
||||
} |
||||
|
||||
public boolean isSpread() { |
||||
return spread; |
||||
} |
||||
|
||||
public void setSpread(boolean spread) { |
||||
this.spread = spread; |
||||
} |
||||
|
||||
public boolean isChecked() { |
||||
return checked; |
||||
} |
||||
|
||||
public void setChecked(boolean checked) { |
||||
this.checked = checked; |
||||
} |
||||
|
||||
public boolean isDisabled() { |
||||
return disabled; |
||||
} |
||||
|
||||
public void setDisabled(boolean disabled) { |
||||
this.disabled = disabled; |
||||
} |
||||
|
||||
public List<TreeItemBean> getChildren() { |
||||
return children; |
||||
} |
||||
|
||||
public void setChildren(List<TreeItemBean> children) { |
||||
this.children = children; |
||||
} |
||||
|
||||
public String getPid() { |
||||
return pid; |
||||
} |
||||
|
||||
public void setPid(String pid) { |
||||
this.pid = pid; |
||||
} |
||||
} |
@ -0,0 +1,52 @@
|
||||
package com.fr.plugin.cpic.web.bean; |
||||
|
||||
import java.util.List; |
||||
|
||||
public class UserMenuBean { |
||||
|
||||
private String id; |
||||
private String title; |
||||
private String pid; |
||||
private String mtype; |
||||
private List<UserMenuBean> children; |
||||
|
||||
public String getId() { |
||||
return id; |
||||
} |
||||
|
||||
public void setId(String id) { |
||||
this.id = id; |
||||
} |
||||
|
||||
public String getTitle() { |
||||
return title; |
||||
} |
||||
|
||||
public void setTitle(String title) { |
||||
this.title = title; |
||||
} |
||||
|
||||
public String getPid() { |
||||
return pid; |
||||
} |
||||
|
||||
public void setPid(String pid) { |
||||
this.pid = pid; |
||||
} |
||||
|
||||
public String getMtype() { |
||||
return mtype; |
||||
} |
||||
|
||||
public void setMtype(String mtype) { |
||||
this.mtype = mtype; |
||||
} |
||||
|
||||
public List<UserMenuBean> getChildren() { |
||||
return children; |
||||
} |
||||
|
||||
public void setChildren(List<UserMenuBean> children) { |
||||
this.children = children; |
||||
} |
||||
} |
@ -0,0 +1,24 @@
|
||||
package com.fr.plugin.cpic.web.component; |
||||
|
||||
import com.fr.plugin.transform.ExecuteFunctionRecord; |
||||
import com.fr.plugin.transform.FunctionRecorder; |
||||
import com.fr.web.struct.Component; |
||||
import com.fr.web.struct.browser.RequestClient; |
||||
import com.fr.web.struct.category.ScriptPath; |
||||
|
||||
@FunctionRecorder |
||||
public class CpicHomeComponent extends Component { |
||||
|
||||
public static CpicHomeComponent KEY = new CpicHomeComponent(); |
||||
|
||||
private CpicHomeComponent() { |
||||
|
||||
} |
||||
|
||||
@ExecuteFunctionRecord |
||||
@Override |
||||
public ScriptPath script(RequestClient requestClient) { |
||||
return ScriptPath.build("/com/fr/plugin/cpic/web/js/cpic_home.js"); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,22 @@
|
||||
package com.fr.plugin.cpic.web.component; |
||||
|
||||
import com.fr.web.struct.Component; |
||||
import com.fr.web.struct.browser.RequestClient; |
||||
import com.fr.web.struct.category.FileType; |
||||
import com.fr.web.struct.category.ParserType; |
||||
import com.fr.web.struct.category.ScriptPath; |
||||
|
||||
public class CpicThemeJsComponent extends Component { |
||||
|
||||
public static CpicThemeJsComponent KEY = new CpicThemeJsComponent(); |
||||
|
||||
private CpicThemeJsComponent() { |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public ScriptPath script(RequestClient requestClient) { |
||||
return ScriptPath.build("com.fr.plugin.cpic.web.component.generator.CpicThemeJsGenerator", FileType.CLASS, ParserType.DYNAMIC); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,28 @@
|
||||
package com.fr.plugin.cpic.web.component.generator; |
||||
|
||||
import com.fr.base.TemplateUtils; |
||||
import com.fr.gen.TextGenerator; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
public class CpicThemeJsGenerator implements TextGenerator { |
||||
|
||||
public String text(HttpServletRequest req, HttpServletResponse res) throws Exception { |
||||
Map<String, Object> renderMap = new HashMap(); |
||||
|
||||
return TemplateUtils.renderTemplate(this.template(), renderMap); |
||||
} |
||||
|
||||
|
||||
public String mimeType() { |
||||
return "text/javascript"; |
||||
} |
||||
|
||||
public String template() { |
||||
return "/com/fr/plugin/cpic/web/js/customexport.js"; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,145 @@
|
||||
package com.fr.plugin.cpic.web.controller; |
||||
|
||||
import com.fr.decision.authority.data.User; |
||||
import com.fr.decision.service.DecisionService; |
||||
import com.fr.decision.webservice.Response; |
||||
import com.fr.decision.webservice.annotation.LoginStatusChecker; |
||||
import com.fr.decision.webservice.bean.entry.EntryBean; |
||||
import com.fr.decision.webservice.utils.ControllerFactory; |
||||
import com.fr.decision.webservice.v10.user.UserService; |
||||
import com.fr.plugin.cpic.db.bean.CpicEntryBean; |
||||
import com.fr.plugin.cpic.db.bean.CpicHomeBean; |
||||
import com.fr.plugin.cpic.db.service.CpicEntryService; |
||||
import com.fr.plugin.cpic.db.service.CpicHomeService; |
||||
import com.fr.plugin.cpic.utils.ConvertUtil; |
||||
import com.fr.plugin.cpic.web.bean.TreeItemBean; |
||||
import com.fr.stable.web.Device; |
||||
import com.fr.third.org.apache.commons.collections4.CollectionUtils; |
||||
import com.fr.third.springframework.stereotype.Controller; |
||||
import com.fr.third.springframework.web.bind.annotation.RequestBody; |
||||
import com.fr.third.springframework.web.bind.annotation.RequestMapping; |
||||
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||
import com.fr.third.springframework.web.bind.annotation.ResponseBody; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
import java.util.stream.Collectors; |
||||
|
||||
/** |
||||
* 目录 |
||||
*/ |
||||
@Controller |
||||
@LoginStatusChecker(required = false) |
||||
@RequestMapping(value = "/cpic") |
||||
public class CpicEntryController { |
||||
|
||||
@RequestMapping(value = "/home/entrys", method = RequestMethod.GET) |
||||
@ResponseBody |
||||
public Response getAllEntry(HttpServletRequest request, HttpServletResponse response) throws Exception { |
||||
try { |
||||
String homeId = request.getParameter("homeId"); |
||||
// 获取全部目录和报表
|
||||
// String userId = UserService.getInstance().getAdminUserIdList().get(0);
|
||||
String userId = DecisionService.getInstance().authority().userService().getAdminUserIdList().get(0); |
||||
|
||||
List<EntryBean> entryBeanList = ControllerFactory.getInstance().getEntryController(userId).getEntryTree(userId, Device.PC); |
||||
// 获取门户勾选的目录
|
||||
List<CpicEntryBean> cpicEntryBeanList = CpicEntryService.findList(homeId); |
||||
// 生成树结构数据
|
||||
List<TreeItemBean> treeBean = ConvertUtil.toTree(entryBeanList, cpicEntryBeanList); |
||||
return Response.ok(treeBean); |
||||
} catch (Exception e) { |
||||
return Response.error("-1", "error:" + e.getMessage()); |
||||
} |
||||
} |
||||
|
||||
@RequestMapping(value = "/home/entrychecked", method = RequestMethod.GET) |
||||
@ResponseBody |
||||
public Response getChecked(HttpServletRequest request, HttpServletResponse response) throws Exception { |
||||
try { |
||||
String homeId = request.getParameter("homeId"); |
||||
// 获取门户勾选的目录
|
||||
List<CpicEntryBean> cpicEntryBeanList = CpicEntryService.findList(homeId); |
||||
// 生成树结构数据
|
||||
List<String> entryIdList = cpicEntryBeanList.stream().map(CpicEntryBean::getEntryId).collect(Collectors.toList()); |
||||
return Response.ok(entryIdList); |
||||
} catch (Exception e) { |
||||
return Response.error("-1", "error:" + e.getMessage()); |
||||
} |
||||
} |
||||
|
||||
@RequestMapping(value = "/home/entrys", method = RequestMethod.POST) |
||||
@ResponseBody |
||||
public Response saveOrUpdate(HttpServletRequest request, HttpServletResponse response, @RequestBody List<TreeItemBean> treeBean) throws Exception { |
||||
try { |
||||
// 校验输入
|
||||
// if (null == treeBean || CollectionUtils.isEmpty(treeBean)) {
|
||||
// return Response.success();
|
||||
// }
|
||||
|
||||
String homeId = request.getParameter("homeId"); |
||||
// 查询home信息
|
||||
CpicHomeBean home = CpicHomeService.findById(homeId); |
||||
if (null == home) { |
||||
return Response.success(); |
||||
} |
||||
// 获取现有保存的数据
|
||||
List<CpicEntryBean> cpicEntryBeanList = CpicEntryService.findList(homeId); |
||||
|
||||
// treeBean转换
|
||||
List<CpicEntryBean> checkedEntry = ConvertUtil.itemsToEntrys(treeBean); |
||||
|
||||
// 获取新增和更新列表
|
||||
List<CpicEntryBean> updateList = new ArrayList<>(); |
||||
List<CpicEntryBean> addList = new ArrayList<>(); |
||||
for (CpicEntryBean item : checkedEntry) { |
||||
CpicEntryBean temp = cpicEntryBeanList.stream().filter(entry -> entry.getEntryId().equals(item.getEntryId())).findFirst().orElse(null); |
||||
if (null != temp) { |
||||
temp.setEntryName(item.getEntryName()); |
||||
updateList.add(temp); |
||||
} else { |
||||
item.setHomeId(home.getId()); |
||||
item.setHomeName(home.getName()); |
||||
addList.add(item); |
||||
} |
||||
} |
||||
|
||||
// 获取删除列表
|
||||
List<CpicEntryBean> delList = new ArrayList<>(); |
||||
for (CpicEntryBean item : cpicEntryBeanList) { |
||||
CpicEntryBean temp = checkedEntry.stream().filter(entry -> entry.getEntryId().equals(item.getEntryId())).findFirst().orElse(null); |
||||
if (null == temp) { |
||||
delList.add(item); |
||||
} |
||||
} |
||||
|
||||
// 更新
|
||||
if (CollectionUtils.isNotEmpty(updateList)) { |
||||
for (CpicEntryBean entry : updateList) { |
||||
CpicEntryService.saveOrUpdate(entry); |
||||
} |
||||
} |
||||
|
||||
// 新增
|
||||
if (CollectionUtils.isNotEmpty(addList)) { |
||||
for (CpicEntryBean entry : addList) { |
||||
CpicEntryService.saveOrUpdate(entry); |
||||
} |
||||
} |
||||
|
||||
// 删除
|
||||
if (CollectionUtils.isNotEmpty(delList)) { |
||||
for (CpicEntryBean entry : delList) { |
||||
CpicEntryService.realDel(entry.getId()); |
||||
} |
||||
} |
||||
|
||||
return Response.success(); |
||||
} catch (Exception e) { |
||||
return Response.error("-1", "error:" + e.getMessage()); |
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,119 @@
|
||||
package com.fr.plugin.cpic.web.controller; |
||||
|
||||
import com.fanruan.api.util.StringKit; |
||||
import com.fr.decision.webservice.Response; |
||||
import com.fr.decision.webservice.annotation.LoginStatusChecker; |
||||
import com.fr.decision.webservice.bean.config.ThemeConfigBean; |
||||
import com.fr.decision.webservice.v10.config.ConfigService; |
||||
import com.fr.plugin.cpic.db.bean.CpicHomeBean; |
||||
import com.fr.plugin.cpic.db.service.CpicHomeService; |
||||
import com.fr.third.springframework.stereotype.Controller; |
||||
import com.fr.third.springframework.web.bind.annotation.RequestBody; |
||||
import com.fr.third.springframework.web.bind.annotation.RequestMapping; |
||||
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||
import com.fr.third.springframework.web.bind.annotation.ResponseBody; |
||||
import com.fr.web.utils.WebUtils; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
import java.util.HashMap; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* 回调接口 |
||||
*/ |
||||
@Controller |
||||
@LoginStatusChecker(required = false) |
||||
@RequestMapping(value = "/cpic") |
||||
public class CpicHomeController { |
||||
|
||||
@RequestMapping(value = "/home", method = RequestMethod.GET) |
||||
public void index(HttpServletRequest request, HttpServletResponse response) throws Exception { |
||||
HashMap hashMap = new HashMap(); |
||||
hashMap.put("loginUser", "xx"); |
||||
hashMap.put("callBack", "xx"); |
||||
WebUtils.writeOutTemplate("/com/fr/plugin/cpic/web/html/home.html", response, hashMap); |
||||
} |
||||
|
||||
@RequestMapping(value = "/home/list", method = RequestMethod.GET) |
||||
@ResponseBody |
||||
public Response getAll(HttpServletRequest request, HttpServletResponse response) throws Exception { |
||||
try { |
||||
List<CpicHomeBean> list = CpicHomeService.findList(); |
||||
Map<String, Object> result = new HashMap<>(); |
||||
result.put("homeList", list); |
||||
return Response.ok(result); |
||||
} catch (Exception e) { |
||||
return Response.error("-1", "error:" + e.getMessage()); |
||||
} |
||||
} |
||||
|
||||
@RequestMapping(value = "/home/themes", method = RequestMethod.GET) |
||||
@ResponseBody |
||||
public Response getAllTheme(HttpServletRequest request, HttpServletResponse response) throws Exception { |
||||
try { |
||||
return Response.ok(ConfigService.getInstance().getAllThemes()); |
||||
} catch (Exception e) { |
||||
return Response.error("-1", "error:" + e.getMessage()); |
||||
} |
||||
} |
||||
|
||||
@RequestMapping(value = "/home/edit", method = RequestMethod.POST) |
||||
@ResponseBody |
||||
public Response saveOrUpdate(HttpServletRequest request, HttpServletResponse response, @RequestBody CpicHomeBean cpicHomeBean) throws Exception { |
||||
try { |
||||
// 校验输入
|
||||
if (StringKit.isBlank(cpicHomeBean.getName())) { |
||||
return Response.error("-1", "请输入门户名称!"); |
||||
} |
||||
if (StringKit.isBlank(cpicHomeBean.getPath())) { |
||||
return Response.error("-1", "请输入门户地址!"); |
||||
} |
||||
|
||||
// 校验重名
|
||||
CpicHomeBean nameBean = CpicHomeService.findByName(cpicHomeBean.getName(), cpicHomeBean.getId()); |
||||
if (null != nameBean) { |
||||
return Response.error("-1", "门户名称重复,请修改后重试!"); |
||||
} |
||||
CpicHomeBean pathBean = CpicHomeService.findByPath(cpicHomeBean.getPath(), cpicHomeBean.getId()); |
||||
if (null != pathBean) { |
||||
return Response.error("-1", "门户地址重复,请修改后重试!"); |
||||
} |
||||
|
||||
List<ThemeConfigBean> themeList = ConfigService.getInstance().getAllThemes(); |
||||
ThemeConfigBean themeConfigBean = themeList.stream().filter(item -> item.getThemeId().equals(cpicHomeBean.getThemeId())).findFirst().orElse(null); |
||||
if (null != themeConfigBean) { |
||||
cpicHomeBean.setThemeName(themeConfigBean.getName()); |
||||
} |
||||
if ("classic".equals(cpicHomeBean.getThemeId())) { |
||||
cpicHomeBean.setThemeName("经典"); |
||||
} |
||||
if ("modern".equals(cpicHomeBean.getThemeId())) { |
||||
cpicHomeBean.setThemeName("扁平化"); |
||||
} |
||||
|
||||
// 保存
|
||||
CpicHomeService.saveOrUpdate(cpicHomeBean); |
||||
|
||||
// 返回成功的数据
|
||||
CpicHomeBean result = CpicHomeService.findByName(cpicHomeBean.getName(), ""); |
||||
return Response.ok(result); |
||||
} catch (Exception e) { |
||||
return Response.error("-1", "error:" + e.getMessage()); |
||||
} |
||||
} |
||||
|
||||
@RequestMapping(value = "/home/del", method = RequestMethod.POST) |
||||
@ResponseBody |
||||
public Response delete(HttpServletRequest request, HttpServletResponse response, @RequestBody CpicHomeBean cpicHomeBean) throws Exception { |
||||
try { |
||||
// 删除
|
||||
CpicHomeService.logicDel(cpicHomeBean.getId()); |
||||
return Response.success(); |
||||
} catch (Exception e) { |
||||
return Response.error("-1", "error:" + e.getMessage()); |
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,102 @@
|
||||
package com.fr.plugin.cpic.web.controller; |
||||
|
||||
import com.fanruan.api.log.LogKit; |
||||
import com.fr.base.ServerConfig; |
||||
import com.fr.decision.authority.data.User; |
||||
import com.fr.decision.inject.DecisionInjectExtraInfoBuilder; |
||||
import com.fr.decision.inject.DefaultDecisionInjectNodes; |
||||
import com.fr.decision.inject.node.DecisionInjectNode; |
||||
import com.fr.decision.inject.node.DecisionInjectNodeManager; |
||||
import com.fr.decision.service.DecisionService; |
||||
import com.fr.decision.web.MainComponent; |
||||
import com.fr.decision.webservice.annotation.LoginStatusChecker; |
||||
import com.fr.decision.webservice.v10.login.TokenResource; |
||||
import com.fr.plugin.cpic.db.bean.CpicHomeBean; |
||||
import com.fr.plugin.cpic.db.bean.CpicUserBean; |
||||
import com.fr.plugin.cpic.db.service.CpicHomeService; |
||||
import com.fr.plugin.cpic.db.service.CpicUserService; |
||||
import com.fr.plugin.cpic.web.custom.CustomDecisionErrorInjectNode; |
||||
import com.fr.plugin.cpic.web.custom.CustomDecisionSystemInjectNode; |
||||
import com.fr.plugin.cpic.web.custom.CustomDecisionUserInjectNode; |
||||
import com.fr.third.springframework.stereotype.Controller; |
||||
import com.fr.third.springframework.web.bind.annotation.PathVariable; |
||||
import com.fr.third.springframework.web.bind.annotation.RequestMapping; |
||||
import com.fr.third.springframework.web.bind.annotation.ResponseBody; |
||||
import com.fr.web.Browser; |
||||
import com.fr.web.struct.AtomBuilder; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
import java.util.HashMap; |
||||
|
||||
/** |
||||
* 页面 |
||||
*/ |
||||
@Controller |
||||
//@LoginStatusChecker(required = false)
|
||||
@RequestMapping(value = "/home") |
||||
public class CpicHomeIndexController { |
||||
|
||||
@RequestMapping( |
||||
value = {"/{path}"}, |
||||
produces = {"text/html"} |
||||
) |
||||
@ResponseBody |
||||
@LoginStatusChecker( |
||||
tokenResource = TokenResource.COOKIE |
||||
) |
||||
public String home(HttpServletRequest request, HttpServletResponse response, @PathVariable("path") String path) throws Exception { |
||||
HashMap params = new HashMap(); |
||||
params.put("charset", ServerConfig.getInstance().getServerCharset()); |
||||
// 根据path查询
|
||||
CpicHomeBean home = CpicHomeService.findByPath(path, ""); |
||||
if (null == home) { |
||||
DecisionInjectNode[] nodes = new DecisionInjectNode[]{ |
||||
new CustomDecisionErrorInjectNode("NN", "", "门户地址[" + path + "]不存在") |
||||
}; |
||||
return DecisionInjectNodeManager.box( |
||||
DecisionInjectExtraInfoBuilder.builder().request(request).user(DecisionService.getInstance().authority().userService().getUserByRequestCookie(request)).pagePath("/com/fr/plugin/cpic/web/html/error.html").pathGroup(AtomBuilder.create().buildAssembleFilePath(Browser.resolve(request), MainComponent.KEY)).build(), |
||||
nodes); |
||||
} |
||||
User user = DecisionService.getInstance().authority().userService().getUserByRequestCookie(request); |
||||
// 查询当前用户是否有登录权限
|
||||
CpicUserBean cpicUserBean = CpicUserService.findHomeUserByUserId(home.getId(), user.getId()); |
||||
// 没有权限的用户跳转到提示页面
|
||||
if (null == cpicUserBean) { |
||||
DecisionInjectNode[] nodes = new DecisionInjectNode[]{ |
||||
new CustomDecisionErrorInjectNode("YY", home.getPath(), "登录用户[" + user.getUserName() + "]没有门户[" + home.getName() + "]登录权限") |
||||
}; |
||||
return DecisionInjectNodeManager.box( |
||||
DecisionInjectExtraInfoBuilder.builder().request(request).user(DecisionService.getInstance().authority().userService().getUserByRequestCookie(request)).pagePath("/com/fr/plugin/cpic/web/html/error.html").pathGroup(AtomBuilder.create().buildAssembleFilePath(Browser.resolve(request), MainComponent.KEY)).build(), |
||||
nodes); |
||||
} |
||||
|
||||
// 主页
|
||||
LogKit.debug("门户首页地址:", home.getMhpath()); |
||||
CustomDecisionUserInjectNode customUserNode = new CustomDecisionUserInjectNode(home.getMhpath()); |
||||
|
||||
// 主题
|
||||
LogKit.debug("门户主题:", home.getThemeId()); |
||||
CustomDecisionSystemInjectNode customSystemNode = new CustomDecisionSystemInjectNode(home.getThemeId()); |
||||
|
||||
// 生成数据
|
||||
DecisionInjectNode[] nodes = new DecisionInjectNode[]{ |
||||
DefaultDecisionInjectNodes.scriptInfo(), |
||||
DefaultDecisionInjectNodes.styleInfo(), |
||||
DefaultDecisionInjectNodes.charsetInfo(), |
||||
// DefaultDecisionInjectNodes.systemInfo(),
|
||||
customSystemNode, |
||||
// DefaultDecisionInjectNodes.userInfo(),
|
||||
customUserNode, |
||||
DefaultDecisionInjectNodes.titleInfo() |
||||
}; |
||||
|
||||
return DecisionInjectNodeManager.box( |
||||
DecisionInjectExtraInfoBuilder.builder().request(request).user(DecisionService.getInstance().authority().userService().getUserByRequestCookie(request)).pagePath("/com/fr/plugin/cpic/web/html/resources/index.html").pathGroup(AtomBuilder.create().buildAssembleFilePath(Browser.resolve(request), MainComponent.KEY)).build(), |
||||
nodes); |
||||
|
||||
} |
||||
|
||||
|
||||
|
||||
} |
@ -0,0 +1,382 @@
|
||||
package com.fr.plugin.cpic.web.controller; |
||||
|
||||
import com.fr.decision.authority.AuthorityContext; |
||||
import com.fr.decision.authority.base.constant.type.authority.GradeManagementAuthorityType; |
||||
import com.fr.decision.authority.data.CustomRole; |
||||
import com.fr.decision.authority.data.Department; |
||||
import com.fr.decision.authority.data.Post; |
||||
import com.fr.decision.authority.data.User; |
||||
import com.fr.decision.service.DecisionService; |
||||
import com.fr.decision.webservice.Response; |
||||
import com.fr.decision.webservice.annotation.LoginStatusChecker; |
||||
import com.fr.decision.webservice.utils.ControllerFactory; |
||||
import com.fr.decision.webservice.v10.user.UserService; |
||||
import com.fr.general.ComparatorUtils; |
||||
import com.fr.plugin.cpic.db.bean.CpicHomeBean; |
||||
import com.fr.plugin.cpic.db.bean.CpicUserBean; |
||||
import com.fr.plugin.cpic.db.service.CpicHomeService; |
||||
import com.fr.plugin.cpic.db.service.CpicUserService; |
||||
import com.fr.plugin.cpic.utils.ConvertUtil; |
||||
import com.fr.plugin.cpic.web.bean.UserMenuBean; |
||||
import com.fr.stable.query.QueryFactory; |
||||
import com.fr.stable.query.data.DataList; |
||||
import com.fr.stable.query.restriction.RestrictionFactory; |
||||
import com.fr.third.org.apache.commons.collections4.CollectionUtils; |
||||
import com.fr.third.springframework.stereotype.Controller; |
||||
import com.fr.third.springframework.web.bind.annotation.RequestBody; |
||||
import com.fr.third.springframework.web.bind.annotation.RequestMapping; |
||||
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||
import com.fr.third.springframework.web.bind.annotation.ResponseBody; |
||||
import com.fr.web.utils.WebUtils; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
import java.util.*; |
||||
import java.util.stream.Collectors; |
||||
|
||||
/** |
||||
* 用户 |
||||
*/ |
||||
@Controller |
||||
@LoginStatusChecker(required = false) |
||||
@RequestMapping(value = "/cpic") |
||||
public class CpicUserController { |
||||
|
||||
@RequestMapping(value = "/user", method = RequestMethod.GET) |
||||
public void index(HttpServletRequest request, HttpServletResponse response) throws Exception { |
||||
// 查询初始化数据
|
||||
String homeId = request.getParameter("homeId"); |
||||
CpicHomeBean home = CpicHomeService.findById(homeId); |
||||
|
||||
HashMap hashMap = new HashMap(); |
||||
hashMap.put("homeId", home.getId()); |
||||
hashMap.put("homeName", home.getName()); |
||||
WebUtils.writeOutTemplate("/com/fr/plugin/cpic/web/html/user.html", response, hashMap); |
||||
} |
||||
|
||||
@RequestMapping(value = "/user/menus", method = RequestMethod.GET) |
||||
@ResponseBody |
||||
public Response getMenus2(HttpServletRequest request, HttpServletResponse response) throws Exception { |
||||
try { |
||||
String dimensionType = request.getParameter("dimensionType"); |
||||
// String adminId = UserService.getInstance().getAdminUserIdList().get(0);
|
||||
String adminId = DecisionService.getInstance().authority().userService().getAdminUserIdList().get(0); |
||||
// 查询菜单结构
|
||||
List<UserMenuBean> menuList = new ArrayList<>(); |
||||
if ("department".equals(dimensionType)) { |
||||
// 部门
|
||||
Department[] departments = ControllerFactory.getInstance().getDepartmentController(adminId).getDepartmentTree(adminId); |
||||
List<Department> departmentList = new ArrayList<Department>(departments.length); |
||||
Collections.addAll(departmentList, departments); |
||||
departmentList.sort((var0, var1x) -> ComparatorUtils.compare(var0.getAlias(), var1x.getAlias())); |
||||
menuList = ConvertUtil.departmentListToTree(departmentList); |
||||
} |
||||
if ("customrole".equals(dimensionType)) { |
||||
// 角色
|
||||
List<CustomRole> customRoleList = ControllerFactory.getInstance().getCustomRoleController(adminId).getAllCustomRoles(adminId, "", GradeManagementAuthorityType.TYPE); |
||||
customRoleList.sort((var0, var1x) -> ComparatorUtils.compare(var0.getAlias(), var1x.getAlias())); |
||||
menuList = ConvertUtil.roleListToMenuList(customRoleList); |
||||
} |
||||
return Response.ok(menuList); |
||||
} catch (Exception e) { |
||||
return Response.error("-1", "error:" + e.getMessage()); |
||||
} |
||||
} |
||||
|
||||
@RequestMapping(value = "/user/list", method = RequestMethod.GET) |
||||
@ResponseBody |
||||
public Response getUsers(HttpServletRequest request, HttpServletResponse response) throws Exception { |
||||
try { |
||||
String menuId = request.getParameter("menuId"); |
||||
String menuType = request.getParameter("menuType"); |
||||
String homeId = request.getParameter("homeId"); |
||||
CpicHomeBean home = CpicHomeService.findById(homeId); |
||||
// 查询所有已配置的用户
|
||||
List<CpicUserBean> userList = CpicUserService.findList(homeId); |
||||
|
||||
List<CpicUserBean> resultUserList = new ArrayList<>(); |
||||
// 获取全部用户
|
||||
if ("all".equals(menuType)) { |
||||
// 查询
|
||||
List<User> sysUserList = AuthorityContext.getInstance().getUserController().find(QueryFactory.create().addRestriction(RestrictionFactory.eq("enable", true))); |
||||
CpicUserBean cpicUser; |
||||
if (CollectionUtils.isNotEmpty(sysUserList)) { |
||||
for (User user : sysUserList) { |
||||
cpicUser = new CpicUserBean(); |
||||
cpicUser.setHomeId(home.getId()); |
||||
cpicUser.setHomeName(home.getName()); |
||||
cpicUser.setUserId(user.getId()); |
||||
cpicUser.setUserAccount(user.getUserName()); |
||||
cpicUser.setUserName(user.getRealName()); |
||||
resultUserList.add(cpicUser); |
||||
} |
||||
} |
||||
// 剔除已配置的用户返回
|
||||
return Response.ok(eliminateUser(resultUserList, userList)); |
||||
} else { |
||||
List<User> sysUserList = new ArrayList<>(); |
||||
if ("department".equals(menuType)) { |
||||
// 查询指定部门用户(部门下可能有多个职务)
|
||||
sysUserList = this.getUserListByDept(menuId); |
||||
} |
||||
if ("customrole".equals(menuType)) { |
||||
// 查询指定角色用户
|
||||
DataList<User> roleUserList = AuthorityContext.getInstance().getUserController().findByCustomRole(menuId, null); |
||||
if (!roleUserList.isEmpty()) { |
||||
sysUserList.addAll(roleUserList.getList()); |
||||
} |
||||
} |
||||
if (CollectionUtils.isNotEmpty(sysUserList)) { |
||||
CpicUserBean cpicUser; |
||||
for (User user : sysUserList) { |
||||
cpicUser = new CpicUserBean(); |
||||
cpicUser.setHomeId(home.getId()); |
||||
cpicUser.setHomeName(home.getName()); |
||||
cpicUser.setUserId(user.getId()); |
||||
cpicUser.setUserAccount(user.getUserName()); |
||||
cpicUser.setUserName(user.getRealName()); |
||||
resultUserList.add(cpicUser); |
||||
} |
||||
} |
||||
// 筛选出当前部门或者角色已配置用户
|
||||
List<CpicUserBean> filterUserList = new ArrayList<>(); |
||||
for (CpicUserBean userBean : userList) { |
||||
CpicUserBean temp = resultUserList.stream().filter(item -> item.getUserId().equals(userBean.getUserId())).findFirst().orElse(null); |
||||
if (null != temp) { |
||||
filterUserList.add(userBean); |
||||
} |
||||
} |
||||
return Response.ok(eliminateUser(resultUserList, filterUserList)); |
||||
} |
||||
} catch ( |
||||
Exception e) { |
||||
return Response.error("-1", "error:" + e.getMessage()); |
||||
} |
||||
} |
||||
|
||||
@RequestMapping(value = "/user/list2", method = RequestMethod.GET) |
||||
@ResponseBody |
||||
public Response getUsers2(HttpServletRequest request, HttpServletResponse response) throws Exception { |
||||
try { |
||||
String menuId = request.getParameter("menuId"); |
||||
String menuType = request.getParameter("menuType"); |
||||
String homeId = request.getParameter("homeId"); |
||||
CpicHomeBean home = CpicHomeService.findById(homeId); |
||||
|
||||
// 查询所有已配置的用户
|
||||
List<CpicUserBean> userList = CpicUserService.findList(homeId); |
||||
|
||||
// 获取全部用户
|
||||
if ("all".equals(menuType)) { |
||||
return Response.ok(userList); |
||||
} else { |
||||
List<CpicUserBean> allUserList = new ArrayList<>(); |
||||
List<User> sysUserList = new ArrayList<>(); |
||||
if ("department".equals(menuType)) { |
||||
// 查询指定部门用户
|
||||
sysUserList = this.getUserListByDept(menuId); |
||||
} |
||||
if ("customrole".equals(menuType)) { |
||||
// 查询指定角色用户
|
||||
DataList<User> roleUserList = AuthorityContext.getInstance().getUserController().findByCustomRole(menuId, null); |
||||
if (!roleUserList.isEmpty()) { |
||||
sysUserList.addAll(roleUserList.getList()); |
||||
} |
||||
} |
||||
if (CollectionUtils.isNotEmpty(sysUserList)) { |
||||
CpicUserBean cpicUser; |
||||
for (User user : sysUserList) { |
||||
cpicUser = new CpicUserBean(); |
||||
cpicUser.setHomeId(home.getId()); |
||||
cpicUser.setHomeName(home.getName()); |
||||
cpicUser.setUserId(user.getId()); |
||||
cpicUser.setUserAccount(user.getUserName()); |
||||
cpicUser.setUserName(user.getRealName()); |
||||
allUserList.add(cpicUser); |
||||
} |
||||
} |
||||
// 筛选出当前部门或者角色已配置用户
|
||||
List<CpicUserBean> filterUserList = new ArrayList<>(); |
||||
for (CpicUserBean userBean : userList) { |
||||
CpicUserBean temp = allUserList.stream().filter(item -> item.getUserId().equals(userBean.getUserId())).findFirst().orElse(null); |
||||
if (null != temp) { |
||||
filterUserList.add(userBean); |
||||
} |
||||
} |
||||
return Response.ok(filterUserList); |
||||
} |
||||
} catch ( |
||||
Exception e) { |
||||
return Response.error("-1", "error:" + e.getMessage()); |
||||
} |
||||
|
||||
} |
||||
|
||||
@RequestMapping(value = "/user/add", method = RequestMethod.POST) |
||||
@ResponseBody |
||||
public Response saveOrUpdate(HttpServletRequest request, HttpServletResponse response, @RequestBody List<CpicUserBean> userBeanList) throws Exception { |
||||
try { |
||||
String menuId = request.getParameter("menuId"); |
||||
String menuType = request.getParameter("menuType"); |
||||
String homeId = request.getParameter("homeId"); |
||||
CpicHomeBean home = CpicHomeService.findById(homeId); |
||||
|
||||
if (null == home) { |
||||
return Response.success(); |
||||
} |
||||
|
||||
// 查询所有已配置的用户
|
||||
List<CpicUserBean> userList = CpicUserService.findList(homeId); |
||||
Map<String, List<CpicUserBean>> result; |
||||
// 获取全部用户
|
||||
if ("all".equals(menuType)) { |
||||
result = handleUserList(userList, userBeanList, home); |
||||
} else { |
||||
List<CpicUserBean> allUserList = new ArrayList<>(); |
||||
List<User> sysUserList = new ArrayList<>(); |
||||
if ("department".equals(menuType)) { |
||||
// 查询指定部门用户
|
||||
sysUserList = this.getUserListByDept(menuId); |
||||
} |
||||
if ("customrole".equals(menuType)) { |
||||
// 查询指定角色用户
|
||||
DataList<User> roleUserList = AuthorityContext.getInstance().getUserController().findByCustomRole(menuId, null); |
||||
if (!roleUserList.isEmpty()) { |
||||
sysUserList.addAll(roleUserList.getList()); |
||||
} |
||||
} |
||||
if (CollectionUtils.isNotEmpty(sysUserList)) { |
||||
CpicUserBean cpicUser; |
||||
for (User user : sysUserList) { |
||||
cpicUser = new CpicUserBean(); |
||||
cpicUser.setHomeId(home.getId()); |
||||
cpicUser.setHomeName(home.getName()); |
||||
cpicUser.setUserId(user.getId()); |
||||
cpicUser.setUserAccount(user.getUserName()); |
||||
cpicUser.setUserName(user.getRealName()); |
||||
allUserList.add(cpicUser); |
||||
} |
||||
} |
||||
|
||||
// 筛选出当前部门或者角色已配置用户
|
||||
List<CpicUserBean> filterUserList = new ArrayList<>(); |
||||
for (CpicUserBean userBean : userList) { |
||||
CpicUserBean temp = allUserList.stream().filter(item -> item.getUserId().equals(userBean.getUserId())).findFirst().orElse(null); |
||||
if (null != temp) { |
||||
filterUserList.add(userBean); |
||||
} |
||||
} |
||||
result = handleUserList(filterUserList, userBeanList, home); |
||||
} |
||||
|
||||
// 新增/修改/删除列表
|
||||
List<CpicUserBean> addList = result.getOrDefault("ADD", new ArrayList<>()); |
||||
List<CpicUserBean> updateList = result.getOrDefault("UPDATE", new ArrayList<>()); |
||||
List<CpicUserBean> delList = result.getOrDefault("DELETE", new ArrayList<>()); |
||||
|
||||
// 更新
|
||||
if (CollectionUtils.isNotEmpty(updateList)) { |
||||
for (CpicUserBean user : updateList) { |
||||
CpicUserService.saveOrUpdate(user); |
||||
} |
||||
} |
||||
|
||||
// 新增
|
||||
if (CollectionUtils.isNotEmpty(addList)) { |
||||
for (CpicUserBean user : addList) { |
||||
CpicUserService.saveOrUpdate(user); |
||||
} |
||||
} |
||||
|
||||
// 删除
|
||||
if (CollectionUtils.isNotEmpty(delList)) { |
||||
for (CpicUserBean user : delList) { |
||||
CpicUserService.realDel(user.getId()); |
||||
} |
||||
} |
||||
return Response.success(); |
||||
} catch (Exception e) { |
||||
return Response.error("-1", "error:" + e.getMessage()); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 返回新增/修改/删除列表 |
||||
* |
||||
* @param oldList |
||||
* @param newList |
||||
* @return |
||||
*/ |
||||
private Map<String, List<CpicUserBean>> handleUserList(List<CpicUserBean> oldList, List<CpicUserBean> newList, CpicHomeBean home) { |
||||
Map<String, List<CpicUserBean>> result = new HashMap<>(); |
||||
List<CpicUserBean> addList = new ArrayList<>(); |
||||
List<CpicUserBean> updateList = new ArrayList<>(); |
||||
List<CpicUserBean> delList = new ArrayList<>(); |
||||
|
||||
// 获取新增和更新列表
|
||||
for (CpicUserBean item : newList) { |
||||
CpicUserBean temp = oldList.stream().filter(entry -> entry.getUserId().equals(item.getUserId())).findFirst().orElse(null); |
||||
if (null != temp) { |
||||
temp.setHomeId(home.getId()); |
||||
temp.setHomeName(home.getName()); |
||||
temp.setUserName(item.getUserName()); |
||||
updateList.add(temp); |
||||
} else { |
||||
item.setHomeId(home.getId()); |
||||
item.setHomeName(home.getName()); |
||||
addList.add(item); |
||||
} |
||||
} |
||||
|
||||
// 获取删除列表
|
||||
for (CpicUserBean item : oldList) { |
||||
CpicUserBean temp = newList.stream().filter(entry -> entry.getUserId().equals(item.getUserId())).findFirst().orElse(null); |
||||
if (null == temp) { |
||||
delList.add(item); |
||||
} |
||||
} |
||||
|
||||
result.put("ADD", addList); |
||||
result.put("UPDATE", updateList); |
||||
result.put("DELETE", delList); |
||||
return result; |
||||
} |
||||
|
||||
/** |
||||
* 已选择的用户不返回 |
||||
* |
||||
* @param allList |
||||
* @param checkedList |
||||
* @return |
||||
*/ |
||||
public List<CpicUserBean> eliminateUser(List<CpicUserBean> allList, List<CpicUserBean> checkedList) { |
||||
List<CpicUserBean> resultList = new ArrayList<>(); |
||||
for (CpicUserBean item : allList) { |
||||
CpicUserBean temp = checkedList.stream().filter(entry -> entry.getUserId().equals(item.getUserId())).findFirst().orElse(null); |
||||
if (null == temp) { |
||||
resultList.add(item); |
||||
} |
||||
} |
||||
return resultList; |
||||
} |
||||
|
||||
public List<User> getUserListByDept(String deptId) throws Exception { |
||||
List<User> sysUserList = new ArrayList<>(); |
||||
DataList<User> deptUserList = AuthorityContext.getInstance().getUserController().findByDepartment(deptId, null); |
||||
if (!deptUserList.isEmpty()) { |
||||
sysUserList.addAll(deptUserList.getList()); |
||||
} |
||||
// 部门下所有职务
|
||||
List<Post> postList = AuthorityContext.getInstance().getPostController().findByDepartment(deptId, null); |
||||
// 循环查询职务下的用户
|
||||
for (Post post : postList) { |
||||
DataList<User> postUserList = AuthorityContext.getInstance().getUserController().findByDepartmentAndPost(deptId, post.getId(), null); |
||||
if (!postUserList.isEmpty()) { |
||||
sysUserList.addAll(postUserList.getList()); |
||||
} |
||||
} |
||||
// 去重
|
||||
return sysUserList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(User::getId))), ArrayList::new)); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,60 @@
|
||||
package com.fr.plugin.cpic.web.custom; |
||||
|
||||
import com.fr.decision.inject.DecisionInjectExtraInfoBuilder; |
||||
import com.fr.decision.inject.node.impl.AbstractDecisionInjectNode; |
||||
|
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
public class CustomDecisionErrorInjectNode extends AbstractDecisionInjectNode { |
||||
|
||||
private String type; |
||||
private String homepath; |
||||
private String message; |
||||
|
||||
public String getType() { |
||||
return type; |
||||
} |
||||
|
||||
public void setType(String type) { |
||||
this.type = type; |
||||
} |
||||
|
||||
public String getHomepath() { |
||||
return homepath; |
||||
} |
||||
|
||||
public void setHomepath(String homepath) { |
||||
this.homepath = homepath; |
||||
} |
||||
|
||||
public String getMessage() { |
||||
return message; |
||||
} |
||||
|
||||
public void setMessage(String message) { |
||||
this.message = message; |
||||
} |
||||
|
||||
public CustomDecisionErrorInjectNode(String type, String homepath, String message) { |
||||
this.setType(type); |
||||
this.setHomepath(homepath); |
||||
this.setMessage(message); |
||||
} |
||||
|
||||
public String name() { |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
protected Map<String, Object> calculate(DecisionInjectExtraInfoBuilder var1) throws Exception { |
||||
HashMap var2 = new HashMap(); |
||||
if (var1.user() != null) { |
||||
var2.put("type", this.getType()); |
||||
var2.put("homepath", "/" + this.getHomepath()); |
||||
var2.put("message", this.getMessage()); |
||||
} |
||||
return var2; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,131 @@
|
||||
package com.fr.plugin.cpic.web.custom; |
||||
|
||||
import com.fanruan.api.util.StringKit; |
||||
import com.fr.base.ServerConfig; |
||||
import com.fr.base.email.EmailCenter; |
||||
import com.fr.cluster.ClusterBridge; |
||||
import com.fr.compatible.Version; |
||||
import com.fr.config.ServerPreferenceConfig; |
||||
import com.fr.decision.authority.base.constant.type.operation.ManualOperationType; |
||||
import com.fr.decision.authority.base.constant.type.operation.SyncOperationType; |
||||
import com.fr.decision.config.AppearanceConfig; |
||||
import com.fr.decision.config.DirectoryConfig; |
||||
import com.fr.decision.config.FSConfig; |
||||
import com.fr.decision.config.UserDataSetConfig; |
||||
import com.fr.decision.hyperlink.HyperlinkFactory; |
||||
import com.fr.decision.inject.DecisionInjectExtraInfoBuilder; |
||||
import com.fr.decision.inject.node.DecisionInjectNode; |
||||
import com.fr.decision.inject.node.impl.AbstractDecisionInjectNode; |
||||
import com.fr.decision.inject.node.impl.DecisionWebsocketInjectNode; |
||||
import com.fr.decision.migration.MigrationContext; |
||||
import com.fr.decision.service.DecisionService; |
||||
import com.fr.decision.update.acquirer.JSEngineInfo; |
||||
import com.fr.decision.webservice.bean.config.ThemeConfigBean; |
||||
import com.fr.decision.webservice.utils.theme.ThemeSubConfigFactory; |
||||
import com.fr.decision.webservice.v10.config.ConfigService; |
||||
import com.fr.decision.webservice.v10.login.LoginService; |
||||
import com.fr.decision.webservice.v10.register.RegisterService; |
||||
import com.fr.decision.webservice.v10.sms.SMSService; |
||||
import com.fr.decision.webservice.v10.system.SystemService; |
||||
import com.fr.general.CloudCenter; |
||||
import com.fr.general.CloudCenterConfig; |
||||
import com.fr.security.SecurityConfig; |
||||
import com.fr.security.encryption.irreversible.IrreversibleEncryptors; |
||||
import com.fr.security.encryption.transmission.TransmissionEncryptors; |
||||
import com.fr.security.encryption.transmission.impl.SM4TransmissionEncryption; |
||||
import com.fr.web.WebSocketConfig; |
||||
|
||||
import java.util.*; |
||||
|
||||
public class CustomDecisionSystemInjectNode extends AbstractDecisionInjectNode { |
||||
|
||||
public String themeId; |
||||
|
||||
public String getThemeId() { |
||||
return themeId; |
||||
} |
||||
|
||||
public void setThemeId(String themeId) { |
||||
this.themeId = themeId; |
||||
} |
||||
|
||||
public CustomDecisionSystemInjectNode(String themeId) { |
||||
this.setThemeId(themeId); |
||||
} |
||||
|
||||
public String name() { |
||||
return "system"; |
||||
} |
||||
|
||||
@Override |
||||
protected Map<String, Object> calculate(DecisionInjectExtraInfoBuilder var1) throws Exception { |
||||
HashMap var2 = new HashMap(); |
||||
if (!var1.isIgnoreDB()) { |
||||
var2.put("adminUser", DecisionService.getInstance().authority().userService().getAdminUserNameList()); |
||||
var2.put("manualAuthentication", FSConfig.getInstance().getPassport(ManualOperationType.KEY).markType()); |
||||
var2.put("syncAuthentication", FSConfig.getInstance().getPassport(SyncOperationType.KEY).markType()); |
||||
var2.put("authConfig", DecisionService.getInstance().authority().authorityService().getAuthorityConfig()); |
||||
var2.put("versionInfo", SystemService.getInstance().getSystemVersion()); |
||||
var2.putAll(RegisterService.getInstance().getSupportedFunctions()); |
||||
} |
||||
|
||||
var2.put("themeConfig", ConfigService.getInstance().getAllThemes()); |
||||
var2.put("styleConfig", ConfigService.getInstance().getStyleConfig()); |
||||
var2.put("loginInfoRemind", FSConfig.getInstance().getLoginConfig().getShowLastLoginInfo()); |
||||
var2.put("emailAvailable", EmailCenter.isEmailConfigValid()); |
||||
var2.put("smsAvailable", SMSService.getInstance().isSMSAvailable()); |
||||
var2.put("timeZone", TimeZone.getDefault().getOffset(System.currentTimeMillis())); |
||||
var2.put("hyperlink", HyperlinkFactory.getHyperlinks()); |
||||
var2.put("authentication", FSConfig.getInstance().getPassport().markType()); |
||||
var2.put("syncDataSet", UserDataSetConfig.getInstance().isTurnOn()); |
||||
var2.put("weekBegins", ServerPreferenceConfig.getInstance().getFirstDayOfWeek().getConf()); |
||||
var2.put("loginTimeout", FSConfig.getInstance().getLoginConfig().getLoginTimeout()); |
||||
var2.put("frontSeed", SecurityConfig.getInstance().getFrontSeed()); |
||||
var2.put("frontSM4Key", SM4TransmissionEncryption.getInstance().getTransmissionKey()); |
||||
var2.put("transmissionEncryption", TransmissionEncryptors.getInstance().getCurrentTransmissionEncryption().getType()); |
||||
var2.put("passwordEncryption", IrreversibleEncryptors.getInstance().getCurrentEncryptionMode().getType()); |
||||
var2.put("cookiePath", ServerConfig.getInstance().getCookiePath()); |
||||
var2.put("cluster", ClusterBridge.isClusterMode()); |
||||
|
||||
var2.put("syncUserStrategy", UserDataSetConfig.getInstance().getStrategy()); |
||||
var2.put("httpOnly", ServerConfig.getInstance().isTokenFromCookie()); |
||||
var2.put("runtimeVersion", Version.currVersion().getVersion()); |
||||
var2.put("webSocketTokenInHeader", WebSocketConfig.getInstance().isWebSocketTokenInHeader()); |
||||
var2.put("jsEngine", JSEngineInfo.getInfoMap()); |
||||
var2.put("subThemeConfig", ThemeSubConfigFactory.getConfigById(AppearanceConfig.getInstance().getThemeId())); |
||||
var2.put("sidebarOpen", DirectoryConfig.getInstance().isSidebarOpen()); |
||||
var2.put("transferred", MigrationContext.getInstance().isAlreadyTransferred()); |
||||
var2.put("urlIP", CloudCenter.getInstance().acquireConf("decision.queryip", "")); |
||||
var2.put("cloudEnabled", CloudCenterConfig.getInstance().isOnline()); |
||||
if (AppearanceConfig.getInstance().isCopyrightInfoDisplay()) { |
||||
var2.putAll(LoginService.getInstance().getCopyrightInfo(var1.request())); |
||||
} |
||||
|
||||
// 设置主题
|
||||
if (StringKit.isNotBlank(this.getThemeId())) { |
||||
var2.put("themeId", this.getThemeId()); |
||||
|
||||
// 第三方激活(尝试)
|
||||
boolean themeChanged = false; |
||||
List<ThemeConfigBean> themeList = ConfigService.getInstance().getAllThemes(); |
||||
for (ThemeConfigBean bean : themeList) { |
||||
// 设置主题
|
||||
if (StringKit.equals(bean.getThemeId(), this.getThemeId())) { |
||||
bean.setActive(true); |
||||
themeChanged = true; |
||||
} else { |
||||
bean.setActive(false); |
||||
} |
||||
} |
||||
if (themeChanged) { |
||||
var2.put("themeConfig", themeList); |
||||
} |
||||
} |
||||
|
||||
return var2; |
||||
} |
||||
|
||||
public List<DecisionInjectNode> brothers() { |
||||
return Arrays.asList(DecisionWebsocketInjectNode.KEY); |
||||
} |
||||
} |
@ -0,0 +1,88 @@
|
||||
package com.fr.plugin.cpic.web.custom; |
||||
|
||||
import com.fr.decision.config.SystemConfig; |
||||
import com.fr.decision.inject.DecisionInjectExtraInfoBuilder; |
||||
import com.fr.decision.inject.node.impl.AbstractDecisionInjectNode; |
||||
import com.fr.decision.service.DecisionService; |
||||
import com.fr.decision.webservice.utils.WebServiceUtils; |
||||
import com.fr.decision.webservice.v10.entry.EntryService; |
||||
import com.fr.decision.webservice.v10.entry.homepage.HomePageInfo; |
||||
import com.fr.decision.webservice.v10.module.ManagerModuleService; |
||||
import com.fr.security.ipcheck.IPMatchHandler; |
||||
import com.fr.stable.core.UUID; |
||||
import com.fr.third.springframework.web.context.request.RequestContextHolder; |
||||
import com.fr.third.springframework.web.context.request.ServletRequestAttributes; |
||||
|
||||
import javax.servlet.http.HttpServletRequest; |
||||
import java.util.ArrayList; |
||||
import java.util.HashMap; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
public class CustomDecisionUserInjectNode extends AbstractDecisionInjectNode { |
||||
|
||||
private String homepage; |
||||
|
||||
public String getHomepage() { |
||||
return homepage; |
||||
} |
||||
|
||||
public void setHomepage(String homepage) { |
||||
this.homepage = homepage; |
||||
} |
||||
|
||||
public CustomDecisionUserInjectNode(String homepage){ |
||||
this.setHomepage(homepage); |
||||
} |
||||
|
||||
public String name() { |
||||
return "personal"; |
||||
} |
||||
|
||||
@Override |
||||
protected Map<String, Object> calculate(DecisionInjectExtraInfoBuilder var1) throws Exception { |
||||
HashMap var2 = new HashMap(); |
||||
if (var1.user() != null) { |
||||
var2.put("username", var1.user().getUserName()); |
||||
var2.put("userId", var1.user().getId()); |
||||
var2.put("displayName", var1.user().getDisplayName()); |
||||
var2.put("userExtraProps", DecisionService.getInstance().authority().userService().getUserExtraProperties(var1.user())); |
||||
var2.put("creationType", var1.user().getCreationType().toInteger()); |
||||
var2.put("realName", var1.user().getRealName()); |
||||
HttpServletRequest var3 = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); |
||||
if (!var1.isIgnoreDB()) { |
||||
var2.put("homepage", EntryService.getInstance().getHomePageUrl(var1.user().getId())); |
||||
var2.put("modules", this.checkAdminLoginIp(var3) ? ManagerModuleService.getInstance().getAllDecisionMgrModules(var1.user().getId(), "") : new ArrayList()); |
||||
} |
||||
|
||||
// 数据门户
|
||||
List<HomePageInfo> homePageInfoList = new ArrayList<>(); |
||||
HomePageInfo homePageInfo = new HomePageInfo(); |
||||
homePageInfo.setId(UUID.randomUUID().toString().toLowerCase()); |
||||
homePageInfo.setHomePageType(2); |
||||
homePageInfo.setText("首页"); |
||||
homePageInfo.setPcURL(this.getHomepage()); |
||||
homePageInfoList.add(homePageInfo); |
||||
var2.put("homepage", homePageInfoList); |
||||
|
||||
} |
||||
|
||||
return var2; |
||||
} |
||||
|
||||
private boolean checkAdminLoginIp(HttpServletRequest var1) { |
||||
return this.checkAdminLoginIp(WebServiceUtils.getIpInfoFromRequest(var1)); |
||||
} |
||||
|
||||
private boolean checkAdminLoginIp(String var1) { |
||||
if (SystemConfig.getInstance().getEnableWhiteVerify()) { |
||||
String[] var2 = SystemConfig.getInstance().getWhiteIps(); |
||||
if (IPMatchHandler.noneMatch(var1, IPMatchHandler.addLocalIP(var2))) { |
||||
return false; |
||||
} |
||||
} |
||||
|
||||
return true; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,84 @@
|
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta http-equiv="Content-Type" content="text/html; charset=${charset}"> |
||||
<meta name="renderer" content="webkit"> |
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge"/> |
||||
<title>错误</title> |
||||
<script type="text/javascript" |
||||
src="${fineServletURL}/file?path=/com/fr/plugin/cpic/web/layui/jquery-3.6.0.min.js"></script> |
||||
<script type="text/javascript" src="${fineServletURL}/file?path=/com/fr/plugin/cpic/web/layui/layui.js"></script> |
||||
<link href="${fineServletURL}/file?path=/com/fr/plugin/cpic/web/layui/css/layui.css" rel="stylesheet"> |
||||
</head> |
||||
<body> |
||||
|
||||
</body> |
||||
<script> |
||||
layui.use(function () { |
||||
var fineServletURL = "${fineServletURL}"; |
||||
var type = "${type}"; |
||||
var homepath = "${homepath}"; |
||||
var message = "${message}"; |
||||
var layer = layui.layer |
||||
, form = layui.form |
||||
, laypage = layui.laypage |
||||
, element = layui.element |
||||
, laydate = layui.laydate |
||||
, util = layui.util |
||||
, dropdown = layui.dropdown |
||||
, tree = layui.tree |
||||
, table = layui.table; |
||||
|
||||
// 弹出报错信息 |
||||
//显示自动关闭倒计秒数 |
||||
layer.alert(message, { |
||||
time: 10 * 1000 |
||||
, success: function (layero, index) { |
||||
var timeNum = this.time / 1000, setText = function (start) { |
||||
layer.title((start ? timeNum : --timeNum), index); |
||||
}; |
||||
setText(!0); |
||||
this.timer = setInterval(setText, 1000); |
||||
if (timeNum <= 0) clearInterval(this.timer); |
||||
} |
||||
, end: function () { |
||||
clearInterval(this.timer); |
||||
if (type === 'NN') { |
||||
// 不做操作 |
||||
} |
||||
if (type === 'YY') { |
||||
// console.log("登出"); |
||||
// 登出 |
||||
$.ajax({ |
||||
type: "POST", |
||||
headers: { |
||||
"Authorization": "Bearer " + getCookie("fine_auth_token") |
||||
}, |
||||
url: "${fineServletURL}/logout", |
||||
contentType: "application/json", |
||||
success: function (res) { |
||||
// 返回首页 |
||||
window.location = window.location.origin + fineServletURL + "/home" + homepath; |
||||
} |
||||
}); |
||||
} |
||||
} |
||||
}); |
||||
|
||||
function getCookie(cookieName) { |
||||
const strCookie = document.cookie |
||||
const cookieList = strCookie.split(';') |
||||
|
||||
for (let i = 0; i < cookieList.length; i++) { |
||||
const arr = cookieList[i].split('=') |
||||
if (cookieName === arr[0].trim()) { |
||||
return arr[1] |
||||
} |
||||
} |
||||
|
||||
return '' |
||||
} |
||||
|
||||
}); |
||||
</script> |
||||
</html> |
@ -0,0 +1,570 @@
|
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta charset="UTF-8"> |
||||
<title>门户管理</title> |
||||
<meta name="renderer" content="webkit"> |
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1"> |
||||
<script type="text/javascript" |
||||
src="${fineServletURL}/file?path=/com/fr/plugin/cpic/web/layui/jquery-3.6.0.min.js"></script> |
||||
<script type="text/javascript" src="${fineServletURL}/file?path=/com/fr/plugin/cpic/web/layui/layui.js"></script> |
||||
<link href="${fineServletURL}/file?path=/com/fr/plugin/cpic/web/layui/css/layui.css" rel="stylesheet"> |
||||
<style> |
||||
.layui-field-title-2 { |
||||
margin: 10px 0 10px; |
||||
border-width: 1px 0 0; |
||||
} |
||||
|
||||
.layui-layout-right-15 { |
||||
position: absolute !important; |
||||
right: 15px; |
||||
top: 0 |
||||
} |
||||
|
||||
.layui-card-body-overflow { |
||||
overflow: auto; |
||||
} |
||||
|
||||
.users-body{ |
||||
padding:10px; |
||||
margin: 10px; |
||||
min-height: 200px; |
||||
overflow: auto; |
||||
} |
||||
.users-body .layui-btn{ |
||||
margin: 5px; |
||||
} |
||||
.users-header{ |
||||
width: 100%; |
||||
height: 40px; |
||||
} |
||||
.user-home-path{ |
||||
height: 38px; |
||||
line-height: 38px; |
||||
} |
||||
|
||||
</style> |
||||
</head> |
||||
<body> |
||||
<fieldset class="layui-elem-field layui-field-title-2"> |
||||
<legend>门户管理</legend> |
||||
</fieldset> |
||||
|
||||
<div class="layui-bg-gray" style="padding: 15px;"> |
||||
<div class="layui-row layui-col-space15"> |
||||
<div class="layui-col-md3"> |
||||
<div class="layui-card"> |
||||
<div class="layui-card-body layui-card-body-overflow"> |
||||
<div class="layui-card-header"> |
||||
<p>门户列表</p> |
||||
<div class="layui-btn-group layui-layout-right-15"> |
||||
<button id="homeAdd" type="button" class="layui-btn layui-btn-primary layui-btn-sm"><i |
||||
class="layui-icon layui-icon-addition"></i></button> |
||||
<!-- <button type="button" class="layui-btn layui-btn-primary layui-btn-sm"><i class="layui-icon layui-icon-edit"></i></button>--> |
||||
<button id="homeDel" type="button" class="layui-btn layui-btn-primary layui-btn-sm"><i |
||||
class="layui-icon layui-icon-delete"></i></button> |
||||
</div> |
||||
</div> |
||||
<ul class="layui-menu" id="homeList"> |
||||
</ul> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="layui-col-md9"> |
||||
<div class="layui-card"> |
||||
<!-- <div class="layui-card-header">卡片面板</div>--> |
||||
<div class="layui-card-body"> |
||||
<div class="layui-tab layui-tab-brief" lay-filter="homeTabBrief"> |
||||
<ul class="layui-tab-title"> |
||||
<li lay-id="111" class="layui-this">门户信息</li> |
||||
<li lay-id="222">目录权限</li> |
||||
<li lay-id="333">用户列表</li> |
||||
</ul> |
||||
<div class="layui-tab-content"> |
||||
<div class="layui-tab-item layui-show"> |
||||
<div class="layui-form" lay-filter="homeForm"> |
||||
<div class="layui-form-item"> |
||||
<label class="layui-form-label">门户名称</label> |
||||
<div class="layui-input-block"> |
||||
<input type="text" name="name" lay-verify="required" autocomplete="off" |
||||
placeholder="门户名称" class="layui-input"> |
||||
</div> |
||||
</div> |
||||
<div class="layui-form-item"> |
||||
<label class="layui-form-label">门户主题</label> |
||||
<div class="layui-input-block"> |
||||
<select name="themeId" lay-filter="themeId" id="themeSelect"> |
||||
<!-- <option value=""></option>--> |
||||
<option value="classic" selected="">经典</option> |
||||
<option value="modern">扁平化</option> |
||||
</select> |
||||
</div> |
||||
</div> |
||||
<div class="layui-form-item"> |
||||
<label class="layui-form-label">业务门户地址</label> |
||||
<div class="layui-input-block"> |
||||
<input type="text" name="path" lay-verify="required" autocomplete="off" |
||||
placeholder="门户地址" class="layui-input" oninput="pathInput(this, '${fineServletURL}')"> |
||||
</div> |
||||
</div> |
||||
<div class="layui-form-item"> |
||||
<label class="layui-form-label">地址预览</label> |
||||
<div class="layui-input-block"> |
||||
<p class="user-home-path" id="homePath"></p> |
||||
</div> |
||||
</div> |
||||
<div class="layui-form-item"> |
||||
<label class="layui-form-label">数据门户地址</label> |
||||
<div class="layui-input-block"> |
||||
<input type="text" name="mhpath" lay-verify="required" autocomplete="off" |
||||
placeholder="数据门户地址" class="layui-input"> |
||||
</div> |
||||
</div> |
||||
|
||||
|
||||
<input type="hidden" id="id" name="id" value=""> |
||||
<input type="hidden" id="themeName" name="themeName" value=""> |
||||
|
||||
<div class="layui-form-item"> |
||||
<div class="layui-input-block"> |
||||
<button class="layui-btn layui-btn-normal" id="subBtn" lay-submit |
||||
lay-filter="submitHome">保存 |
||||
</button> |
||||
<!-- <button type="submit" class="layui-btn" lay-submit="" lay-filter="demo1">保存</button>--> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="layui-tab-item"> |
||||
<div class="home-entry-tree" id="entryTree" style="margin: 20px;display: block; overflow: auto;"></div> |
||||
</div> |
||||
<div class="layui-tab-item"> |
||||
<div class="users-header"> |
||||
<button type="button" id="userEdit" class="layui-btn layui-btn-primary layui-border-blue" style="float: right;">编辑用户</button> |
||||
</div> |
||||
<div class="users-body" > |
||||
<div class="users-body-list" id="userList"> |
||||
</div> |
||||
</div> |
||||
<div class="users-toolbar" id="userPageBar"> |
||||
|
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</body> |
||||
<script> |
||||
layui.use(function () { |
||||
var this_ = this; |
||||
var currentHomeId = ""; |
||||
var currentHomeName = ""; |
||||
var fineServletURL = "${fineServletURL}"; |
||||
var treeData = []; |
||||
var layer = layui.layer |
||||
, form = layui.form |
||||
, laypage = layui.laypage |
||||
, element = layui.element |
||||
, laydate = layui.laydate |
||||
, util = layui.util |
||||
, dropdown = layui.dropdown |
||||
, tree = layui.tree |
||||
, table = layui.table; |
||||
|
||||
// 动态设置页面高度 |
||||
var docClientH = document.documentElement.clientHeight; // 可见区域高度 |
||||
$(".layui-card-body").height(docClientH - 95); |
||||
$(".users-body").height(docClientH - 95 - 180); |
||||
$(".home-entry-tree").height(docClientH - 95 - 90); |
||||
$(window).resize(function () { |
||||
docClientH = document.documentElement.clientHeight; |
||||
$(".layui-card-body").height(docClientH - 95); |
||||
$(".users-body").height(docClientH - 95 - 180); |
||||
$(".home-entry-tree").height(docClientH - 95 - 90); |
||||
}); |
||||
|
||||
// 初始化 |
||||
// initThemeList(form); |
||||
initHomeList(currentHomeId, currentHomeName); |
||||
initEntryTree(this_, currentHomeId, currentHomeName); |
||||
// url预览 |
||||
$("#homePath").text(window.location.origin + fineServletURL + '/home/'); |
||||
|
||||
// 新增门户按钮事件 |
||||
$("#homeAdd").bind("click", function () { |
||||
// 清除选中 |
||||
currentHomeId = ""; |
||||
currentHomeName = ""; |
||||
initHomeList(currentHomeId, currentHomeName); |
||||
// 切换选项卡 |
||||
element.tabChange('homeTabBrief', '111'); |
||||
// 初始化表单 |
||||
form.val('homeForm', { |
||||
id: "", |
||||
name: "", |
||||
themeId: "classic", |
||||
themeName: "经典", |
||||
path: "", |
||||
mhpath: "" |
||||
}); |
||||
// url预览 |
||||
$("#homePath").text(origin + fineServletURL + '/home/'); |
||||
}); |
||||
|
||||
// 删除门户按钮事件 |
||||
$("#homeDel").bind("click", function () { |
||||
if(!currentHomeId || currentHomeId === ""){ |
||||
layer.msg("请选择门户!"); |
||||
return false; |
||||
} |
||||
|
||||
layer.confirm('确定要删除门户['+currentHomeName+']?', { |
||||
btn: ['确定','取消'] //按钮 |
||||
}, function(index, layero){ |
||||
// 删除选中门户 |
||||
$.ajax({ |
||||
type: "POST", |
||||
url: "${fineServletURL}/cpic/home/del", |
||||
contentType: "application/json", |
||||
data: JSON.stringify({ |
||||
id: currentHomeId |
||||
}), |
||||
success: function (result) { |
||||
if (result.data === "success") { |
||||
layer.msg("删除成功!"); |
||||
// 清除选中 |
||||
currentHomeId = ""; |
||||
currentHomeName = ""; |
||||
initHomeList(currentHomeId, currentHomeName); |
||||
// 切换选项卡 |
||||
element.tabChange('homeTabBrief', '111'); |
||||
// 初始化表单 |
||||
form.val('homeForm', { |
||||
id: "", |
||||
name: "", |
||||
themeId: "classic", |
||||
themeName: "经典", |
||||
path: "", |
||||
mhpath: "" |
||||
}); |
||||
} else if (result.errorCode === "-1" || result.errorCode === "500") { |
||||
layer.msg(result.errorMsg); |
||||
} |
||||
}, |
||||
error: function (result) { |
||||
} |
||||
}); |
||||
// 关闭弹窗 |
||||
layer.close(index); |
||||
}, function(index){ |
||||
layer.close(index); |
||||
}); |
||||
}); |
||||
|
||||
// 门户保存按钮 |
||||
form.on('submit(submitHome)', function (data) { |
||||
$(data.elem).attr("disabled", true); |
||||
|
||||
// 保存 |
||||
$.ajax({ |
||||
type: "POST", |
||||
url: "${fineServletURL}/cpic/home/edit", |
||||
contentType: "application/json", |
||||
data: JSON.stringify(data.field), |
||||
success: function (result) { |
||||
layer.msg("保存成功!"); |
||||
var home = result.data; |
||||
currentHomeId = home.id; |
||||
currentHomeName = home.name; |
||||
// 刷新列表 |
||||
initHomeList(currentHomeId, currentHomeName); |
||||
$(data.elem).attr("disabled", false); |
||||
}, |
||||
error: function (result) { |
||||
$(data.elem).attr("disabled", false); |
||||
layer.msg('失败:' + result, { |
||||
icon: 1, |
||||
time: 2000 //2秒关闭(如果不配置,默认是3秒) |
||||
}, function () { |
||||
//do something |
||||
}); |
||||
} |
||||
}); |
||||
|
||||
return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。 |
||||
}); |
||||
|
||||
// 选项卡切换事件 |
||||
element.on('tab(homeTabBrief)', function(data){ |
||||
var index = data.index; |
||||
if(index > 0){ |
||||
if(!currentHomeId || currentHomeId === ""){ |
||||
layer.msg("请选择门户!"); |
||||
element.tabChange('homeTabBrief', '111'); |
||||
return; |
||||
} |
||||
} |
||||
if(index === 1){ |
||||
// 加载目录树 |
||||
initEntryTree(this_, currentHomeId, currentHomeName); |
||||
} |
||||
if(index === 2){ |
||||
// 加载用户列表 |
||||
initUserList(this_, currentHomeId, currentHomeName); |
||||
} |
||||
|
||||
}); |
||||
|
||||
// 门户列表点击事件 |
||||
dropdown.on('click(homeList)', function (options) { |
||||
var othis = $(this); //当前菜单列表的 DOM 对象 |
||||
// console.log(options); //菜单列表的 lay-options 中的参数 |
||||
// 切换选项卡 |
||||
// element.tabChange('homeTabBrief', '111'); |
||||
// 初始化表单 |
||||
form.val('homeForm', { |
||||
id: options.id, |
||||
name: options.name, |
||||
themeId: options.themeId, |
||||
themeName: options.themeName, |
||||
path: options.path, |
||||
mhpath: options.mhpath |
||||
}); |
||||
// url预览 |
||||
$("#homePath").text(window.location.origin + fineServletURL + '/home/' + options.path); |
||||
// 当前选中 |
||||
currentHomeId = options.id; |
||||
currentHomeName = options.name; |
||||
// 重新渲染 |
||||
form.render('select', 'homeForm'); |
||||
// 加载目录树 |
||||
initEntryTree(this_, currentHomeId, currentHomeName); |
||||
// initEntryTreeChecked(tree, this_.currentHomeId); |
||||
// 加载用户列表 |
||||
initUserList(this_, currentHomeId, currentHomeName); |
||||
}); |
||||
|
||||
// 编辑用户按钮事件 |
||||
$("#userEdit").bind("click", function () { |
||||
if(!currentHomeId || currentHomeId === ""){ |
||||
layer.msg("请选择门户!"); |
||||
// element.tabChange('homeTabBrief', '111'); |
||||
return; |
||||
} |
||||
// 可见区域宽度 |
||||
var docClientW = document.documentElement.clientWidth; |
||||
// 可见区域高度 |
||||
var docClientH = document.documentElement.clientHeight; |
||||
// 计算宽高 |
||||
var openwidth = (docClientW * 90)/100; |
||||
var openheight = (docClientH * 90)/100; |
||||
|
||||
//iframe层 |
||||
var index = layer.open({ |
||||
title: '编辑用户', |
||||
type: 2, |
||||
area: [docClientW + 'px', docClientH + 'px'], |
||||
fixed: false, //不固定 |
||||
maxmin: false, // 是否显示最大/最小化 |
||||
content: "${fineServletURL}/cpic/user?homeId="+currentHomeId, |
||||
end: function(){ |
||||
// 关闭iframe后刷新用户列表 |
||||
initUserList(this_, currentHomeId, currentHomeName); |
||||
} |
||||
}); |
||||
layer.full(index); |
||||
}); |
||||
|
||||
}); |
||||
|
||||
// 输入事件 |
||||
function pathInput(inputItem, fineServletURL){ |
||||
var origin = window.location.origin; |
||||
// url预览 |
||||
$("#homePath").text(origin + fineServletURL + '/home/'+ inputItem.value); |
||||
} |
||||
|
||||
// 加载门户列表 |
||||
function initHomeList(homeId, homeName) { |
||||
$.ajax({ |
||||
url: "${fineServletURL}/cpic/home/list", |
||||
success: function (result) { |
||||
// console.log("门户列表", result, result.data.homeList.length); |
||||
// 清空元素 |
||||
$("#homeList").children().remove(); |
||||
// 加载元素 |
||||
if (result && result.data.homeList.length > 0) { |
||||
for (let i = 0; i < result.data.homeList.length; i++) { |
||||
let item = result.data.homeList[i]; |
||||
if (homeId && homeId === item.id) { |
||||
$("#homeList").append('<li lay-options=\"{index:\'' + i + '\', id:\'' + item.id + '\', name:\'' + item.name + '\', path:\'' + item.path + '\', mhpath:\'' + item.mhpath + '\', themeId:\'' + item.themeId + '\', themeName:\'' + item.themeName + '\'}\" class=\"layui-menu-item-checked\">' + |
||||
'<div class=\"layui-menu-body-title\">' + item.name + '</div>' + |
||||
'</li>'); |
||||
|
||||
} else { |
||||
$("#homeList").append('<li lay-options=\"{index:\'' + i + '\', id:\'' + item.id + '\', name:\'' + item.name + '\', path:\'' + item.path + '\', mhpath:\'' + item.mhpath + '\', themeId:\'' + item.themeId + '\', themeName:\'' + item.themeName + '\'}\"' + |
||||
'<div class=\"layui-menu-body-title\">' + item.name + '</div>' + |
||||
'</li>'); |
||||
|
||||
} |
||||
} |
||||
} else { |
||||
$("#homeList").html("<p>没有数据</p>"); |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
|
||||
// 加载主题列表 |
||||
function initThemeList(form) { |
||||
$.ajax({ |
||||
url: "${fineServletURL}/cpic/home/themes", |
||||
success: function (result) { |
||||
// console.log("主题列表", result, result.data.length); |
||||
// 加载元素 |
||||
if (result && result.data.length > 0) { |
||||
for (let i = 0; i < result.data.length; i++) { |
||||
let item = result.data[i]; |
||||
$("#themeSelect").append('<option value=\'' + item.themeId + '\'>' + item.name + '</option>'); |
||||
} |
||||
} |
||||
// 重新渲染 |
||||
form.render('select', 'homeForm'); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
// 加载目录树 |
||||
function initEntryTree(this_, currentHomeId, currentHomeName) { |
||||
// 清空元素 |
||||
$('#entryTree').children().remove(); |
||||
|
||||
$.ajax({ |
||||
async: false, |
||||
url: "${fineServletURL}/cpic/home/entrys?homeId=" + currentHomeId, |
||||
success: function (result) { |
||||
this_.tree.render({ |
||||
elem: '#entryTree' |
||||
,data: result.data |
||||
,showCheckbox: true //是否显示复选框 |
||||
,showLine: false |
||||
,id: 'entryTree1' |
||||
,oncheck: function(obj){ |
||||
var itemData = obj.data; |
||||
// console.log("当前选择项",itemData); |
||||
// itemData.checked = obj.checked; |
||||
// var checkData = this_.tree.getChecked('entryTree1'); |
||||
// console.log("全部选择项",checkData); |
||||
|
||||
// 获取所有选中项 |
||||
var checkeditems = []; |
||||
$('#entryTree').find('.layui-form-checked').each(function(){ |
||||
var itemvalue = $(this).prev().val(); |
||||
var itemtext = $(this).next().text(); |
||||
checkeditems.push({ |
||||
id: itemvalue, |
||||
title: itemtext |
||||
}); |
||||
}); |
||||
// console.log("全部选择项2",checkeditems); |
||||
|
||||
$.ajax({ |
||||
type: "POST", |
||||
async: false, |
||||
url:"${fineServletURL}/cpic/home/entrys?homeId=" + currentHomeId, |
||||
contentType: "application/json", |
||||
data: JSON.stringify(checkeditems), |
||||
success:function(res){ |
||||
if(res.data === "success"){ |
||||
// initEntryTree(tree, this_.currentHomeId); |
||||
initEntryTreeChecked(this_.tree, currentHomeId); |
||||
}else if(res.errorCode === "-1"){ |
||||
layer.msg('更新目录失败'); |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
}); |
||||
initEntryTreeChecked(this_.tree, currentHomeId); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
// 加载用户列表 |
||||
function initUserList(this_, currentHomeId, currentHomeName) { |
||||
// 清空元素 |
||||
$('#userList').children().remove(); |
||||
|
||||
$.ajax({ |
||||
async: false, |
||||
url: "${fineServletURL}/cpic/user/list2?homeId=" + currentHomeId+ "&menuId=100&menuType=all", |
||||
success: function (result) { |
||||
|
||||
// 加载列表 |
||||
var userList = result.data; |
||||
|
||||
// 加载分页 |
||||
this_.laypage.render({ |
||||
elem: 'userPageBar' |
||||
,count: userList.length |
||||
,limit: 50 |
||||
,groups: 2 |
||||
// ,limits: [50, 100, 200] |
||||
// ,layout: ['count', 'prev', 'page', 'next', 'limit', 'refresh', 'skip'] |
||||
,layout: ['count', 'prev', 'page', 'next'] |
||||
,theme: '#1E9FFF' |
||||
,jump: function(obj){ |
||||
//渲染 |
||||
document.getElementById('userList').innerHTML = function(){ |
||||
var arr = [] |
||||
,thisData = userList.concat().splice(obj.curr*obj.limit - obj.limit, obj.limit); |
||||
layui.each(thisData, function(index, item){ |
||||
// arr.push('<li>'+ item +'</li>'); |
||||
arr.push('<button type=\"button\" class=\"layui-btn layui-btn-radius layui-btn-primary\">'+item.userName+'('+item.userAccount+')</button>'); |
||||
}); |
||||
return arr.join(''); |
||||
}(); |
||||
} |
||||
}); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
// 加载目录树选中 |
||||
function initEntryTreeChecked(tree, homeId) { |
||||
// console.log(homeId); |
||||
if(!homeId){ |
||||
return; |
||||
} |
||||
|
||||
// 复选框勾选 |
||||
$.ajax({ |
||||
async: false, |
||||
url: "${fineServletURL}/cpic/home/entrychecked?homeId=" + homeId, |
||||
success: function (result1) { |
||||
if(result1.data && result1.data.length > 0 ){ |
||||
|
||||
// 清空全部选中 |
||||
$("input[same='layuiTreeCheck']").attr("checked", false); |
||||
$(".layui-form-checked").removeClass("layui-form-checked"); |
||||
|
||||
for (var item in result1.data) { |
||||
var checkinputname = "layuiTreeCheck_"+result1.data[item]; |
||||
// console.log($('input[name='+checkinputname+']')); |
||||
$('input[name='+checkinputname+']').attr("checked", true); |
||||
$('input[name='+checkinputname+']').next().addClass("layui-form-checked"); |
||||
} |
||||
|
||||
// tree.reload('entryTree1', {}); |
||||
} |
||||
|
||||
} |
||||
}); |
||||
} |
||||
</script> |
||||
</html> |
@ -0,0 +1,40 @@
|
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta http-equiv="Content-Type" content="text/html; charset=${charset}"> |
||||
<meta name="renderer" content="webkit"> |
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge"/> |
||||
<title>${title}</title> |
||||
<link rel="preload" href="${fineServletURL}/resources?path=/com/fr/web/ui/font/iconfont.woff" as="font" type="font/woff" crossorigin> |
||||
<!--css文件--> |
||||
${styleTag} |
||||
</head> |
||||
<body> |
||||
<div id="wrapper"></div> |
||||
|
||||
<script type="text/javascript"> |
||||
window.Dec = window.Dec || {}; |
||||
window.Dec.injection = window.Dec.injection || {}; |
||||
</script> |
||||
|
||||
<script type="text/javascript"> |
||||
Dec.fineServletURL = "${fineServletURL}"; |
||||
Dec.system = ${system}; |
||||
// 设置主题 |
||||
// Dec.system.themeId = "${themeId}"; |
||||
|
||||
Dec.personal = ${personal}; |
||||
</script> |
||||
${scriptTag} |
||||
<script> |
||||
Dec.start({ |
||||
theme: { |
||||
name: "custom" |
||||
} |
||||
}); |
||||
// 设置网页标题 |
||||
// Dec.platformStyles.platformTitle = "${title}"; |
||||
</script> |
||||
</body> |
||||
|
||||
</html> |
@ -0,0 +1,664 @@
|
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
<head> |
||||
<meta charset="UTF-8"> |
||||
<title>编辑用户</title> |
||||
<meta name="renderer" content="webkit"> |
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> |
||||
<meta name="viewport" content="width=device-width, initial-scale=1"> |
||||
<script type="text/javascript" |
||||
src="${fineServletURL}/file?path=/com/fr/plugin/cpic/web/layui/jquery-3.6.0.min.js"></script> |
||||
<script type="text/javascript" src="${fineServletURL}/file?path=/com/fr/plugin/cpic/web/layui/layui.js"></script> |
||||
<link href="${fineServletURL}/file?path=/com/fr/plugin/cpic/web/layui/css/layui.css" rel="stylesheet"> |
||||
<style> |
||||
.layui-layout-right-15 { |
||||
position: absolute !important; |
||||
right: 15px; |
||||
top: 2px |
||||
} |
||||
.users-body{ |
||||
padding:10px; |
||||
margin: 10px; |
||||
min-height: 200px; |
||||
overflow: auto; |
||||
} |
||||
.users-body .users-left-list .layui-btn{ |
||||
margin: 5px; |
||||
} |
||||
.users-body .users-right-list .layui-btn{ |
||||
margin: 5px; |
||||
} |
||||
|
||||
</style> |
||||
</head> |
||||
<body> |
||||
<div class="layui-bg-gray" style="padding: 10px;"> |
||||
<div class="layui-row layui-col-space15"> |
||||
<div class="layui-col-md2"> |
||||
<div class="layui-card"> |
||||
<div class="layui-card-header"> |
||||
<p>筛选维度</p> |
||||
</div> |
||||
<div class="layui-card-body"> |
||||
<div class="users-dimension" > |
||||
<div class="users-dimension-list" id="dimensionList"> |
||||
<form class="layui-form" action="" lay-filter="dimensionForm"> |
||||
<div class="layui-form-item"> |
||||
<div class="layui-input-block" style="margin-left: 0px;"> |
||||
<input type="radio" name="dimension" lay-filter="dimension-radio" value="all" title="全部用户" checked=""> |
||||
<input type="radio" name="dimension" lay-filter="dimension-radio" value="department" title="部门"> |
||||
<input type="radio" name="dimension" lay-filter="dimension-radio" value="customrole" title="角色"> |
||||
</div> |
||||
</div> |
||||
</form> |
||||
</div> |
||||
</div> |
||||
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 10px;"> |
||||
<legend></legend> |
||||
</fieldset> |
||||
<div class="users-dimension-body" style="overflow: auto;"> |
||||
<div class="users-dimension-tree" id="dimensionTree"> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="layui-col-md5"> |
||||
<div class="layui-card"> |
||||
<div class="layui-card-header"> |
||||
<p>用户列表</p> |
||||
<div class="layui-layout-right-15"> |
||||
<button type="button" id="allSelect" class="layui-btn layui-btn-radius layui-btn-primary" style="float: right;">全选</button> |
||||
</div> |
||||
</div> |
||||
<div class="layui-card-body"> |
||||
<div class="users-body" > |
||||
<div class="users-left-list" id="leftList"> |
||||
</div> |
||||
</div> |
||||
<div class="left-toolbar" id="leftPageBar"></div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="layui-col-md5"> |
||||
<div class="layui-card"> |
||||
<div class="layui-card-header"> |
||||
<p>选中列表</p> |
||||
<div class="layui-layout-right-15"> |
||||
<button type="button" id="allCancel" class="layui-btn layui-btn-radius layui-btn-primary" style="float: right;">清空</button> |
||||
</div> |
||||
</div> |
||||
<div class="layui-card-body"> |
||||
<div class="users-body" > |
||||
<div class="users-right-list" id="rightList"> |
||||
</div> |
||||
</div> |
||||
<div class="right-toolbar" id="rightPageBar"></div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div style="width: 100%;height: 50px;"> |
||||
<div style="float: right;padding: 6px;padding-right: 30px;"> |
||||
<button type="button" id="userSubmit" class="layui-btn layui-btn-normal" style="float: left;margin-right: 15px;">保存</button> |
||||
<button type="button" id="userCancel" class="layui-btn layui-btn-primary" style="float: right;">关闭</button> |
||||
</div> |
||||
</div> |
||||
</body> |
||||
<script> |
||||
layui.use(function () { |
||||
var this_ = this; |
||||
var leftData = []; |
||||
var leftRemoveData = []; |
||||
var rightData = []; |
||||
var rightRemoveData = []; |
||||
var selectMenuId = "100"; |
||||
var selectMenuType = "all"; |
||||
var layer = layui.layer |
||||
, form = layui.form |
||||
, laypage = layui.laypage |
||||
, element = layui.element |
||||
, laydate = layui.laydate |
||||
, util = layui.util |
||||
, dropdown = layui.dropdown |
||||
, tree = layui.tree |
||||
, table = layui.table; |
||||
|
||||
// 窗口索引 |
||||
var iframeIndex = parent.layer.getFrameIndex(window.name); |
||||
|
||||
// 动态设置页面高度 |
||||
var docClientH = document.documentElement.clientHeight; // 可见区域高度 |
||||
$(".layui-card-body").height(docClientH - 133); |
||||
$(".users-body").height(docClientH - 133 - 80); |
||||
$(".users-dimension-body").height(docClientH - 163 - 80); |
||||
$(window).resize(function () { |
||||
docClientH = document.documentElement.clientHeight; |
||||
$(".layui-card-body").height(docClientH - 133); |
||||
$(".users-body").height(docClientH - 133 - 80); |
||||
$(".users-dimension-body").height(docClientH - 163 - 80); |
||||
}); |
||||
|
||||
// 单选事件 |
||||
form.on('radio(dimension-radio)', function(data){ |
||||
if(selectMenuType === data.value){ |
||||
return; |
||||
} |
||||
if((leftRemoveData && leftRemoveData.length > 0) || (rightRemoveData && rightRemoveData.length > 0)){ |
||||
layer.confirm('放弃修改?', { |
||||
btn: ['确定','取消'] //按钮 |
||||
}, function(index, layero){ |
||||
// 清空记录 |
||||
selectMenuType = data.value; |
||||
this_.leftData = []; |
||||
this_.rightData = []; |
||||
leftRemoveData = []; |
||||
rightRemoveData = []; |
||||
changeDimension(); |
||||
// 关闭弹窗 |
||||
layer.close(index); |
||||
}, function(index){ |
||||
// console.log(selectMenuType); |
||||
form.val("dimensionForm",{ |
||||
dimension: selectMenuType |
||||
}); |
||||
layer.close(index); |
||||
}); |
||||
}else{ |
||||
selectMenuType = data.value; |
||||
this_.leftData = []; |
||||
this_.rightData = []; |
||||
leftRemoveData = []; |
||||
rightRemoveData = []; |
||||
// console.log(this_.leftData, this_.rightData); |
||||
changeDimension(); |
||||
} |
||||
}); |
||||
|
||||
function changeDimension(){ |
||||
// 切换菜单 |
||||
if(selectMenuType === "all"){ |
||||
// 加载左侧用户列表 |
||||
initLeftListData(this_, '100', "all"); |
||||
// 加载右侧用户列表 |
||||
initRightListData(this_, '100', "all"); |
||||
}else{ |
||||
// 先清空数据 |
||||
initLeftList(this_); |
||||
initRightList(this_); |
||||
// 获取菜单 |
||||
$.ajax({ |
||||
url: "${fineServletURL}/cpic/user/menus?dimensionType=" + selectMenuType, |
||||
success: function (result) { |
||||
this_.tree.render({ |
||||
elem: '#dimensionTree' |
||||
,data: result.data |
||||
,onlyIconControl: true //是否仅允许节点左侧图标控制展开收缩 |
||||
,click: function(obj){ |
||||
// layer.msg(JSON.stringify(obj.data)); |
||||
selectMenuId = obj.data.id; |
||||
// 根据类型加载用户 |
||||
// 有操作记录时提示是否放弃 |
||||
if((leftRemoveData && leftRemoveData.length > 0) || (rightRemoveData && rightRemoveData.length > 0)){ |
||||
layer.confirm('放弃修改?', { |
||||
btn: ['确定','取消'] //按钮 |
||||
}, function(index, layero){ |
||||
// 加载左侧用户列表 |
||||
initLeftListData(this_, selectMenuId, selectMenuType); |
||||
// 加载右侧用户列表 |
||||
initRightListData(this_, selectMenuId, selectMenuType); |
||||
// 清空记录 |
||||
leftRemoveData = []; |
||||
rightRemoveData = []; |
||||
// 关闭弹窗 |
||||
layer.close(index); |
||||
}, function(index){ |
||||
layer.close(index); |
||||
}); |
||||
}else{ |
||||
// 加载左侧用户列表 |
||||
initLeftListData(this_, selectMenuId, selectMenuType); |
||||
// 加载右侧用户列表 |
||||
initRightListData(this_, selectMenuId, selectMenuType); |
||||
// 清空记录 |
||||
leftRemoveData = []; |
||||
rightRemoveData = []; |
||||
} |
||||
} |
||||
}); |
||||
} |
||||
}); |
||||
} |
||||
} |
||||
|
||||
$.ajax({ |
||||
url: "${fineServletURL}/cpic/user/menu", |
||||
success: function (result) { |
||||
this_.menuData = eval('(' + result.data + ')'); |
||||
dropdown.render({ |
||||
elem: '#userFilterMenu' |
||||
,data: this_.menuData |
||||
,click: function(data, othis){ |
||||
var that = this; |
||||
// 有操作记录时提示是否放弃 |
||||
if((leftRemoveData && leftRemoveData.length > 0) || (rightRemoveData && rightRemoveData.length > 0)){ |
||||
layer.confirm('放弃修改?', { |
||||
btn: ['确定','取消'] //按钮 |
||||
}, function(index, layero){ |
||||
that.elem.val(data.title); |
||||
selectMenuId = data.id; |
||||
selectMenuType = data.mtype; |
||||
// 加载左侧用户列表 |
||||
initLeftListData(this_, selectMenuId, selectMenuType); |
||||
// 加载右侧用户列表 |
||||
initRightListData(this_, selectMenuId, selectMenuType); |
||||
// 清空记录 |
||||
leftRemoveData = []; |
||||
rightRemoveData = []; |
||||
// 关闭弹窗 |
||||
layer.close(index); |
||||
}, function(index){ |
||||
layer.close(index); |
||||
}); |
||||
}else{ |
||||
that.elem.val(data.title); |
||||
selectMenuId = data.id; |
||||
selectMenuType = data.mtype; |
||||
// 加载左侧用户列表 |
||||
initLeftListData(this_, selectMenuId, selectMenuType); |
||||
// 加载右侧用户列表 |
||||
initRightListData(this_, selectMenuId, selectMenuType); |
||||
// 清空记录 |
||||
leftRemoveData = []; |
||||
rightRemoveData = []; |
||||
} |
||||
} |
||||
,style: 'width: 235px;' |
||||
}); |
||||
} |
||||
}); |
||||
|
||||
// 左侧用户列表点击事件监听 |
||||
$(document).on("click", ".left-user-btn", function () { |
||||
var userId = $(this).attr("userId"); |
||||
var userName = $(this).attr("userName"); |
||||
var userAccount = $(this).attr("userAccount"); |
||||
|
||||
// 右侧列表add |
||||
var userItem = { |
||||
userId: userId, |
||||
userName: userName, |
||||
userAccount: userAccount |
||||
} |
||||
var isadd = rightListAdd(this_, userItem); |
||||
if(isadd){ |
||||
// 右侧新增成功时记录左侧删除数据 |
||||
var leftRemoveTemp; |
||||
for (const index in leftRemoveData) { |
||||
if(leftRemoveData[index]['userId'] === userId){ |
||||
leftRemoveTemp = index; |
||||
break; |
||||
} |
||||
} |
||||
if(!leftRemoveTemp){ |
||||
leftRemoveData.unshift(userItem); |
||||
} |
||||
// 右侧新增成功时去除右侧删除记录(如果有) |
||||
rightRemoveData = arrRemoveItem(rightRemoveData, 'userId', userId); |
||||
} |
||||
|
||||
// console.log("leftClick", this_.leftData, " || ", leftRemoveData, " || ", this_.rightData, " || ", rightRemoveData); |
||||
}); |
||||
|
||||
// 右侧用户列表点击事件监听 |
||||
$(document).on("click", ".right-user-btn", function () { |
||||
var userId = $(this).attr("userId"); |
||||
var userName = $(this).attr("userName"); |
||||
var userAccount = $(this).attr("userAccount"); |
||||
|
||||
// 右侧列表add |
||||
var userItem = { |
||||
userId: userId, |
||||
userName: userName, |
||||
userAccount: userAccount |
||||
} |
||||
var isadd = leftListAdd(this_, userItem); |
||||
if(isadd){ |
||||
// 左侧新增成功时记录右侧删除数据 |
||||
var rightRemoveTemp; |
||||
for (const index in rightRemoveData) { |
||||
if(rightRemoveData[index]['userId'] === userId){ |
||||
rightRemoveTemp = index; |
||||
break; |
||||
} |
||||
} |
||||
if(!rightRemoveTemp){ |
||||
rightRemoveData.unshift(userItem); |
||||
} |
||||
// 左侧新增成功时去除左侧删除记录(如果有) |
||||
leftRemoveData = arrRemoveItem(leftRemoveData, 'userId', userId); |
||||
} |
||||
|
||||
// console.log("rightClick", this_.leftData, " || ", leftRemoveData, " || ", this_.rightData, " || ", rightRemoveData); |
||||
}); |
||||
|
||||
// 全选按钮事件 |
||||
$("#allSelect").bind("click", function () { |
||||
// 加入右侧 |
||||
var tempList = []; |
||||
for (const index in this_.leftData) { |
||||
var hasit = false; |
||||
for (const index2 in this_.rightData) { |
||||
if(this_.leftData[index]['userId'] === this_.rightData[index2]['userId']){ |
||||
hasit = true; |
||||
break; |
||||
} |
||||
} |
||||
if(!hasit){ |
||||
tempList.unshift(this_.leftData[index]); |
||||
this_.rightData.unshift(this_.leftData[index]); |
||||
} |
||||
} |
||||
// 记录移除 |
||||
for (const index in tempList) { |
||||
var hasit = false; |
||||
for (const index2 in leftRemoveData) { |
||||
if(tempList[index]['userId'] === leftRemoveData[index2]['userId']){ |
||||
hasit = true; |
||||
break; |
||||
} |
||||
} |
||||
if(!hasit){ |
||||
leftRemoveData.unshift(tempList[index]); |
||||
} |
||||
} |
||||
// 清空左侧 |
||||
this_.leftData = []; |
||||
// 清空右侧删除记录 |
||||
rightRemoveData = []; |
||||
|
||||
// console.log("allSelect", this_.leftData, " || ", leftRemoveData, " || ", this_.rightData, " || ", rightRemoveData); |
||||
|
||||
// 重新渲染 |
||||
initLeftList(this_); |
||||
initRightList(this_); |
||||
}); |
||||
|
||||
// 清空按钮事件 |
||||
$("#allCancel").bind("click", function () { |
||||
// 加入左侧 |
||||
var tempList = []; |
||||
for (const index in this_.rightData) { |
||||
var hasit = false; |
||||
for (const index2 in this_.leftData) { |
||||
if(this_.rightData[index]['userId'] === this_.leftData[index2]['userId']){ |
||||
hasit = true; |
||||
break; |
||||
} |
||||
} |
||||
if(!hasit){ |
||||
tempList.unshift(this_.rightData[index]); |
||||
this_.leftData.unshift(this_.rightData[index]); |
||||
} |
||||
} |
||||
// 记录移除 |
||||
for (const index in tempList) { |
||||
var hasit = false; |
||||
for (const index2 in rightRemoveData) { |
||||
if(tempList[index]['userId'] === rightRemoveData[index2]['userId']){ |
||||
hasit = true; |
||||
break; |
||||
} |
||||
} |
||||
if(!hasit){ |
||||
rightRemoveData.unshift(tempList[index]); |
||||
} |
||||
} |
||||
// 清空右侧 |
||||
this_.rightData = []; |
||||
// 清除左侧删除记录 |
||||
leftRemoveData = []; |
||||
|
||||
// console.log("allCancel", this_.leftData, " || ", leftRemoveData, " || ", this_.rightData, " || ", rightRemoveData); |
||||
|
||||
// 重新渲染 |
||||
initLeftList(this_); |
||||
initRightList(this_); |
||||
}); |
||||
|
||||
// 保存按钮事件 |
||||
$("#userSubmit").bind("click", function () { |
||||
if((leftRemoveData && leftRemoveData.length > 0) || (rightRemoveData && rightRemoveData.length > 0)){ |
||||
// 保存 |
||||
$.ajax({ |
||||
type: "POST", |
||||
async: false, |
||||
url:"${fineServletURL}/cpic/user/add?homeId=" + GetQueryString("homeId") + "&menuId="+selectMenuId + "&menuType=" + selectMenuType, |
||||
contentType: "application/json", |
||||
data: JSON.stringify(this_.rightData), |
||||
success:function(res){ |
||||
if(res.data === "success"){ |
||||
layer.msg("保存成功"); |
||||
// 加载左侧用户列表 |
||||
initLeftListData(this_, selectMenuId, selectMenuType); |
||||
// 加载右侧用户列表 |
||||
initRightListData(this_, selectMenuId, selectMenuType); |
||||
// 清除记录 |
||||
leftRemoveData = []; |
||||
rightRemoveData = []; |
||||
}else if(res.errorCode === "-1"){ |
||||
layer.msg('更新用户失败'); |
||||
} |
||||
} |
||||
}); |
||||
}else{ |
||||
return false; |
||||
} |
||||
}); |
||||
|
||||
// 取消按钮 |
||||
$('#userCancel').click(function(){ |
||||
// 有操作记录时提示是否放弃 |
||||
if((leftRemoveData && leftRemoveData.length > 0) || (rightRemoveData && rightRemoveData.length > 0)){ |
||||
layer.confirm('放弃修改?', { |
||||
btn: ['确定','取消'] //按钮 |
||||
}, function(index, layero){ |
||||
// 关闭弹窗 |
||||
layer.close(index); |
||||
// 关闭页面 |
||||
parent.layer.close(iframeIndex); |
||||
}, function(index){ |
||||
layer.close(index); |
||||
}); |
||||
}else{ |
||||
parent.layer.close(iframeIndex); |
||||
} |
||||
}); |
||||
|
||||
// 加载左侧用户列表 |
||||
initLeftListData(this_, '100', "all"); |
||||
|
||||
// 加载右侧用户列表 |
||||
initRightListData(this_, '100', "all"); |
||||
|
||||
}); |
||||
|
||||
// 右侧列表数据add |
||||
function rightListAdd(this_, userItem){ |
||||
if(!userItem){ |
||||
return false; |
||||
} |
||||
|
||||
var userId = userItem.userId; |
||||
|
||||
// 查询当前用户是否在右侧存在 |
||||
var rightTemp; |
||||
for (const index in this_.rightData) { |
||||
if(this_.rightData[index].userId === userId){ |
||||
rightTemp = index; |
||||
break; |
||||
} |
||||
} |
||||
// 存在 |
||||
if(rightTemp){ |
||||
return false; |
||||
} |
||||
|
||||
// 新增右侧数据 |
||||
this_.rightData.unshift(userItem); |
||||
// 删除左侧数据 |
||||
this_.leftData = arrRemoveItem(this_.leftData, 'userId', userId); |
||||
|
||||
// 重新渲染 |
||||
initLeftList(this_); |
||||
initRightList(this_); |
||||
return true; |
||||
} |
||||
|
||||
// 左侧列表数据add |
||||
function leftListAdd(this_, userItem){ |
||||
if(!userItem){ |
||||
return false; |
||||
} |
||||
|
||||
var userId = userItem.userId; |
||||
|
||||
// 查询当前用户是否在左侧存在 |
||||
var leftTemp; |
||||
for (const index in this_.leftData) { |
||||
if(this_.leftData[index].userId === userId){ |
||||
leftTemp = index; |
||||
break; |
||||
} |
||||
} |
||||
// 存在 |
||||
if(leftTemp){ |
||||
return false; |
||||
} |
||||
|
||||
// 新增左侧数据 |
||||
this_.leftData.unshift(userItem); |
||||
// 删除右侧数据 |
||||
this_.rightData = arrRemoveItem(this_.rightData, 'userId', userId); |
||||
|
||||
// 重新渲染 |
||||
initLeftList(this_); |
||||
initRightList(this_); |
||||
return true; |
||||
} |
||||
|
||||
function arrRemoveItem (arr, attr, value) { |
||||
if (!arr || arr.length == 0) { |
||||
return []; |
||||
} |
||||
let newArr = arr.filter(function (item, index) { |
||||
return item[attr] != value; |
||||
}) |
||||
return newArr; |
||||
} |
||||
|
||||
// 获取url参数 |
||||
function GetQueryString(name) { |
||||
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); |
||||
var r = window.location.search.substr(1).match(reg); //获取url中"?"符后的字符串并正则匹配 |
||||
var context = ""; |
||||
if (r != null) |
||||
context = decodeURIComponent(r[2]); |
||||
reg = null; |
||||
r = null; |
||||
return context == null || context == "" || context == "undefined" ? "" : context; |
||||
} |
||||
|
||||
// 加载用户列表 |
||||
function initLeftListData(this_, menuId, mtype) { |
||||
$.ajax({ |
||||
async: false, |
||||
url: "${fineServletURL}/cpic/user/list?homeId=" + GetQueryString("homeId") + "&menuId="+menuId + "&menuType=" + mtype, |
||||
success: function (result) { |
||||
// 加载列表 |
||||
this_.leftData = result.data; |
||||
|
||||
// 渲染 |
||||
initLeftList(this_); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
// 加载用户列表 |
||||
function initLeftList(this_) { |
||||
// 清空元素 |
||||
$('#leftList').children().remove(); |
||||
|
||||
// 加载分页 |
||||
this_.laypage.render({ |
||||
elem: 'leftPageBar' |
||||
,count: this_.leftData.length |
||||
,limit: 5 |
||||
,groups: 2 |
||||
// ,limits: [50, 100, 200] |
||||
// ,layout: ['count', 'prev', 'page', 'next', 'limit', 'refresh', 'skip'] |
||||
,layout: ['count', 'prev', 'page', 'next'] |
||||
,theme: '#1E9FFF' |
||||
,jump: function(obj){ |
||||
//渲染 |
||||
document.getElementById('leftList').innerHTML = function(){ |
||||
var arr = [] |
||||
,thisData = this_.leftData.concat().splice(obj.curr*obj.limit - obj.limit, obj.limit); |
||||
layui.each(thisData, function(index, item){ |
||||
// arr.push('<li>'+ item +'</li>'); |
||||
arr.push('<button type=\"button\" class=\"layui-btn layui-btn-radius layui-btn-primary left-user-btn\" userId=\"'+item.userId+'\" userName=\"'+item.userName+'\" userAccount=\"'+item.userAccount+'\">'+item.userName+'('+item.userAccount+')</button>'); |
||||
}); |
||||
return arr.join(''); |
||||
}(); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
// 加载用户列表 |
||||
function initRightListData(this_, menuId, mtype) { |
||||
$.ajax({ |
||||
async: false, |
||||
url: "${fineServletURL}/cpic/user/list2?homeId=" + GetQueryString("homeId") + "&menuId="+menuId + "&menuType=" + mtype, |
||||
success: function (result) { |
||||
// 加载列表 |
||||
this_.rightData = result.data; |
||||
|
||||
// 渲染 |
||||
initRightList(this_); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
// 加载用户列表 |
||||
function initRightList(this_) { |
||||
// 清空元素 |
||||
$('#rightList').children().remove(); |
||||
|
||||
// 加载分页 |
||||
this_.laypage.render({ |
||||
elem: 'rightPageBar' |
||||
,count: this_.rightData.length |
||||
,limit: 50 |
||||
,groups: 2 |
||||
// ,limits: [50, 100, 200] |
||||
// ,layout: ['count', 'prev', 'page', 'next', 'limit', 'refresh', 'skip'] |
||||
,layout: ['count', 'prev', 'page', 'next'] |
||||
,theme: '#1E9FFF' |
||||
,jump: function(obj){ |
||||
//渲染 |
||||
document.getElementById('rightList').innerHTML = function(){ |
||||
var arr = [] |
||||
,thisData = this_.rightData.concat().splice(obj.curr*obj.limit - obj.limit, obj.limit); |
||||
layui.each(thisData, function(index, item){ |
||||
// arr.push('<li>'+ item +'</li>'); |
||||
arr.push('<button type=\"button\" class=\"layui-btn layui-btn-radius layui-btn-primary right-user-btn\" userId=\"'+item.userId+'\" userName=\"'+item.userName+'\" userAccount=\"'+item.userAccount+'\">'+item.userName+'('+item.userAccount+')</button>'); |
||||
}); |
||||
return arr.join(''); |
||||
}(); |
||||
} |
||||
}); |
||||
|
||||
} |
||||
</script> |
||||
</html> |
@ -0,0 +1,46 @@
|
||||
; |
||||
|
||||
Dec.Utils = Dec.Utils || {}; |
||||
!(function () { |
||||
|
||||
// 向管理系统节点加入 报表权限审批
|
||||
BI.config("dec.provider.management", function (provider) { |
||||
provider.inject({ |
||||
modules: [ |
||||
{ |
||||
value: "pluginhome", |
||||
id: "dec_plugin_home_id", |
||||
text: BI.i18nText("门户管理"), |
||||
cardType: "dec.plugin.management.home", |
||||
cls: "management-plugin-font" |
||||
} |
||||
] |
||||
}); |
||||
}); |
||||
|
||||
// 组件实现,效果为使用绝对布局组件放置了一个iframe
|
||||
var HomeWidget = BI.inherit(BI.Widget, { |
||||
props: { |
||||
baseCls: "dec-management-cpic" |
||||
}, |
||||
render: function () { |
||||
return { |
||||
type: "bi.absolute", |
||||
items: [ |
||||
{ |
||||
el: { |
||||
type: "bi.iframe", |
||||
src: Dec.fineServletURL + "/cpic/home" |
||||
}, |
||||
top: 0, |
||||
left: 0, |
||||
right: 0, |
||||
bottom: 0 |
||||
} |
||||
] |
||||
}; |
||||
} |
||||
}); |
||||
BI.shortcut("dec.plugin.management.home", HomeWidget); |
||||
|
||||
}()); |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1 @@
|
||||
html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #eee;border-left-width:6px;background-color:#FAFAFA;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:40px;line-height:40px;border-bottom:1px solid #eee}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 10px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view .layui-code-ol li:first-child{padding-top:10px}.layui-code-view .layui-code-ol li:last-child{padding-bottom:10px}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none}.layui-code-demo .layui-code{visibility:visible!important;margin:-15px;border-top:none;border-right:none;border-bottom:none}.layui-code-demo .layui-tab-content{padding:15px;border-top:none} |
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 5.8 KiB |
After Width: | Height: | Size: 11 KiB |
@ -0,0 +1,914 @@
|
||||
.layui-layer-imgbar, .layui-layer-imgtit a, .layui-layer-tab .layui-layer-title span, .layui-layer-title { |
||||
text-overflow: ellipsis; |
||||
white-space: nowrap |
||||
} |
||||
|
||||
html #layuicss-layer { |
||||
display: none; |
||||
position: absolute; |
||||
width: 1989px |
||||
} |
||||
|
||||
.layui-layer, .layui-layer-shade { |
||||
position: fixed; |
||||
_position: absolute; |
||||
pointer-events: auto |
||||
} |
||||
|
||||
.layui-layer-shade { |
||||
top: 0; |
||||
left: 0; |
||||
width: 100%; |
||||
height: 100%; |
||||
_height: expression(document.body.offsetHeight+"px") |
||||
} |
||||
|
||||
.layui-layer { |
||||
-webkit-overflow-scrolling: touch; |
||||
top: 150px; |
||||
left: 0; |
||||
margin: 0; |
||||
padding: 0; |
||||
background-color: #fff; |
||||
-webkit-background-clip: content; |
||||
border-radius: 2px; |
||||
box-shadow: 1px 1px 50px rgba(0, 0, 0, .3) |
||||
} |
||||
|
||||
.layui-layer-close { |
||||
position: absolute |
||||
} |
||||
|
||||
.layui-layer-content { |
||||
position: relative |
||||
} |
||||
|
||||
.layui-layer-border { |
||||
border: 1px solid #B2B2B2; |
||||
border: 1px solid rgba(0, 0, 0, .1); |
||||
box-shadow: 1px 1px 5px rgba(0, 0, 0, .2) |
||||
} |
||||
|
||||
.layui-layer-load { |
||||
background: url(resources?path=com/fr/plugin/cpic/web/layui/css/modules/layer/default/loading-1.gif) center center no-repeat #eee |
||||
} |
||||
|
||||
.layui-layer-ico { |
||||
background: url(resources?path=com/fr/plugin/cpic/web/layui/css/modules/layer/default/icon.png) no-repeat |
||||
} |
||||
|
||||
.layui-layer-btn a, .layui-layer-dialog .layui-layer-ico, .layui-layer-setwin a { |
||||
display: inline-block; |
||||
*display: inline; |
||||
*zoom: 1; |
||||
vertical-align: top |
||||
} |
||||
|
||||
.layui-layer-move { |
||||
display: none; |
||||
position: fixed; |
||||
*position: absolute; |
||||
left: 0; |
||||
top: 0; |
||||
width: 100%; |
||||
height: 100%; |
||||
cursor: move; |
||||
opacity: 0; |
||||
filter: alpha(opacity=0); |
||||
background-color: #fff; |
||||
z-index: 2147483647 |
||||
} |
||||
|
||||
.layui-layer-resize { |
||||
position: absolute; |
||||
width: 15px; |
||||
height: 15px; |
||||
right: 0; |
||||
bottom: 0; |
||||
cursor: se-resize |
||||
} |
||||
|
||||
.layer-anim { |
||||
-webkit-animation-fill-mode: both; |
||||
animation-fill-mode: both; |
||||
-webkit-animation-duration: .3s; |
||||
animation-duration: .3s |
||||
} |
||||
|
||||
@-webkit-keyframes layer-bounceIn { |
||||
0% { |
||||
opacity: 0; |
||||
-webkit-transform: scale(.5); |
||||
transform: scale(.5) |
||||
} |
||||
100% { |
||||
opacity: 1; |
||||
-webkit-transform: scale(1); |
||||
transform: scale(1) |
||||
} |
||||
} |
||||
|
||||
@keyframes layer-bounceIn { |
||||
0% { |
||||
opacity: 0; |
||||
-webkit-transform: scale(.5); |
||||
-ms-transform: scale(.5); |
||||
transform: scale(.5) |
||||
} |
||||
100% { |
||||
opacity: 1; |
||||
-webkit-transform: scale(1); |
||||
-ms-transform: scale(1); |
||||
transform: scale(1) |
||||
} |
||||
} |
||||
|
||||
.layer-anim-00 { |
||||
-webkit-animation-name: layer-bounceIn; |
||||
animation-name: layer-bounceIn |
||||
} |
||||
|
||||
@-webkit-keyframes layer-zoomInDown { |
||||
0% { |
||||
opacity: 0; |
||||
-webkit-transform: scale(.1) translateY(-2000px); |
||||
transform: scale(.1) translateY(-2000px); |
||||
-webkit-animation-timing-function: ease-in-out; |
||||
animation-timing-function: ease-in-out |
||||
} |
||||
60% { |
||||
opacity: 1; |
||||
-webkit-transform: scale(.475) translateY(60px); |
||||
transform: scale(.475) translateY(60px); |
||||
-webkit-animation-timing-function: ease-out; |
||||
animation-timing-function: ease-out |
||||
} |
||||
} |
||||
|
||||
@keyframes layer-zoomInDown { |
||||
0% { |
||||
opacity: 0; |
||||
-webkit-transform: scale(.1) translateY(-2000px); |
||||
-ms-transform: scale(.1) translateY(-2000px); |
||||
transform: scale(.1) translateY(-2000px); |
||||
-webkit-animation-timing-function: ease-in-out; |
||||
animation-timing-function: ease-in-out |
||||
} |
||||
60% { |
||||
opacity: 1; |
||||
-webkit-transform: scale(.475) translateY(60px); |
||||
-ms-transform: scale(.475) translateY(60px); |
||||
transform: scale(.475) translateY(60px); |
||||
-webkit-animation-timing-function: ease-out; |
||||
animation-timing-function: ease-out |
||||
} |
||||
} |
||||
|
||||
.layer-anim-01 { |
||||
-webkit-animation-name: layer-zoomInDown; |
||||
animation-name: layer-zoomInDown |
||||
} |
||||
|
||||
@-webkit-keyframes layer-fadeInUpBig { |
||||
0% { |
||||
opacity: 0; |
||||
-webkit-transform: translateY(2000px); |
||||
transform: translateY(2000px) |
||||
} |
||||
100% { |
||||
opacity: 1; |
||||
-webkit-transform: translateY(0); |
||||
transform: translateY(0) |
||||
} |
||||
} |
||||
|
||||
@keyframes layer-fadeInUpBig { |
||||
0% { |
||||
opacity: 0; |
||||
-webkit-transform: translateY(2000px); |
||||
-ms-transform: translateY(2000px); |
||||
transform: translateY(2000px) |
||||
} |
||||
100% { |
||||
opacity: 1; |
||||
-webkit-transform: translateY(0); |
||||
-ms-transform: translateY(0); |
||||
transform: translateY(0) |
||||
} |
||||
} |
||||
|
||||
.layer-anim-02 { |
||||
-webkit-animation-name: layer-fadeInUpBig; |
||||
animation-name: layer-fadeInUpBig |
||||
} |
||||
|
||||
@-webkit-keyframes layer-zoomInLeft { |
||||
0% { |
||||
opacity: 0; |
||||
-webkit-transform: scale(.1) translateX(-2000px); |
||||
transform: scale(.1) translateX(-2000px); |
||||
-webkit-animation-timing-function: ease-in-out; |
||||
animation-timing-function: ease-in-out |
||||
} |
||||
60% { |
||||
opacity: 1; |
||||
-webkit-transform: scale(.475) translateX(48px); |
||||
transform: scale(.475) translateX(48px); |
||||
-webkit-animation-timing-function: ease-out; |
||||
animation-timing-function: ease-out |
||||
} |
||||
} |
||||
|
||||
@keyframes layer-zoomInLeft { |
||||
0% { |
||||
opacity: 0; |
||||
-webkit-transform: scale(.1) translateX(-2000px); |
||||
-ms-transform: scale(.1) translateX(-2000px); |
||||
transform: scale(.1) translateX(-2000px); |
||||
-webkit-animation-timing-function: ease-in-out; |
||||
animation-timing-function: ease-in-out |
||||
} |
||||
60% { |
||||
opacity: 1; |
||||
-webkit-transform: scale(.475) translateX(48px); |
||||
-ms-transform: scale(.475) translateX(48px); |
||||
transform: scale(.475) translateX(48px); |
||||
-webkit-animation-timing-function: ease-out; |
||||
animation-timing-function: ease-out |
||||
} |
||||
} |
||||
|
||||
.layer-anim-03 { |
||||
-webkit-animation-name: layer-zoomInLeft; |
||||
animation-name: layer-zoomInLeft |
||||
} |
||||
|
||||
@-webkit-keyframes layer-rollIn { |
||||
0% { |
||||
opacity: 0; |
||||
-webkit-transform: translateX(-100%) rotate(-120deg); |
||||
transform: translateX(-100%) rotate(-120deg) |
||||
} |
||||
100% { |
||||
opacity: 1; |
||||
-webkit-transform: translateX(0) rotate(0); |
||||
transform: translateX(0) rotate(0) |
||||
} |
||||
} |
||||
|
||||
@keyframes layer-rollIn { |
||||
0% { |
||||
opacity: 0; |
||||
-webkit-transform: translateX(-100%) rotate(-120deg); |
||||
-ms-transform: translateX(-100%) rotate(-120deg); |
||||
transform: translateX(-100%) rotate(-120deg) |
||||
} |
||||
100% { |
||||
opacity: 1; |
||||
-webkit-transform: translateX(0) rotate(0); |
||||
-ms-transform: translateX(0) rotate(0); |
||||
transform: translateX(0) rotate(0) |
||||
} |
||||
} |
||||
|
||||
.layer-anim-04 { |
||||
-webkit-animation-name: layer-rollIn; |
||||
animation-name: layer-rollIn |
||||
} |
||||
|
||||
@keyframes layer-fadeIn { |
||||
0% { |
||||
opacity: 0 |
||||
} |
||||
100% { |
||||
opacity: 1 |
||||
} |
||||
} |
||||
|
||||
.layer-anim-05 { |
||||
-webkit-animation-name: layer-fadeIn; |
||||
animation-name: layer-fadeIn |
||||
} |
||||
|
||||
@-webkit-keyframes layer-shake { |
||||
0%, 100% { |
||||
-webkit-transform: translateX(0); |
||||
transform: translateX(0) |
||||
} |
||||
10%, 30%, 50%, 70%, 90% { |
||||
-webkit-transform: translateX(-10px); |
||||
transform: translateX(-10px) |
||||
} |
||||
20%, 40%, 60%, 80% { |
||||
-webkit-transform: translateX(10px); |
||||
transform: translateX(10px) |
||||
} |
||||
} |
||||
|
||||
@keyframes layer-shake { |
||||
0%, 100% { |
||||
-webkit-transform: translateX(0); |
||||
-ms-transform: translateX(0); |
||||
transform: translateX(0) |
||||
} |
||||
10%, 30%, 50%, 70%, 90% { |
||||
-webkit-transform: translateX(-10px); |
||||
-ms-transform: translateX(-10px); |
||||
transform: translateX(-10px) |
||||
} |
||||
20%, 40%, 60%, 80% { |
||||
-webkit-transform: translateX(10px); |
||||
-ms-transform: translateX(10px); |
||||
transform: translateX(10px) |
||||
} |
||||
} |
||||
|
||||
.layer-anim-06 { |
||||
-webkit-animation-name: layer-shake; |
||||
animation-name: layer-shake |
||||
} |
||||
|
||||
@-webkit-keyframes fadeIn { |
||||
0% { |
||||
opacity: 0 |
||||
} |
||||
100% { |
||||
opacity: 1 |
||||
} |
||||
} |
||||
|
||||
.layui-layer-title { |
||||
padding: 0 80px 0 20px; |
||||
height: 50px; |
||||
line-height: 50px; |
||||
border-bottom: 1px solid #F0F0F0; |
||||
font-size: 14px; |
||||
color: #333; |
||||
overflow: hidden; |
||||
border-radius: 2px 2px 0 0 |
||||
} |
||||
|
||||
.layui-layer-setwin { |
||||
position: absolute; |
||||
right: 15px; |
||||
*right: 0; |
||||
top: 17px; |
||||
font-size: 0; |
||||
line-height: initial |
||||
} |
||||
|
||||
.layui-layer-setwin a { |
||||
position: relative; |
||||
width: 16px; |
||||
height: 16px; |
||||
margin-left: 10px; |
||||
font-size: 12px; |
||||
_overflow: hidden |
||||
} |
||||
|
||||
.layui-layer-setwin .layui-layer-min cite { |
||||
position: absolute; |
||||
width: 14px; |
||||
height: 2px; |
||||
left: 0; |
||||
top: 50%; |
||||
margin-top: -1px; |
||||
background-color: #2E2D3C; |
||||
cursor: pointer; |
||||
_overflow: hidden |
||||
} |
||||
|
||||
.layui-layer-setwin .layui-layer-min:hover cite { |
||||
background-color: #2D93CA |
||||
} |
||||
|
||||
.layui-layer-setwin .layui-layer-max { |
||||
background-position: -32px -40px |
||||
} |
||||
|
||||
.layui-layer-setwin .layui-layer-max:hover { |
||||
background-position: -16px -40px |
||||
} |
||||
|
||||
.layui-layer-setwin .layui-layer-maxmin { |
||||
background-position: -65px -40px |
||||
} |
||||
|
||||
.layui-layer-setwin .layui-layer-maxmin:hover { |
||||
background-position: -49px -40px |
||||
} |
||||
|
||||
.layui-layer-setwin .layui-layer-close1 { |
||||
background-position: 1px -40px; |
||||
cursor: pointer |
||||
} |
||||
|
||||
.layui-layer-setwin .layui-layer-close1:hover { |
||||
opacity: .7 |
||||
} |
||||
|
||||
.layui-layer-setwin .layui-layer-close2 { |
||||
position: absolute; |
||||
right: -28px; |
||||
top: -28px; |
||||
width: 30px; |
||||
height: 30px; |
||||
margin-left: 0; |
||||
background-position: -149px -31px; |
||||
*right: -18px; |
||||
_display: none |
||||
} |
||||
|
||||
.layui-layer-setwin .layui-layer-close2:hover { |
||||
background-position: -180px -31px |
||||
} |
||||
|
||||
.layui-layer-btn { |
||||
text-align: right; |
||||
padding: 0 15px 12px; |
||||
pointer-events: auto; |
||||
user-select: none; |
||||
-webkit-user-select: none |
||||
} |
||||
|
||||
.layui-layer-btn a { |
||||
height: 28px; |
||||
line-height: 28px; |
||||
margin: 5px 5px 0; |
||||
padding: 0 15px; |
||||
border: 1px solid #dedede; |
||||
background-color: #fff; |
||||
color: #333; |
||||
border-radius: 2px; |
||||
font-weight: 400; |
||||
cursor: pointer; |
||||
text-decoration: none |
||||
} |
||||
|
||||
.layui-layer-btn a:hover { |
||||
opacity: .9; |
||||
text-decoration: none |
||||
} |
||||
|
||||
.layui-layer-btn a:active { |
||||
opacity: .8 |
||||
} |
||||
|
||||
.layui-layer-btn .layui-layer-btn0 { |
||||
border-color: #1E9FFF; |
||||
background-color: #1E9FFF; |
||||
color: #fff |
||||
} |
||||
|
||||
.layui-layer-btn-l { |
||||
text-align: left |
||||
} |
||||
|
||||
.layui-layer-btn-c { |
||||
text-align: center |
||||
} |
||||
|
||||
.layui-layer-dialog { |
||||
min-width: 300px |
||||
} |
||||
|
||||
.layui-layer-dialog .layui-layer-content { |
||||
position: relative; |
||||
padding: 20px; |
||||
line-height: 24px; |
||||
word-break: break-all; |
||||
overflow: hidden; |
||||
font-size: 14px; |
||||
overflow-x: hidden; |
||||
overflow-y: auto |
||||
} |
||||
|
||||
.layui-layer-dialog .layui-layer-content .layui-layer-ico { |
||||
position: absolute; |
||||
top: 16px; |
||||
left: 15px; |
||||
_left: -40px; |
||||
width: 30px; |
||||
height: 30px |
||||
} |
||||
|
||||
.layui-layer-ico1 { |
||||
background-position: -30px 0 |
||||
} |
||||
|
||||
.layui-layer-ico2 { |
||||
background-position: -60px 0 |
||||
} |
||||
|
||||
.layui-layer-ico3 { |
||||
background-position: -90px 0 |
||||
} |
||||
|
||||
.layui-layer-ico4 { |
||||
background-position: -120px 0 |
||||
} |
||||
|
||||
.layui-layer-ico5 { |
||||
background-position: -150px 0 |
||||
} |
||||
|
||||
.layui-layer-ico6 { |
||||
background-position: -180px 0 |
||||
} |
||||
|
||||
.layui-layer-rim { |
||||
border: 6px solid #8D8D8D; |
||||
border: 6px solid rgba(0, 0, 0, .3); |
||||
border-radius: 5px; |
||||
box-shadow: none |
||||
} |
||||
|
||||
.layui-layer-msg { |
||||
min-width: 180px; |
||||
border: 1px solid #D3D4D3; |
||||
box-shadow: none |
||||
} |
||||
|
||||
.layui-layer-hui { |
||||
min-width: 100px; |
||||
background-color: #000; |
||||
filter: alpha(opacity=60); |
||||
background-color: rgba(0, 0, 0, .6); |
||||
color: #fff; |
||||
border: none |
||||
} |
||||
|
||||
.layui-layer-hui .layui-layer-content { |
||||
padding: 12px 25px; |
||||
text-align: center |
||||
} |
||||
|
||||
.layui-layer-dialog .layui-layer-padding { |
||||
padding: 20px 20px 20px 55px; |
||||
text-align: left |
||||
} |
||||
|
||||
.layui-layer-page .layui-layer-content { |
||||
position: relative; |
||||
overflow: auto |
||||
} |
||||
|
||||
.layui-layer-iframe .layui-layer-btn, .layui-layer-page .layui-layer-btn { |
||||
padding-top: 10px |
||||
} |
||||
|
||||
.layui-layer-nobg { |
||||
background: 0 0 |
||||
} |
||||
|
||||
.layui-layer-iframe iframe { |
||||
display: block; |
||||
width: 100% |
||||
} |
||||
|
||||
.layui-layer-loading { |
||||
border-radius: 100%; |
||||
background: 0 0; |
||||
box-shadow: none; |
||||
border: none |
||||
} |
||||
|
||||
.layui-layer-loading .layui-layer-content { |
||||
width: 60px; |
||||
height: 24px; |
||||
background: url(resources?path=com/fr/plugin/cpic/web/layui/css/modules/layer/default/loading-0.gif) no-repeat |
||||
} |
||||
|
||||
.layui-layer-loading .layui-layer-loading1 { |
||||
width: 37px; |
||||
height: 37px; |
||||
background: url(resources?path=com/fr/plugin/cpic/web/layui/css/modules/layer/default/loading-1.gif) no-repeat |
||||
} |
||||
|
||||
.layui-layer-ico16, .layui-layer-loading .layui-layer-loading2 { |
||||
width: 32px; |
||||
height: 32px; |
||||
background: url(resources?path=com/fr/plugin/cpic/web/layui/css/modules/layer/default/loading-2.gif) no-repeat |
||||
} |
||||
|
||||
.layui-layer-tips { |
||||
background: 0 0; |
||||
box-shadow: none; |
||||
border: none |
||||
} |
||||
|
||||
.layui-layer-tips .layui-layer-content { |
||||
position: relative; |
||||
line-height: 22px; |
||||
min-width: 12px; |
||||
padding: 8px 15px; |
||||
font-size: 12px; |
||||
_float: left; |
||||
border-radius: 2px; |
||||
box-shadow: 1px 1px 3px rgba(0, 0, 0, .2); |
||||
background-color: #000; |
||||
color: #fff |
||||
} |
||||
|
||||
.layui-layer-tips .layui-layer-close { |
||||
right: -2px; |
||||
top: -1px |
||||
} |
||||
|
||||
.layui-layer-tips i.layui-layer-TipsG { |
||||
position: absolute; |
||||
width: 0; |
||||
height: 0; |
||||
border-width: 8px; |
||||
border-color: transparent; |
||||
border-style: dashed; |
||||
*overflow: hidden |
||||
} |
||||
|
||||
.layui-layer-tips i.layui-layer-TipsB, .layui-layer-tips i.layui-layer-TipsT { |
||||
left: 5px; |
||||
border-right-style: solid; |
||||
border-right-color: #000 |
||||
} |
||||
|
||||
.layui-layer-tips i.layui-layer-TipsT { |
||||
bottom: -8px |
||||
} |
||||
|
||||
.layui-layer-tips i.layui-layer-TipsB { |
||||
top: -8px |
||||
} |
||||
|
||||
.layui-layer-tips i.layui-layer-TipsL, .layui-layer-tips i.layui-layer-TipsR { |
||||
top: 5px; |
||||
border-bottom-style: solid; |
||||
border-bottom-color: #000 |
||||
} |
||||
|
||||
.layui-layer-tips i.layui-layer-TipsR { |
||||
left: -8px |
||||
} |
||||
|
||||
.layui-layer-tips i.layui-layer-TipsL { |
||||
right: -8px |
||||
} |
||||
|
||||
.layui-layer-lan[type=dialog] { |
||||
min-width: 280px |
||||
} |
||||
|
||||
.layui-layer-lan .layui-layer-title { |
||||
background: #4476A7; |
||||
color: #fff; |
||||
border: none |
||||
} |
||||
|
||||
.layui-layer-lan .layui-layer-btn { |
||||
padding: 5px 10px 10px; |
||||
text-align: right; |
||||
border-top: 1px solid #E9E7E7 |
||||
} |
||||
|
||||
.layui-layer-lan .layui-layer-btn a { |
||||
background: #fff; |
||||
border-color: #E9E7E7; |
||||
color: #333 |
||||
} |
||||
|
||||
.layui-layer-lan .layui-layer-btn .layui-layer-btn1 { |
||||
background: #C9C5C5 |
||||
} |
||||
|
||||
.layui-layer-molv .layui-layer-title { |
||||
background: #009f95; |
||||
color: #fff; |
||||
border: none |
||||
} |
||||
|
||||
.layui-layer-molv .layui-layer-btn a { |
||||
background: #009f95; |
||||
border-color: #009f95 |
||||
} |
||||
|
||||
.layui-layer-molv .layui-layer-btn .layui-layer-btn1 { |
||||
background: #92B8B1 |
||||
} |
||||
|
||||
.layui-layer-iconext { |
||||
background: url(resources?path=com/fr/plugin/cpic/web/layui/css/modules/layer/default/icon-ext.png) no-repeat |
||||
} |
||||
|
||||
.layui-layer-prompt .layui-layer-input { |
||||
display: block; |
||||
width: 260px; |
||||
height: 36px; |
||||
margin: 0 auto; |
||||
line-height: 30px; |
||||
padding-left: 10px; |
||||
border: 1px solid #e6e6e6; |
||||
color: #333 |
||||
} |
||||
|
||||
.layui-layer-prompt textarea.layui-layer-input { |
||||
width: 300px; |
||||
height: 100px; |
||||
line-height: 20px; |
||||
padding: 6px 10px |
||||
} |
||||
|
||||
.layui-layer-prompt .layui-layer-content { |
||||
padding: 20px |
||||
} |
||||
|
||||
.layui-layer-prompt .layui-layer-btn { |
||||
padding-top: 0 |
||||
} |
||||
|
||||
.layui-layer-tab { |
||||
box-shadow: 1px 1px 50px rgba(0, 0, 0, .4) |
||||
} |
||||
|
||||
.layui-layer-tab .layui-layer-title { |
||||
padding-left: 0; |
||||
overflow: visible |
||||
} |
||||
|
||||
.layui-layer-tab .layui-layer-title span { |
||||
position: relative; |
||||
float: left; |
||||
min-width: 80px; |
||||
max-width: 300px; |
||||
padding: 0 20px; |
||||
text-align: center; |
||||
overflow: hidden; |
||||
cursor: pointer |
||||
} |
||||
|
||||
.layui-layer-tab .layui-layer-title span.layui-this { |
||||
height: 51px; |
||||
border-left: 1px solid #eee; |
||||
border-right: 1px solid #eee; |
||||
background-color: #fff; |
||||
z-index: 10 |
||||
} |
||||
|
||||
.layui-layer-tab .layui-layer-title span:first-child { |
||||
border-left: none |
||||
} |
||||
|
||||
.layui-layer-tabmain { |
||||
line-height: 24px; |
||||
clear: both |
||||
} |
||||
|
||||
.layui-layer-tabmain .layui-layer-tabli { |
||||
display: none |
||||
} |
||||
|
||||
.layui-layer-tabmain .layui-layer-tabli.layui-this { |
||||
display: block |
||||
} |
||||
|
||||
.layui-layer-photos { |
||||
background: 0 0; |
||||
box-shadow: none |
||||
} |
||||
|
||||
.layui-layer-photos .layui-layer-content { |
||||
overflow: hidden; |
||||
text-align: center |
||||
} |
||||
|
||||
.layui-layer-photos .layui-layer-phimg img { |
||||
position: relative; |
||||
width: 100%; |
||||
display: inline-block; |
||||
*display: inline; |
||||
*zoom: 1; |
||||
vertical-align: top |
||||
} |
||||
|
||||
.layui-layer-imgnext, .layui-layer-imgprev { |
||||
position: fixed; |
||||
top: 50%; |
||||
width: 27px; |
||||
_width: 44px; |
||||
height: 44px; |
||||
margin-top: -22px; |
||||
outline: 0; |
||||
blr: expression(this.onFocus=this.blur()) |
||||
} |
||||
|
||||
.layui-layer-imgprev { |
||||
left: 30px; |
||||
background-position: -5px -5px; |
||||
_background-position: -70px -5px |
||||
} |
||||
|
||||
.layui-layer-imgprev:hover { |
||||
background-position: -33px -5px; |
||||
_background-position: -120px -5px |
||||
} |
||||
|
||||
.layui-layer-imgnext { |
||||
right: 30px; |
||||
_right: 8px; |
||||
background-position: -5px -50px; |
||||
_background-position: -70px -50px |
||||
} |
||||
|
||||
.layui-layer-imgnext:hover { |
||||
background-position: -33px -50px; |
||||
_background-position: -120px -50px |
||||
} |
||||
|
||||
.layui-layer-imgbar { |
||||
position: fixed; |
||||
left: 0; |
||||
right: 0; |
||||
bottom: 0; |
||||
width: 100%; |
||||
height: 40px; |
||||
line-height: 40px; |
||||
background-color: #000 \9; |
||||
filter: Alpha(opacity=60); |
||||
background-color: rgba(2, 0, 0, .35); |
||||
color: #fff; |
||||
overflow: hidden; |
||||
font-size: 0 |
||||
} |
||||
|
||||
.layui-layer-imgtit * { |
||||
display: inline-block; |
||||
*display: inline; |
||||
*zoom: 1; |
||||
vertical-align: top; |
||||
font-size: 12px |
||||
} |
||||
|
||||
.layui-layer-imgtit a { |
||||
max-width: 65%; |
||||
overflow: hidden; |
||||
color: #fff |
||||
} |
||||
|
||||
.layui-layer-imgtit a:hover { |
||||
color: #fff; |
||||
text-decoration: underline |
||||
} |
||||
|
||||
.layui-layer-imgtit em { |
||||
padding-left: 10px; |
||||
font-style: normal |
||||
} |
||||
|
||||
@-webkit-keyframes layer-bounceOut { |
||||
100% { |
||||
opacity: 0; |
||||
-webkit-transform: scale(.7); |
||||
transform: scale(.7) |
||||
} |
||||
30% { |
||||
-webkit-transform: scale(1.05); |
||||
transform: scale(1.05) |
||||
} |
||||
0% { |
||||
-webkit-transform: scale(1); |
||||
transform: scale(1) |
||||
} |
||||
} |
||||
|
||||
@keyframes layer-bounceOut { |
||||
100% { |
||||
opacity: 0; |
||||
-webkit-transform: scale(.7); |
||||
-ms-transform: scale(.7); |
||||
transform: scale(.7) |
||||
} |
||||
30% { |
||||
-webkit-transform: scale(1.05); |
||||
-ms-transform: scale(1.05); |
||||
transform: scale(1.05) |
||||
} |
||||
0% { |
||||
-webkit-transform: scale(1); |
||||
-ms-transform: scale(1); |
||||
transform: scale(1) |
||||
} |
||||
} |
||||
|
||||
.layer-anim-close { |
||||
-webkit-animation-name: layer-bounceOut; |
||||
animation-name: layer-bounceOut; |
||||
-webkit-animation-fill-mode: both; |
||||
animation-fill-mode: both; |
||||
-webkit-animation-duration: .2s; |
||||
animation-duration: .2s |
||||
} |
||||
|
||||
@media screen and (max-width: 1100px) { |
||||
.layui-layer-iframe { |
||||
overflow-y: auto; |
||||
-webkit-overflow-scrolling: touch |
||||
} |
||||
} |
After Width: | Height: | Size: 5.7 KiB |
After Width: | Height: | Size: 701 B |
After Width: | Height: | Size: 1.7 KiB |
Binary file not shown.
After Width: | Height: | Size: 299 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Loading…
Reference in new issue