fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/Constant.java
@@ -7,7 +7,10 @@ */ public class Constant { /** * ç³»ç»åç§° */ public static final String APP_NAME = "igdss"; /** * é¨é¨ç±»å */ fzzy-igdss-core/src/main/java/com/fzzy/igds/constant/RedisConst.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,228 @@ package com.fzzy.igds.constant; /** * Redisç¼å使ç¨çç³»ç»å¸¸éé ç½® 主è¦ç¨äºé 置系ç»ç¼åçKEYé ç½® */ public class RedisConst { /** * æ ¹æ®ç»ç»ç¼ç æå»ºå®é 使ç¨çKEY * * @param key1 ç»ç»ç¼ç * @param key2 ç¼åKEY * @return */ public static String buildKey(String key1, String key2) { return Constant.APP_NAME + ":" + key1 + ":" + key2; } /** * ä¸å±ç»æçKEY * * @param key1 * @param key2 * @param tag * @return */ public static String buildKey(String key1, String key2, String tag) { return Constant.APP_NAME + ":" + key1 + ":" + key2 + ":" + tag; } /** * åå±ç»æçKEY * * @param companyId * @param key * @param tag1 * @param tag2 * @return */ public static String buildKey(String companyId, String key, String tag1, String tag2) { return Constant.APP_NAME + ":" + companyId + ":" + key + ":" + tag1 + ":" + tag2; } /** * å建设å¤å表çKEYï¼ä»¥åæºä¸ºåç»å建 * * @param companyId * @param key * @param tag1 * @return */ public static String buildDeviceKey(String companyId, String key, String tag1) { return Constant.APP_NAME + ":" + companyId + ":" + key + ":" + tag1; } /** * æ ¹æ®ç¼åKEYçåç¼çæç¼åKEy * * @param prefix * @param bizId */ public static String buildKeyByPrefix(String prefix, String bizId) { if (null == bizId) return Constant.APP_NAME + ":" + prefix; return Constant.APP_NAME + ":" + prefix + ":" + bizId; } /** * åå ¸è¡¨ç¼åé ç½® */ public static final String KEY_DIC_TRIGGER = "KEY_DIC_TRIGGER"; /** * ä»åºå表KEY */ public static final String KEY_DEPOT = "DEPOT_DATA"; /** * ä»åºåæ°å表KEY */ public static final String KEY_DEPOT_CONF = "DEPOT_CONF"; /** * åæºå表KEY */ public static final String KEY_DEVICE_SER_LIST = "SER_LIST"; /** * 设å¤å表 */ public static final String KEY_DEVICE_LIST = "DEVICE_LIST"; /** * å个è²å·å§ */ public static final String KEY_DEVICE = "DEVICE"; /** * 设å¤å表 */ public static final String KEY_DEVICE_IOT_LIST = "DEVICE_IOT_LIST"; /** * ä»åºååæºçå¤å¯¹å¤å ³ç³»éå */ public static final String KEY_DEPOT_SER_LIST = "DEPOT_SER_LIST"; /** * 建çç©ä¿¡æ¯ */ public static final String KEY_BUILDING_LIST = "BUILDING_LIST"; /** * æ§è¡å½ä»¤KEYåç¼ */ public static final String KEY_ORDER_PRE = "ORDER"; /** * ææ°ç²®æ ä¿¡æ¯ç¼åå表ï¼ç¨äºåæ¾å½åææ°çç²®æ ä¿¡æ¯ */ public static final String KEY_GRAIN = "GRAIN_DATA"; /** * ææ°æ°ä½ä¿¡æ¯ç¼åå表 */ public static final String KEY_GAS_DATA = "GAS_DATA"; /** * ç³»ç»é ç½®KEY */ public static final String KEY_SYS_CONF = "SYS_CONF"; /** * ç²®åºç温湿度信æ¯ç¼å */ public static final String KEY_DEPOT_TH_PREFIX = "DEPOT_TH_PREFIX"; /** * ä»¥åæºæè ä»åºä¸ºåä½åå¨ç仿¸©ä»æ¹¿ç¼åæ æ ç¾ */ public static final String KEY_T_TH = "T_TH"; /** * åæ¾æ°è±¡ä¿¡æ¯çKEY */ public static final String KEY_WEATHER_INFO = "WEATHER_INFO"; /** * æ ¹æ®ä»åºç¼ç åæ¾ææ°çè½èæ°æ®ä¿¡æ¯ */ public static final String KEY_ES_DATA_MAP = "ES_DATA_MAP"; /** * ç³»ç»ä¸ç»ç»å表 */ public static final String KEY_DEPT_LIST = "DEPT_LIST"; /** * å¶æ°®æºé ç½®å表 */ public static final String KEY_N2_CONF_LIST = "N2_CONF_LIST"; /** * ææ°æ°åä¿¡æ¯ç¼åå表 */ public static final String KEY_PRESSURE_DATA = "PRESSURE_DATA"; /** * ç³»ç»é ç½®çæåæºä¿¡æ¯ç¼å */ public static final String KEY_CAMERA_LIST = "CAMERA_LIST"; /** * ä¸ç»´é ç½®å ³èä¿¡æ¯key */ public static final String KEY_THREE_CONF = "THREE_CONF"; /** * 临æ¶ç¼åKEYåç¼ */ public static final String KEY_TEMP_PREFIX = "TEMP_"; /** * æ°éçæµåæ°å表KEY--åä¸ªè®¾å¤ */ public static final String KEY_QUANTITY_CONF = "QUANTITY_CONF"; /** * ä»åºè´¨éå·¡æ£æ°æ®ç¼å */ public static final String KEY_DEPOT_QUALITY = "DEPOT_QUALITY"; /** * ä»åºæ¶²ä½æ°æ®ç¼å */ public static final String KEY_DEPOT_HEIGHT = "DEPOT_HEIGHT"; /** * ä»åºç©èç½å ³iotè®¾å¤æ¸©æ¹¿åº¦ç¼åkey */ public static final String KEY_IOT_DEPOT_TEMP_HUM = "IOT_DEPOT_TEMP_HUM"; /** * å个æ°éæ£æµæå¡ */ public static final String PREFIX_QUANTITY_SER = "QUANTITY_SER"; /** * è¦åé ç½®å表KEY */ public static final String KEY_WARN_CONF = "WARN_CONF"; /** * é¨ç£è®¾å¤é ç½®å表 */ public static final String KEY_DOOR_SENSOR_LIST = "DOOR_SENSOR_LIST"; /** * ææåæºç¼ååç¼ */ public static final String CACHE_KEY_PRE = "SNAP_SER"; /** * AI设å¤ç¼åkey */ public static final String KEY_AI_SER = "AI_SER"; } fzzy-igdss-core/src/main/java/com/fzzy/igds/domain/Depot.java
@@ -97,11 +97,11 @@ @TableField("bulk_weight") private Double bulkWeight; @Column(name = "store_keeper", columnDefinition = "varchar(4) COMMENT 'ä¿ç®¡å'") @Column(name = "store_keeper", columnDefinition = "varchar(40) COMMENT 'ä¿ç®¡å'") @TableField("store_keeper") private String storeKeeper; @Column(name = "store_keeper_name", columnDefinition = "varchar(4) COMMENT 'ä¿ç®¡å'") @Column(name = "store_keeper_name", columnDefinition = "varchar(40) COMMENT 'ä¿ç®¡å'") @TableField("store_keeper_name") private String storeKeeperName; fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/CompanyRepository.java
@@ -17,6 +17,25 @@ public interface CompanyRepository extends JpaRepository<Company, String> { /** * æ ¹æ®idè·åä¿¡æ¯ * * @param id * @return */ @Query("from Company where id =:id order by id") List<Company> getDataById(@Param("id") String id); /** * æ ¹æ®companyIdè·åä¿¡æ¯ * * @param parentId * @return */ @Query("from Company where id like:parentId order by id") List<Company> getDataByParentId(@Param("parentId") String parentId); /** * æ ¹æ®companyIdè·åä¿¡æ¯ * * @param companyId fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DepotRepository.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,87 @@ package com.fzzy.igds.repository; import com.fzzy.igds.domain.Depot; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; /** * @Description * @Author CZT * @Date 2025/11/27 13:39 */ @Service public interface DepotRepository extends JpaRepository<Depot, String> { /** * æ ¹æ®ç»ç»ç¼ç è·åä»åºè´§ä½ä¿¡æ¯ * * @param companyId * @return */ @Query("from Depot where companyId =:companyId order by orderNum") List<Depot> getDepotByCompanyId(@Param("companyId") String companyId); /** * æ ¹æ®ç»ç»ç¼ç ååºåºç¼ç è·åä»åºè´§ä½ä¿¡æ¯ * * @param companyId * @param deptId * @return */ @Query("from Depot where companyId =:companyId and deptId =:deptId order by orderNum") List<Depot> getDepot(@Param("companyId") String companyId, @Param("deptId") String deptId); /** * æ ¹æ®ç»ç»ç¼ç åä»åºç¼ç è·åä»åºè´§ä½ä¿¡æ¯ * @param companyId * @param id * @return */ @Query("from Depot where companyId =:companyId and id =:id") Depot getDepotById(@Param("companyId") String companyId, @Param("id") String id); /** * æ´æ°ä»åºç¶æ * @param status * @param depotId */ @Transactional @Modifying @Query("update Depot set depotStatus =:status where id =:depotId") void updateDepotStatus(@Param("status") String status, @Param("depotId") String depotId); /** * æ ¹æ®idsè·åä»åº * * @param list * @return */ @Query("from Depot where id IN :list order by orderNum") List<Depot> getDepotByIds(@Param("list") List<String> list); /** * æ´æ°ä»åºå¨é * @param weight * @param depotId */ @Transactional @Modifying @Query("update Depot set storageReal =:weight where id =:depotId") void updateDepotStorage(@Param("weight") Double weight, @Param("depotId") String depotId); /** * è·ååºåºä¸æå¤§ä»åºç¼ç * * @param deptId * @return */ @Query("from Depot where deptId =:deptId order by id") List<Depot> getDepotMaxId(@Param("deptId") String deptId); } fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DepotStoreRepository.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,30 @@ package com.fzzy.igds.repository; import com.fzzy.igds.domain.DepotStore; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Service; import java.util.Date; import java.util.List; /** * @Description * @Author CZT * @Date 2025/11/27 13:44 */ @Service public interface DepotStoreRepository extends JpaRepository<DepotStore, String>, JpaSpecificationExecutor<DepotStore> { /** * æ ¹æ®ä»åºç¼ç è·åæå䏿¡æ°æ® * @param depotId * @param end * @return */ @Query("from DepotStore where depotId =:depotId and createDate <:end order by createDate desc") List<DepotStore> getDataByDepotId(@Param("depotId") String depotId,@Param("end") Date end); } fzzy-igdss-core/src/main/java/com/fzzy/igds/repository/DeptRepository.java
@@ -19,11 +19,20 @@ /** * æ ¹æ®idè·åä¿¡æ¯ * * @param id * @param parentId * @return */ @Query("from Dept where id like:parentId order by id") List<Dept> getDataByParentId(@Param("parentId") String parentId); /** * æ ¹æ®companyIdè·åä¿¡æ¯ * * @param companyId * @return */ @Query("from Dept where id =:id order by id") Dept getDataById(@Param("id") String id); List<Dept> getDataById(@Param("id") String id); /** * æ ¹æ®companyIdè·åä¿¡æ¯ fzzy-igdss-core/src/main/java/com/fzzy/igds/service/CoreCompanyService.java
@@ -4,6 +4,7 @@ import com.fzzy.igds.repository.CompanyRepository; import com.fzzy.igds.utils.ContextUtil; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -23,7 +24,16 @@ /** * jpaæ¥è¯¢å ¬å¸ä¿¡æ¯ * @param companyId * @param id * @return */ public List<Company> getDataById(String id) { return companyRepository.getDataById(id); } /** * jpaæ¥è¯¢å ¬å¸ä¿¡æ¯ * @return */ public List<Company> getAllData(String companyId) { @@ -35,6 +45,16 @@ } /** * jpaæ¥è¯¢å ¬å¸ä¿¡æ¯ * @return */ public List<Company> getDataByParentId() { SysUser user = ContextUtil.getLoginUser(); return companyRepository.getDataByParentId(user.getDeptId() + "%"); } /** * jpaæ°å¢å ¬å¸ä¿¡æ¯ * @param sysDept * @return fzzy-igdss-core/src/main/java/com/fzzy/igds/service/CoreDeptService.java
@@ -1,10 +1,13 @@ package com.fzzy.igds.service; import com.fzzy.igds.constant.Constant; import com.fzzy.igds.domain.Dept; import com.fzzy.igds.repository.DeptRepository; import com.fzzy.igds.utils.ContextUtil; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.service.ISysDeptService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Date; @@ -19,19 +22,33 @@ public class CoreDeptService { @Resource private ISysDeptService iSysDeptService; @Resource private DeptRepository deptRepository; /** * jpaæ¥è¯¢ä¿¡æ¯ * @param companyId * @param parentId * @return */ public List<Dept> getAllData(String companyId) { public List<Dept> getDataByParentId(String parentId) { return deptRepository.getDataByParentId(parentId + "%"); } if (StringUtils.isEmpty(companyId)) { companyId = ContextUtil.getCompanyId(); /** * jpaæ¥è¯¢ä¿¡æ¯ * @return */ public List<Dept> getDeptData() { SysUser user = ContextUtil.getLoginUser(); SysDept userDept = iSysDeptService.selectDeptById(user.getDeptId()); if (Constant.DEPT_TYPE_20.equals(userDept.getType())) { return deptRepository.getDataById(ContextUtil.subDeptId(user)); }else { return deptRepository.getDataByParentId(user.getDeptId() + "%"); } return deptRepository.getAllData(companyId); } /** fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DepotService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,269 @@ package com.fzzy.igds.service; import com.fzzy.igds.constant.RedisConst; import com.fzzy.igds.domain.Depot; import com.fzzy.igds.domain.DepotStore; import com.fzzy.igds.repository.DepotRepository; import com.fzzy.igds.utils.ContextUtil; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.mapper.SysDeptMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.*; /** * @Description * @Author CZT * @Date 2025/11/27 13:43 */ @Slf4j @Service public class DepotService { @Resource private DepotRepository depotRepository; @Resource private RedisCache redisCache; /** * jpaæ¥è¯¢ä»åºå表 * @param companyId * @param deptId * @return */ public List<Depot> getData(String companyId, String deptId) { if (StringUtils.isEmpty(companyId)) { companyId = ContextUtil.getCompanyId(); } if (StringUtils.isEmpty(deptId)) { deptId = ContextUtil.subDeptId(null); } return depotRepository.getDepot(companyId, deptId); } /** * jpaæ¥è¯¢ä»åºå表 * @param ids * @return */ public List<Depot> getDepotByIds(List<String> ids) { if (null == ids ||ids.isEmpty()) { return null; } return depotRepository.getDepotByIds(ids); } /** * jpaä¿åæ´æ°ä»åºä¿¡æ¯ * @param depot */ public void saveDepot(Depot depot) { if (StringUtils.isEmpty(depot.getCompanyId())) { depot.setCompanyId(ContextUtil.getCompanyId()); } if (StringUtils.isEmpty(depot.getDeptId())) { depot.setDeptId(ContextUtil.subDeptId(null)); } //主é®ID if (StringUtils.isEmpty(depot.getId())) { depot.setId(getStrId(depot.getDeptId())); depot.setCreateBy(ContextUtil.getLoginUserName()); depot.setCreateTime(new Date()); } //é»è®¤é¡ºåºå· if(null == depot.getOrderNum()){ depot.setOrderNum(1); } depot.setUpdateBy(ContextUtil.getLoginUserName()); depot.setUpdateTime(new Date()); depotRepository.save(depot); flushCache(depot.getCompanyId()); } /** * è·å主é®ID * @param deptId * @param deptId */ public String getStrId(String deptId) { List<Depot> depots = depotRepository.getDepotMaxId(deptId); String oldOrderId = null; if(null != depots && depots.size() > 0){ oldOrderId = depots.get(0).getId().substring(deptId.length()); } return deptId + ContextUtil.getOrderId(oldOrderId, 3); } /** * jpaæ´æ°ä»åºç¶æ * @param depotId * @param status */ public void updateDepotStatus(String depotId, String status) { if (StringUtils.isEmpty(depotId)) { return; } depotRepository.updateDepotStatus(status, depotId); } /** * jpaå é¤ä»åºè´§ä½ä¿¡æ¯ * @param depot */ public void deleteDepot(Depot depot) { depotRepository.delete(depot); //å é¤é ç½®ç¼å this.delCacheDepot(depot, depot.getCompanyId()); } /** * å·æ°ä»åºè´§ä½ç¼å * @param companyId */ public void flushCache(String companyId) { if (StringUtils.isEmpty(companyId)) { companyId = ContextUtil.getCompanyId(); } List<Depot> list = depotRepository.getDepotByCompanyId(companyId); this.setCacheDepotList(list, companyId); } /** * 设置ç¼å * @param list * @param companyId */ public void setCacheDepotList(List<Depot> list, String companyId) { if (null == list) return; String key; for (Depot depot : list) { key = RedisConst.buildKey(companyId, RedisConst.KEY_DEPOT, depot.getId()); redisCache.setCacheObject(key, depot); } } /** * å é¤ç¼åä¿¡æ¯ * @param depot * @param companyId */ public void delCacheDepot(Depot depot, String companyId) { if (null == depot) { return; } if(StringUtils.isEmpty(companyId)){ companyId = ContextUtil.getCompanyId(); } String key = RedisConst.buildKey(companyId, RedisConst.KEY_DEPOT, depot.getId()); redisCache.deleteObject(key); } /** * è·åç¼å-æ ¹æ®ç»ç»ç¼ç è·åä»åºéå * @param companyId * @return */ public List<Depot> getCacheDepotList(String companyId) { if(StringUtils.isEmpty(companyId)){ companyId = ContextUtil.getCompanyId(); } String patten = RedisConst.buildKey(companyId, RedisConst.KEY_DEPOT) + "*"; Collection<String> keys = redisCache.keys(patten); if (null == keys) { return null; } List<Depot> list = new ArrayList<>(); for (String key : keys) { list.add((Depot) redisCache.getCacheObject(key)); } //ç¼åè·å为空ï¼åæ¥è¯¢æ°æ®åº if(list.size() < 1){ list = depotRepository.getDepotByCompanyId(companyId); setCacheDepotList(list, companyId); } //éæ°æåº Collections.sort(list, (p1, p2) -> p1.getOrderNum() - p2.getOrderNum()); return list; } /** * è·åç¼å-æ ¹æ®ç»ç»ç¼ç ååºåºç¼ç è·åä»åºéå * @param companyId * @param deptId * @return */ public List<Depot> getCacheDepotList(String companyId, String deptId) { if (StringUtils.isEmpty(deptId)) { return null; } List<Depot> list = getCacheDepotList(companyId); if(null == list || list.isEmpty()){ return null; } List<Depot> result = new ArrayList<>(); for (Depot depot : list) { if (deptId.equals(depot.getDeptId())) { result.add(depot); } } //éæ°æåº Collections.sort(result, (p1, p2) -> p1.getOrderNum() - p2.getOrderNum()); return result; } /** * è·åä»åºä¿¡æ¯-æ ¹æ®ä»åºç¼ç è·åç¼åä¿¡æ¯ * @param companyId * @param depotId * @return */ public Depot getCacheDepot(String companyId, String depotId) { if (StringUtils.isEmpty(depotId)) { return null; } if(StringUtils.isEmpty(companyId)){ companyId = ContextUtil.getCompanyId(); } String key = RedisConst.buildKey(companyId, RedisConst.KEY_DEPOT, depotId); Depot depot = redisCache.getCacheObject(key); if(null == depot){ depot = depotRepository.getDepotById(companyId, depotId); redisCache.setCacheObject(key, depot); } return depot; } /** * æ ¹æ®åºåä¿¡æ¯æ´æ°ä»åºä¿¡æ¯ * @param data */ public void updateByStore(DepotStore data) { Depot depot = this.getCacheDepot(data.getCompanyId(), data.getDepotId()); if (null == depot) { return; } depot.setStorageReal(data.getStorageReal()); depot.setDepotStatus(data.getDepotStatus()); depot.setFoodLevel(data.getFoodLevel()); depot.setFoodLocation(data.getFoodLocation()); depot.setFoodVariety(data.getFoodVariety()); depot.setFoodType(data.getFoodType()); depot.setFoodYear(data.getFoodYear()); if (null != data.getStoreDate()) { depot.setStoreDate(data.getStoreDate()); } this.saveDepot(depot); } } fzzy-igdss-core/src/main/java/com/fzzy/igds/service/DepotStoreService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,103 @@ package com.fzzy.igds.service; import com.fzzy.igds.domain.DepotStore; import com.fzzy.igds.repository.DepotRepository; import com.fzzy.igds.repository.DepotStoreRepository; import com.fzzy.igds.utils.ContextUtil; import com.ruoyi.common.utils.StringUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.time.DateFormatUtils; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Date; import java.util.List; /** * @Description * @Author CZT * @Date 2025/11/27 13:44 */ @Slf4j @Service public class DepotStoreService { @Resource private DepotStoreRepository depotStoreRepository; @Resource private DepotRepository depotRepository; /** * JPAå页æ¥è¯¢æ°æ® * * @param specification * @param pageable * @return */ public Page<DepotStore> findAll(Specification<DepotStore> specification, Pageable pageable) { return depotStoreRepository.findAll(specification, pageable); } /** * JPAæ´æ°ä¿åæ°æ® * * @param data */ public void saveDepotStore(DepotStore data) { if (StringUtils.isEmpty(data.getCompanyId())) { data.setCompanyId(ContextUtil.getCompanyId()); } if (StringUtils.isEmpty(data.getDeptId())) { data.setDeptId(ContextUtil.subDeptId(null)); } data.setUpdateBy(ContextUtil.getLoginUserName()); data.setUpdateTime(new Date()); data.setId(data.getDepotId() + "_" + DateFormatUtils.format(data.getStoreDate(), "yyyyMMddHHmmss") + "_" + DateFormatUtils.format(data.getUpdateTime(), "yyyyMMddHHmmss")); data.setCreateTime(new Date()); data.setRemark("ç³»ç»çæ"); depotStoreRepository.save(data); } /** * JPAå 餿°æ® * * @param data * @return */ public String delDepotStore(DepotStore data) { depotStoreRepository.delete(data); return null; } /** * JPAè·åä»åºæå䏿¡åºåæ°æ® * * @param depotId * @param time * @return */ public DepotStore getLastData(String depotId, Date time) { List<DepotStore> list = depotStoreRepository.getDataByDepotId(depotId, time); if (null == list || list.isEmpty()) { return null; } return list.get(0); } public void addDepotStore(DepotStore store, boolean updateDepot) { if (null == store.getUpdateTime()) store.setUpdateTime(new Date()); if (null == store.getId()) store.setId(ContextUtil.generateId()); depotStoreRepository.save(store); if (updateDepot) { depotRepository.updateDepotStorage(store.getStorageReal(), store.getDepotId()); } } } fzzy-igdss-core/src/main/java/com/fzzy/igds/service/SysUserService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,47 @@ package com.fzzy.igds.service; import com.fzzy.igds.utils.ContextUtil; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.mapper.SysUserMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; /** * @Description * @Author CZT * @Date 2024/11/22 18:03 */ @Slf4j @Service public class SysUserService { @Resource private SysUserMapper userMapper; /** * æ ¹æ®ç»ç»ç¼ç ï¼è·åç¨æ·å表 * @param companyId * @return */ public List<SysUser> getUser(String companyId) { if(StringUtils.isEmpty(companyId)){ companyId = ContextUtil.getCompanyId(); } SysUser sysUser = new SysUser(); sysUser.setCompanyId(companyId); return userMapper.selectUserList(sysUser); } /** * æ ¹æ®ç»å½åç§°ï¼è·åç¨æ·ä¿¡æ¯ * @param loginName * @return */ public SysUser getUserByLoginName(String loginName) { return userMapper.selectUserByLoginName(loginName); } } fzzy-igdss-core/src/main/java/com/fzzy/igds/utils/ContextUtil.java
@@ -3,8 +3,8 @@ import com.ruoyi.common.config.FrameworkConfig; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.ShiroUtils; import com.ruoyi.common.utils.StringUtils; import org.apache.commons.lang3.RandomUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateFormatUtils; import java.time.LocalDateTime; @@ -21,6 +21,9 @@ private static final AtomicLong sequence = new AtomicLong(0); private static String lastTimestamp = ""; //å ¨å±ç¨æ·å®æ¶åå¨é¨é¨ public static Map<String, String> contextUserDept = new HashMap<>(); /** * çæé¡ºåºIDï¼å¹´ææ¥æ¶åç§æ¯«ç§(17ä½) + åºåå·(4ä½) = 21ä½ @@ -60,6 +63,63 @@ } public static String getLoginUserName() { return ShiroUtils.getUserName() ; SysUser user = ShiroUtils.getSysUser(); return null == user ? "ç³»ç»" : user.getUserName(); } public static SysUser getLoginUser() { return ShiroUtils.getSysUser(); } public static String subDeptId(SysUser user) { if (null == user) { user = getLoginUser(); } if (null == user) { return getCompanyId() + "001"; } //ä»å ¨å±è·åï¼å¦ææååå ¨å±çé»è®¤ï¼å¦ææ²¡æååèªå·±æå± if (null != contextUserDept.get(user.getLoginName())) { return contextUserDept.get(user.getLoginName()); } if (null == user.getDeptId()) { return user.getCompanyId(); } return user.getDeptId().toString(); } public static void updateSubDept(String userId, String deptId) { if (null == deptId) return; contextUserDept.put(userId, deptId); } /** * è·å顺åºå· * @param oldOrderId åæé¡ºåºå· * @param num 使° * @return */ public static String getOrderId(String oldOrderId, Integer num) { Integer index3 = 1001; Integer index4 = 10001; Integer index5 = 100001; Integer index = 0; String orderId = "001"; if(StringUtils.isNotEmpty(oldOrderId)){ index = Integer.valueOf(oldOrderId); } if(3 == num){ orderId = ((index3 + index) + "").substring(1); } if(4 == num){ orderId = ((index4 + index) + "").substring(1); } if(5 == num){ orderId = ((index5 + index) + "").substring(1); } return orderId; } } fzzy-igdss-view/src/main/java/com/fzzy/igds/Company.view.xml
@@ -230,7 +230,7 @@ <ClientEvent name="onClick">view.get("#dsMain").flushAsync();
 </ClientEvent> <Property name="caption">å·æ°</Property> <Property name="exClassName">btn-q2</Property> <Property name="exClassName">btn4</Property> <Property name="width">100</Property> <Property name="iconClass">fa fa-refresh</Property> </ToolBarButton> fzzy-igdss-view/src/main/java/com/fzzy/igds/CompanyPR.java
@@ -30,7 +30,7 @@ @DataProvider public List<Company> getData() { return coreCompanyService.getAllData(null); return coreCompanyService.getDataByParentId(); } fzzy-igdss-view/src/main/java/com/fzzy/igds/Depot.view.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,488 @@ <?xml version="1.0" encoding="UTF-8"?> <ViewConfig> <Arguments/> <Context/> <Model> <DataType name="dataTypeUser"> <Property name="creationType">com.ruoyi.common.core.domain.entity.SysUser</Property> <PropertyDef name="loginName"> <Property name="dataType">String</Property> <Property name="label">ç¨æ·å</Property> </PropertyDef> <PropertyDef name="userName"> <Property name="dataType">String</Property> <Property name="label">䏿å</Property> </PropertyDef> </DataType> </Model> <View layout="padding:10"> <ClientEvent name="onReady">
 /**
 * æ¥è¯¢
 */
 query = function(){
 view.get("#dataSetdepot").flushAsync();
 }
</ClientEvent> <Property name="packages">font-awesome,css-common</Property> <DataSet id="dataSetdepot"> <Property name="dataProvider">depotPR#getData</Property> <Property name="dataType">[dtDepot]</Property> </DataSet> <DataSet id="dataSetUser"> <Property name="dataType">[dataTypeUser]</Property> <Property name="dataProvider">sysUserPR#loadUser</Property> </DataSet> <Container> <Property name="className">c-param</Property> <ToolBar> <ToolBarButton> <ClientEvent name="onClick">view.get("#dataSetdepot").insert();
 view.get("#depotdialog").show();
 view.get("#oneId").set("readOnly",false);
 view.get("#twoId").set("readOnly",false);</ClientEvent> <Property name="caption">æ°å¢</Property> <Property name="exClassName">btn1</Property> <Property name="width">100</Property> <Property name="iconClass">fa fa-plus</Property> </ToolBarButton> <ToolBarButton> <ClientEvent name="onClick">var select = view.get("#dataGridDepot").get("selection");
 if(select){
 view.get("#depotdialog").show();
 view.get("#oneId").set("readOnly",true);
 view.get("#twoId").set("readOnly",true); }else{
 $notify("è¯·éæ©éè¦ä¿®æ¹çä»åºâ¦â¦");
 }</ClientEvent> <Property name="caption">ä¿®æ¹</Property> <Property name="exClassName">btn2</Property> <Property name="width">100</Property> <Property name="iconClass">fa fa-pencil-square-o</Property> </ToolBarButton> <ToolBarButton> <ClientEvent name="onClick">var select = view.get("#dataGridDepot").get("selection");
 if(select){
 view.get("#deleteAjaxAction").set("parameter",select).execute();
 query();
 }else{
 $notify("è¯·éæ©éè¦å é¤çä»åºâ¦â¦");
 }</ClientEvent> <Property name="caption">å é¤</Property> <Property name="exClassName">btn3</Property> <Property name="width">100</Property> <Property name="iconClass">fa fa-times</Property> </ToolBarButton> <ToolBarButton> <Property name="caption">å·æ°ç¼å</Property> <Property name="exClassName">btn4</Property> <Property name="iconClass">fa fa-refresh</Property> <Property name="width">100</Property> <Property name="action">ajaxRefreshCache</Property> </ToolBarButton> <ToolBarButton> <ClientEvent name="onClick">var url = "com.fzzy.igds.sys.DepotStore.d";
 var panelId = window.frameElement.getAttribute('data-id'); window.parent.$.modal.openTab("åºå管ç", url, false, panelId);</ClientEvent> <Property name="caption">åºå管ç</Property> <Property name="iconClass">fa fa-book</Property> <Property name="exClassName">btn1</Property> <Property name="width">100</Property> </ToolBarButton> </ToolBar> <DataGrid id="dataGridDepot" layoutConstraint="padding:8"> <ClientEvent name="onDataRowClick">view.get("#dataGridDepot").set("selection",arg.data);</ClientEvent> <Property name="dataSet">dataSetdepot</Property> <Property name="selectionMode">singleRow</Property> <Property name="readOnly">true</Property> <RowSelectorColumn/> <RowNumColumn/> <DataColumn name="id"> <Property name="property">id</Property> <Property name="align">center</Property> <Property name="width">160</Property> </DataColumn> <DataColumn name="name"> <Property name="property">name</Property> <Property name="align">center</Property> </DataColumn> <DataColumn name="depotStatus"> <Property name="property">depotStatus</Property> <Property name="align">center</Property> </DataColumn> <DataColumn name="foodVariety"> <Property name="property">foodVariety</Property> <Property name="align">center</Property> </DataColumn> <DataColumn name="foodType"> <Property name="property">foodType</Property> <Property name="align">center</Property> </DataColumn> <DataColumn name="foodLevel"> <Property name="property">foodLevel</Property> <Property name="align">center</Property> </DataColumn> <DataColumn name="storageReal"> <Property name="property">storageReal</Property> <Property name="align">center</Property> </DataColumn> <DataColumn name="foodYear"> <Property name="property">foodYear</Property> <Property name="align">center</Property> </DataColumn> <DataColumn name="foodLocation"> <Property name="property">foodLocation</Property> <Property name="align">center</Property> </DataColumn> <DataColumn name="storeDate"> <Property name="property">storeDate</Property> <Property name="align">center</Property> </DataColumn> <DataColumn name="storeKeeperName"> <Property name="property">storeKeeperName</Property> <Property name="align">center</Property> </DataColumn> <DataColumn name="depotType"> <Property name="property">depotType</Property> <Property name="align">center</Property> </DataColumn> <DataColumn name="updateBy"> <Property name="property">updateBy</Property> <Property name="align">center</Property> <Property name="width">100</Property> </DataColumn> <DataColumn name="updateTime"> <Property name="property">updateTime</Property> <Property name="align">center</Property> <Property name="width">160</Property> </DataColumn> </DataGrid> </Container> <Dialog id="depotdialog" layout="regionPadding:8"> <Property name="iconClass">fa fa-tasks</Property> <Property name="caption">ä»åºä¿¡æ¯</Property> <Property name="width">1200</Property> <Property name="closeable">false</Property> <Buttons> <Button id="btnOK"> <ClientEvent name="onClick">//åæ¶æäº¤åå²ä¹¦
 var data = view.get("#dataSetdepot.data:#");
 view.get("#updateactionSave").execute(function(result){
 if(result){
 $notify(result);
 }else{
 self.get("parent").hide();
 query();
 }
 });</ClientEvent> <Property name="caption">ä¿å</Property> <Property name="iconClass">fa fa-check-circle</Property> <Property name="exClassName">btn1</Property> <Property name="width">120</Property> </Button> <Button> <ClientEvent name="onClick">var cur = view.get("#dataSetdepot.data:#");
 if(cur) cur.cancel();
 self.get("parent").hide();</ClientEvent> <Property name="caption">åæ¶</Property> <Property name="exClassName">btn3</Property> <Property name="iconClass">fa fa-times-circle</Property> <Property name="width">120</Property> </Button> </Buttons> <Children> <FieldSet layout="padding:5"> <Property name="caption">åºæ¬ä¿¡æ¯</Property> <Buttons/> <Children> <AutoForm> <Property name="dataSet">dataSetdepot</Property> <Property name="readOnly">false</Property> <Property name="labelSeparator"> : </Property> <Property name="labelAlign">right</Property> <Property name="cols">*,*,*,*,*,*</Property> <Property name="labelWidth">80</Property> <AutoFormElement id="oneId" layoutConstraint="colSpan:2"> <Property name="name">id</Property> <Property name="property">id</Property> <Editor> <TextEditor> <Property name="blankText">-- ç³»ç»èªå¨çæ --</Property> </TextEditor> </Editor> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">name</Property> <Property name="property">name</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">deptId</Property> <Property name="property">deptId</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">storageMax</Property> <Property name="property">storageMax</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">storeType</Property> <Property name="property">storeType</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">createBy</Property> <Property name="property">createBy</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">depotStatus</Property> <Property name="property">depotStatus</Property> <Property name="trigger">autoMappingDropDown2</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">depotType</Property> <Property name="property">depotType</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">createTime</Property> <Property name="property">createTime</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">storeKeeperName</Property> <Property name="property">storeKeeperName</Property> <Property name="trigger">triggerUserList</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">orderNum</Property> <Property name="property">orderNum</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">updateBy</Property> <Property name="property">updateBy</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:4"> <Property name="name">remark</Property> <Property name="property">remark</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">updateTime</Property> <Property name="property">updateTime</Property> <Editor/> </AutoFormElement> </AutoForm> </Children> </FieldSet> <FieldSet layout="padding:5"> <Property name="caption">å¨ç²®ä¿¡æ¯</Property> <Buttons/> <Children> <AutoForm> <Property name="dataSet">dataSetdepot</Property> <Property name="readOnly">false</Property> <Property name="labelSeparator"> : </Property> <Property name="labelAlign">right</Property> <Property name="cols">*,*,*,*,*,*</Property> <Property name="labelWidth">80</Property> <AutoFormElement id="twoId" layoutConstraint="colSpan:2"> <Property name="name">storageReal</Property> <Property name="property">storageReal</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">foodVariety</Property> <Property name="property">foodVariety</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">foodType</Property> <Property name="property">foodType</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">foodLevel</Property> <Property name="property">foodLevel</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">foodYear</Property> <Property name="property">foodYear</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">foodLocation</Property> <Property name="property">foodLocation</Property> <Property name="trigger">ddFoodOrigin</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">storeDate</Property> <Property name="property">storeDate</Property> <Editor/> </AutoFormElement> <Label> <Property name="text"></Property> <Property name="style"> <Property name="color">blue</Property> <Property name="padding-left">50px</Property> </Property> </Label> <Label layoutConstraint="colSpan:3"> <Property name="text">说æï¼1ãå®é å¨éè°æ´è¯·ä½¿ç¨âåºå管çâåè½ï¼</Property> <Property name="style"> <Property name="color">blue</Property> <Property name="padding-left">50px</Property> </Property> </Label> </AutoForm> </Children> </FieldSet> <FieldSet layout="padding:5"> <Property name="caption">è´¨æ£ä¿¡æ¯</Property> <Buttons/> <Children> <AutoForm> <Property name="dataSet">dataSetdepot</Property> <Property name="readOnly">false</Property> <Property name="labelSeparator"> : </Property> <Property name="labelAlign">right</Property> <Property name="cols">*,*,*,*,*,*</Property> <Property name="labelWidth">80</Property> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">perWet</Property> <Property name="property">perWet</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">perImpurity</Property> <Property name="property">perImpurity</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">bulkWeight</Property> <Property name="property">bulkWeight</Property> <Editor/> </AutoFormElement> <AutoFormElement layoutConstraint="colSpan:2"> <Property name="name">checkDate</Property> <Property name="property">checkDate</Property> <Editor/> </AutoFormElement> <Label> <Property name="text"></Property> <Property name="style"> <Property name="color">blue</Property> <Property name="padding-left">50px</Property> </Property> </Label> <Label layoutConstraint="colSpan:3"> <Property name="text">说æï¼å¨å¤ç²®è´¨æ£ä¿¡æ¯ä¼æ ¹æ®è´¨é管ç èªå¨åæ¥æ´æ°</Property> <Property name="style"> <Property name="color">blue</Property> <Property name="padding-left">50px</Property> </Property> </Label> </AutoForm> </Children> </FieldSet> </Children> <Tools/> </Dialog> <UpdateAction id="updateactionSave"> <Property name="executingMessage">æ£å¨æ§è¡ä¸..</Property> <Property name="dataResolver">depotPR#saveOrUpdate</Property> <UpdateItem> <Property name="dataSet">dataSetdepot</Property> <Property name="dataPath">[#current]</Property> <Property name="alias">data</Property> </UpdateItem> </UpdateAction> <AjaxAction id="deleteAjaxAction"> <Property name="successMessage">å 餿å</Property> <Property name="service">depotPR#deletedepot</Property> <Property name="executingMessage">æ£å¨å é¤</Property> </AjaxAction> <AjaxAction id="ajaxRefreshCache"> <Property name="service">depotPR#flushCache</Property> <Property name="successMessage">å·æ°æåï¼</Property> <Property name="confirmMessage">ç¡®å®è¦å·æ°ç¼åä¹ï¼</Property> </AjaxAction> <YearDropDown id="yearDropDown1"/> <DataSetDropDown id="triggerUserList"> <Property name="dataSet">dataSetUser</Property> <Property name="property">userName</Property> <Property name="assignmentMap">storeKeeperName=userName,storeKeeper=loginName</Property> </DataSetDropDown> <CustomDropDown id="ddFoodOrigin"> <Property name="minHeight">500</Property> <Property name="assignmentMap">foodLocation=name</Property> <Property name="minWidth">500</Property> <Container layout="regionPadding:5"> <DataSet id="dsFoodOrigin"> <Property name="dataProvider">dicAreaPR#pageList</Property> <Property name="parameter"></Property> <Property name="pageSize">30</Property> <Property name="dataType">[dtArea]</Property> </DataSet> <Container layout="hbox regionPadding:5"> <TextEditor id="key2"> <Property name="blankText"> -- åç§° --</Property> <Property name="width">200</Property> </TextEditor> <Button> <ClientEvent name="onClick">var key = view.get("#key2.value");
 view.get("#dsFoodOrigin").set("parameter",{key:key}).flushAsync();</ClientEvent> <Property name="caption">æ¥è¯¢</Property> <Property name="iconClass">fa fa-search</Property> </Button> <Button> <ClientEvent name="onClick">var data = view.get("#dsFoodOrigin.data:#");
 if(data){
 view.get("#ddFoodOrigin").close(data.toJSON());
 }</ClientEvent> <Property name="iconClass">fa fa-check</Property> <Property name="caption">ç¡®å®</Property> </Button> </Container> <DataGrid> <ClientEvent name="onDataRowDoubleClick">var data = view.get("#dsFoodOrigin.data:#");
 if(data){
 view.get("#ddFoodOrigin").close(data.toJSON());
 }</ClientEvent> <Property name="dataSet">dsFoodOrigin</Property> <Property name="readOnly">true</Property> <DataColumn name="code"> <Property name="property">code</Property> <Property name="readOnly">true</Property> <Property name="align">center</Property> </DataColumn> <DataColumn name="name"> <ClientEvent name="onRenderCell">arg.dom.style.fontWeight = "bold";
 arg.processDefault = true;</ClientEvent> <Property name="property">name</Property> <Property name="readOnly">true</Property> <Property name="align">center</Property> </DataColumn> <DataColumn name="simple"> <Property name="property">simple</Property> <Property name="readOnly">true</Property> <Property name="align">center</Property> </DataColumn> </DataGrid> <DataPilot layoutConstraint="bottom"> <Property name="dataSet">dsFoodOrigin</Property> </DataPilot> </Container> </CustomDropDown> <ListDropDown id="listOri"> <Property name="items">ä¸,å,西,å,ä¸å,ä¸å,西å,西å</Property> </ListDropDown> </View> </ViewConfig> fzzy-igdss-view/src/main/java/com/fzzy/igds/DepotPR.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,101 @@ package com.fzzy.igds; import com.bstek.dorado.annotation.DataProvider; import com.bstek.dorado.annotation.DataResolver; import com.bstek.dorado.annotation.Expose; import com.fzzy.igds.domain.Depot; import com.fzzy.igds.service.DepotService; import com.fzzy.igds.utils.ContextUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.List; /** * @Description * @Author CZT * @Date 2025/11/27 13:57 */ @Slf4j @Component public class DepotPR { @Resource private DepotService depotService; /** * depotPR#getData * @return */ @DataProvider public List<Depot> getData(){ return depotService.getData(null, null); } /** * depotPR#saveOrUpdate * @param data * @return */ @DataResolver @Transactional public String saveOrUpdate(Depot data) { Depot depot = new Depot(); BeanUtils.copyProperties(data, depot); depotService.saveDepot(depot); return null; } /** * depotPR#deleteDepot * @param data */ @Expose @Transactional public void deleteDepot(Depot data) { Depot depot = new Depot(); BeanUtils.copyProperties(data, depot); depotService.deleteDepot(depot); } /** * depotPR#flushCache */ @Expose public void flushCache() { depotService.flushCache(null); } /** * ${dorado.getDataProvider("depotPR#getAllCache").getResult()} * @return */ @DataProvider public List<Depot> getAllCache() { return depotService.getCacheDepotList(null, ContextUtil.subDeptId(null)); } /** * depotPR#ajaxGetAllCache * @return */ @Expose public List<Depot> ajaxGetAllCache() { return depotService.getCacheDepotList(null, ContextUtil.subDeptId(null)); } /** * depotPR#getDepot è·åä»åºä¿¡æ¯ * * @param depotId * @return */ @Expose public Depot getDepot(String depotId) { return depotService.getCacheDepot(null, depotId); } } fzzy-igdss-view/src/main/java/com/fzzy/igds/Dept.view.xml
@@ -163,7 +163,7 @@ <ClientEvent name="onClick">view.get("#dsMain").flushAsync();
 </ClientEvent> <Property name="caption">å·æ°</Property> <Property name="exClassName">btn-q2</Property> <Property name="exClassName">btn4</Property> <Property name="width">100</Property> <Property name="iconClass">fa fa-refresh</Property> </ToolBarButton> @@ -231,16 +231,18 @@ view.get("#dialogMain").hide();
 }
 });</ClientEvent> <Property name="caption">ç¡®å®</Property> <Property name="caption">ä¿å</Property> <Property name="iconClass">fa fa-check-circle</Property> <Property name="exClassName">btn1</Property> <Property name="iconClass">fa fa-check</Property> <Property name="width">120</Property> </Button> <Button> <ClientEvent name="onClick">view.get("#dsMain.data:#").cancel();
 self.get("parent").hide();</ClientEvent> <Property name="caption">åæ¶</Property> <Property name="exClassName">btn3</Property> <Property name="iconClass">fa fa-times</Property> <Property name="iconClass">fa fa-times-circle</Property> <Property name="width">120</Property> </Button> </Buttons> <Children> fzzy-igdss-view/src/main/java/com/fzzy/igds/DeptPR.java
@@ -4,6 +4,10 @@ import com.bstek.dorado.annotation.DataResolver; import com.fzzy.igds.domain.Dept; import com.fzzy.igds.service.CoreDeptService; import com.fzzy.igds.utils.ContextUtil; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.system.service.ISysDeptService; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Component; import javax.annotation.Resource; @@ -20,6 +24,7 @@ @Resource private CoreDeptService coreDeptService; /** * æ¥è¯¢è®¾å¤,å°æä½ä¿¡æ¯è°æ´ä¸ºç©ºï¼é»è®¤å æ¬ååºåæ° * @@ -30,7 +35,7 @@ @DataProvider public List<Dept> getData() { return coreDeptService.getAllData(null); return coreDeptService.getDeptData(); } /** fzzy-igdss-view/src/main/java/com/fzzy/igds/SelectDept.view.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,67 @@ <?xml version="1.0" encoding="UTF-8"?> <ViewConfig> <Arguments/> <Context/> <Model> <DataType name="dtCompany"> <Property name="creationType">com.fzzy.igds.domain.Company</Property> <PropertyDef name="id"> <Property></Property> <Property name="label">å ¬å¸ç¼ç </Property> </PropertyDef> <PropertyDef name="dwmc"> <Property></Property> <Property name="label">åä½åç§°</Property> </PropertyDef> <Reference name="listArea"> <Property name="dataType">[dtArea]</Property> <Property name="parameter">$${this.id}</Property> <Property name="dataProvider">selectDeptPR#listArea</Property> </Reference> </DataType> <DataType name="dtArea"> <Property name="creationType">com.fzzy.igds.domain.Dept</Property> <PropertyDef name="id"> <Property></Property> <Property name="label">åºåºä»£ç </Property> </PropertyDef> <PropertyDef name="kqmc"> <Property></Property> <Property name="label">åºåºåç§°</Property> </PropertyDef> </DataType> </Model> <View> <Property name="packages">font-awesome</Property> <DataSet id="dsCompany"> <Property name="dataType">[dtCompany]</Property> <Property name="dataProvider">selectDeptPR#listCompany</Property> </DataSet> <DataTree> <ClientEvent name="onDataRowDoubleClick">var curNode = self.get("currentNode");
 if(curNode.get("hasChild")){
 curNode.expand();
 $notify("è¯·éæ©åºåºâ¦â¦");
 }else{
 var curData = self.get("currentEntity");
 window.parent.onDeptAreaChange(curData.get("id"));
 }</ClientEvent> <Property name="dataSet">dsCompany</Property> <Property name="highlightCurrentRow">false</Property> <BindingConfigs> <BindingConfig> <Property name="name">dwmc</Property> <Property name="hasChild">true</Property> <Property name="labelProperty">dwmc</Property> <Property name="iconClass">fa fa-university</Property> <BindingConfig> <Property name="name">name</Property> <Property name="childrenProperty">listArea</Property> <Property name="labelProperty">kqmc</Property> <Property name="iconClass">fa fa-home</Property> </BindingConfig> </BindingConfig> </BindingConfigs> </DataTree> </View> </ViewConfig> fzzy-igdss-view/src/main/java/com/fzzy/igds/SelectDeptPR.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,59 @@ package com.fzzy.igds; import com.bstek.dorado.annotation.DataProvider; import com.fzzy.igds.domain.Company; import com.fzzy.igds.domain.Dept; import com.fzzy.igds.service.CoreCompanyService; import com.fzzy.igds.service.CoreDeptService; import com.fzzy.igds.utils.ContextUtil; import com.ruoyi.common.config.FrameworkConfig; import com.ruoyi.common.core.domain.entity.SysUser; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.List; /** * @Description åºåºåæ¢ * @Author CZT * @Date 2025/11/27 16:46 */ @Component public class SelectDeptPR { @Resource private CoreCompanyService companyService; @Resource private CoreDeptService deptService; /** * selectDeptPR#listCompany * æ ¹æ®è¡æ¿åºå代ç è·å ä¼ä¸ä¿¡æ¯å表 * @param id * @return */ @DataProvider public List<Company> listCompany(String id){ //è·åå½åç»å½äºº SysUser user = ContextUtil.getLoginUser(); if(FrameworkConfig.getCompanyId().equals(user.getCompanyId())){ //ç³»ç»çç®¡è´¦å· return companyService.getAllData(user.getCompanyId()); }else { //æ¶å¨å ¬å¸è´¦å· return companyService.getDataById(user.getCompanyId()); } } /** * è·åå ¬å¸ä¸å±åºåºå表 * selectDeptPR#listArea * @param id * @return */ @DataProvider public List<Dept> listArea(String id){ return deptService.getDataByParentId(id); } } fzzy-igdss-view/src/main/java/com/fzzy/igds/SysUserPR.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,31 @@ package com.fzzy.igds; import com.bstek.dorado.annotation.DataProvider; import com.fzzy.igds.service.SysUserService; import com.ruoyi.common.core.domain.entity.SysUser; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.List; /** * @Description ç¨æ·ä¿¡æ¯ * @Author CZT * @Date 2025/11/27 14:40 */ @Component public class SysUserPR { @Resource private SysUserService sysUserService; /** * sysUserPR#loadUser * @return */ @DataProvider public List<SysUser> loadUser() { return sysUserService.getUser(null); } } fzzy-igdss-view/src/main/java/models/core.model.xml
@@ -148,4 +148,289 @@ <Property name="required">false</Property> </PropertyDef> </DataType> <DataType name="dtDepot"> <Property name="creationType">com.fzzy.igds.domain.Depot</Property> <PropertyDef name="id"> <Property></Property> <Property name="label">ä»åºç¼å·</Property> <Property name="readOnly">true</Property> </PropertyDef> <PropertyDef name="companyId"> <Property></Property> <Property name="label">ç»ç»ç¼ç </Property> </PropertyDef> <PropertyDef name="deptId"> <Property></Property> <Property name="label">æå±ååº</Property> <Property name="mapping"> <Property name="mapValues">${dorado.getDataProvider("deptPR#getData").getResult()}</Property> <Property name="keyProperty">deptId</Property> <Property name="valueProperty">deptName</Property> </Property> <Property name="readOnly">true</Property> </PropertyDef> <PropertyDef name="name"> <Property></Property> <Property name="label">ä»åºåç§°</Property> <Property name="required">true</Property> </PropertyDef> <PropertyDef name="depotType"> <Property></Property> <Property name="label">仿¿ç±»å</Property> <Property name="mapping"> <Property name="mapValues">${dorado.getDataProvider("dicPR#triggerDepotType").getResult()}</Property> <Property name="keyProperty">dictValue</Property> <Property name="valueProperty">dictLabel</Property> </Property> <Property name="required">true</Property> </PropertyDef> <PropertyDef name="depotStatus"> <Property></Property> <Property name="label">ä»åºç¶æ</Property> <Property name="mapping"> <Property name="mapValues">${dorado.getDataProvider("dicPR#triggerDepotStatus").getResult()}</Property> <Property name="keyProperty">dictValue</Property> <Property name="valueProperty">dictLabel</Property> </Property> </PropertyDef> <PropertyDef name="storeType"> <Property></Property> <Property name="label">å¨ç²®æ¹å¼</Property> <Property name="mapping"> <Property name="mapValues">${dorado.getDataProvider("dicPR#triggerStoreType").getResult()}</Property> <Property name="keyProperty">dictValue</Property> <Property name="valueProperty">dictLabel</Property> </Property> </PropertyDef> <PropertyDef name="storageMax"> <Property name="dataType">Double</Property> <Property name="label">设计å¨é</Property> <Property name="displayFormat">#0.0 KG</Property> <Property name="required">true</Property> </PropertyDef> <PropertyDef name="storageReal"> <Property name="dataType">Double</Property> <Property name="label">å®é å¨é</Property> <Property name="displayFormat">#0.0 KG</Property> <Property name="required">false</Property> </PropertyDef> <PropertyDef name="foodType"> <Property></Property> <Property name="label">ç²®é£æ§è´¨</Property> <Property name="mapping"> <Property name="mapValues">${dorado.getDataProvider("dicPR#sysDictData").getResult("FOOD_TYPE_")}</Property> <Property name="keyProperty">dictValue</Property> <Property name="valueProperty">dictLabel</Property> </Property> </PropertyDef> <PropertyDef name="foodVariety"> <Property></Property> <Property name="label">ç²®é£åç§</Property> <Property name="mapping"> <Property name="mapValues">${dorado.getDataProvider("dicPR#sysDictData").getResult("FOOD_VARIETY_")}</Property> <Property name="keyProperty">dictValue</Property> <Property name="valueProperty">dictLabel</Property> </Property> </PropertyDef> <PropertyDef name="foodLevel"> <Property></Property> <Property name="label">ç²®é£ç级</Property> <Property name="mapping"> <Property name="mapValues">${dorado.getDataProvider("dicPR#triggerFoodLevel").getResult()}</Property> <Property name="keyProperty">dictValue</Property> <Property name="valueProperty">dictLabel</Property> </Property> </PropertyDef> <PropertyDef name="foodLocation"> <Property></Property> <Property name="label">ç²®é£äº§å°</Property> </PropertyDef> <PropertyDef name="foodLocationId"> <Property></Property> <Property name="label">ç²®é£äº§å°</Property> </PropertyDef> <PropertyDef name="foodYear"> <Property></Property> <Property name="label">ç²®é£å¹´ä»½</Property> </PropertyDef> <PropertyDef name="perWet"> <Property name="dataType">Double</Property> <Property name="label">æ°´å</Property> <Property name="displayFormat">0.0 %</Property> </PropertyDef> <PropertyDef name="perImpurity"> <Property name="dataType">Double</Property> <Property name="label">æè´¨</Property> <Property name="displayFormat">0.0 %</Property> </PropertyDef> <PropertyDef name="bulkWeight"> <Property name="dataType">Double</Property> <Property name="label">容é</Property> <Property name="displayFormat">0.0 g/L</Property> </PropertyDef> <PropertyDef name="storeKeeper"> <Property></Property> <Property name="label">ä¿ç®¡å</Property> </PropertyDef> <PropertyDef name="storeKeeperName"> <Property></Property> <Property name="label">ä¿ç®¡å</Property> </PropertyDef> <PropertyDef name="storeDate"> <Property name="dataType">Date</Property> <Property name="label">å ¥åºæ¥æ</Property> </PropertyDef> <PropertyDef name="checkDate"> <Property name="dataType">Date</Property> <Property name="label">è´¨æ£æ¥æ</Property> </PropertyDef> <PropertyDef name="remark"> <Property></Property> <Property name="label">夿³¨ä¿¡æ¯</Property> </PropertyDef> <PropertyDef name="orderNum"> <Property name="dataType">Integer</Property> <Property name="label">顺åºå·</Property> </PropertyDef> <PropertyDef name="createTime"> <Property name="dataType">DateTime</Property> <Property name="label">å建æ¶é´</Property> <Property name="readOnly">true</Property> </PropertyDef> <PropertyDef name="createBy"> <Property></Property> <Property name="label">å建人</Property> <Property name="readOnly">true</Property> </PropertyDef> <PropertyDef name="updateTime"> <Property name="dataType">DateTime</Property> <Property name="label">æ´æ°æ¶é´</Property> <Property name="readOnly">true</Property> </PropertyDef> <PropertyDef name="updateBy"> <Property></Property> <Property name="label">æ´æ°äºº</Property> <Property name="readOnly">true</Property> </PropertyDef> </DataType> <DataType name="dtDepotStore"> <Property name="creationType">com.fzzy.igds.domain.DepotStore</Property> <PropertyDef name="id"> <Property></Property> </PropertyDef> <PropertyDef name="companyId"> <Property></Property> <Property name="label">ç»ç»ç¼ç </Property> </PropertyDef> <PropertyDef name="deptId"> <Property></Property> <Property name="label">æå±ååº</Property> <Property name="mapping"> <Property name="mapValues">${dorado.getDataProvider("deptPR#getData").getResult()}</Property> <Property name="keyProperty">deptId</Property> <Property name="valueProperty">deptName</Property> </Property> </PropertyDef> <PropertyDef name="depotId"> <Property></Property> <Property name="label">æå±ä»åº</Property> <Property name="mapping"> <Property name="mapValues">${dorado.getDataProvider("depotPR#getAllCache").getResult()}</Property> <Property name="keyProperty">id</Property> <Property name="valueProperty">name</Property> </Property> <Property name="required">true</Property> </PropertyDef> <PropertyDef name="foodType"> <Property></Property> <Property name="label">ç²®é£æ§è´¨</Property> <Property name="mapping"> <Property name="mapValues">${dorado.getDataProvider("dicPR#sysDictData").getResult("FOOD_TYPE_")}</Property> <Property name="keyProperty">dictValue</Property> <Property name="valueProperty">dictLabel</Property> </Property> </PropertyDef> <PropertyDef name="foodVariety"> <Property></Property> <Property name="label">ç²®é£åç§</Property> <Property name="mapping"> <Property name="mapValues">${dorado.getDataProvider("dicPR#sysDictData").getResult("FOOD_VARIETY_")}</Property> <Property name="keyProperty">dictValue</Property> <Property name="valueProperty">dictLabel</Property> </Property> </PropertyDef> <PropertyDef name="foodLevel"> <Property></Property> <Property name="label">ç²®é£ç级</Property> <Property name="mapping"> <Property name="mapValues">${dorado.getDataProvider("dicPR#triggerFoodLevel").getResult()}</Property> <Property name="keyProperty">dictValue</Property> <Property name="valueProperty">dictLabel</Property> </Property> </PropertyDef> <PropertyDef name="foodLocationId"> <Property></Property> <Property name="label">ç²®é£äº§å°</Property> </PropertyDef> <PropertyDef name="foodLocation"> <Property></Property> <Property name="label">ç²®é£äº§å°</Property> </PropertyDef> <PropertyDef name="foodYear"> <Property></Property> <Property name="label">æ¶è´§å¹´åº¦</Property> </PropertyDef> <PropertyDef name="depotStatus"> <Property></Property> <Property name="label">ä»åºç¶æ</Property> <Property name="mapping"> <Property name="mapValues">${dorado.getDataProvider("dicPR#triggerDepotStatus").getResult()}</Property> <Property name="keyProperty">dictValue</Property> <Property name="valueProperty">dictLabel</Property> </Property> <Property name="required">true</Property> </PropertyDef> <PropertyDef name="storeDate"> <Property name="dataType">DateTime</Property> <Property name="label">å ¥ä»æ¶é´</Property> </PropertyDef> <PropertyDef name="fullDate"> <Property name="dataType">Date</Property> <Property name="label">å°ä»æ¥æ</Property> </PropertyDef> <PropertyDef name="outDate"> <Property name="label">åºä»å®ææ¶é´</Property> <Property name="dataType">DateTime</Property> </PropertyDef> <PropertyDef name="storageReal"> <Property name="dataType">Double</Property> <Property name="label">å®é å¨é</Property> <Property name="displayFormat">#,##0 KG</Property> <Property name="required">true</Property> </PropertyDef> <PropertyDef name="remark"> <Property></Property> <Property name="label">夿³¨</Property> </PropertyDef> <PropertyDef name="createTime"> <Property name="dataType">DateTime</Property> <Property name="label">å建æ¶é´</Property> <Property name="readOnly">true</Property> </PropertyDef> <PropertyDef name="createBy"> <Property></Property> <Property name="label">å建人</Property> <Property name="readOnly">true</Property> </PropertyDef> <PropertyDef name="updateTime"> <Property name="dataType">DateTime</Property> <Property name="label">æ´æ°æ¶é´</Property> <Property name="readOnly">true</Property> </PropertyDef> <PropertyDef name="updateBy"> <Property></Property> <Property name="label">æ´æ°äºº</Property> <Property name="readOnly">true</Property> </PropertyDef> </DataType> </Model> fzzy-igdss-web/src/main/java/com/fzzy/sys/controller/SysIndexController.java
@@ -1,9 +1,12 @@ package com.fzzy.sys.controller; import com.fzzy.igds.constant.Constant; import com.fzzy.igds.utils.ContextUtil; import com.ruoyi.common.config.FrameworkConfig; import com.ruoyi.common.constant.ShiroConstants; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysMenu; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.text.Convert; @@ -13,6 +16,7 @@ import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.shiro.service.SysPasswordService; import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.system.service.ISysDeptService; import com.ruoyi.system.service.ISysMenuService; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; @@ -37,16 +41,50 @@ private ISysConfigService configService; @Resource private SysPasswordService passwordService; @Resource private ISysDeptService iSysDeptService; /** * 页é¢è·¯ç± * * @param mmap * @return */ @GetMapping("/index-gateway") public String indexGateway(ModelMap mmap) { //è·åç»å½äººä¿¡æ¯ SysUser user = getSysUser(); //ååºåºä¸»é¡µ return "redirect:index?deptId=" + user.getDeptId(); } // ç³»ç»é¦é¡µ @GetMapping("/index") public String index(@RequestParam(value = "bizType", required = false) String bizType, public String index(@RequestParam(value = "deptId", required = true) String deptId, ModelMap mmap) { // åèº«ä»½ä¿¡æ¯ SysUser user = getSysUser(); mmap.put("user", user); mmap.put("sysName", FrameworkConfig.getName()); //夿æ¯å¦æ¾ç¤ºåºåºéæ©å¼¹çª String showDeptList = "Y"; SysDept userDept = iSysDeptService.selectDeptById(user.getDeptId()); if (Constant.DEPT_TYPE_20.equals(userDept.getType())) { showDeptList = "N"; } mmap.put("showDeptList", showDeptList); ContextUtil.updateSubDept(user.getLoginName(), deptId); SysDept dept = iSysDeptService.selectDeptById(Long.valueOf(deptId)); mmap.put("dept", dept); mmap.put("deptId", deptId); //åå°é»è®¤é¡µé¢ String welcomeUrl = "/group/gis"; mmap.put("welcomeUrl", welcomeUrl); // æ ¹æ®ç¨æ·idååºèå List<SysMenu> menus = menuService.selectMenusByUser(user); mmap.put("menus", menus); fzzy-igdss-web/src/main/resources/static/axui/loginAndRegister.js
@@ -39,7 +39,7 @@ }, success: function(r) { if (r.code == web_status.SUCCESS) { location.href = ctx + 'index'; location.href = ctx + 'index-gateway'; } else { $('.imgcode').click(); $(".code").val(""); fzzy-igdss-web/src/main/resources/static/ruoyi/login.js
@@ -31,7 +31,7 @@ }, success: function(r) { if (r.code == web_status.SUCCESS) { location.href = ctx + 'index'; location.href = ctx + 'index-gateway'; } else { $('.imgcode').click(); $(".code").val(""); fzzy-igdss-web/src/main/resources/templates/index-topnav.html
@@ -1,12 +1,12 @@ <!DOCTYPE html> <html lang="zh" xmlns:th="http://www.thymeleaf.org"> <html lang="zh" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="renderer" content="webkit"> <title th:text="${sysName}">æºæ §ç²®åºç®¡çç³»ç»</title> <title th:text="${sysName}">æºæ §ç²®åºç®¡çç³»ç»</title> <!-- é¿å IE使ç¨å ¼å®¹æ¨¡å¼ --> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <link th:href="@{favicon.ico}" rel="shortcut icon"/> <link th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/> <link th:href="@{/css/jquery.contextMenu.min.css}" rel="stylesheet"/> @@ -15,9 +15,12 @@ <link th:href="@{/css/style.min.css}" rel="stylesheet"/> <link th:href="@{/css/skins.css?v=20200902}" rel="stylesheet"/> <link th:href="@{/ruoyi/css/ry-ui.css?v=4.7.8}" rel="stylesheet"/> <style type="text/css">.fixed-sidebar .nav:not(.navbar-toolbar)>li.active{border-left:0px!important;}</style> <style type="text/css">.fixed-sidebar .nav:not(.navbar-toolbar) > li.active { border-left: 0px !important; }</style> </head> <body class="fixed-sidebar full-height-layout skin-zcl" th:classappend="${isMobile} ? 'canvas-menu'" style="overflow: hidden"> <body class="fixed-sidebar full-height-layout skin-zcl" th:classappend="${isMobile} ? 'canvas-menu'" style="overflow: hidden"> <div id="wrapper"> <!--左侧导èªå¼å§--> @@ -25,183 +28,200 @@ <div class="nav-close"> <i class="fa fa-times-circle"></i> </div> <a th:href="@{/index}"> <a onclick="onDeptChange()" href="javascript:;"> <li class="logo hidden-xs"> <span class="logo-lg" th:text="${sysName}">æºæ §ç²®åºç®¡çç³»ç»</span> </li> </a> </a> <div class="sidebar-collapse tab-content" id="side-menu"> <div class="user-panel"> <a class="menuItem noactive" title="个人ä¸å¿" th:href="@{/system/user/profile}"> <div class="hide" th:text="个人ä¸å¿"></div> <div class="pull-left image"> <img th:src="(${#strings.isEmpty(user.avatar)}) ? @{/img/profile.jpg} : @{${user.avatar}}" th:onerror="this.src='img/profile.jpg'" class="img-circle" alt="User Image"> </div> </a> <div class="pull-left info"> <p>[[${user.loginName}]]</p> <a href="javascript:;"><i class="fa fa-circle text-success"></i> å¨çº¿</a> <a th:href="@{logout}" style="padding-left:5px;"><i class="fa fa-sign-out text-danger"></i> 注é</a> </div> </div> <div class="user-panel"> <a class="menuItem noactive" title="个人ä¸å¿" th:href="@{/system/user/profile}"> <div class="hide" th:text="个人ä¸å¿"></div> <div class="pull-left image"> <img th:src="(${#strings.isEmpty(user.avatar)}) ? @{/img/profile.jpg} : @{${user.avatar}}" th:onerror="this.src='img/profile.jpg'" class="img-circle" alt="User Image"> </div> </a> <div class="pull-left info"> <p>[[${user.loginName}]]</p> <a href="javascript:;"><i class="fa fa-circle text-success"></i> å¨çº¿</a> <a th:href="@{logout}" style="padding-left:5px;"><i class="fa fa-sign-out text-danger"></i> 注é</a> </div> </div> <!-- 左侧èå --> <th:block th:each="menu : ${menus}"> <div class="tab-pane fade height-full" th:id="|menu_${menu.menuId}|"> <ul class="nav"> <li th:each="cmenu : ${menu.children}"> <a class="menu-content" th:if="${#lists.isEmpty(cmenu.children)}" th:href="@{${cmenu.url}}" th:classappend="${#strings.isEmpty(cmenu.target)} ? |menuItem| : ${cmenu.target}" th:data-refresh="${cmenu.isRefresh == '0'}"> <i th:class="${cmenu.icon} + ' fa-fw'"></i> <span class="nav-label">[[${cmenu.menuName}]]</span> </a> <a class="menu-content" th:if="${not #lists.isEmpty(cmenu.children)}" href="javascript:;"> <i th:class="${cmenu.icon} + ' fa-fw'"></i> <span class="nav-label">[[${cmenu.menuName}]]</span> <span class="fa arrow"></span> </a> <ul th:if="${not #lists.isEmpty(cmenu.children)}" class="nav nav-second-level collapse"> <li th:each="emenu : ${cmenu.children}"> <a th:if="${#lists.isEmpty(emenu.children)}" th:href="@{${emenu.url}}" th:class="${#strings.isEmpty(emenu.target)} ? |menuItem| : ${emenu.target}" th:data-refresh="${emenu.isRefresh == '0'}"> <i th:class="${emenu.icon} + ' fa-fw'"></i> [[${emenu.menuName}]] </a> <a th:if="${not #lists.isEmpty(emenu.children)}" href="javascript:;"> <i th:class="${emenu.icon} + ' fa-fw'"></i> [[${emenu.menuName}]] <span class="fa arrow"></span> </a> <ul th:if="${not #lists.isEmpty(emenu.children)}" class="nav nav-third-level collapse"> <li th:each="fmenu : ${emenu.children}"><a th:if="${#lists.isEmpty(fmenu.children)}" th:class="${#strings.isEmpty(fmenu.target)} ? |menuItem| : ${fmenu.target}" th:href="@{${fmenu.url}}" th:data-refresh="${fmenu.isRefresh == '0'}">[[${fmenu.menuName}]]</a></li> </ul> </li> </ul> </li> </ul> </div> </th:block> <!-- é¦é¡µèå --> <div class="tab-pane fade height-full" id="index"> <ul class="nav"> <li> <a class="menuItem" th:href="@{/archive/index}"> <i class="fa fa-home"></i> <span class="nav-label">é¦é¡µ</span></a> </li> </ul> </div> <th:block th:each="menu : ${menus}"> <div class="tab-pane fade height-full" th:id="|menu_${menu.menuId}|"> <ul class="nav"> <li th:each="cmenu : ${menu.children}"> <a class="menu-content" th:if="${#lists.isEmpty(cmenu.children)}" th:href="@{${cmenu.url}}" th:classappend="${#strings.isEmpty(cmenu.target)} ? |menuItem| : ${cmenu.target}" th:data-refresh="${cmenu.isRefresh == '0'}"> <i th:class="${cmenu.icon} + ' fa-fw'"></i> <span class="nav-label">[[${cmenu.menuName}]]</span> </a> <a class="menu-content" th:if="${not #lists.isEmpty(cmenu.children)}" href="javascript:;"> <i th:class="${cmenu.icon} + ' fa-fw'"></i> <span class="nav-label">[[${cmenu.menuName}]]</span> <span class="fa arrow"></span> </a> <ul th:if="${not #lists.isEmpty(cmenu.children)}" class="nav nav-second-level collapse"> <li th:each="emenu : ${cmenu.children}"> <a th:if="${#lists.isEmpty(emenu.children)}" th:href="@{${emenu.url}}" th:class="${#strings.isEmpty(emenu.target)} ? |menuItem| : ${emenu.target}" th:data-refresh="${emenu.isRefresh == '0'}"> <i th:class="${emenu.icon} + ' fa-fw'"></i> [[${emenu.menuName}]] </a> <a th:if="${not #lists.isEmpty(emenu.children)}" href="javascript:;"> <i th:class="${emenu.icon} + ' fa-fw'"></i> [[${emenu.menuName}]] <span class="fa arrow"></span> </a> <ul th:if="${not #lists.isEmpty(emenu.children)}" class="nav nav-third-level collapse"> <li th:each="fmenu : ${emenu.children}"><a th:if="${#lists.isEmpty(fmenu.children)}" th:class="${#strings.isEmpty(fmenu.target)} ? |menuItem| : ${fmenu.target}" th:href="@{${fmenu.url}}" th:data-refresh="${fmenu.isRefresh == '0'}">[[${fmenu.menuName}]]</a> </li> </ul> </li> </ul> </li> </ul> </div> </th:block> <!-- é¦é¡µèå --> <div class="tab-pane fade height-full" id="index"> <ul class="nav"> <li> <a class="menuItem" th:href="@{/index}"> <i class="fa fa-home"></i> <span class="nav-label">é¦é¡µ</span></a> </li> </ul> </div> <!-- å®ä¾æ¼ç¤ºèå --> <div class="tab-pane fade height-full" id="demo" th:if="${demoEnabled}"> <ul class="nav"> <li> <a href="javascript:;"><i class="fa fa-edit"></i> <span class="nav-label">表å</span><span class="fa arrow"></span></a> <ul class="nav nav-second-level collapse"> <li><a class="menuItem" th:href="@{/demo/form/button}">æé®</a></li> <li><a class="menuItem" th:href="@{/demo/form/grid}">æ æ ¼</a></li> <li><a class="menuItem" th:href="@{/demo/form/select}">䏿æ¡</a></li> <li><a class="menuItem" th:href="@{/demo/form/timeline}">æ¶é´è½´</a></li> <li><a class="menuItem" th:href="@{/demo/form/progress_bars}">è¿åº¦æ¡</a></li> <li><a class="menuItem" th:href="@{/demo/form/basic}">åºæ¬è¡¨å</a></li> <li><a class="menuItem" th:href="@{/demo/form/cards}">å¡çå表</a></li> <li><a class="menuItem" th:href="@{/demo/form/jasny}">åè½æ©å±</a></li> <li><a class="menuItem" th:href="@{/demo/form/sortable}">æå¨æåº</a></li> <li><a class="menuItem" th:href="@{/demo/form/invoice}">åæ®æå°</a></li> <li><a class="menuItem" th:href="@{/demo/form/labels_tips}">æ ç¾ & æç¤º</a></li> <li><a class="menuItem" th:href="@{/demo/form/tabs_panels}">éé¡¹å¡ & 颿¿</a></li> <li><a class="menuItem" th:href="@{/demo/form/validate}">è¡¨åæ ¡éª</a></li> <li><a class="menuItem" th:href="@{/demo/form/wizard}">表åå导</a></li> <li><a class="menuItem" th:href="@{/demo/form/upload}">æä»¶ä¸ä¼ </a></li> <li><a class="menuItem" th:href="@{/demo/form/datetime}">æ¥æåæ¶é´</a></li> <li><a class="menuItem" th:href="@{/demo/form/summernote}">坿æ¬ç¼è¾å¨</a></li> <li><a class="menuItem" th:href="@{/demo/form/duallistbox}">å·¦å³äºéç»ä»¶</a></li> <li><a class="menuItem" th:href="@{/demo/form/autocomplete}">æç´¢èªå¨è¡¥å ¨</a></li> <li><a class="menuItem" th:href="@{/demo/form/cxselect}">å¤çº§èå¨ä¸æ</a></li> <li><a class="menuItem" th:href="@{/demo/form/localrefresh}">Ajaxå±é¨å·æ°</a></li> </ul> </li> <li> <a href="javascript:;"><i class="fa fa-table"></i> <span class="nav-label">è¡¨æ ¼</span><span class="fa arrow"></span></a> <ul class="nav nav-second-level collapse"> <li><a class="menuItem" th:href="@{/demo/table/search}">æ¥è¯¢æ¡ä»¶</a></li> <li><a class="menuItem" th:href="@{/demo/table/footer}">æ°æ®æ±æ»</a></li> <li><a class="menuItem" th:href="@{/demo/table/groupHeader}">ç»å表头</a></li> <li><a class="menuItem" th:href="@{/demo/table/export}">è¡¨æ ¼å¯¼åº</a></li> <li><a class="menuItem" th:href="@{/demo/table/exportSelected}">导åºéæ©å</a></li> <li><a class="menuItem" th:href="@{/demo/table/remember}">翻页记ä½éæ©</a></li> <li><a class="menuItem" th:href="@{/demo/table/pageGo}">è·³è½¬è³æå®é¡µ</a></li> <li><a class="menuItem" th:href="@{/demo/table/params}">èªå®ä¹æ¥è¯¢åæ°</a></li> <li><a class="menuItem" th:href="@{/demo/table/multi}">åå§å¤è¡¨æ ¼</a></li> <li><a class="menuItem" th:href="@{/demo/table/button}">ç¹å»æé®å è½½è¡¨æ ¼</a></li> <li><a class="menuItem" th:href="@{/demo/table/data}">ç´æ¥å è½½è¡¨æ ¼æ°æ®</a></li> <li><a class="menuItem" th:href="@{/demo/table/fixedColumns}">è¡¨æ ¼å»ç»å</a></li> <li><a class="menuItem" th:href="@{/demo/table/event}">èªå®ä¹è§¦åäºä»¶</a></li> <li><a class="menuItem" th:href="@{/demo/table/headerStyle}">è¡¨æ ¼æ 颿 ¼å¼å</a></li> <li><a class="menuItem" th:href="@{/demo/table/detail}">è¡¨æ ¼ç»èè§å¾</a></li> <li><a class="menuItem" th:href="@{/demo/table/child}">è¡¨æ ¼ç¶åè§å¾</a></li> <li><a class="menuItem" th:href="@{/demo/table/image}">è¡¨æ ¼å¾çé¢è§</a></li> <li><a class="menuItem" th:href="@{/demo/table/curd}">卿å¢å æ¹æ¥</a></li> <li><a class="menuItem" th:href="@{/demo/table/reorderRows}">è¡¨æ ¼è¡ææ½æä½</a></li> <li><a class="menuItem" th:href="@{/demo/table/reorderColumns}">è¡¨æ ¼åææ½æä½</a></li> <li><a class="menuItem" th:href="@{/demo/table/resizable}">è¡¨æ ¼å宽æå¨</a></li> <li><a class="menuItem" th:href="@{/demo/table/editable}">è¡¨æ ¼è¡å ç¼è¾</a></li> <li><a class="menuItem" th:href="@{/demo/table/subdata}">主å表æäº¤</a></li> <li><a class="menuItem" th:href="@{/demo/table/refresh}">è¡¨æ ¼èªå¨å·æ°</a></li> <li><a class="menuItem" th:href="@{/demo/table/print}">è¡¨æ ¼æå°é ç½®</a></li> <li><a class="menuItem" th:href="@{/demo/table/dynamicColumns}">è¡¨æ ¼å¨æå</a></li> <li><a class="menuItem" th:href="@{/demo/table/customView}">èªå®ä¹è§å¾å页</a></li> <li><a class="menuItem" th:href="@{/demo/table/asynTree}">弿¥å è½½è¡¨æ ¼æ </a></li> <li><a class="menuItem" th:href="@{/demo/table/other}">è¡¨æ ¼å ¶ä»æä½</a></li> </ul> </li> <li> <a href="javascript:;"><i class="fa fa-flask"></i> <span class="nav-label">å¼¹æ¡</span><span class="fa arrow"></span></a> <ul class="nav nav-second-level collapse"> <li><a class="menuItem" th:href="@{/demo/modal/dialog}">模æçªå£</a></li> <li><a class="menuItem" th:href="@{/demo/modal/layer}">å¼¹å±ç»ä»¶</a></li> <li><a class="menuItem" th:href="@{/demo/modal/table}">å¼¹å±è¡¨æ ¼</a></li> </ul> </li> <li> <a href="javascript:;"><i class="fa fa-wpforms"></i> <span class="nav-label">æä½</span><span class="fa arrow"></span></a> <ul class="nav nav-second-level collapse"> <li><a class="menuItem" th:href="@{/demo/operate/table}">è¡¨æ ¼</a></li> <li><a class="menuItem" th:href="@{/demo/operate/other}">å ¶ä»</a></li> </ul> </li> <li> <a href="javascript:;"><i class="fa fa-bar-chart-o"></i> <span class="nav-label">æ¥è¡¨</span><span class="fa arrow"></span></a> <ul class="nav nav-second-level collapse"> <li><a class="menuItem" th:href="@{/demo/report/echarts}">ç¾åº¦ECharts</a></li> <li><a class="menuItem" th:href="@{/demo/report/peity}">peity</a></li> <li><a class="menuItem" th:href="@{/demo/report/sparkline}">sparkline</a></li> <li><a class="menuItem" th:href="@{/demo/report/metrics}">å¾è¡¨ç»å</a></li> </ul> </li> <li> <a href="javascript:;"><i class="fa fa-book"></i> <span class="nav-label">徿 </span><span class="fa arrow"></span></a> <ul class="nav nav-second-level collapse"> <li><a class="menuItem" th:href="@{/demo/icon/fontawesome}">Font Awesome</a></li> <li><a class="menuItem" th:href="@{/demo/icon/glyphicons}">Glyphicons</a></li> </ul> </li> <li> <a href="javascript:;"><i class="fa fa-navicon"></i> <span class="nav-label">åå±èå</span><span class="fa arrow"></span></a> <ul class="nav nav-second-level collapse"> <li> <a href="javascript:;" id="damian">ä¸çº§èå1<span class="fa arrow"></span></a> <ul class="nav nav-third-level collapse"> <li> <a href="javascript:;">å级èå1</a> </li> <li> <a href="javascript:;">å级èå2</a> </li> </ul> </li> <li><a href="javascript:;">ä¸çº§èå2</a></li> </ul> </li> </ul> </div> <div class="tab-pane fade height-full" id="demo" th:if="${demoEnabled}"> <ul class="nav"> <li> <a href="javascript:;"><i class="fa fa-edit"></i> <span class="nav-label">表å</span><span class="fa arrow"></span></a> <ul class="nav nav-second-level collapse"> <li><a class="menuItem" th:href="@{/demo/form/button}">æé®</a></li> <li><a class="menuItem" th:href="@{/demo/form/grid}">æ æ ¼</a></li> <li><a class="menuItem" th:href="@{/demo/form/select}">䏿æ¡</a></li> <li><a class="menuItem" th:href="@{/demo/form/timeline}">æ¶é´è½´</a></li> <li><a class="menuItem" th:href="@{/demo/form/progress_bars}">è¿åº¦æ¡</a></li> <li><a class="menuItem" th:href="@{/demo/form/basic}">åºæ¬è¡¨å</a></li> <li><a class="menuItem" th:href="@{/demo/form/cards}">å¡çå表</a></li> <li><a class="menuItem" th:href="@{/demo/form/jasny}">åè½æ©å±</a></li> <li><a class="menuItem" th:href="@{/demo/form/sortable}">æå¨æåº</a></li> <li><a class="menuItem" th:href="@{/demo/form/invoice}">åæ®æå°</a></li> <li><a class="menuItem" th:href="@{/demo/form/labels_tips}">æ ç¾ & æç¤º</a></li> <li><a class="menuItem" th:href="@{/demo/form/tabs_panels}">éé¡¹å¡ & 颿¿</a></li> <li><a class="menuItem" th:href="@{/demo/form/validate}">è¡¨åæ ¡éª</a></li> <li><a class="menuItem" th:href="@{/demo/form/wizard}">表åå导</a></li> <li><a class="menuItem" th:href="@{/demo/form/upload}">æä»¶ä¸ä¼ </a></li> <li><a class="menuItem" th:href="@{/demo/form/datetime}">æ¥æåæ¶é´</a></li> <li><a class="menuItem" th:href="@{/demo/form/summernote}">坿æ¬ç¼è¾å¨</a></li> <li><a class="menuItem" th:href="@{/demo/form/duallistbox}">å·¦å³äºéç»ä»¶</a></li> <li><a class="menuItem" th:href="@{/demo/form/autocomplete}">æç´¢èªå¨è¡¥å ¨</a></li> <li><a class="menuItem" th:href="@{/demo/form/cxselect}">å¤çº§èå¨ä¸æ</a></li> <li><a class="menuItem" th:href="@{/demo/form/localrefresh}">Ajaxå±é¨å·æ°</a></li> </ul> </li> <li> <a href="javascript:;"><i class="fa fa-table"></i> <span class="nav-label">è¡¨æ ¼</span><span class="fa arrow"></span></a> <ul class="nav nav-second-level collapse"> <li><a class="menuItem" th:href="@{/demo/table/search}">æ¥è¯¢æ¡ä»¶</a></li> <li><a class="menuItem" th:href="@{/demo/table/footer}">æ°æ®æ±æ»</a></li> <li><a class="menuItem" th:href="@{/demo/table/groupHeader}">ç»å表头</a></li> <li><a class="menuItem" th:href="@{/demo/table/export}">è¡¨æ ¼å¯¼åº</a></li> <li><a class="menuItem" th:href="@{/demo/table/exportSelected}">导åºéæ©å</a></li> <li><a class="menuItem" th:href="@{/demo/table/remember}">翻页记ä½éæ©</a></li> <li><a class="menuItem" th:href="@{/demo/table/pageGo}">è·³è½¬è³æå®é¡µ</a></li> <li><a class="menuItem" th:href="@{/demo/table/params}">èªå®ä¹æ¥è¯¢åæ°</a></li> <li><a class="menuItem" th:href="@{/demo/table/multi}">åå§å¤è¡¨æ ¼</a></li> <li><a class="menuItem" th:href="@{/demo/table/button}">ç¹å»æé®å è½½è¡¨æ ¼</a></li> <li><a class="menuItem" th:href="@{/demo/table/data}">ç´æ¥å è½½è¡¨æ ¼æ°æ®</a></li> <li><a class="menuItem" th:href="@{/demo/table/fixedColumns}">è¡¨æ ¼å»ç»å</a></li> <li><a class="menuItem" th:href="@{/demo/table/event}">èªå®ä¹è§¦åäºä»¶</a></li> <li><a class="menuItem" th:href="@{/demo/table/headerStyle}">è¡¨æ ¼æ 颿 ¼å¼å</a></li> <li><a class="menuItem" th:href="@{/demo/table/detail}">è¡¨æ ¼ç»èè§å¾</a></li> <li><a class="menuItem" th:href="@{/demo/table/child}">è¡¨æ ¼ç¶åè§å¾</a></li> <li><a class="menuItem" th:href="@{/demo/table/image}">è¡¨æ ¼å¾çé¢è§</a></li> <li><a class="menuItem" th:href="@{/demo/table/curd}">卿å¢å æ¹æ¥</a></li> <li><a class="menuItem" th:href="@{/demo/table/reorderRows}">è¡¨æ ¼è¡ææ½æä½</a></li> <li><a class="menuItem" th:href="@{/demo/table/reorderColumns}">è¡¨æ ¼åææ½æä½</a></li> <li><a class="menuItem" th:href="@{/demo/table/resizable}">è¡¨æ ¼å宽æå¨</a></li> <li><a class="menuItem" th:href="@{/demo/table/editable}">è¡¨æ ¼è¡å ç¼è¾</a></li> <li><a class="menuItem" th:href="@{/demo/table/subdata}">主å表æäº¤</a></li> <li><a class="menuItem" th:href="@{/demo/table/refresh}">è¡¨æ ¼èªå¨å·æ°</a></li> <li><a class="menuItem" th:href="@{/demo/table/print}">è¡¨æ ¼æå°é ç½®</a></li> <li><a class="menuItem" th:href="@{/demo/table/dynamicColumns}">è¡¨æ ¼å¨æå</a></li> <li><a class="menuItem" th:href="@{/demo/table/customView}">èªå®ä¹è§å¾å页</a></li> <li><a class="menuItem" th:href="@{/demo/table/asynTree}">弿¥å è½½è¡¨æ ¼æ </a></li> <li><a class="menuItem" th:href="@{/demo/table/other}">è¡¨æ ¼å ¶ä»æä½</a></li> </ul> </li> <li> <a href="javascript:;"><i class="fa fa-flask"></i> <span class="nav-label">å¼¹æ¡</span><span class="fa arrow"></span></a> <ul class="nav nav-second-level collapse"> <li><a class="menuItem" th:href="@{/demo/modal/dialog}">模æçªå£</a></li> <li><a class="menuItem" th:href="@{/demo/modal/layer}">å¼¹å±ç»ä»¶</a></li> <li><a class="menuItem" th:href="@{/demo/modal/table}">å¼¹å±è¡¨æ ¼</a></li> </ul> </li> <li> <a href="javascript:;"><i class="fa fa-wpforms"></i> <span class="nav-label">æä½</span><span class="fa arrow"></span></a> <ul class="nav nav-second-level collapse"> <li><a class="menuItem" th:href="@{/demo/operate/table}">è¡¨æ ¼</a></li> <li><a class="menuItem" th:href="@{/demo/operate/other}">å ¶ä»</a></li> </ul> </li> <li> <a href="javascript:;"><i class="fa fa-bar-chart-o"></i> <span class="nav-label">æ¥è¡¨</span><span class="fa arrow"></span></a> <ul class="nav nav-second-level collapse"> <li><a class="menuItem" th:href="@{/demo/report/echarts}">ç¾åº¦ECharts</a></li> <li><a class="menuItem" th:href="@{/demo/report/peity}">peity</a></li> <li><a class="menuItem" th:href="@{/demo/report/sparkline}">sparkline</a></li> <li><a class="menuItem" th:href="@{/demo/report/metrics}">å¾è¡¨ç»å</a></li> </ul> </li> <li> <a href="javascript:;"><i class="fa fa-book"></i> <span class="nav-label">徿 </span><span class="fa arrow"></span></a> <ul class="nav nav-second-level collapse"> <li><a class="menuItem" th:href="@{/demo/icon/fontawesome}">Font Awesome</a></li> <li><a class="menuItem" th:href="@{/demo/icon/glyphicons}">Glyphicons</a></li> </ul> </li> <li> <a href="javascript:;"><i class="fa fa-navicon"></i> <span class="nav-label">åå±èå</span><span class="fa arrow"></span></a> <ul class="nav nav-second-level collapse"> <li> <a href="javascript:;" id="damian">ä¸çº§èå1<span class="fa arrow"></span></a> <ul class="nav nav-third-level collapse"> <li> <a href="javascript:;">å级èå1</a> </li> <li> <a href="javascript:;">å级èå2</a> </li> </ul> </li> <li><a href="javascript:;">ä¸çº§èå2</a></li> </ul> </li> </ul> </div> </div> </nav> <!--左侧导èªç»æ--> @@ -211,74 +231,87 @@ <div class="row border-bottom"> <nav class="navbar navbar-static-top" role="navigation" style="margin-bottom: 0"> <div class="navbar-header"> <a class="navbar-minimalize minimalize-styl-2" style="color:#FFF;" href="javascript:;" title="æ¶èµ·èå"> <i class="fa fa-bars"></i> <a class="navbar-minimalize minimalize-styl-2" style="color:#FFF;" href="javascript:;" title="æ¶èµ·èå"> <i class="fa fa-bars"></i> </a> </div> <!-- 顶鍿 --> <div id="navMenu"> <ul class="nav navbar-toolbar nav-tabs navbar-left hidden-xs"> <!-- é¡¶é¨èåå表 --> <th:block th:each="menu : ${menus}"> <li role="presentation" th:id="|tab_${menu.menuId}|"> <a th:if="${#lists.isEmpty(menu.children)}" data-toggle="tab" th:class="@{${!#strings.isEmpty(menu.target) && menu.target == 'menuBlank'} ? 'menuBlank' : 'menuItem noactive'}" th:href="@{${menu.url}}"> <i th:class="${menu.icon}"></i> <span>[[${menu.menuName}]]</span> </a> <a th:if="${not #lists.isEmpty(menu.children)}" data-toggle="tab" th:class="@{${!#strings.isEmpty(menu.target) && menu.target == 'menuBlank'} ? 'menuBlank'}" th:href="@{${!#strings.isEmpty(menu.target) && menu.target == 'menuBlank'} ? @{${menu.url}} : |#menu_${menu.menuId}|}"> <i th:class="${menu.icon}"></i> <span>[[${menu.menuName}]]</span> </a> </li> </th:block> <!-- <li role="presentation" id="tab_index">--> <!-- <a data-toggle="tab" href="#index">--> <!-- <i class="fa fa-area-chart"></i> <span>ç»è®¡æ¥è¡¨</span>--> <!-- </a>--> <!-- </li>--> <!-- <li role="presentation" id="tab_demo" th:if="${demoEnabled}">--> <!-- <a data-toggle="tab" href="#demo">--> <!-- <i class="fa fa-desktop"></i> <span>å®ä¾æ¼ç¤º</span>--> <!-- </a>--> <!-- </li>--> </ul> </div> <ul class="nav navbar-toolbar nav-tabs navbar-left hidden-xs"> <!-- é¡¶é¨èåå表 --> <th:block th:each="menu : ${menus}"> <li role="presentation" th:id="|tab_${menu.menuId}|"> <a th:if="${#lists.isEmpty(menu.children)}" data-toggle="tab" th:class="@{${!#strings.isEmpty(menu.target) && menu.target == 'menuBlank'} ? 'menuBlank' : 'menuItem noactive'}" th:href="@{${menu.url}}"> <i th:class="${menu.icon}"></i> <span>[[${menu.menuName}]]</span> </a> <a th:if="${not #lists.isEmpty(menu.children)}" data-toggle="tab" th:class="@{${!#strings.isEmpty(menu.target) && menu.target == 'menuBlank'} ? 'menuBlank'}" th:href="@{${!#strings.isEmpty(menu.target) && menu.target == 'menuBlank'} ? @{${menu.url}} : |#menu_${menu.menuId}|}"> <i th:class="${menu.icon}"></i> <span>[[${menu.menuName}]]</span> </a> </li> </th:block> <!-- <li role="presentation" id="tab_index">--> <!-- <a data-toggle="tab" href="#index">--> <!-- <i class="fa fa-area-chart"></i> <span>ç»è®¡æ¥è¡¨</span>--> <!-- </a>--> <!-- </li>--> <!-- <li role="presentation" id="tab_demo" th:if="${demoEnabled}">--> <!-- <a data-toggle="tab" href="#demo">--> <!-- <i class="fa fa-desktop"></i> <span>å®ä¾æ¼ç¤º</span>--> <!-- </a>--> <!-- </li>--> </ul> </div> <!-- å³ä¾§æ --> <ul class="nav navbar-top-links navbar-right welcome-message"> <li><a data-toggle="tooltip" data-trigger="hover" data-placement="bottom" title="å¼åææ¡£" href="https://fzzygf-company.feishu.cn/wiki/ZgS5wQuyMi2uDKk9xN6cx8jlnuf" target="_blank"><i class="fa fa-question-circle"></i> ææ¡£</a></li> <li><a data-toggle="tooltip" data-trigger="hover" data-placement="bottom" title="éå®å±å¹" href="javascript:;" id="lockScreen"><i class="fa fa-lock"></i> éå±</a></li> <li><a data-toggle="tooltip" data-trigger="hover" data-placement="bottom" title="å ¨å±æ¾ç¤º" href="javascript:;" id="fullScreen"><i class="fa fa-arrows-alt"></i> å ¨å±</a></li> <li style="background-color: #03703a;"><a onclick="showDepotAreaSelect()" data-toggle="tooltip" data-trigger="hover" data-placement="bottom" title="åºåºéæ©" href="javascript:;"><i class="fa fa-refresh"></i> [[${#strings.defaultString(dept.deptName, '-')}]]</a></li> <li><a data-toggle="tooltip" data-trigger="hover" data-placement="bottom" title="å¼åææ¡£" href="https://fzzygf-company.feishu.cn/wiki/ZgS5wQuyMi2uDKk9xN6cx8jlnuf" target="_blank"><i class="fa fa-question-circle"></i> ææ¡£</a></li> <li><a data-toggle="tooltip" data-trigger="hover" data-placement="bottom" title="éå®å±å¹" href="javascript:;" id="lockScreen"><i class="fa fa-lock"></i> éå±</a></li> <li><a data-toggle="tooltip" data-trigger="hover" data-placement="bottom" title="å ¨å±æ¾ç¤º" href="javascript:;" id="fullScreen"><i class="fa fa-arrows-alt"></i> å ¨å±</a></li> <li class="dropdown user-menu"> <a href="javascript:void(0)" class="dropdown-toggle" data-hover="dropdown"> <img th:src="(${#strings.isEmpty(user.avatar)}) ? @{/img/profile.jpg} : @{${user.avatar}}" th:onerror="this.src='img/profile.jpg'" class="user-image"> <span class="hidden-xs">[[${#strings.defaultString(user.userName, '-')}]]</span> </a> <ul class="dropdown-menu"> <li class="mt5"> <a th:href="@{/system/user/profile}" class="menuItem noactive"> <i class="fa fa-user"></i> 个人ä¸å¿</a> </li> <li> <a onclick="resetPwd()"> <i class="fa fa-key"></i> ä¿®æ¹å¯ç </a> </li> <li> <a onclick="switchSkin()"> <i class="fa fa-dashboard"></i> 忢䏻é¢</a> </li> <li> <a onclick="toggleMenu()"> <i class="fa fa-toggle-off"></i> 左侧èå</a> </li> <li class="divider"></li> <li> <a th:href="@{logout}"> <i class="fa fa-sign-out"></i> éåºç»å½</a> </li> </ul> </li> <a href="javascript:void(0)" class="dropdown-toggle" data-hover="dropdown"> <img th:src="(${#strings.isEmpty(user.avatar)}) ? @{/img/profile.jpg} : @{${user.avatar}}" th:onerror="this.src='img/profile.jpg'" class="user-image"> <span class="hidden-xs">[[${#strings.defaultString(user.userName, '-')}]]</span> </a> <ul class="dropdown-menu"> <li class="mt5"> <a th:href="@{/system/user/profile}" class="menuItem noactive"> <i class="fa fa-user"></i> 个人ä¸å¿</a> </li> <li> <a onclick="resetPwd()"> <i class="fa fa-key"></i> ä¿®æ¹å¯ç </a> </li> <li> <a onclick="switchSkin()"> <i class="fa fa-dashboard"></i> 忢䏻é¢</a> </li> <li> <a onclick="toggleMenu()"> <i class="fa fa-toggle-off"></i> 左侧èå</a> </li> <li class="divider"></li> <li> <a th:href="@{logout}"> <i class="fa fa-sign-out"></i> éåºç»å½</a> </li> </ul> </li> </ul> </nav> </div> @@ -288,7 +321,7 @@ </button> <nav class="page-tabs menuTabs"> <div class="page-tabs-content"> <a href="javascript:;" class="active menuTab" th:data-id="@{/eoms/index}">é¦é¡µ</a> <a href="javascript:;" class="active menuTab" th:data-id="${welcomeUrl}">欢è¿</a> </div> </nav> <button class="roll-nav roll-right tabRight"> @@ -297,15 +330,16 @@ <a href="javascript:void(0);" class="roll-nav roll-right tabReload"><i class="fa fa-refresh"></i> å·æ°</a> </div> <a id="ax_close_max" class="ax_close_max" href="javascript:;" title="å ³éå ¨å±"> <i class="fa fa-times-circle-o"></i> </a> <a id="ax_close_max" class="ax_close_max" href="javascript:;" title="å ³éå ¨å±"> <i class="fa fa-times-circle-o"></i> </a> <div class="row mainContent" id="content-main" th:classappend="${mainClass}"> <iframe class="RuoYi_iframe" name="iframe0" width="100%" height="100%" th:data-id="@{/eoms/index}" th:src="@{/eoms/index}" frameborder="0" seamless></iframe> <iframe class="RuoYi_iframe" name="iframe0" width="100%" height="100%" th:data-id="${welcomeUrl}" th:src="${welcomeUrl}" frameborder="0" seamless></iframe> </div> <div th:if="${footer}" class="footer"> <div class="pull-right">© [[${copyrightYear}]] RuoYi Copyright </div> <div class="pull-right">© [[${copyrightYear}]] RuoYi Copyright</div> </div> </div> <!--å³ä¾§é¨åç»æ--> @@ -327,6 +361,9 @@ window.history.forward(1); var ctx = [[@{/}]]; var lockscreen = [[${session.lockscreen}]]; var dept = [[${dept}]]; var deptId = [[${deptId}]]; var showDeptList = [[${showDeptList}]]; if(lockscreen){window.top.location=ctx+"lockscreen";} // ç®è¤ç¼å var skin = storage.get("skin"); @@ -364,6 +401,35 @@ }) } /** * å¼¹åºåæ¢åºåºå表 */ function showDepotAreaSelect() { if(showDeptList === "N"){ return false; } layer.open({ type: 2, title: 'éæ©åºåº', area: ['400px', '650px'], offset: ['50px', '1350px'], shade: 0, content: "com.fzzy.igds.SelectDept.d", closeBtn: 1 }); } /** * éæ°åæ¢é¡µé¢ */ function onDeptChange() { onDeptAreaChange(deptId); } function onDeptAreaChange(id) { window.location.href = "./index?deptId=" + id; return true; } /* 忢èå */ function toggleMenu() { $.modal.confirm("确认è¦åæ¢æå·¦ä¾§èååï¼", function() {