Commit 671ef14c2318c0e6fb63d2f9dee9a9b04c160c39
Merge remote-tracking branch 'origin/lggj' into lggj
Showing
110 changed files
with
3847 additions
and
4805 deletions
src/main/java/com/bsth/common/Constants.java
| @@ -46,6 +46,7 @@ public class Constants { | @@ -46,6 +46,7 @@ public class Constants { | ||
| 46 | public static final String STATION_AND_SECTION_COUNT = "/station/updateStationAndSectionCode"; | 46 | public static final String STATION_AND_SECTION_COUNT = "/station/updateStationAndSectionCode"; |
| 47 | 47 | ||
| 48 | public static final String OUT_URL = "/out/**"; | 48 | public static final String OUT_URL = "/out/**"; |
| 49 | + public static final String NOTICE_URL = "/notice/**"; | ||
| 49 | /** | 50 | /** |
| 50 | * 解除调度指令和班次的外键约束 | 51 | * 解除调度指令和班次的外键约束 |
| 51 | */ | 52 | */ |
src/main/java/com/bsth/controller/realcontrol/NoticeController.java
0 → 100644
| 1 | +package com.bsth.controller.realcontrol; | ||
| 2 | + | ||
| 3 | + | ||
| 4 | +import com.alibaba.fastjson.JSONArray; | ||
| 5 | +import com.alibaba.fastjson.JSONObject; | ||
| 6 | +import com.bsth.common.ResponseCode; | ||
| 7 | +import com.bsth.controller.BaseController; | ||
| 8 | +import com.bsth.data.BasicData; | ||
| 9 | +import com.bsth.data.notice.NoticeService; | ||
| 10 | +import com.bsth.data.notice.entity.Notice; | ||
| 11 | +import com.bsth.util.SignUtils; | ||
| 12 | +import org.slf4j.Logger; | ||
| 13 | +import org.slf4j.LoggerFactory; | ||
| 14 | +import org.springframework.beans.factory.annotation.Autowired; | ||
| 15 | +import org.springframework.beans.propertyeditors.CustomDateEditor; | ||
| 16 | +import org.springframework.web.bind.WebDataBinder; | ||
| 17 | +import org.springframework.web.bind.annotation.*; | ||
| 18 | +import org.springframework.web.context.request.WebRequest; | ||
| 19 | +import java.text.DateFormat; | ||
| 20 | +import java.text.SimpleDateFormat; | ||
| 21 | +import java.util.Date; | ||
| 22 | +import java.util.HashMap; | ||
| 23 | +import java.util.Map; | ||
| 24 | + | ||
| 25 | +/** | ||
| 26 | + * 公告 | ||
| 27 | + */ | ||
| 28 | +@RestController | ||
| 29 | +@RequestMapping("/notice") | ||
| 30 | +public class NoticeController extends BaseController<Notice, Long>{ | ||
| 31 | + | ||
| 32 | + Logger log = LoggerFactory.getLogger(this.getClass()); | ||
| 33 | + | ||
| 34 | + | ||
| 35 | + @Autowired | ||
| 36 | + NoticeService noticeService; | ||
| 37 | + | ||
| 38 | + @InitBinder | ||
| 39 | + public void initBinder(WebDataBinder binder, WebRequest request) { | ||
| 40 | + //转换日期 注意这里的转化要和传进来的字符串的格式一直 如2015-9-9 就应该为yyyy-MM-dd | ||
| 41 | + DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | ||
| 42 | + binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));// CustomDateEditor为自定义日期编辑器 | ||
| 43 | + } | ||
| 44 | + | ||
| 45 | + | ||
| 46 | + @RequestMapping(value = "/findList", method = RequestMethod.GET) | ||
| 47 | + public Map<String, Object> findList(@RequestParam Map<String, String> map) { | ||
| 48 | + return noticeService.findList(map); | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + @RequestMapping(value = "/{id}", method = RequestMethod.GET) | ||
| 52 | + public Notice findById(@PathVariable("id") Long id) { | ||
| 53 | + Notice notice = noticeService.findById(id); | ||
| 54 | + return notice; | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + @RequestMapping(value = "/delete", method = RequestMethod.POST) | ||
| 58 | + public Map<String, Object> deleteInfo(Notice t) { | ||
| 59 | + Map<String, Object> map = new HashMap<>(); | ||
| 60 | + try{ | ||
| 61 | + noticeService.deleteInfo(t); | ||
| 62 | + map.put("status", ResponseCode.SUCCESS); | ||
| 63 | + } catch (Exception e) { | ||
| 64 | + log.error(e.toString(), e); | ||
| 65 | + map.put("status", ResponseCode.ERROR); | ||
| 66 | + } | ||
| 67 | + return map; | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + | ||
| 71 | + @RequestMapping(method = RequestMethod.POST) | ||
| 72 | + public Map<String, Object> save(Notice t) { | ||
| 73 | + Map<String, Object> map = new HashMap<>(); | ||
| 74 | + try{ | ||
| 75 | + t.setNOTICE_XLNAME(BasicData.lineCode2NameMap.get(t.getNOTICE_XL())); | ||
| 76 | + t.setNOTICE_STATIONNAME(BasicData.stationCode2NameMap.get(t.getNOTICE_XL()+"_"+t.getNOTICE_XSFX()+"_"+t.getNOTICE_STATION())); | ||
| 77 | + t.setCREATE_BY(t.getNOTICE_BBR()); | ||
| 78 | + t.setUPDATE_BY(t.getNOTICE_BBR()); | ||
| 79 | + noticeService.save(t); | ||
| 80 | + map.put("status", ResponseCode.SUCCESS); | ||
| 81 | + } catch (Exception e) { | ||
| 82 | + log.error(e.toString(), e); | ||
| 83 | + map.put("status", ResponseCode.ERROR); | ||
| 84 | + } | ||
| 85 | + return map; | ||
| 86 | + } | ||
| 87 | + | ||
| 88 | + @RequestMapping(value = "/getNotice", method = RequestMethod.POST) | ||
| 89 | + public Map<String, Object> getNotice(@RequestBody JSONObject jsonObject) { | ||
| 90 | + Map<String, Object> map = new HashMap<>(); | ||
| 91 | + Map<String, String> params = new HashMap<>(); | ||
| 92 | + try{ | ||
| 93 | + if(!SignUtils.validation(Long.parseLong(jsonObject.getString("timestamp")),jsonObject.getString("sign"))){ | ||
| 94 | + map.put("status", "验证失败"); | ||
| 95 | + return map; | ||
| 96 | + } | ||
| 97 | + StringBuffer stations=new StringBuffer(); | ||
| 98 | + StringBuffer lineCodes=new StringBuffer(); | ||
| 99 | + JSONArray jsonArray = jsonObject.getJSONArray("stations"); | ||
| 100 | + for (int i = 0; i < jsonArray.size(); i++) { | ||
| 101 | + JSONObject line=jsonArray.getJSONObject(i); | ||
| 102 | + String lineCode = line.get("lineCode").toString(); | ||
| 103 | + String stationCode = line.get("stationCode").toString(); | ||
| 104 | + stations.append(stationCode+","); | ||
| 105 | + lineCodes.append(lineCode+","); | ||
| 106 | + } | ||
| 107 | + params.put("stations",stations.toString().substring(0,stations.toString().length()-1)); | ||
| 108 | + params.put("lineCodes",lineCodes.toString().substring(0,lineCodes.toString().length()-1)); | ||
| 109 | + return noticeService.getNotice(params); | ||
| 110 | + } catch (Exception e) { | ||
| 111 | + log.error(e.toString(), e); | ||
| 112 | + map.put("status", ResponseCode.ERROR); | ||
| 113 | + return map; | ||
| 114 | + } | ||
| 115 | + } | ||
| 116 | + | ||
| 117 | +} |
src/main/java/com/bsth/data/notice/NoticeService.java
0 → 100644
| 1 | +package com.bsth.data.notice; | ||
| 2 | + | ||
| 3 | + | ||
| 4 | +import com.bsth.data.notice.entity.Notice; | ||
| 5 | +import com.bsth.service.BaseService; | ||
| 6 | + | ||
| 7 | +import java.util.Map; | ||
| 8 | + | ||
| 9 | +public interface NoticeService extends BaseService<Notice, Long>{ | ||
| 10 | + | ||
| 11 | + Map<String, Object> findList(Map<String, String> map); | ||
| 12 | + | ||
| 13 | + Map<String, Object> deleteInfo( Notice t); | ||
| 14 | + | ||
| 15 | + Map<String, Object> getNotice(Map<String, String> map); | ||
| 16 | +} |
src/main/java/com/bsth/data/notice/NoticeServiceImpl.java
0 → 100644
| 1 | +package com.bsth.data.notice; | ||
| 2 | + | ||
| 3 | +import com.bsth.common.ResponseCode; | ||
| 4 | +import com.bsth.data.gpsdata_v2.cache.GeoCacheData; | ||
| 5 | +import com.bsth.data.gpsdata_v2.entity.StationRoute; | ||
| 6 | +import com.bsth.data.notice.entity.*; | ||
| 7 | +import com.bsth.service.impl.BaseServiceImpl; | ||
| 8 | +import com.google.common.collect.ArrayListMultimap; | ||
| 9 | +import com.google.common.collect.ListMultimap; | ||
| 10 | +import com.google.common.collect.Multimaps; | ||
| 11 | +import org.slf4j.Logger; | ||
| 12 | +import org.slf4j.LoggerFactory; | ||
| 13 | +import org.springframework.beans.factory.annotation.Autowired; | ||
| 14 | +import org.springframework.dao.DataIntegrityViolationException; | ||
| 15 | +import org.springframework.jdbc.core.BeanPropertyRowMapper; | ||
| 16 | +import org.springframework.jdbc.core.JdbcTemplate; | ||
| 17 | +import org.springframework.stereotype.Service; | ||
| 18 | +import java.text.SimpleDateFormat; | ||
| 19 | +import java.util.*; | ||
| 20 | + | ||
| 21 | +@Service | ||
| 22 | +public class NoticeServiceImpl extends BaseServiceImpl<Notice, Long> implements NoticeService { | ||
| 23 | + | ||
| 24 | + Logger log = LoggerFactory.getLogger(this.getClass()); | ||
| 25 | + | ||
| 26 | + @Autowired | ||
| 27 | + JdbcTemplate jdbcTemplate; | ||
| 28 | + | ||
| 29 | + @Override | ||
| 30 | + public Map<String, Object> findList(Map<String, String> map) { | ||
| 31 | + Map<String, Object> rs = new HashMap(); | ||
| 32 | + try { | ||
| 33 | + | ||
| 34 | + String lineCodes = map.get("lineCodes") == null ? "" : map.get("lineCodes"); | ||
| 35 | + Date startDate = new Date(); | ||
| 36 | + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | ||
| 37 | + String time = sdf.format(startDate); | ||
| 38 | + String sql = "select * from bsth_t_notice where NOTICE_TIME >=\""+time+"\" and (NOTICE_XL in("+lineCodes+") "+" or NOTICE_QY is not null) and STATUS !=2 "; | ||
| 39 | + List<Notice> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper(Notice.class)); | ||
| 40 | + for (Notice notice : list) { | ||
| 41 | + notice.setNOTICE_TFSJ(TFSJ.getDescription(notice.getNOTICE_TFSJ())); | ||
| 42 | + notice.setNOTICE_SJYX(SJYX.getDescription(notice.getNOTICE_SJYX())); | ||
| 43 | + notice.setNOTICE_QY(QY.getDescription(notice.getNOTICE_QY())); | ||
| 44 | + notice.setNOTICE_GG(GG.getDescription(notice.getNOTICE_GG())); | ||
| 45 | + } | ||
| 46 | + rs.put("status", ResponseCode.SUCCESS); | ||
| 47 | + rs.put("list", list); | ||
| 48 | + } | ||
| 49 | + catch (Exception e){ | ||
| 50 | + log.error("", e); | ||
| 51 | + rs.put("status", ResponseCode.ERROR); | ||
| 52 | + rs.put("msg", e.getMessage()); | ||
| 53 | + } | ||
| 54 | + return rs; | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + @Override | ||
| 58 | + public Map<String, Object> getNotice(Map<String, String> map) { | ||
| 59 | + Map<String, Object> rs = new HashMap(); | ||
| 60 | + ListMultimap<String, String> result = Multimaps.synchronizedListMultimap(ArrayListMultimap.create()); | ||
| 61 | + try { | ||
| 62 | + | ||
| 63 | + String stations = map.get("stations") == null ? "" : map.get("stations"); | ||
| 64 | + String lineCodes = map.get("lineCodes") == null ? "" : map.get("lineCodes"); | ||
| 65 | + Date startDate = new Date(); | ||
| 66 | + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | ||
| 67 | + String time = sdf.format(startDate); | ||
| 68 | + String sql = "select * from bsth_t_notice where NOTICE_TIME >=\""+time+"\" and (NOTICE_XL in("+lineCodes+") "+" or NOTICE_QY is not null) and STATUS !=2"; | ||
| 69 | + List<Notice> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper(Notice.class)); | ||
| 70 | + for (Notice notice : list) { | ||
| 71 | + if(notice.getNOTICE_TYPE()==1){ | ||
| 72 | + StringBuffer sb=new StringBuffer(); | ||
| 73 | + List<StationRoute> stationRoutes=GeoCacheData.getStationRoute(notice.getNOTICE_XL(),Integer.parseInt(notice.getNOTICE_XSFX())); | ||
| 74 | + /*申港3路开往鸿音路南芦公路方向,临时改道不经过鸿音路两港大道站点,请乘客合理安排出行。*/ | ||
| 75 | + sb.append(notice.getNOTICE_XLNAME()+"开往"+stationRoutes.get(stationRoutes.size()-1).getName()+"方向,"); | ||
| 76 | + sb.append("由于"+ TFSJ.getDescription(notice.getNOTICE_TFSJ())); | ||
| 77 | + if("1".equals(notice.getNOTICE_SJYX())){ | ||
| 78 | + sb.append("不经过"+notice.getNOTICE_STATIONNAME()+"站点"); | ||
| 79 | + }else if("2".equals(notice.getNOTICE_SJYX())){ | ||
| 80 | + sb.append("可能出现"+ SJYX.getDescription(notice.getNOTICE_SJYX())); | ||
| 81 | + } | ||
| 82 | + sb.append(",请乘客合理安排出行。"); | ||
| 83 | + result.put(notice.getNOTICE_XL(),sb.toString()); | ||
| 84 | + }else if(notice.getNOTICE_TYPE()==2){ | ||
| 85 | + result.put("area", GG.getDescription(notice.getNOTICE_GG())); | ||
| 86 | + } | ||
| 87 | + | ||
| 88 | + } | ||
| 89 | + rs.put("status", ResponseCode.SUCCESS); | ||
| 90 | + Map m=result.asMap(); | ||
| 91 | + List list1=new ArrayList(); | ||
| 92 | + Set<String> keys=m.keySet(); | ||
| 93 | + for (String key : keys) { | ||
| 94 | + Map m2=new HashMap(); | ||
| 95 | + m2.put("lineId",key); | ||
| 96 | + m2.put("msg",m.get(key)); | ||
| 97 | + list1.add(m2); | ||
| 98 | + } | ||
| 99 | + | ||
| 100 | + rs.put("notice", list1); | ||
| 101 | + } | ||
| 102 | + catch (Exception e){ | ||
| 103 | + log.error("", e); | ||
| 104 | + rs.put("status", ResponseCode.ERROR); | ||
| 105 | + rs.put("msg", e.getMessage()); | ||
| 106 | + } | ||
| 107 | + return rs; | ||
| 108 | + } | ||
| 109 | + @Override | ||
| 110 | + public Map<String, Object> deleteInfo(Notice rr) { | ||
| 111 | + Map<String, Object> map = new HashMap<>(); | ||
| 112 | + try{ | ||
| 113 | + Long id = rr.getID(); | ||
| 114 | + String bbr = rr.getNOTICE_BBR(); | ||
| 115 | + | ||
| 116 | + jdbcTemplate.update("UPDATE bsth_t_notice SET STATUS = 2,NOTICE_BBR = ? WHERE ID = ? ",bbr,id); | ||
| 117 | + map.put("status", ResponseCode.SUCCESS); | ||
| 118 | + }catch(DataIntegrityViolationException de){ | ||
| 119 | + map.put("status", ResponseCode.ERROR); | ||
| 120 | + map.put("msg", "“完整性约束”校验失败,请检查要删除的对象是否存在外键约束"); | ||
| 121 | + } | ||
| 122 | + return map; | ||
| 123 | + } | ||
| 124 | +} |
src/main/java/com/bsth/data/notice/entity/GG.java
0 → 100644
| 1 | +package com.bsth.data.notice.entity; | ||
| 2 | + | ||
| 3 | +public enum GG { | ||
| 4 | + GG1("0", "雨天路滑,安全出行。"), | ||
| 5 | + GG2("1", "高峰时段,道路拥堵,请乘客合理安排出行。"), | ||
| 6 | + GG3("2", "请先下后上,注意乘车安全。"); | ||
| 7 | + | ||
| 8 | + private String code; | ||
| 9 | + private String description; | ||
| 10 | + | ||
| 11 | + GG(String code, String description) { | ||
| 12 | + this.code = code; | ||
| 13 | + this.description = description; | ||
| 14 | + } | ||
| 15 | + | ||
| 16 | + | ||
| 17 | + public static String getDescription(String number){ | ||
| 18 | + String description =""; | ||
| 19 | + for (GG e : GG.values()) { | ||
| 20 | + if(e.code.equals(number)){ | ||
| 21 | + return e.description; | ||
| 22 | + } | ||
| 23 | + } | ||
| 24 | + return description; | ||
| 25 | + } | ||
| 26 | + | ||
| 27 | +} |
src/main/java/com/bsth/data/notice/entity/Notice.java
0 → 100644
| 1 | +package com.bsth.data.notice.entity; | ||
| 2 | + | ||
| 3 | +import javax.persistence.*; | ||
| 4 | +import java.text.DateFormat; | ||
| 5 | +import java.text.SimpleDateFormat; | ||
| 6 | +import java.util.Date; | ||
| 7 | + | ||
| 8 | + | ||
| 9 | +@Entity | ||
| 10 | +@Table(name = "bsth_t_notice") | ||
| 11 | +public class Notice { | ||
| 12 | + | ||
| 13 | + @Id | ||
| 14 | + @GeneratedValue(strategy = GenerationType.IDENTITY) | ||
| 15 | + private long ID; | ||
| 16 | + | ||
| 17 | + /** 类型,1:突发事件,2:区域公告 */ | ||
| 18 | + private Integer NOTICE_TYPE; | ||
| 19 | + /** 时间*/ | ||
| 20 | + private Date NOTICE_DATE; | ||
| 21 | + /** 时间*/ | ||
| 22 | + private Date NOTICE_TIME; | ||
| 23 | + /** 报备人*/ | ||
| 24 | + private String NOTICE_BBR; | ||
| 25 | + /** 线路编码 */ | ||
| 26 | + private String NOTICE_XL; | ||
| 27 | + /** 线路名*/ | ||
| 28 | + private String NOTICE_XLNAME; | ||
| 29 | + /** 行驶方向*/ | ||
| 30 | + private String NOTICE_XSFX; | ||
| 31 | + /** 站点*/ | ||
| 32 | + private String NOTICE_STATION; | ||
| 33 | + /** 站点名*/ | ||
| 34 | + private String NOTICE_STATIONNAME; | ||
| 35 | + /** 突发事件*/ | ||
| 36 | + private String NOTICE_TFSJ; | ||
| 37 | + /** 事件影响*/ | ||
| 38 | + private String NOTICE_SJYX; | ||
| 39 | + /** 区域*/ | ||
| 40 | + private String NOTICE_QY; | ||
| 41 | + /** 公告*/ | ||
| 42 | + private String NOTICE_GG; | ||
| 43 | + | ||
| 44 | + | ||
| 45 | + /** 访问接口时使用的状态码 操作类型,0:新增;1:修改;2:删除 */ | ||
| 46 | + private String STATUS; | ||
| 47 | + /** 创建人*/ | ||
| 48 | + private String CREATE_BY; | ||
| 49 | + /** 创建时间 */ | ||
| 50 | + @Column(updatable = false, name = "CREATE_DATE", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP") | ||
| 51 | + private Date CREATE_DATE; | ||
| 52 | + /** 修改人*/ | ||
| 53 | + private String UPDATE_BY; | ||
| 54 | + /** 修改时间*/ | ||
| 55 | + @Column(name = "UPDATE_DATE", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP") | ||
| 56 | + private Date UPDATE_DATE; | ||
| 57 | + | ||
| 58 | + public long getID() { | ||
| 59 | + return ID; | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + public void setID(long ID) { | ||
| 63 | + this.ID = ID; | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | + public Integer getNOTICE_TYPE() { | ||
| 67 | + return NOTICE_TYPE; | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + public void setNOTICE_TYPE(Integer NOTICE_TYPE) { | ||
| 71 | + this.NOTICE_TYPE = NOTICE_TYPE; | ||
| 72 | + } | ||
| 73 | + | ||
| 74 | + public Date getNOTICE_DATE() { | ||
| 75 | + return NOTICE_DATE; | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | + public void setNOTICE_DATE(Date NOTICE_DATE) { | ||
| 79 | + this.NOTICE_DATE = NOTICE_DATE; | ||
| 80 | + } | ||
| 81 | + | ||
| 82 | + public Date getNOTICE_TIME() { | ||
| 83 | + return NOTICE_TIME; | ||
| 84 | + } | ||
| 85 | + | ||
| 86 | + public void setNOTICE_TIME(Date NOTICE_TIME) { | ||
| 87 | + this.NOTICE_TIME = NOTICE_TIME; | ||
| 88 | + } | ||
| 89 | + | ||
| 90 | + public String getNOTICE_BBR() { | ||
| 91 | + return NOTICE_BBR; | ||
| 92 | + } | ||
| 93 | + | ||
| 94 | + public void setNOTICE_BBR(String NOTICE_BBR) { | ||
| 95 | + this.NOTICE_BBR = NOTICE_BBR; | ||
| 96 | + } | ||
| 97 | + | ||
| 98 | + public String getNOTICE_XL() { | ||
| 99 | + return NOTICE_XL; | ||
| 100 | + } | ||
| 101 | + | ||
| 102 | + public void setNOTICE_XL(String NOTICE_XL) { | ||
| 103 | + this.NOTICE_XL = NOTICE_XL; | ||
| 104 | + } | ||
| 105 | + | ||
| 106 | + public String getNOTICE_XLNAME() { | ||
| 107 | + return NOTICE_XLNAME; | ||
| 108 | + } | ||
| 109 | + | ||
| 110 | + public void setNOTICE_XLNAME(String NOTICE_XLNAME) { | ||
| 111 | + this.NOTICE_XLNAME = NOTICE_XLNAME; | ||
| 112 | + } | ||
| 113 | + | ||
| 114 | + public String getNOTICE_XSFX() { | ||
| 115 | + return NOTICE_XSFX; | ||
| 116 | + } | ||
| 117 | + | ||
| 118 | + public void setNOTICE_XSFX(String NOTICE_XSFX) { | ||
| 119 | + this.NOTICE_XSFX = NOTICE_XSFX; | ||
| 120 | + } | ||
| 121 | + | ||
| 122 | + public String getNOTICE_STATION() { | ||
| 123 | + return NOTICE_STATION; | ||
| 124 | + } | ||
| 125 | + | ||
| 126 | + public void setNOTICE_STATION(String NOTICE_STATION) { | ||
| 127 | + this.NOTICE_STATION = NOTICE_STATION; | ||
| 128 | + } | ||
| 129 | + | ||
| 130 | + public String getNOTICE_STATIONNAME() { | ||
| 131 | + return NOTICE_STATIONNAME; | ||
| 132 | + } | ||
| 133 | + | ||
| 134 | + public void setNOTICE_STATIONNAME(String NOTICE_STATIONNAME) { | ||
| 135 | + this.NOTICE_STATIONNAME = NOTICE_STATIONNAME; | ||
| 136 | + } | ||
| 137 | + | ||
| 138 | + public String getNOTICE_TFSJ() { | ||
| 139 | + return NOTICE_TFSJ; | ||
| 140 | + } | ||
| 141 | + | ||
| 142 | + public void setNOTICE_TFSJ(String NOTICE_TFSJ) { | ||
| 143 | + this.NOTICE_TFSJ = NOTICE_TFSJ; | ||
| 144 | + } | ||
| 145 | + | ||
| 146 | + public String getNOTICE_SJYX() { | ||
| 147 | + return NOTICE_SJYX; | ||
| 148 | + } | ||
| 149 | + | ||
| 150 | + public void setNOTICE_SJYX(String NOTICE_SJYX) { | ||
| 151 | + this.NOTICE_SJYX = NOTICE_SJYX; | ||
| 152 | + } | ||
| 153 | + | ||
| 154 | + public String getNOTICE_QY() { | ||
| 155 | + return NOTICE_QY; | ||
| 156 | + } | ||
| 157 | + | ||
| 158 | + public void setNOTICE_QY(String NOTICE_QY) { | ||
| 159 | + this.NOTICE_QY = NOTICE_QY; | ||
| 160 | + } | ||
| 161 | + | ||
| 162 | + public String getNOTICE_GG() { | ||
| 163 | + return NOTICE_GG; | ||
| 164 | + } | ||
| 165 | + | ||
| 166 | + public void setNOTICE_GG(String NOTICE_GG) { | ||
| 167 | + this.NOTICE_GG = NOTICE_GG; | ||
| 168 | + } | ||
| 169 | + | ||
| 170 | + public String getSTATUS() { | ||
| 171 | + return STATUS; | ||
| 172 | + } | ||
| 173 | + | ||
| 174 | + public void setSTATUS(String STATUS) { | ||
| 175 | + this.STATUS = STATUS; | ||
| 176 | + } | ||
| 177 | + | ||
| 178 | + public String getCREATE_BY() { | ||
| 179 | + return CREATE_BY; | ||
| 180 | + } | ||
| 181 | + | ||
| 182 | + public void setCREATE_BY(String CREATE_BY) { | ||
| 183 | + this.CREATE_BY = CREATE_BY; | ||
| 184 | + } | ||
| 185 | + | ||
| 186 | + public Date getCREATE_DATE() { | ||
| 187 | + return CREATE_DATE; | ||
| 188 | + } | ||
| 189 | + | ||
| 190 | + public void setCREATE_DATE(Date CREATE_DATE) { | ||
| 191 | + this.CREATE_DATE = CREATE_DATE; | ||
| 192 | + } | ||
| 193 | + | ||
| 194 | + public String getUPDATE_BY() { | ||
| 195 | + return UPDATE_BY; | ||
| 196 | + } | ||
| 197 | + | ||
| 198 | + public void setUPDATE_BY(String UPDATE_BY) { | ||
| 199 | + this.UPDATE_BY = UPDATE_BY; | ||
| 200 | + } | ||
| 201 | + | ||
| 202 | + public Date getUPDATE_DATE() { | ||
| 203 | + return UPDATE_DATE; | ||
| 204 | + } | ||
| 205 | + | ||
| 206 | + public void setUPDATE_DATE(Date UPDATE_DATE) { | ||
| 207 | + this.UPDATE_DATE = UPDATE_DATE; | ||
| 208 | + } | ||
| 209 | +} |
src/main/java/com/bsth/data/notice/entity/QY.java
0 → 100644
| 1 | +package com.bsth.data.notice.entity; | ||
| 2 | + | ||
| 3 | +public enum QY { | ||
| 4 | + QY0("0", "全部"), | ||
| 5 | + QY1("1", "区域1"), | ||
| 6 | + QY2("2", "区域2"), | ||
| 7 | + QY3("3", "区域3"); | ||
| 8 | + | ||
| 9 | + private String code; | ||
| 10 | + private String description; | ||
| 11 | + | ||
| 12 | + QY(String code, String description) { | ||
| 13 | + this.code = code; | ||
| 14 | + this.description = description; | ||
| 15 | + } | ||
| 16 | + | ||
| 17 | + | ||
| 18 | + public static String getDescription(String number){ | ||
| 19 | + String description =""; | ||
| 20 | + for (QY e : QY.values()) { | ||
| 21 | + if(e.code.equals(number)){ | ||
| 22 | + return e.description; | ||
| 23 | + } | ||
| 24 | + } | ||
| 25 | + return description; | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | +} |
src/main/java/com/bsth/data/notice/entity/SJYX.java
0 → 100644
| 1 | +package com.bsth.data.notice.entity; | ||
| 2 | + | ||
| 3 | +public enum SJYX { | ||
| 4 | + ZDHD("1", "临时改道"), | ||
| 5 | + ELTQ("2", "班次延误"); | ||
| 6 | + | ||
| 7 | + private String code; | ||
| 8 | + private String description; | ||
| 9 | + | ||
| 10 | + SJYX(String code, String description) { | ||
| 11 | + this.code = code; | ||
| 12 | + this.description = description; | ||
| 13 | + } | ||
| 14 | + | ||
| 15 | + | ||
| 16 | + public static String getDescription(String number){ | ||
| 17 | + String description =""; | ||
| 18 | + for (SJYX e : SJYX.values()) { | ||
| 19 | + if(e.code.equals(number)){ | ||
| 20 | + return e.description; | ||
| 21 | + } | ||
| 22 | + } | ||
| 23 | + return description; | ||
| 24 | + } | ||
| 25 | + | ||
| 26 | +} |
src/main/java/com/bsth/data/notice/entity/TFSJ.java
0 → 100644
| 1 | +package com.bsth.data.notice.entity; | ||
| 2 | + | ||
| 3 | +public enum TFSJ { | ||
| 4 | + ZDHD("1", "重大活动"), | ||
| 5 | + ELTQ("2", "恶劣天气"), | ||
| 6 | + JTSG("3", "交通事故"), | ||
| 7 | + DLYD("4", "道路拥堵"); | ||
| 8 | + | ||
| 9 | + private String code; | ||
| 10 | + private String description; | ||
| 11 | + | ||
| 12 | + TFSJ(String code, String description) { | ||
| 13 | + this.code = code; | ||
| 14 | + this.description = description; | ||
| 15 | + } | ||
| 16 | + | ||
| 17 | + | ||
| 18 | + public static String getDescription(String number){ | ||
| 19 | + String description =""; | ||
| 20 | + for (TFSJ e : TFSJ.values()) { | ||
| 21 | + if(e.code.equals(number)){ | ||
| 22 | + return e.description; | ||
| 23 | + } | ||
| 24 | + } | ||
| 25 | + return description; | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | +} |
src/main/java/com/bsth/data/notice/repository/NoticeRepository.java
0 → 100644
| 1 | +package com.bsth.data.notice.repository; | ||
| 2 | + | ||
| 3 | +import com.bsth.data.notice.entity.Notice; | ||
| 4 | +import com.bsth.repository.BaseRepository; | ||
| 5 | +import org.springframework.stereotype.Repository; | ||
| 6 | + | ||
| 7 | +/** | ||
| 8 | + * | ||
| 9 | + * @Interface: NoticeRepository(站点公告Repository数据持久层接口) | ||
| 10 | + * | ||
| 11 | + * @Author YM | ||
| 12 | + * | ||
| 13 | + * @Date 2024-11-07 | ||
| 14 | + * | ||
| 15 | + * @Version 公交调度系统BS版 0.1 | ||
| 16 | + * | ||
| 17 | + */ | ||
| 18 | + | ||
| 19 | +@Repository | ||
| 20 | +public interface NoticeRepository extends BaseRepository<Notice, Long> { | ||
| 21 | + | ||
| 22 | +} |
src/main/java/com/bsth/data/zndd/OutEntrance.java
| @@ -11,6 +11,7 @@ import com.bsth.entity.zndd.StationPeopleLogger; | @@ -11,6 +11,7 @@ import com.bsth.entity.zndd.StationPeopleLogger; | ||
| 11 | import com.bsth.entity.zndd.StationSignsLogger; | 11 | import com.bsth.entity.zndd.StationSignsLogger; |
| 12 | import com.bsth.service.schedule.utils.Md5Util; | 12 | import com.bsth.service.schedule.utils.Md5Util; |
| 13 | import com.bsth.util.HttpClientUtils; | 13 | import com.bsth.util.HttpClientUtils; |
| 14 | +import com.bsth.util.SignUtils; | ||
| 14 | import com.bsth.websocket.handler.SendUtils; | 15 | import com.bsth.websocket.handler.SendUtils; |
| 15 | import com.fasterxml.jackson.databind.ObjectMapper; | 16 | import com.fasterxml.jackson.databind.ObjectMapper; |
| 16 | import org.slf4j.Logger; | 17 | import org.slf4j.Logger; |
| @@ -20,12 +21,12 @@ import org.springframework.beans.factory.annotation.Value; | @@ -20,12 +21,12 @@ import org.springframework.beans.factory.annotation.Value; | ||
| 20 | import org.springframework.web.bind.annotation.*; | 21 | import org.springframework.web.bind.annotation.*; |
| 21 | import java.io.*; | 22 | import java.io.*; |
| 22 | import java.text.SimpleDateFormat; | 23 | import java.text.SimpleDateFormat; |
| 24 | +import java.time.Duration; | ||
| 23 | import java.time.LocalTime; | 25 | import java.time.LocalTime; |
| 24 | import java.time.format.DateTimeFormatter; | 26 | import java.time.format.DateTimeFormatter; |
| 25 | import java.util.*; | 27 | import java.util.*; |
| 26 | import java.util.concurrent.ConcurrentHashMap; | 28 | import java.util.concurrent.ConcurrentHashMap; |
| 27 | import java.util.concurrent.ConcurrentMap; | 29 | import java.util.concurrent.ConcurrentMap; |
| 28 | -import java.util.stream.Collectors; | ||
| 29 | 30 | ||
| 30 | /** | 31 | /** |
| 31 | * 对外接口 | 32 | * 对外接口 |
| @@ -56,16 +57,12 @@ public class OutEntrance { | @@ -56,16 +57,12 @@ public class OutEntrance { | ||
| 56 | @Autowired | 57 | @Autowired |
| 57 | carMonitor carMonitor; | 58 | carMonitor carMonitor; |
| 58 | 59 | ||
| 59 | - private static final String PASSWORD="e126853c7f6f43b4857fa8dfe3b28b5d90be9e68"; | ||
| 60 | - | ||
| 61 | - | ||
| 62 | - | ||
| 63 | //调度屏小程序接口。 | 60 | //调度屏小程序接口。 |
| 64 | @RequestMapping(value = "/OutCar", method = RequestMethod.POST) | 61 | @RequestMapping(value = "/OutCar", method = RequestMethod.POST) |
| 65 | public Map OutCarOutCar(@RequestParam Map m,@RequestBody StationSignsLogger ssLogger) { | 62 | public Map OutCarOutCar(@RequestParam Map m,@RequestBody StationSignsLogger ssLogger) { |
| 66 | Map rtn = new HashMap<>(); | 63 | Map rtn = new HashMap<>(); |
| 67 | try { | 64 | try { |
| 68 | - if(!validation(ssLogger.getTimestamp(),ssLogger.getSign())){ | 65 | + if(!SignUtils.validation(ssLogger.getTimestamp(),ssLogger.getSign())){ |
| 69 | rtn.put("status", "验证失败"); | 66 | rtn.put("status", "验证失败"); |
| 70 | return rtn; | 67 | return rtn; |
| 71 | } | 68 | } |
| @@ -75,9 +72,12 @@ public class OutEntrance { | @@ -75,9 +72,12 @@ public class OutEntrance { | ||
| 75 | m.put("lineName",BasicData.lineCode2NameMap.get(ssLogger.getLineCode())); | 72 | m.put("lineName",BasicData.lineCode2NameMap.get(ssLogger.getLineCode())); |
| 76 | m.put("num",ssLogger.getNum()); | 73 | m.put("num",ssLogger.getNum()); |
| 77 | m.put("dir",ssLogger.getDir()); | 74 | m.put("dir",ssLogger.getDir()); |
| 78 | - | 75 | + m.put("calleeId",ssLogger.getCalleeId()); |
| 79 | //线调页面推送 | 76 | //线调页面推送 |
| 80 | - sendUtils.stationcf(m); | 77 | + if(ssLogger.getNum()>15){ |
| 78 | + sendUtils.stationcf(m); | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | 81 | ||
| 82 | //查询班次情况自动回复 | 82 | //查询班次情况自动回复 |
| 83 | //当前日期 | 83 | //当前日期 |
| @@ -96,19 +96,24 @@ public class OutEntrance { | @@ -96,19 +96,24 @@ public class OutEntrance { | ||
| 96 | }else { | 96 | }else { |
| 97 | //筛选方向 | 97 | //筛选方向 |
| 98 | List<ScheduleRealInfo> rs = dayOfSchedule.findByLineCode(ssLogger.getLineCode()); | 98 | List<ScheduleRealInfo> rs = dayOfSchedule.findByLineCode(ssLogger.getLineCode()); |
| 99 | - //排序 | ||
| 100 | - Collections.sort(rs,new ScheduleComparator.FCSJ()); | ||
| 101 | - SimpleDateFormat sdf= new SimpleDateFormat("HH:ss"); | ||
| 102 | - String sjtext = ""; | ||
| 103 | - LocalTime t1 = LocalTime.parse(sdf.format(new Date()), DateTimeFormatter.ofPattern("HH:mm")); | ||
| 104 | - for (ScheduleRealInfo sr:rs) { | ||
| 105 | - LocalTime t2 = LocalTime.parse(sr.getFcsj(), DateTimeFormatter.ofPattern("HH:mm")); | ||
| 106 | - //判断上下行 | ||
| 107 | - if(t1.isAfter(t2)){ | ||
| 108 | - sjtext = sr.getFcsj(); | 99 | + if(rs.size()>0){ |
| 100 | + //排序 | ||
| 101 | + Collections.sort(rs,new ScheduleComparator.FCSJ()); | ||
| 102 | + SimpleDateFormat sdf= new SimpleDateFormat("HH:ss"); | ||
| 103 | + String sjtext = ""; | ||
| 104 | + LocalTime t1 = LocalTime.parse(sdf.format(new Date()), DateTimeFormatter.ofPattern("HH:mm")); | ||
| 105 | + for (ScheduleRealInfo sr:rs) { | ||
| 106 | + LocalTime t2 = LocalTime.parse(sr.getFcsj(), DateTimeFormatter.ofPattern("HH:mm")); | ||
| 107 | + //判断上下行 | ||
| 108 | + if(t1.isAfter(t2)){ | ||
| 109 | + sjtext = sr.getFcsj(); | ||
| 110 | + } | ||
| 109 | } | 111 | } |
| 112 | + rtn.put("message","车辆预计"+sjtext+"发车,请耐心等待"); | ||
| 113 | + }else { | ||
| 114 | + rtn.put("message","当日运营已结束"); | ||
| 110 | } | 115 | } |
| 111 | - rtn.put("message","车辆预计"+sjtext+"发车,请耐心等待"); | 116 | + |
| 112 | } | 117 | } |
| 113 | 118 | ||
| 114 | rtn.put("status",ResponseCode.SUCCESS); | 119 | rtn.put("status",ResponseCode.SUCCESS); |
| @@ -121,12 +126,18 @@ public class OutEntrance { | @@ -121,12 +126,18 @@ public class OutEntrance { | ||
| 121 | 126 | ||
| 122 | 127 | ||
| 123 | @RequestMapping(value = "/klyj", method = RequestMethod.POST) | 128 | @RequestMapping(value = "/klyj", method = RequestMethod.POST) |
| 124 | - public void klyj(@RequestBody JSONObject jsonObject) { | 129 | + public Map klyj(@RequestBody JSONObject jsonObject) { |
| 130 | + Map rtn = new HashMap<>(); | ||
| 125 | try { | 131 | try { |
| 126 | - if(!validation(Long.parseLong(jsonObject.getString("timestamp")),jsonObject.getString("sign"))){ | ||
| 127 | - return ; | 132 | + if(!SignUtils.validation(Long.parseLong(jsonObject.getString("timestamp")),jsonObject.getString("sign"))){ |
| 133 | + rtn.put("status", "验证失败"); | ||
| 134 | + return rtn; | ||
| 128 | } | 135 | } |
| 129 | String num=jsonObject.getString("num"); | 136 | String num=jsonObject.getString("num"); |
| 137 | + if(Integer.parseInt(num)<15){ | ||
| 138 | + rtn.put("status",ResponseCode.SUCCESS); | ||
| 139 | + return rtn; | ||
| 140 | + } | ||
| 130 | String image=jsonObject.getString("image"); | 141 | String image=jsonObject.getString("image"); |
| 131 | String img=uploadBase64Img(image); | 142 | String img=uploadBase64Img(image); |
| 132 | JSONArray jsonArray = jsonObject.getJSONArray("stations"); | 143 | JSONArray jsonArray = jsonObject.getJSONArray("stations"); |
| @@ -136,16 +147,17 @@ public class OutEntrance { | @@ -136,16 +147,17 @@ public class OutEntrance { | ||
| 136 | JSONObject line=jsonArray.getJSONObject(i); | 147 | JSONObject line=jsonArray.getJSONObject(i); |
| 137 | String lineCode = line.get("lineCode").toString(); | 148 | String lineCode = line.get("lineCode").toString(); |
| 138 | String stationCode = line.get("stationCode").toString(); | 149 | String stationCode = line.get("stationCode").toString(); |
| 139 | - StationRoute stationRoute=BasicData.stationCode2StationMap.get(lineCode+"_"+stationCode); | 150 | + String dir = line.get("dir").toString(); |
| 151 | + /*StationRoute stationRoute=BasicData.stationCode2StationMap.get(lineCode+"_"+stationCode);*/ | ||
| 140 | Map m = new HashMap(); | 152 | Map m = new HashMap(); |
| 141 | m.put("image", img); | 153 | m.put("image", img); |
| 142 | m.put("stationCode", stationCode); | 154 | m.put("stationCode", stationCode); |
| 143 | - m.put("lineCode", stationRoute.getLineCode()); | ||
| 144 | - m.put("stationName",BasicData.stationCode2NameMap.get(stationRoute.getLineCode()+"_"+stationRoute.getDirections()+"_"+stationRoute.getStationCode())); | ||
| 145 | - m.put("lineName",BasicData.lineCode2NameMap.get(stationRoute.getLineCode())); | 155 | + m.put("lineCode", lineCode); |
| 156 | + m.put("stationName",BasicData.stationCode2NameMap.get(lineCode+"_"+dir+"_"+stationCode)); | ||
| 157 | + m.put("lineName",BasicData.lineCode2NameMap.get(lineCode)); | ||
| 146 | m.put("num",num); | 158 | m.put("num",num); |
| 147 | - m.put("xlDir",stationRoute.getDirections()); | ||
| 148 | - List<ScheduleRealInfo> srList=dayOfSchedule.findByLineAndUpDown(stationRoute.getLineCode(),stationRoute.getDirections()); | 159 | + m.put("xlDir",dir); |
| 160 | + List<ScheduleRealInfo> srList=dayOfSchedule.findByLineAndUpDown(lineCode,Integer.parseInt(dir)); | ||
| 149 | List<ScheduleRealInfo> sl=new ArrayList<>(); | 161 | List<ScheduleRealInfo> sl=new ArrayList<>(); |
| 150 | for (ScheduleRealInfo scheduleRealInfo : srList) {//筛选出运营班次 | 162 | for (ScheduleRealInfo scheduleRealInfo : srList) {//筛选出运营班次 |
| 151 | if((scheduleRealInfo.getBcType().equals("normal")||scheduleRealInfo.getBcType().equals("region"))){ | 163 | if((scheduleRealInfo.getBcType().equals("normal")||scheduleRealInfo.getBcType().equals("region"))){ |
| @@ -159,11 +171,15 @@ public class OutEntrance { | @@ -159,11 +171,15 @@ public class OutEntrance { | ||
| 159 | } | 171 | } |
| 160 | }); | 172 | }); |
| 161 | ScheduleRealInfo schedule = null; | 173 | ScheduleRealInfo schedule = null; |
| 174 | + ScheduleRealInfo schedule2 = null; | ||
| 162 | for (int i1 = 0; i1 < sl.size(); i1++) {//最近的已发车班次 | 175 | for (int i1 = 0; i1 < sl.size(); i1++) {//最近的已发车班次 |
| 163 | ScheduleRealInfo scheduleRealInfo=sl.get(i1); | 176 | ScheduleRealInfo scheduleRealInfo=sl.get(i1); |
| 164 | LocalTime fcsj=LocalTime.parse(scheduleRealInfo.getFcsj(),dateTimeFormatter); | 177 | LocalTime fcsj=LocalTime.parse(scheduleRealInfo.getFcsj(),dateTimeFormatter); |
| 165 | - if((scheduleRealInfo.getBcType().equals("normal")||scheduleRealInfo.getBcType().equals("region")) &&scheduleRealInfo.getXlDir().equals(String.valueOf(stationRoute.getDirections())) && fcsj.isAfter(localTime)){ | ||
| 166 | - schedule =sl.get(i1-1);; | 178 | + if(fcsj.isAfter(localTime)){ |
| 179 | + schedule =sl.get(i1-1); | ||
| 180 | + if(i1<sl.size()){ | ||
| 181 | + schedule2 =sl.get(i1); | ||
| 182 | + } | ||
| 167 | break; | 183 | break; |
| 168 | } | 184 | } |
| 169 | } | 185 | } |
| @@ -172,13 +188,26 @@ public class OutEntrance { | @@ -172,13 +188,26 @@ public class OutEntrance { | ||
| 172 | m.put("sch",schedule); | 188 | m.put("sch",schedule); |
| 173 | m.put("uuid",AutomaticSch.UUID()); | 189 | m.put("uuid",AutomaticSch.UUID()); |
| 174 | m.put("rq",localTime.format(dateTimeFormatter)); //检测到时间 | 190 | m.put("rq",localTime.format(dateTimeFormatter)); //检测到时间 |
| 191 | + m.put("ids",AutomaticSch.UUID()); | ||
| 192 | + m.put("type","KLYJ"); | ||
| 193 | + LocalTime fcsj = LocalTime.parse(schedule2.getDfsj(),DateTimeFormatter.ofPattern("HH:mm")); | ||
| 194 | + LocalTime now = LocalTime.now(); | ||
| 195 | + if(Duration.between(now,fcsj).toMinutes()==0){ | ||
| 196 | + m.put("msg","下一个班次即将发车"); | ||
| 197 | + }else { | ||
| 198 | + m.put("msg","下一个班次预计还有"+ Duration.between(now,fcsj).toMinutes() +"分钟发车"); | ||
| 199 | + } | ||
| 200 | + | ||
| 175 | sendUtils.klyj(m); | 201 | sendUtils.klyj(m); |
| 176 | } | 202 | } |
| 177 | 203 | ||
| 178 | } | 204 | } |
| 205 | + rtn.put("status",ResponseCode.SUCCESS); | ||
| 179 | } catch (Exception e) { | 206 | } catch (Exception e) { |
| 180 | - e.printStackTrace(); | 207 | + rtn.put("status", ResponseCode.ERROR); |
| 208 | + logger.error("",e); | ||
| 181 | } | 209 | } |
| 210 | + return rtn; | ||
| 182 | } | 211 | } |
| 183 | 212 | ||
| 184 | /* | 213 | /* |
| @@ -233,8 +262,8 @@ public class OutEntrance { | @@ -233,8 +262,8 @@ public class OutEntrance { | ||
| 233 | 262 | ||
| 234 | /** | 263 | /** |
| 235 | * 保存base64图片 | 264 | * 保存base64图片 |
| 236 | - * @param base64Str base64文件 | ||
| 237 | - * @param 上传地址(示例:D:\\1.png) | 265 | + * @param base base64文件 |
| 266 | + * @param (示例:D:\\1.png) | ||
| 238 | * @return | 267 | * @return |
| 239 | */ | 268 | */ |
| 240 | public String uploadBase64Img(String base) throws Exception { | 269 | public String uploadBase64Img(String base) throws Exception { |
| @@ -320,15 +349,5 @@ public class OutEntrance { | @@ -320,15 +349,5 @@ public class OutEntrance { | ||
| 320 | return traffic.get("trafficStatus").toString(); | 349 | return traffic.get("trafficStatus").toString(); |
| 321 | } | 350 | } |
| 322 | 351 | ||
| 323 | - public boolean validation(long timestamp,String sign){ | ||
| 324 | - String md5String=Md5Util.getMd5(timestamp+PASSWORD); | ||
| 325 | - if(!md5String.equals(sign)){ | ||
| 326 | - return false; | ||
| 327 | - } | ||
| 328 | - if(System.currentTimeMillis()-timestamp>60*1000){ | ||
| 329 | - return false; | ||
| 330 | - } | ||
| 331 | - return true; | ||
| 332 | - } | ||
| 333 | 352 | ||
| 334 | } | 353 | } |
src/main/java/com/bsth/data/zndd/carMonitor.java
| @@ -26,7 +26,7 @@ public class carMonitor { | @@ -26,7 +26,7 @@ public class carMonitor { | ||
| 26 | public List<Map> carMonitor(String lineCode,String directions,String station) { | 26 | public List<Map> carMonitor(String lineCode,String directions,String station) { |
| 27 | 27 | ||
| 28 | List<Map> list = new ArrayList<>(); //返回的接口数据 | 28 | List<Map> list = new ArrayList<>(); //返回的接口数据 |
| 29 | - url = "http://127.0.0.1:9777/xxfb/jd/carMonitor?lineid="+lineCode+"&stopid="+station+"&direction="+directions; | 29 | + url = "http://58.34.52.130:9777/xxfb/jd/carMonitor?lineid="+lineCode+"&stopid="+station+"&direction="+directions; |
| 30 | InputStream in = null; | 30 | InputStream in = null; |
| 31 | OutputStream out = null; | 31 | OutputStream out = null; |
| 32 | try { | 32 | try { |
src/main/java/com/bsth/data/zndd/voice/GJC.java
0 → 100644
| 1 | +package com.bsth.data.zndd.voice; | ||
| 2 | + | ||
| 3 | +import java.util.*; | ||
| 4 | + | ||
| 5 | +public enum GJC { | ||
| 6 | + CX(1, "撤销"), | ||
| 7 | + QX(1, "取消"), | ||
| 8 | + XZ(2, "新增"), | ||
| 9 | + TJ(2, "添加"), | ||
| 10 | + LJ(2, "临加"), | ||
| 11 | + TZ(3, "调整"), | ||
| 12 | + BC(4, "班次"), | ||
| 13 | + PB(4, "排班"), | ||
| 14 | + DF(5, "待发"), | ||
| 15 | + SF(6, "实发"), | ||
| 16 | + CC(7, "出场"), | ||
| 17 | + KQ(8, "开启"), | ||
| 18 | + GB(9, "关闭"), | ||
| 19 | + ge(10, "个"), | ||
| 20 | + dao(11, "到"), | ||
| 21 | + de(12, "的"); | ||
| 22 | + | ||
| 23 | + private int code; | ||
| 24 | + private String description; | ||
| 25 | + | ||
| 26 | + GJC(int code, String description) { | ||
| 27 | + this.code = code; | ||
| 28 | + this.description = description; | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + public int getCode() { | ||
| 32 | + return code; | ||
| 33 | + } | ||
| 34 | + | ||
| 35 | + public void setCode(int code) { | ||
| 36 | + this.code = code; | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + public String getDescription() { | ||
| 40 | + return description; | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + public void setDescription(String description) { | ||
| 44 | + this.description = description; | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + public static int getNumber(String description){ | ||
| 48 | + int number = 999; | ||
| 49 | + for (GJC gjc : GJC.values()) { | ||
| 50 | + if(gjc.description.equals(description)){ | ||
| 51 | + number = gjc.code; | ||
| 52 | + } | ||
| 53 | + } | ||
| 54 | + return number; | ||
| 55 | + } | ||
| 56 | + | ||
| 57 | + public static Set<String> getDescription(int number){ | ||
| 58 | + Set<String> description = new HashSet<>(); | ||
| 59 | + for (GJC gjc : GJC.values()) { | ||
| 60 | + if(gjc.code==number){ | ||
| 61 | + description.add(gjc.description); | ||
| 62 | + } | ||
| 63 | + } | ||
| 64 | + return description; | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | + public static Set<Integer> getGJC(String yy){ | ||
| 68 | + Set<Integer> set=new HashSet<>(); | ||
| 69 | + for (GJC gjc : GJC.values()) { | ||
| 70 | + char[] arr=gjc.description.toCharArray(); | ||
| 71 | + for (char c : arr) { | ||
| 72 | + if(UploadVideoServlet.getPinyin(yy).contains(UploadVideoServlet.getPinyin(String.valueOf(c)))){ | ||
| 73 | + set.add(gjc.code); | ||
| 74 | + } | ||
| 75 | + } | ||
| 76 | + | ||
| 77 | + } | ||
| 78 | + return set; | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | + public static int getCount(int i){ | ||
| 82 | + int count=0; | ||
| 83 | + for (GJC gjc : GJC.values()) { | ||
| 84 | + if(gjc.code==i){ | ||
| 85 | + count++; | ||
| 86 | + } | ||
| 87 | + } | ||
| 88 | + return count; | ||
| 89 | + } | ||
| 90 | + | ||
| 91 | + public static void main(String[] args) { | ||
| 92 | + List<Integer> list=new ArrayList<>(); | ||
| 93 | + list.add(1); | ||
| 94 | + list.add(2); | ||
| 95 | + list.add(4); | ||
| 96 | + Set<String> ml=new HashSet<>(); | ||
| 97 | + nestedLoop(list,"",ml); | ||
| 98 | + System.out.println(ml); | ||
| 99 | + } | ||
| 100 | + | ||
| 101 | + public static void nestedLoop(List<Integer> arr,String str,Set<String> ml) { | ||
| 102 | + if(arr.size()>0){ | ||
| 103 | + Set<String> set=getDescription(arr.get(0)); | ||
| 104 | + for (String s : set) { | ||
| 105 | + List list2=new ArrayList(); | ||
| 106 | + list2.addAll(arr); | ||
| 107 | + list2.remove(0); | ||
| 108 | + nestedLoop(list2,str+s,ml); | ||
| 109 | + } | ||
| 110 | + }else { | ||
| 111 | + ml.add(str); | ||
| 112 | + } | ||
| 113 | + } | ||
| 114 | + | ||
| 115 | + | ||
| 116 | +} |
src/main/java/com/bsth/data/zndd/voice/UploadVideoServlet.java
| @@ -121,44 +121,84 @@ public class UploadVideoServlet extends HttpServlet { | @@ -121,44 +121,84 @@ public class UploadVideoServlet extends HttpServlet { | ||
| 121 | //定义输出类型 | 121 | //定义输出类型 |
| 122 | response.setHeader("Content-type", "text/html;charset=UTF-8"); | 122 | response.setHeader("Content-type", "text/html;charset=UTF-8"); |
| 123 | PrintWriter writer = response.getWriter(); | 123 | PrintWriter writer = response.getWriter(); |
| 124 | - List<retun> list1 = new ArrayList<>(); | ||
| 125 | String text = textList.get(0).toString(); | 124 | String text = textList.get(0).toString(); |
| 126 | - | ||
| 127 | - | ||
| 128 | - //帮我添加一个夏硕路林兰路到鸿音路云端路的班次 | ||
| 129 | - String fcsj = null;//线路名,上下行,发车时间 | ||
| 130 | - String[] ks = text.replace(",","").split("到"); | ||
| 131 | - String Station1= ks[0].split("个")[1]; | ||
| 132 | - String Station2= ks[1].split("的")[0]; | ||
| 133 | - //发车时间 | ||
| 134 | - fcsj = extractTimes(text); | ||
| 135 | - //线路名称 - 线路编码和名称对照 | ||
| 136 | - | ||
| 137 | - Map<String, Object> param = new HashMap<>(); | ||
| 138 | - param.put("lineCode_eq", line); | ||
| 139 | - param.put("directions_eq", 0); | ||
| 140 | - param.put("destroy_eq", 0); | ||
| 141 | - List<StationRoute> stationup = ((List<StationRoute>) stationRouteService.list(param)); | ||
| 142 | - //上行匹配 | ||
| 143 | - Map m = pyPp(stationup,Station1,Station2); | ||
| 144 | - if (m.get("stationcode1") == null || m.get("stationcode2") == null){ | ||
| 145 | - param.put("directions_eq",1); | ||
| 146 | - List<StationRoute> stationdown = ((List<StationRoute>) stationRouteService.list(param)); | ||
| 147 | - //下行匹配 | ||
| 148 | - Map smap = pyPp(stationdown,Station1,Station2); | ||
| 149 | - if (smap.get("stationcode1") == null || smap.get("stationcode2") == null){ | ||
| 150 | - writer.write(text +","+"99999"); | 125 | + //text="新增出厂班次"; |
| 126 | + //text="帮我添加一个鸿音路南芦公路到临港大道枢纽站的班次"; | ||
| 127 | + if(isSimilarity(ZL.zdzdbc,text,null)){//帮我添加一个xx到xx站的班次(帮我添加一个鸿音路南芦公路到临港大道枢纽站的班次) | ||
| 128 | + String[] ks = text.replace(",","").split("到"); | ||
| 129 | + if(ks[0].split("个").length==1){ | ||
| 130 | + writer.write(text+"_识别失败"+",999"); | ||
| 151 | return; | 131 | return; |
| 152 | } | 132 | } |
| 153 | - | ||
| 154 | - writer.write(text +","+smap.get("stationcode1")+","+smap.get("stationcode2")+","+1); | 133 | + if(ks[1].split("的").length==1){ |
| 134 | + writer.write(text+"_识别失败"+",999"); | ||
| 135 | + return; | ||
| 136 | + } | ||
| 137 | + String Station1= ks[0].split("个")[1]; | ||
| 138 | + String Station2= ks[1].split("的")[0]; | ||
| 139 | + | ||
| 140 | + /* String fcsj = null;//线路名,上下行,发车时间 | ||
| 141 | + //发车时间 | ||
| 142 | + fcsj = extractTimes(text);*/ | ||
| 143 | + //线路名称 - 线路编码和名称对照 | ||
| 144 | + | ||
| 145 | + Map<String, Object> param = new HashMap<>(); | ||
| 146 | + param.put("lineCode_eq", line); | ||
| 147 | + param.put("directions_eq", 0); | ||
| 148 | + param.put("destroy_eq", 0); | ||
| 149 | + List<StationRoute> stationup = ((List<StationRoute>) stationRouteService.list(param)); | ||
| 150 | + //上行匹配 | ||
| 151 | + Map m = pyPp(stationup,Station1,Station2); | ||
| 152 | + if (m.get("stationcode1") == null || m.get("stationcode2") == null){ | ||
| 153 | + param.put("directions_eq",1); | ||
| 154 | + List<StationRoute> stationdown = ((List<StationRoute>) stationRouteService.list(param)); | ||
| 155 | + //下行匹配 | ||
| 156 | + Map smap = pyPp(stationdown,Station1,Station2); | ||
| 157 | + if (smap.get("stationcode1") == null || smap.get("stationcode2") == null){ | ||
| 158 | + writer.write(text +","+"999"); | ||
| 159 | + return; | ||
| 160 | + } | ||
| 161 | + writer.write(text +",1,"+smap.get("stationcode1")+","+smap.get("stationcode2")+","+1); | ||
| 162 | + return; | ||
| 163 | + } | ||
| 164 | + writer.write(text +",1,"+m.get("stationcode1")+","+m.get("stationcode2")+","+0); | ||
| 155 | return; | 165 | return; |
| 156 | } | 166 | } |
| 157 | - | ||
| 158 | - writer.write(text +","+m.get("stationcode1")+","+m.get("stationcode2")+","+0); | ||
| 159 | - return; | ||
| 160 | - | ||
| 161 | - //打开0 关闭1 临加2 999异常 | 167 | + if(isSimilarity(ZL.LJCCBC,text,null)){//添加出厂班次 |
| 168 | + writer.write(text+"_"+ZL.LJCCBC.getDescription()+",2"); | ||
| 169 | + return; | ||
| 170 | + } | ||
| 171 | + if(isSimilarity(ZL.LJBC,text,null)){//添加班次 | ||
| 172 | + writer.write(text+"_"+ZL.LJBC.getDescription()+",3"); | ||
| 173 | + return; | ||
| 174 | + } | ||
| 175 | + if(isSimilarity(ZL.QXBC,text,null)){//取消班次 | ||
| 176 | + writer.write(text+"_"+ZL.QXBC.getDescription()+",11"); | ||
| 177 | + return; | ||
| 178 | + } | ||
| 179 | + if(isSimilarity(ZL.QXSF,text,null)){//取消实发 | ||
| 180 | + writer.write(text+"_"+ZL.QXSF.getDescription()+",12"); | ||
| 181 | + return; | ||
| 182 | + } | ||
| 183 | + if(isSimilarity(ZL.TZDF,text,"待")){//调整待发 | ||
| 184 | + writer.write(text+"_"+ZL.TZDF.getDescription()+",21"); | ||
| 185 | + return; | ||
| 186 | + } | ||
| 187 | + if(isSimilarity(ZL.TZSF,text,"实")){//调整实发 | ||
| 188 | + writer.write(text+"_"+ZL.TZSF.getDescription()+",22"); | ||
| 189 | + return; | ||
| 190 | + } | ||
| 191 | + if(isSimilarity(ZL.KQ,text,null)){//启动 | ||
| 192 | + writer.write(text+"_"+ZL.KQ.getDescription()+",31"); | ||
| 193 | + return; | ||
| 194 | + } | ||
| 195 | + if(isSimilarity(ZL.GB,text,null)){//关闭 | ||
| 196 | + writer.write(text+"_"+ZL.GB.getDescription()+",41"); | ||
| 197 | + return; | ||
| 198 | + } | ||
| 199 | + else { | ||
| 200 | + writer.write(text+"_识别失败"+",999"); | ||
| 201 | + } | ||
| 162 | } | 202 | } |
| 163 | 203 | ||
| 164 | } catch (Exception e) { | 204 | } catch (Exception e) { |
| @@ -232,30 +272,45 @@ public class UploadVideoServlet extends HttpServlet { | @@ -232,30 +272,45 @@ public class UploadVideoServlet extends HttpServlet { | ||
| 232 | } | 272 | } |
| 233 | 273 | ||
| 234 | 274 | ||
| 235 | - | ||
| 236 | public static String getPinyin(String chinese) { | 275 | public static String getPinyin(String chinese) { |
| 237 | HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat(); | 276 | HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat(); |
| 238 | format.setCaseType(HanyuPinyinCaseType.LOWERCASE); | 277 | format.setCaseType(HanyuPinyinCaseType.LOWERCASE); |
| 239 | format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); | 278 | format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); |
| 240 | 279 | ||
| 241 | - StringBuilder pinyinBuilder = new StringBuilder(); | ||
| 242 | - char[] charArray = chinese.toCharArray(); | ||
| 243 | - for (char c : charArray) { | ||
| 244 | - String[] pinyinArray = null; | ||
| 245 | - try { | ||
| 246 | - pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, format); | ||
| 247 | - } catch (BadHanyuPinyinOutputFormatCombination e) { | ||
| 248 | - e.printStackTrace(); | 280 | + StringBuilder sb = new StringBuilder(); |
| 281 | + char[] chars = chinese.toCharArray(); | ||
| 282 | + for (char c : chars) { | ||
| 283 | + if (Character.isWhitespace(c)) { | ||
| 284 | + continue; | ||
| 249 | } | 285 | } |
| 250 | - if (pinyinArray != null) { | ||
| 251 | - pinyinBuilder.append(pinyinArray[0]); | 286 | + if (c >= '\u4e00' && c <= '\u9fa5') { |
| 287 | + try { | ||
| 288 | + String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, format); | ||
| 289 | + sb.append(pinyinArray[0]); | ||
| 290 | + } catch (BadHanyuPinyinOutputFormatCombination e) { | ||
| 291 | + e.printStackTrace(); | ||
| 292 | + } | ||
| 252 | } else { | 293 | } else { |
| 253 | - pinyinBuilder.append(c); | 294 | + sb.append(c); |
| 254 | } | 295 | } |
| 255 | } | 296 | } |
| 256 | - return pinyinBuilder.toString(); | 297 | + return sb.toString(); |
| 257 | } | 298 | } |
| 258 | 299 | ||
| 300 | + | ||
| 301 | + //去除标点符号 | ||
| 302 | + public static String removePunctuation(String input) { | ||
| 303 | + String punctuationRegex = "[\\p{Punct}]"; | ||
| 304 | + input=input.replaceAll(punctuationRegex, ""); | ||
| 305 | + String regEx = "[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]"; | ||
| 306 | + Pattern p = Pattern.compile(regEx); | ||
| 307 | + Matcher m = p.matcher(input); | ||
| 308 | + return input.replaceAll(punctuationRegex, "").replaceAll(regEx, ""); | ||
| 309 | + } | ||
| 310 | + | ||
| 311 | + public static void main(String[] args) { | ||
| 312 | + System.out.println(calculateSimilarity("临加班次", "撤销班次")); | ||
| 313 | + } | ||
| 259 | public static Double calculateSimilarity(String str1, String str2) { | 314 | public static Double calculateSimilarity(String str1, String str2) { |
| 260 | String pinyinStr1 = getPinyin(str1); | 315 | String pinyinStr1 = getPinyin(str1); |
| 261 | String pinyinStr2 = getPinyin(str2); | 316 | String pinyinStr2 = getPinyin(str2); |
| @@ -285,7 +340,40 @@ public class UploadVideoServlet extends HttpServlet { | @@ -285,7 +340,40 @@ public class UploadVideoServlet extends HttpServlet { | ||
| 285 | 340 | ||
| 286 | 341 | ||
| 287 | 342 | ||
| 288 | - | ||
| 289 | - | 343 | + /* public static boolean isSimilarity(Integer[] gjc,String str,String gjz){ |
| 344 | + Set<String> ml=new HashSet<>(); | ||
| 345 | + GJC.nestedLoop(Arrays.asList(gjc),"",ml); | ||
| 346 | + for (String s : ml) { | ||
| 347 | + if(calculateSimilarity(s,str)>= 0.75){//相似度 | ||
| 348 | + if(gjz==null){//不含关键字 | ||
| 349 | + return true; | ||
| 350 | + }else { | ||
| 351 | + if(UploadVideoServlet.getPinyin(str).contains(UploadVideoServlet.getPinyin(gjz))){ | ||
| 352 | + return true; | ||
| 353 | + } | ||
| 354 | + } | ||
| 355 | + } | ||
| 356 | + } | ||
| 357 | + return false; | ||
| 358 | + }*/ | ||
| 359 | + | ||
| 360 | + public static boolean isSimilarity(ZL zl,String str,String gjz){ | ||
| 361 | + Integer[] ints=zl.getCodes(); | ||
| 362 | + Set<String> ml=new HashSet<>(); | ||
| 363 | + GJC.nestedLoop(Arrays.asList(ints),"",ml); | ||
| 364 | + for (String s : ml) { | ||
| 365 | + double d=calculateSimilarity(s,str); | ||
| 366 | + if(d>= 0.75){//相似度 | ||
| 367 | + if(gjz==null){//不含关键字 | ||
| 368 | + return true; | ||
| 369 | + }else { | ||
| 370 | + if(UploadVideoServlet.getPinyin(str).contains(UploadVideoServlet.getPinyin(gjz))){ | ||
| 371 | + return true; | ||
| 372 | + } | ||
| 373 | + } | ||
| 374 | + } | ||
| 375 | + } | ||
| 376 | + return false; | ||
| 377 | + } | ||
| 290 | 378 | ||
| 291 | } | 379 | } |
| 292 | \ No newline at end of file | 380 | \ No newline at end of file |
src/main/java/com/bsth/data/zndd/voice/ZL.java
0 → 100644
| 1 | +package com.bsth.data.zndd.voice; | ||
| 2 | + | ||
| 3 | + | ||
| 4 | +import java.util.Arrays; | ||
| 5 | +import java.util.HashSet; | ||
| 6 | +import java.util.List; | ||
| 7 | +import java.util.Set; | ||
| 8 | + | ||
| 9 | +public enum ZL { | ||
| 10 | + LJBC(new Integer[]{2,4}, "临加班次"), | ||
| 11 | + LJCCBC(new Integer[]{2,4,7}, "临加出场班次"), | ||
| 12 | + TZDF(new Integer[]{3,5}, "调整待发"), | ||
| 13 | + TZSF(new Integer[]{3,6}, "调整实发"), | ||
| 14 | + QXBC(new Integer[]{1,4}, "取消班次"), | ||
| 15 | + QXSF(new Integer[]{1,6}, "取消实发"), | ||
| 16 | + KQ(new Integer[]{8}, "开启智能调度"), | ||
| 17 | + GB(new Integer[]{9}, "关闭智能调度"), | ||
| 18 | + zdzdbc(new Integer[]{10,11,12}, "添加一个xx到xx的班次"); | ||
| 19 | + | ||
| 20 | + private Integer[] codes; | ||
| 21 | + private String description; | ||
| 22 | + | ||
| 23 | + ZL(Integer[] codes, String description) { | ||
| 24 | + this.codes = codes; | ||
| 25 | + this.description = description; | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | + public Integer[] getCodes() { | ||
| 29 | + return codes; | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | + public void setCodes(Integer[] codes) { | ||
| 33 | + this.codes = codes; | ||
| 34 | + } | ||
| 35 | + | ||
| 36 | + public String getDescription() { | ||
| 37 | + return description; | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | + public void setDescription(String description) { | ||
| 41 | + this.description = description; | ||
| 42 | + } | ||
| 43 | + | ||
| 44 | + public static boolean match(ZL zl,String str){ | ||
| 45 | + Integer[] ints=zl.codes; | ||
| 46 | + List<Integer> list= Arrays.asList(ints); | ||
| 47 | + Set<String> ml=new HashSet<>(); | ||
| 48 | + GJC.nestedLoop(list,str,ml); | ||
| 49 | + return false; | ||
| 50 | + } | ||
| 51 | + | ||
| 52 | + | ||
| 53 | +} |
src/main/java/com/bsth/entity/zndd/StationSignsLogger.java
| @@ -28,6 +28,8 @@ public class StationSignsLogger { | @@ -28,6 +28,8 @@ public class StationSignsLogger { | ||
| 28 | 28 | ||
| 29 | private String sign; | 29 | private String sign; |
| 30 | 30 | ||
| 31 | + private String calleeId; | ||
| 32 | + | ||
| 31 | 33 | ||
| 32 | 34 | ||
| 33 | public String getLineCode() { | 35 | public String getLineCode() { |
| @@ -101,4 +103,12 @@ public class StationSignsLogger { | @@ -101,4 +103,12 @@ public class StationSignsLogger { | ||
| 101 | public void setSign(String sign) { | 103 | public void setSign(String sign) { |
| 102 | this.sign = sign; | 104 | this.sign = sign; |
| 103 | } | 105 | } |
| 106 | + | ||
| 107 | + public String getCalleeId() { | ||
| 108 | + return calleeId; | ||
| 109 | + } | ||
| 110 | + | ||
| 111 | + public void setCalleeId(String calleeId) { | ||
| 112 | + this.calleeId = calleeId; | ||
| 113 | + } | ||
| 104 | } | 114 | } |
src/main/java/com/bsth/filter/BaseFilter.java
| @@ -20,7 +20,7 @@ public abstract class BaseFilter implements Filter { | @@ -20,7 +20,7 @@ public abstract class BaseFilter implements Filter { | ||
| 20 | Constants.ASSETS_URL, Constants.FAVICON_URL, Constants.LOGIN, Constants.LOGIN_FAILURE, | 20 | Constants.ASSETS_URL, Constants.FAVICON_URL, Constants.LOGIN, Constants.LOGIN_FAILURE, |
| 21 | Constants.UPSTREAM_URL, Constants.XD_CHILD_PAGES, Constants.XD_REAL_GPS, Constants.UP_RFID_URL, | 21 | Constants.UPSTREAM_URL, Constants.XD_CHILD_PAGES, Constants.XD_REAL_GPS, Constants.UP_RFID_URL, |
| 22 | Constants.STATION_AND_SECTION_COUNT, Constants.ACTUATOR_MANAGEMENT_HEALTH, Constants.VEHICLE_DATA_SYNC_URL, | 22 | Constants.STATION_AND_SECTION_COUNT, Constants.ACTUATOR_MANAGEMENT_HEALTH, Constants.VEHICLE_DATA_SYNC_URL, |
| 23 | - Constants.FILE_AUTH,Constants.OUT_URL}; | 23 | + Constants.FILE_AUTH,Constants.OUT_URL,Constants.NOTICE_URL}; |
| 24 | 24 | ||
| 25 | @Override | 25 | @Override |
| 26 | public void destroy() { | 26 | public void destroy() { |
src/main/java/com/bsth/security/WebSecurityConfig.java
| @@ -39,7 +39,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { | @@ -39,7 +39,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { | ||
| 39 | // 白名单 | 39 | // 白名单 |
| 40 | web.ignoring().antMatchers(Constants.LOGIN_PAGE, Constants.LOGIN, Constants.ORIGINAL_LOGIN_PAGE, Constants.ASSETS_URL, Constants.FAVICON_URL, Constants.CAPTCHA, | 40 | web.ignoring().antMatchers(Constants.LOGIN_PAGE, Constants.LOGIN, Constants.ORIGINAL_LOGIN_PAGE, Constants.ASSETS_URL, Constants.FAVICON_URL, Constants.CAPTCHA, |
| 41 | Constants.SERVICE_INTERFACE, Constants.LOGIN_FAILURE, Constants.UPSTREAM_URL, Constants.XD_CHILD_PAGES, | 41 | Constants.SERVICE_INTERFACE, Constants.LOGIN_FAILURE, Constants.UPSTREAM_URL, Constants.XD_CHILD_PAGES, |
| 42 | - Constants.UP_RFID_URL, Constants.STATION_AND_SECTION_COUNT, Constants.FILE_AUTH,Constants.OUT_URL); | 42 | + Constants.UP_RFID_URL, Constants.STATION_AND_SECTION_COUNT, Constants.FILE_AUTH,Constants.OUT_URL,Constants.NOTICE_URL); |
| 43 | } | 43 | } |
| 44 | 44 | ||
| 45 | @Override | 45 | @Override |
src/main/java/com/bsth/security/filter/LoginInterceptor.java
| @@ -35,7 +35,7 @@ public class LoginInterceptor implements Filter { | @@ -35,7 +35,7 @@ public class LoginInterceptor implements Filter { | ||
| 35 | private String[] whiteListURLs = { Constants.LOGIN_PAGE,Constants.CAPTCHA, Constants.ORIGINAL_LOGIN_PAGE, Constants.SERVICE_INTERFACE, | 35 | private String[] whiteListURLs = { Constants.LOGIN_PAGE,Constants.CAPTCHA, Constants.ORIGINAL_LOGIN_PAGE, Constants.SERVICE_INTERFACE, |
| 36 | Constants.ASSETS_URL, Constants.FAVICON_URL, Constants.LOGIN, | 36 | Constants.ASSETS_URL, Constants.FAVICON_URL, Constants.LOGIN, |
| 37 | Constants.LOGIN_FAILURE, Constants.UPSTREAM_URL, Constants.XD_CHILD_PAGES, Constants.UP_RFID_URL, | 37 | Constants.LOGIN_FAILURE, Constants.UPSTREAM_URL, Constants.XD_CHILD_PAGES, Constants.UP_RFID_URL, |
| 38 | - Constants.STATION_AND_SECTION_COUNT, Constants.VEHICLE_DATA_SYNC_URL, Constants.FILE_AUTH ,Constants.OUT_URL}; | 38 | + Constants.STATION_AND_SECTION_COUNT, Constants.VEHICLE_DATA_SYNC_URL, Constants.FILE_AUTH ,Constants.OUT_URL,Constants.NOTICE_URL}; |
| 39 | 39 | ||
| 40 | 40 | ||
| 41 | @Override | 41 | @Override |
src/main/java/com/bsth/util/SignUtils.java
0 → 100644
| 1 | +package com.bsth.util; | ||
| 2 | + | ||
| 3 | +import com.bsth.service.schedule.utils.Md5Util; | ||
| 4 | + | ||
| 5 | +public class SignUtils { | ||
| 6 | + | ||
| 7 | + private static final String PASSWORD="e126853c7f6f43b4857fa8dfe3b28b5d90be9e68"; | ||
| 8 | + public static boolean validation(long timestamp,String sign){ | ||
| 9 | + String md5String= Md5Util.getMd5(timestamp+PASSWORD); | ||
| 10 | + if(!md5String.equals(sign)){ | ||
| 11 | + return false; | ||
| 12 | + } | ||
| 13 | + if(System.currentTimeMillis()-timestamp>60*1000){ | ||
| 14 | + return false; | ||
| 15 | + } | ||
| 16 | + return true; | ||
| 17 | + } | ||
| 18 | +} |
src/main/resources/static/pages/permission/authorize_all/user_auth.html
| @@ -88,6 +88,7 @@ | @@ -88,6 +88,7 @@ | ||
| 88 | <ul class="uk-list uk-list-large uk-list-divider"> | 88 | <ul class="uk-list uk-list-large uk-list-divider"> |
| 89 | <li><label><input class="uk-checkbox" type="checkbox" data-event="report_register"> 报备登记</label></li> | 89 | <li><label><input class="uk-checkbox" type="checkbox" data-event="report_register"> 报备登记</label></li> |
| 90 | <li><label><input class="uk-checkbox" type="checkbox" data-event="form_report_register"> 报备登记报表</label></li> | 90 | <li><label><input class="uk-checkbox" type="checkbox" data-event="form_report_register"> 报备登记报表</label></li> |
| 91 | + <li><label><input class="uk-checkbox" type="checkbox" data-event="station_notice"> 站牌公告</label></li> | ||
| 91 | </ul> | 92 | </ul> |
| 92 | </div> | 93 | </div> |
| 93 | 94 |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/Blueprint.Net.Server.csproj deleted
100644 → 0
| 1 | -<Project Sdk="Microsoft.NET.Sdk.Web"> | ||
| 2 | - | ||
| 3 | - <PropertyGroup> | ||
| 4 | - <TargetFramework>net8.0</TargetFramework> | ||
| 5 | - <Nullable>enable</Nullable> | ||
| 6 | - <ImplicitUsings>enable</ImplicitUsings> | ||
| 7 | - </PropertyGroup> | ||
| 8 | - | ||
| 9 | - <ItemGroup> | ||
| 10 | - <PackageReference Include="FreeSql" Version="3.2.821" /> | ||
| 11 | - <PackageReference Include="FreeSql.Provider.Sqlite" Version="3.2.821" /> | ||
| 12 | - <PackageReference Include="FreeSql.Repository" Version="3.2.821" /> | ||
| 13 | - <PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" /> | ||
| 14 | - </ItemGroup> | ||
| 15 | - | ||
| 16 | -</Project> |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/Blueprint.Net.Server.sln deleted
100644 → 0
| 1 | - | ||
| 2 | -Microsoft Visual Studio Solution File, Format Version 12.00 | ||
| 3 | -# Visual Studio Version 17 | ||
| 4 | -VisualStudioVersion = 17.9.34622.214 | ||
| 5 | -MinimumVisualStudioVersion = 10.0.40219.1 | ||
| 6 | -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Blueprint.Net.Server", "Blueprint.Net.Server.csproj", "{650D80E6-03AB-40D8-A1DD-C9A42DF92249}" | ||
| 7 | -EndProject | ||
| 8 | -Global | ||
| 9 | - GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||
| 10 | - Debug|Any CPU = Debug|Any CPU | ||
| 11 | - Release|Any CPU = Release|Any CPU | ||
| 12 | - EndGlobalSection | ||
| 13 | - GlobalSection(ProjectConfigurationPlatforms) = postSolution | ||
| 14 | - {650D80E6-03AB-40D8-A1DD-C9A42DF92249}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||
| 15 | - {650D80E6-03AB-40D8-A1DD-C9A42DF92249}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||
| 16 | - {650D80E6-03AB-40D8-A1DD-C9A42DF92249}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||
| 17 | - {650D80E6-03AB-40D8-A1DD-C9A42DF92249}.Release|Any CPU.Build.0 = Release|Any CPU | ||
| 18 | - EndGlobalSection | ||
| 19 | - GlobalSection(SolutionProperties) = preSolution | ||
| 20 | - HideSolutionNode = FALSE | ||
| 21 | - EndGlobalSection | ||
| 22 | - GlobalSection(ExtensibilityGlobals) = postSolution | ||
| 23 | - SolutionGuid = {6CE115DF-4AF8-4EB9-8A99-04F0BED024AC} | ||
| 24 | - EndGlobalSection | ||
| 25 | -EndGlobal |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/Controllers/BlueprintController.cs deleted
100644 → 0
| 1 | -using Microsoft.AspNetCore.Mvc; | ||
| 2 | -using System.Collections.Frozen; | ||
| 3 | -using System.Linq; | ||
| 4 | -using System.Xml.Linq; | ||
| 5 | -using static FreeSql.Internal.GlobalFilter; | ||
| 6 | - | ||
| 7 | -namespace Blueprint.Net.Server.Controllers | ||
| 8 | -{ | ||
| 9 | - [ApiController] | ||
| 10 | - [Route("[controller]")] | ||
| 11 | - public class BlueprintController(ILogger<BlueprintController> logger, IFreeSql fsql) : ControllerBase | ||
| 12 | - { | ||
| 13 | - private readonly ILogger<BlueprintController> _logger = logger; | ||
| 14 | - private readonly IFreeSql _fsql = fsql; | ||
| 15 | - | ||
| 16 | - [HttpGet("GetProjects")] | ||
| 17 | - public async Task<ActionResult<IEnumerable<Project>>> GetProjects() | ||
| 18 | - { | ||
| 19 | - var projects = await _fsql.Select<Project>() | ||
| 20 | - .IncludeMany(p => p.Workspaces, a => a.IncludeMany(b => b.Links)) | ||
| 21 | - .IncludeMany(p => p.Workspaces, a => a.IncludeMany(b => b.Cards)) | ||
| 22 | - .IncludeMany(p => p.Workspaces, a => a.IncludeMany(b => b.Cards, c => c.IncludeMany(d => d.Nodes))) | ||
| 23 | - .ToListAsync(); | ||
| 24 | - | ||
| 25 | - List<long> linkIds = []; | ||
| 26 | - List<long> workspaceIds = []; | ||
| 27 | - | ||
| 28 | - foreach (var project in projects) | ||
| 29 | - { | ||
| 30 | - foreach (var workspace in project.Workspaces) | ||
| 31 | - { | ||
| 32 | - workspaceIds.Add(workspace.Id); | ||
| 33 | - | ||
| 34 | - } | ||
| 35 | - } | ||
| 36 | - | ||
| 37 | - var links = await _fsql.Select<Link>().Where(p => workspaceIds.Contains(p.WorkspaceId)).ToListAsync(); | ||
| 38 | - | ||
| 39 | - foreach (var link in links) | ||
| 40 | - { | ||
| 41 | - linkIds.Add(link.SourceId); | ||
| 42 | - linkIds.Add(link.TargetId); | ||
| 43 | - } | ||
| 44 | - | ||
| 45 | - var nodeConnectInfos = await _fsql.Select<NodeConnectInfo>().Where(p => linkIds.Contains(p.Id)).ToListAsync(); | ||
| 46 | - | ||
| 47 | - foreach (var project in projects) | ||
| 48 | - { | ||
| 49 | - foreach (var workspace in project.Workspaces) | ||
| 50 | - { | ||
| 51 | - | ||
| 52 | - foreach (var link in links.Where(p => p.WorkspaceId == workspace.Id)) | ||
| 53 | - { | ||
| 54 | - link.Source = nodeConnectInfos.FirstOrDefault(p => p.Id == link.SourceId) ?? new(); | ||
| 55 | - link.Target = nodeConnectInfos.FirstOrDefault(p => p.Id == link.TargetId) ?? new(); | ||
| 56 | - | ||
| 57 | - workspace.Links.Add(link); | ||
| 58 | - } | ||
| 59 | - } | ||
| 60 | - } | ||
| 61 | - | ||
| 62 | - | ||
| 63 | - return Ok(projects); | ||
| 64 | - } | ||
| 65 | - | ||
| 66 | - [HttpPost("Project")] | ||
| 67 | - public async Task<ActionResult<Project>> Project([FromBody] Project project) | ||
| 68 | - { | ||
| 69 | - | ||
| 70 | - var projectRepo = _fsql.GetRepository<Project>(); | ||
| 71 | - | ||
| 72 | - projectRepo.DbContextOptions.EnableCascadeSave = true; | ||
| 73 | - | ||
| 74 | - project = await projectRepo.InsertOrUpdateAsync(project); | ||
| 75 | - projectRepo.Attach(project); | ||
| 76 | - | ||
| 77 | - foreach (var workspaces in project.Workspaces) | ||
| 78 | - { | ||
| 79 | - foreach (var node in workspaces.Links) | ||
| 80 | - { | ||
| 81 | - | ||
| 82 | - if (node.SourceId == 0) | ||
| 83 | - { | ||
| 84 | - node.SourceId = await _fsql.Insert(node.Source).ExecuteIdentityAsync(); | ||
| 85 | - node.Source.Id = node.SourceId; | ||
| 86 | - } | ||
| 87 | - else | ||
| 88 | - { | ||
| 89 | - await _fsql.Update<NodeConnectInfo>().SetSource(node.Source).Where(p => p.Id == node.SourceId).ExecuteAffrowsAsync(); | ||
| 90 | - } | ||
| 91 | - | ||
| 92 | - if (node.TargetId == 0) | ||
| 93 | - { | ||
| 94 | - node.TargetId = await _fsql.Insert(node.Target).ExecuteIdentityAsync(); | ||
| 95 | - node.Target.Id = node.TargetId; | ||
| 96 | - } | ||
| 97 | - else | ||
| 98 | - { | ||
| 99 | - await _fsql.Update<NodeConnectInfo>().SetSource(node.Target).Where(p => p.Id == node.TargetId).ExecuteAffrowsAsync(); | ||
| 100 | - } | ||
| 101 | - } | ||
| 102 | - } | ||
| 103 | - await projectRepo.UpdateAsync(project); | ||
| 104 | - | ||
| 105 | - return Ok(project); | ||
| 106 | - | ||
| 107 | - } | ||
| 108 | - | ||
| 109 | - | ||
| 110 | - [HttpDelete("DeleteProject/{id}")] | ||
| 111 | - public async Task<IActionResult> DeleteProject(long id) | ||
| 112 | - { | ||
| 113 | - | ||
| 114 | - var repo = _fsql.GetRepository<Project>(); | ||
| 115 | - | ||
| 116 | - repo.DbContextOptions.EnableCascadeSave = true; | ||
| 117 | - | ||
| 118 | - var project = await repo.Select | ||
| 119 | - .IncludeMany(p => p.Workspaces, a => a.IncludeMany(b => b.Cards, c => c.IncludeMany(d => d.Nodes))) | ||
| 120 | - .IncludeMany(p => p.Workspaces, a => a.IncludeMany(b => b.Links)) | ||
| 121 | - .Where(p => p.Id == id) | ||
| 122 | - .FirstAsync(); | ||
| 123 | - | ||
| 124 | - var deleteIds = new List<long>(); | ||
| 125 | - | ||
| 126 | - foreach (var workspace in project.Workspaces) | ||
| 127 | - { | ||
| 128 | - foreach (var node in workspace.Links) | ||
| 129 | - { | ||
| 130 | - deleteIds.Add(node.SourceId); | ||
| 131 | - deleteIds.Add(node.TargetId); | ||
| 132 | - } | ||
| 133 | - } | ||
| 134 | - await _fsql.Delete<NodeConnectInfo>().Where(p => deleteIds.Contains(p.Id)).ExecuteAffrowsAsync(); | ||
| 135 | - | ||
| 136 | - var ret = await repo.DeleteAsync(project); | ||
| 137 | - if (ret > 0) | ||
| 138 | - return Ok(); | ||
| 139 | - return NotFound(); | ||
| 140 | - } | ||
| 141 | - [HttpDelete("DeleteWorkspace/{id}")] | ||
| 142 | - public async Task<IActionResult> DeleteWorkspace(long id) | ||
| 143 | - { | ||
| 144 | - var repo = _fsql.GetRepository<Workspace>(); | ||
| 145 | - | ||
| 146 | - repo.DbContextOptions.EnableCascadeSave = true; | ||
| 147 | - | ||
| 148 | - var workspace = await repo.Select | ||
| 149 | - .IncludeMany(p => p.Cards, a => a.IncludeMany(b => b.Nodes)) | ||
| 150 | - .IncludeMany(p => p.Links) | ||
| 151 | - .Where(p => p.Id == id) | ||
| 152 | - .FirstAsync(); | ||
| 153 | - | ||
| 154 | - | ||
| 155 | - var deleteIds = new List<long>(); | ||
| 156 | - | ||
| 157 | - foreach (var node in workspace.Links) | ||
| 158 | - { | ||
| 159 | - deleteIds.Add(node.SourceId); | ||
| 160 | - deleteIds.Add(node.TargetId); | ||
| 161 | - } | ||
| 162 | - await _fsql.Delete<NodeConnectInfo>().Where(p => deleteIds.Contains(p.Id)).ExecuteAffrowsAsync(); | ||
| 163 | - | ||
| 164 | - var ret = await repo.DeleteAsync(workspace); | ||
| 165 | - if (ret > 0) | ||
| 166 | - return Ok(); | ||
| 167 | - return NotFound(); | ||
| 168 | - } | ||
| 169 | - | ||
| 170 | - [HttpDelete("DeleteLink/{id}")] | ||
| 171 | - public async Task<IActionResult> DeleteLink(long id) | ||
| 172 | - { | ||
| 173 | - var repo = _fsql.GetRepository<Link>(); | ||
| 174 | - | ||
| 175 | - repo.DbContextOptions.EnableCascadeSave = true; | ||
| 176 | - | ||
| 177 | - var link = await repo.Select.Where(p => p.Id == id).FirstAsync(); | ||
| 178 | - | ||
| 179 | - | ||
| 180 | - var deleteIds = new List<long> | ||
| 181 | - { | ||
| 182 | - link.SourceId, | ||
| 183 | - link.TargetId | ||
| 184 | - }; | ||
| 185 | - | ||
| 186 | - await _fsql.Delete<NodeConnectInfo>().Where(p => deleteIds.Contains(p.Id)).ExecuteAffrowsAsync(); | ||
| 187 | - | ||
| 188 | - var ret = await repo.DeleteAsync(link); | ||
| 189 | - if (ret > 0) | ||
| 190 | - return Ok(); | ||
| 191 | - return NotFound(); | ||
| 192 | - } | ||
| 193 | - | ||
| 194 | - [HttpDelete("DeleteCard/{id}")] | ||
| 195 | - public async Task<IActionResult> DeleteCard(long id) | ||
| 196 | - { | ||
| 197 | - var repo = _fsql.GetRepository<Card>(); | ||
| 198 | - | ||
| 199 | - repo.DbContextOptions.EnableCascadeSave = true; | ||
| 200 | - | ||
| 201 | - var card = await repo.Select.IncludeMany(p => p.Nodes).Where(p => p.Id == id).FirstAsync(); | ||
| 202 | - | ||
| 203 | - var ret = await repo.DeleteAsync(card); | ||
| 204 | - if (ret > 0) | ||
| 205 | - return Ok(); | ||
| 206 | - return NotFound(); | ||
| 207 | - } | ||
| 208 | - | ||
| 209 | - } | ||
| 210 | -} |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/Models.cs deleted
100644 → 0
| 1 | -using FreeSql.DataAnnotations; | ||
| 2 | -using System.ComponentModel.DataAnnotations; | ||
| 3 | -using System.Text.RegularExpressions; | ||
| 4 | - | ||
| 5 | -namespace Blueprint.Net.Server | ||
| 6 | -{ | ||
| 7 | - public class Card | ||
| 8 | - { | ||
| 9 | - [Column(IsIdentity = true, IsPrimary = true)] public long Id { get; set; } | ||
| 10 | - public long WorkspaceId { get; set; } | ||
| 11 | - public int X { get; set; } | ||
| 12 | - public int Y { get; set; } | ||
| 13 | - public string Label { get; set; } | ||
| 14 | - public string Type { get; set; } | ||
| 15 | - [Navigate(nameof(CardNodeInfo.CardId))] public List<CardNodeInfo> Nodes { get; set; } = []; | ||
| 16 | - public List<string> TitleBarColor { get; set; } = []; | ||
| 17 | - } | ||
| 18 | - | ||
| 19 | - public class Link | ||
| 20 | - { | ||
| 21 | - [Column(IsIdentity = true, IsPrimary = true)] public long Id { get; set; } | ||
| 22 | - public long WorkspaceId { get; set; } | ||
| 23 | - | ||
| 24 | - [Navigate(nameof(SourceId))] public NodeConnectInfo Source { get; set; } | ||
| 25 | - | ||
| 26 | - [Navigate(nameof(TargetId))] public NodeConnectInfo Target { get; set; } | ||
| 27 | - | ||
| 28 | - public long SourceId { get; set; } | ||
| 29 | - public long TargetId { get; set; } | ||
| 30 | - | ||
| 31 | - } | ||
| 32 | - | ||
| 33 | - public class NodeConnectInfo | ||
| 34 | - { | ||
| 35 | - [Column(IsIdentity = true, IsPrimary = true)] public long Id { get; set; } | ||
| 36 | - public string Node { get; set; } | ||
| 37 | - public int X { get; set; } | ||
| 38 | - public int Y { get; set; } | ||
| 39 | - public string Color { get; set; } | ||
| 40 | - public string EnumType { get; set; } | ||
| 41 | - } | ||
| 42 | - | ||
| 43 | - public class CardNodeInfo | ||
| 44 | - { | ||
| 45 | - [Column(IsIdentity = true, IsPrimary = true)] public long Id { get; set; } | ||
| 46 | - | ||
| 47 | - public long CardId { get; set; } | ||
| 48 | - public string Type { get; set; } | ||
| 49 | - public int Level { get; set; } | ||
| 50 | - public string EnumType { get; set; } | ||
| 51 | - public string Color { get; set; } | ||
| 52 | - public int? MultiConnected { get; set; } | ||
| 53 | - public string Slot { get; set; } | ||
| 54 | - public string Label { get; set; } | ||
| 55 | - public string Value { get; set; } | ||
| 56 | - } | ||
| 57 | - | ||
| 58 | - | ||
| 59 | - | ||
| 60 | - | ||
| 61 | - | ||
| 62 | - public class Project | ||
| 63 | - { | ||
| 64 | - [Column(IsIdentity = true, IsPrimary = true)] public long Id { get; set; } | ||
| 65 | - public string Name { get; set; } | ||
| 66 | - [Navigate(nameof(Workspace.ProjectId))] public List<Workspace> Workspaces { get; set; } = []; | ||
| 67 | - } | ||
| 68 | - | ||
| 69 | - public class Workspace | ||
| 70 | - { | ||
| 71 | - [Column(IsIdentity = true, IsPrimary = true)] public long Id { get; set; } | ||
| 72 | - public long ProjectId { get; set; } | ||
| 73 | - public string Name { get; set; } | ||
| 74 | - [Navigate(nameof(Card.WorkspaceId))] public List<Card> Cards { get; set; } = []; | ||
| 75 | - [Navigate(nameof(Card.WorkspaceId))] public List<Link> Links { get; set; } = []; | ||
| 76 | - } | ||
| 77 | - | ||
| 78 | -} |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/Program.cs deleted
100644 → 0
| 1 | - | ||
| 2 | -namespace Blueprint.Net.Server | ||
| 3 | -{ | ||
| 4 | - public class Program | ||
| 5 | - { | ||
| 6 | - public static void Main(string[] args) | ||
| 7 | - { | ||
| 8 | - var builder = WebApplication.CreateBuilder(args); | ||
| 9 | - | ||
| 10 | - // Add services to the container. | ||
| 11 | - | ||
| 12 | - builder.Services.AddControllers(); | ||
| 13 | - // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle | ||
| 14 | - builder.Services.AddEndpointsApiExplorer(); | ||
| 15 | - builder.Services.AddSwaggerGen(); | ||
| 16 | - | ||
| 17 | - builder.Services.AddSingleton(new FreeSql.FreeSqlBuilder() | ||
| 18 | - .UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=blueprint.db") | ||
| 19 | - .UseMonitorCommand(cmd => Console.WriteLine($"Sql:{cmd.CommandText}"))//监听SQL语句 | ||
| 20 | - .UseAutoSyncStructure(true) //自动同步实体结构到数据库,FreeSql不会扫描程序集,只有CRUD时才会生成表。 | ||
| 21 | - .Build()); | ||
| 22 | - | ||
| 23 | - var app = builder.Build(); | ||
| 24 | - | ||
| 25 | - // Configure the HTTP request pipeline. | ||
| 26 | - if (app.Environment.IsDevelopment()) | ||
| 27 | - { | ||
| 28 | - app.UseSwagger(); | ||
| 29 | - app.UseSwaggerUI(); | ||
| 30 | - } | ||
| 31 | - | ||
| 32 | - app.UseAuthorization(); | ||
| 33 | - | ||
| 34 | - app.UseStaticFiles(); | ||
| 35 | - | ||
| 36 | - app.MapControllers(); | ||
| 37 | - | ||
| 38 | - app.Run(); | ||
| 39 | - } | ||
| 40 | - } | ||
| 41 | -} |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/Properties/launchSettings.json deleted
100644 → 0
| 1 | -{ | ||
| 2 | - "$schema": "http://json.schemastore.org/launchsettings.json", | ||
| 3 | - "iisSettings": { | ||
| 4 | - "windowsAuthentication": false, | ||
| 5 | - "anonymousAuthentication": true, | ||
| 6 | - "iisExpress": { | ||
| 7 | - "applicationUrl": "http://localhost:19130", | ||
| 8 | - "sslPort": 0 | ||
| 9 | - } | ||
| 10 | - }, | ||
| 11 | - "profiles": { | ||
| 12 | - "http": { | ||
| 13 | - "commandName": "Project", | ||
| 14 | - "dotnetRunMessages": true, | ||
| 15 | - "launchBrowser": true, | ||
| 16 | - "launchUrl": "swagger", | ||
| 17 | - "applicationUrl": "http://localhost:5277", | ||
| 18 | - "environmentVariables": { | ||
| 19 | - "ASPNETCORE_ENVIRONMENT": "Development" | ||
| 20 | - } | ||
| 21 | - }, | ||
| 22 | - "IIS Express": { | ||
| 23 | - "commandName": "IISExpress", | ||
| 24 | - "launchBrowser": true, | ||
| 25 | - "launchUrl": "swagger", | ||
| 26 | - "environmentVariables": { | ||
| 27 | - "ASPNETCORE_ENVIRONMENT": "Development" | ||
| 28 | - } | ||
| 29 | - } | ||
| 30 | - } | ||
| 31 | -} |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/appsettings.Development.json deleted
100644 → 0
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/appsettings.json deleted
100644 → 0
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/Blueprint.Net.Server.deps.json deleted
100644 → 0
| 1 | -{ | ||
| 2 | - "runtimeTarget": { | ||
| 3 | - "name": ".NETCoreApp,Version=v8.0", | ||
| 4 | - "signature": "" | ||
| 5 | - }, | ||
| 6 | - "compilationOptions": {}, | ||
| 7 | - "targets": { | ||
| 8 | - ".NETCoreApp,Version=v8.0": { | ||
| 9 | - "Blueprint.Net.Server/1.0.0": { | ||
| 10 | - "dependencies": { | ||
| 11 | - "FreeSql": "3.2.821", | ||
| 12 | - "FreeSql.Provider.Sqlite": "3.2.821", | ||
| 13 | - "FreeSql.Repository": "3.2.821", | ||
| 14 | - "Swashbuckle.AspNetCore": "6.4.0" | ||
| 15 | - }, | ||
| 16 | - "runtime": { | ||
| 17 | - "Blueprint.Net.Server.dll": {} | ||
| 18 | - } | ||
| 19 | - }, | ||
| 20 | - "FreeSql/3.2.821": { | ||
| 21 | - "runtime": { | ||
| 22 | - "lib/netstandard2.1/FreeSql.dll": { | ||
| 23 | - "assemblyVersion": "3.2.821.0", | ||
| 24 | - "fileVersion": "3.2.821.0" | ||
| 25 | - } | ||
| 26 | - }, | ||
| 27 | - "resources": { | ||
| 28 | - "lib/netstandard2.1/zh-Hans/FreeSql.resources.dll": { | ||
| 29 | - "locale": "zh-Hans" | ||
| 30 | - } | ||
| 31 | - } | ||
| 32 | - }, | ||
| 33 | - "FreeSql.DbContext/3.2.821": { | ||
| 34 | - "dependencies": { | ||
| 35 | - "FreeSql": "3.2.821", | ||
| 36 | - "Microsoft.Extensions.DependencyInjection": "8.0.0" | ||
| 37 | - }, | ||
| 38 | - "runtime": { | ||
| 39 | - "lib/net8.0/FreeSql.DbContext.dll": { | ||
| 40 | - "assemblyVersion": "3.2.821.0", | ||
| 41 | - "fileVersion": "3.2.821.0" | ||
| 42 | - } | ||
| 43 | - }, | ||
| 44 | - "resources": { | ||
| 45 | - "lib/net8.0/zh-Hans/FreeSql.DbContext.resources.dll": { | ||
| 46 | - "locale": "zh-Hans" | ||
| 47 | - } | ||
| 48 | - } | ||
| 49 | - }, | ||
| 50 | - "FreeSql.Provider.Sqlite/3.2.821": { | ||
| 51 | - "dependencies": { | ||
| 52 | - "FreeSql": "3.2.821", | ||
| 53 | - "System.Data.SQLite.Core": "1.0.115.5" | ||
| 54 | - }, | ||
| 55 | - "runtime": { | ||
| 56 | - "lib/netstandard2.0/FreeSql.Provider.Sqlite.dll": { | ||
| 57 | - "assemblyVersion": "3.2.821.0", | ||
| 58 | - "fileVersion": "3.2.821.0" | ||
| 59 | - } | ||
| 60 | - } | ||
| 61 | - }, | ||
| 62 | - "FreeSql.Repository/3.2.821": { | ||
| 63 | - "dependencies": { | ||
| 64 | - "FreeSql.DbContext": "3.2.821" | ||
| 65 | - }, | ||
| 66 | - "runtime": { | ||
| 67 | - "lib/net8.0/FreeSql.Repository.dll": { | ||
| 68 | - "assemblyVersion": "3.2.821.0", | ||
| 69 | - "fileVersion": "3.2.821.0" | ||
| 70 | - } | ||
| 71 | - } | ||
| 72 | - }, | ||
| 73 | - "Microsoft.Extensions.ApiDescription.Server/6.0.5": {}, | ||
| 74 | - "Microsoft.Extensions.DependencyInjection/8.0.0": { | ||
| 75 | - "dependencies": { | ||
| 76 | - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" | ||
| 77 | - } | ||
| 78 | - }, | ||
| 79 | - "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": {}, | ||
| 80 | - "Microsoft.OpenApi/1.2.3": { | ||
| 81 | - "runtime": { | ||
| 82 | - "lib/netstandard2.0/Microsoft.OpenApi.dll": { | ||
| 83 | - "assemblyVersion": "1.2.3.0", | ||
| 84 | - "fileVersion": "1.2.3.0" | ||
| 85 | - } | ||
| 86 | - } | ||
| 87 | - }, | ||
| 88 | - "Stub.System.Data.SQLite.Core.NetStandard/1.0.115.5": { | ||
| 89 | - "runtime": { | ||
| 90 | - "lib/netstandard2.1/System.Data.SQLite.dll": { | ||
| 91 | - "assemblyVersion": "1.0.115.5", | ||
| 92 | - "fileVersion": "1.0.115.5" | ||
| 93 | - } | ||
| 94 | - }, | ||
| 95 | - "runtimeTargets": { | ||
| 96 | - "runtimes/linux-x64/native/SQLite.Interop.dll": { | ||
| 97 | - "rid": "linux-x64", | ||
| 98 | - "assetType": "native", | ||
| 99 | - "fileVersion": "0.0.0.0" | ||
| 100 | - }, | ||
| 101 | - "runtimes/osx-x64/native/SQLite.Interop.dll": { | ||
| 102 | - "rid": "osx-x64", | ||
| 103 | - "assetType": "native", | ||
| 104 | - "fileVersion": "0.0.0.0" | ||
| 105 | - }, | ||
| 106 | - "runtimes/win-x64/native/SQLite.Interop.dll": { | ||
| 107 | - "rid": "win-x64", | ||
| 108 | - "assetType": "native", | ||
| 109 | - "fileVersion": "1.0.115.5" | ||
| 110 | - }, | ||
| 111 | - "runtimes/win-x86/native/SQLite.Interop.dll": { | ||
| 112 | - "rid": "win-x86", | ||
| 113 | - "assetType": "native", | ||
| 114 | - "fileVersion": "1.0.115.5" | ||
| 115 | - } | ||
| 116 | - } | ||
| 117 | - }, | ||
| 118 | - "Swashbuckle.AspNetCore/6.4.0": { | ||
| 119 | - "dependencies": { | ||
| 120 | - "Microsoft.Extensions.ApiDescription.Server": "6.0.5", | ||
| 121 | - "Swashbuckle.AspNetCore.Swagger": "6.4.0", | ||
| 122 | - "Swashbuckle.AspNetCore.SwaggerGen": "6.4.0", | ||
| 123 | - "Swashbuckle.AspNetCore.SwaggerUI": "6.4.0" | ||
| 124 | - } | ||
| 125 | - }, | ||
| 126 | - "Swashbuckle.AspNetCore.Swagger/6.4.0": { | ||
| 127 | - "dependencies": { | ||
| 128 | - "Microsoft.OpenApi": "1.2.3" | ||
| 129 | - }, | ||
| 130 | - "runtime": { | ||
| 131 | - "lib/net6.0/Swashbuckle.AspNetCore.Swagger.dll": { | ||
| 132 | - "assemblyVersion": "6.4.0.0", | ||
| 133 | - "fileVersion": "6.4.0.0" | ||
| 134 | - } | ||
| 135 | - } | ||
| 136 | - }, | ||
| 137 | - "Swashbuckle.AspNetCore.SwaggerGen/6.4.0": { | ||
| 138 | - "dependencies": { | ||
| 139 | - "Swashbuckle.AspNetCore.Swagger": "6.4.0" | ||
| 140 | - }, | ||
| 141 | - "runtime": { | ||
| 142 | - "lib/net6.0/Swashbuckle.AspNetCore.SwaggerGen.dll": { | ||
| 143 | - "assemblyVersion": "6.4.0.0", | ||
| 144 | - "fileVersion": "6.4.0.0" | ||
| 145 | - } | ||
| 146 | - } | ||
| 147 | - }, | ||
| 148 | - "Swashbuckle.AspNetCore.SwaggerUI/6.4.0": { | ||
| 149 | - "runtime": { | ||
| 150 | - "lib/net6.0/Swashbuckle.AspNetCore.SwaggerUI.dll": { | ||
| 151 | - "assemblyVersion": "6.4.0.0", | ||
| 152 | - "fileVersion": "6.4.0.0" | ||
| 153 | - } | ||
| 154 | - } | ||
| 155 | - }, | ||
| 156 | - "System.Data.SQLite.Core/1.0.115.5": { | ||
| 157 | - "dependencies": { | ||
| 158 | - "Stub.System.Data.SQLite.Core.NetStandard": "1.0.115.5" | ||
| 159 | - } | ||
| 160 | - } | ||
| 161 | - } | ||
| 162 | - }, | ||
| 163 | - "libraries": { | ||
| 164 | - "Blueprint.Net.Server/1.0.0": { | ||
| 165 | - "type": "project", | ||
| 166 | - "serviceable": false, | ||
| 167 | - "sha512": "" | ||
| 168 | - }, | ||
| 169 | - "FreeSql/3.2.821": { | ||
| 170 | - "type": "package", | ||
| 171 | - "serviceable": true, | ||
| 172 | - "sha512": "sha512-bI/CTioEq4B9k5pqaZnXBSyJCIbHoUUTJGgQJF5osgq7/9kOxZo93hmZr8Vw6n5iFG5chx6wkcn4dnJJUsAEkA==", | ||
| 173 | - "path": "freesql/3.2.821", | ||
| 174 | - "hashPath": "freesql.3.2.821.nupkg.sha512" | ||
| 175 | - }, | ||
| 176 | - "FreeSql.DbContext/3.2.821": { | ||
| 177 | - "type": "package", | ||
| 178 | - "serviceable": true, | ||
| 179 | - "sha512": "sha512-wQWjKj7/2Iwzp5WxOE5WV/HmoVmj6fKPYGBxKB7JWxF7HudmXjeZS1Hll2ovQksqF/YujYf7SxGbDv5mU9qSGA==", | ||
| 180 | - "path": "freesql.dbcontext/3.2.821", | ||
| 181 | - "hashPath": "freesql.dbcontext.3.2.821.nupkg.sha512" | ||
| 182 | - }, | ||
| 183 | - "FreeSql.Provider.Sqlite/3.2.821": { | ||
| 184 | - "type": "package", | ||
| 185 | - "serviceable": true, | ||
| 186 | - "sha512": "sha512-vBvvq9mDz488XWYeNQSSt8t3FCKquS4DPab7hu7QVRF0ftXRAc6rRK5axFFJZjc5ABU7aIKtu1UiKQky8z/VnA==", | ||
| 187 | - "path": "freesql.provider.sqlite/3.2.821", | ||
| 188 | - "hashPath": "freesql.provider.sqlite.3.2.821.nupkg.sha512" | ||
| 189 | - }, | ||
| 190 | - "FreeSql.Repository/3.2.821": { | ||
| 191 | - "type": "package", | ||
| 192 | - "serviceable": true, | ||
| 193 | - "sha512": "sha512-cE/VG103FYXn2m63Xp7heYptPazNN+z+dUm9jZe2vNwV8LUCU3PbY04MD+liyQBCZ5WGCK70Pe4GXGfQzvRMLw==", | ||
| 194 | - "path": "freesql.repository/3.2.821", | ||
| 195 | - "hashPath": "freesql.repository.3.2.821.nupkg.sha512" | ||
| 196 | - }, | ||
| 197 | - "Microsoft.Extensions.ApiDescription.Server/6.0.5": { | ||
| 198 | - "type": "package", | ||
| 199 | - "serviceable": true, | ||
| 200 | - "sha512": "sha512-Ckb5EDBUNJdFWyajfXzUIMRkhf52fHZOQuuZg/oiu8y7zDCVwD0iHhew6MnThjHmevanpxL3f5ci2TtHQEN6bw==", | ||
| 201 | - "path": "microsoft.extensions.apidescription.server/6.0.5", | ||
| 202 | - "hashPath": "microsoft.extensions.apidescription.server.6.0.5.nupkg.sha512" | ||
| 203 | - }, | ||
| 204 | - "Microsoft.Extensions.DependencyInjection/8.0.0": { | ||
| 205 | - "type": "package", | ||
| 206 | - "serviceable": true, | ||
| 207 | - "sha512": "sha512-V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==", | ||
| 208 | - "path": "microsoft.extensions.dependencyinjection/8.0.0", | ||
| 209 | - "hashPath": "microsoft.extensions.dependencyinjection.8.0.0.nupkg.sha512" | ||
| 210 | - }, | ||
| 211 | - "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": { | ||
| 212 | - "type": "package", | ||
| 213 | - "serviceable": true, | ||
| 214 | - "sha512": "sha512-cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==", | ||
| 215 | - "path": "microsoft.extensions.dependencyinjection.abstractions/8.0.0", | ||
| 216 | - "hashPath": "microsoft.extensions.dependencyinjection.abstractions.8.0.0.nupkg.sha512" | ||
| 217 | - }, | ||
| 218 | - "Microsoft.OpenApi/1.2.3": { | ||
| 219 | - "type": "package", | ||
| 220 | - "serviceable": true, | ||
| 221 | - "sha512": "sha512-Nug3rO+7Kl5/SBAadzSMAVgqDlfGjJZ0GenQrLywJ84XGKO0uRqkunz5Wyl0SDwcR71bAATXvSdbdzPrYRYKGw==", | ||
| 222 | - "path": "microsoft.openapi/1.2.3", | ||
| 223 | - "hashPath": "microsoft.openapi.1.2.3.nupkg.sha512" | ||
| 224 | - }, | ||
| 225 | - "Stub.System.Data.SQLite.Core.NetStandard/1.0.115.5": { | ||
| 226 | - "type": "package", | ||
| 227 | - "serviceable": true, | ||
| 228 | - "sha512": "sha512-WfrqQg6WL+r4H1sVKTenNj6ERLXUukUxqcjH1rqPqXadeIWccTVpydESieD7cZ/NWQVSKLYIHuoBX5du+BFhIQ==", | ||
| 229 | - "path": "stub.system.data.sqlite.core.netstandard/1.0.115.5", | ||
| 230 | - "hashPath": "stub.system.data.sqlite.core.netstandard.1.0.115.5.nupkg.sha512" | ||
| 231 | - }, | ||
| 232 | - "Swashbuckle.AspNetCore/6.4.0": { | ||
| 233 | - "type": "package", | ||
| 234 | - "serviceable": true, | ||
| 235 | - "sha512": "sha512-eUBr4TW0up6oKDA5Xwkul289uqSMgY0xGN4pnbOIBqCcN9VKGGaPvHX3vWaG/hvocfGDP+MGzMA0bBBKz2fkmQ==", | ||
| 236 | - "path": "swashbuckle.aspnetcore/6.4.0", | ||
| 237 | - "hashPath": "swashbuckle.aspnetcore.6.4.0.nupkg.sha512" | ||
| 238 | - }, | ||
| 239 | - "Swashbuckle.AspNetCore.Swagger/6.4.0": { | ||
| 240 | - "type": "package", | ||
| 241 | - "serviceable": true, | ||
| 242 | - "sha512": "sha512-nl4SBgGM+cmthUcpwO/w1lUjevdDHAqRvfUoe4Xp/Uvuzt9mzGUwyFCqa3ODBAcZYBiFoKvrYwz0rabslJvSmQ==", | ||
| 243 | - "path": "swashbuckle.aspnetcore.swagger/6.4.0", | ||
| 244 | - "hashPath": "swashbuckle.aspnetcore.swagger.6.4.0.nupkg.sha512" | ||
| 245 | - }, | ||
| 246 | - "Swashbuckle.AspNetCore.SwaggerGen/6.4.0": { | ||
| 247 | - "type": "package", | ||
| 248 | - "serviceable": true, | ||
| 249 | - "sha512": "sha512-lXhcUBVqKrPFAQF7e/ZeDfb5PMgE8n5t6L5B6/BQSpiwxgHzmBcx8Msu42zLYFTvR5PIqE9Q9lZvSQAcwCxJjw==", | ||
| 250 | - "path": "swashbuckle.aspnetcore.swaggergen/6.4.0", | ||
| 251 | - "hashPath": "swashbuckle.aspnetcore.swaggergen.6.4.0.nupkg.sha512" | ||
| 252 | - }, | ||
| 253 | - "Swashbuckle.AspNetCore.SwaggerUI/6.4.0": { | ||
| 254 | - "type": "package", | ||
| 255 | - "serviceable": true, | ||
| 256 | - "sha512": "sha512-1Hh3atb3pi8c+v7n4/3N80Jj8RvLOXgWxzix6w3OZhB7zBGRwsy7FWr4e3hwgPweSBpwfElqj4V4nkjYabH9nQ==", | ||
| 257 | - "path": "swashbuckle.aspnetcore.swaggerui/6.4.0", | ||
| 258 | - "hashPath": "swashbuckle.aspnetcore.swaggerui.6.4.0.nupkg.sha512" | ||
| 259 | - }, | ||
| 260 | - "System.Data.SQLite.Core/1.0.115.5": { | ||
| 261 | - "type": "package", | ||
| 262 | - "serviceable": true, | ||
| 263 | - "sha512": "sha512-vADIqqgpxaC5xR6qOV8/KMZkQeSDCfmmWpVOtQx0oEr3Yjq2XdTxX7+jfE4+oO2xPovAbYiz6Q5cLRbSsDkq6Q==", | ||
| 264 | - "path": "system.data.sqlite.core/1.0.115.5", | ||
| 265 | - "hashPath": "system.data.sqlite.core.1.0.115.5.nupkg.sha512" | ||
| 266 | - } | ||
| 267 | - } | ||
| 268 | -} | ||
| 269 | \ No newline at end of file | 0 | \ No newline at end of file |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/Blueprint.Net.Server.dll deleted
100644 → 0
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/Blueprint.Net.Server.exe deleted
100644 → 0
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/Blueprint.Net.Server.pdb deleted
100644 → 0
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/Blueprint.Net.Server.runtimeconfig.json deleted
100644 → 0
| 1 | -{ | ||
| 2 | - "runtimeOptions": { | ||
| 3 | - "tfm": "net8.0", | ||
| 4 | - "frameworks": [ | ||
| 5 | - { | ||
| 6 | - "name": "Microsoft.NETCore.App", | ||
| 7 | - "version": "8.0.0" | ||
| 8 | - }, | ||
| 9 | - { | ||
| 10 | - "name": "Microsoft.AspNetCore.App", | ||
| 11 | - "version": "8.0.0" | ||
| 12 | - } | ||
| 13 | - ], | ||
| 14 | - "configProperties": { | ||
| 15 | - "System.GC.Server": true, | ||
| 16 | - "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false | ||
| 17 | - } | ||
| 18 | - } | ||
| 19 | -} | ||
| 20 | \ No newline at end of file | 0 | \ No newline at end of file |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/Blueprint.Net.Server.staticwebassets.runtime.json deleted
100644 → 0
| 1 | -{"ContentRoots":["E:\\Code\\Blueprint\\Blueprint.Net.Server\\wwwroot\\"],"Root":{"Children":{"index.html":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"index.html"},"Patterns":null}},"Asset":null,"Patterns":[{"ContentRootIndex":0,"Pattern":"**","Depth":0}]}} | ||
| 2 | \ No newline at end of file | 0 | \ No newline at end of file |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/FreeSql.DbContext.dll deleted
100644 → 0
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/FreeSql.Provider.Sqlite.dll deleted
100644 → 0
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/FreeSql.Repository.dll deleted
100644 → 0
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/FreeSql.dll deleted
100644 → 0
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/Microsoft.OpenApi.dll deleted
100644 → 0
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/Swashbuckle.AspNetCore.Swagger.dll deleted
100644 → 0
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/Swashbuckle.AspNetCore.SwaggerGen.dll deleted
100644 → 0
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/Swashbuckle.AspNetCore.SwaggerUI.dll deleted
100644 → 0
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/System.Data.SQLite.dll deleted
100644 → 0
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/appsettings.Development.json deleted
100644 → 0
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/appsettings.json deleted
100644 → 0
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/runtimes/linux-x64/native/SQLite.Interop.dll deleted
100644 → 0
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/runtimes/osx-x64/native/SQLite.Interop.dll deleted
100644 → 0
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/runtimes/win-x64/native/SQLite.Interop.dll deleted
100644 → 0
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/runtimes/win-x86/native/SQLite.Interop.dll deleted
100644 → 0
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/zh-Hans/FreeSql.DbContext.resources.dll deleted
100644 → 0
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/zh-Hans/FreeSql.resources.dll deleted
100644 → 0
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/blueprint.db deleted
100644 → 0
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Blueprint.Net.Server.csproj.nuget.dgspec.json deleted
100644 → 0
| 1 | -{ | ||
| 2 | - "format": 1, | ||
| 3 | - "restore": { | ||
| 4 | - "E:\\Code\\Blueprint\\Blueprint.Net.Server\\Blueprint.Net.Server.csproj": {} | ||
| 5 | - }, | ||
| 6 | - "projects": { | ||
| 7 | - "E:\\Code\\Blueprint\\Blueprint.Net.Server\\Blueprint.Net.Server.csproj": { | ||
| 8 | - "version": "1.0.0", | ||
| 9 | - "restore": { | ||
| 10 | - "projectUniqueName": "E:\\Code\\Blueprint\\Blueprint.Net.Server\\Blueprint.Net.Server.csproj", | ||
| 11 | - "projectName": "Blueprint.Net.Server", | ||
| 12 | - "projectPath": "E:\\Code\\Blueprint\\Blueprint.Net.Server\\Blueprint.Net.Server.csproj", | ||
| 13 | - "packagesPath": "C:\\Users\\anan\\.nuget\\packages\\", | ||
| 14 | - "outputPath": "E:\\Code\\Blueprint\\Blueprint.Net.Server\\obj\\", | ||
| 15 | - "projectStyle": "PackageReference", | ||
| 16 | - "fallbackFolders": [ | ||
| 17 | - "C:\\Users\\anan\\AppData\\Roaming\\Godot\\mono\\GodotNuGetFallbackFolder", | ||
| 18 | - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" | ||
| 19 | - ], | ||
| 20 | - "configFilePaths": [ | ||
| 21 | - "C:\\Users\\anan\\AppData\\Roaming\\NuGet\\NuGet.Config", | ||
| 22 | - "C:\\Users\\anan\\AppData\\Roaming\\NuGet\\config\\Godot.Offline.Config", | ||
| 23 | - "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", | ||
| 24 | - "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" | ||
| 25 | - ], | ||
| 26 | - "originalTargetFrameworks": [ | ||
| 27 | - "net8.0" | ||
| 28 | - ], | ||
| 29 | - "sources": { | ||
| 30 | - "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, | ||
| 31 | - "C:\\Program Files\\dotnet\\library-packs": {}, | ||
| 32 | - "https://api.nuget.org/v3/index.json": {} | ||
| 33 | - }, | ||
| 34 | - "frameworks": { | ||
| 35 | - "net8.0": { | ||
| 36 | - "targetAlias": "net8.0", | ||
| 37 | - "projectReferences": {} | ||
| 38 | - } | ||
| 39 | - }, | ||
| 40 | - "warningProperties": { | ||
| 41 | - "warnAsError": [ | ||
| 42 | - "NU1605" | ||
| 43 | - ] | ||
| 44 | - }, | ||
| 45 | - "restoreAuditProperties": { | ||
| 46 | - "enableAudit": "true", | ||
| 47 | - "auditLevel": "low", | ||
| 48 | - "auditMode": "direct" | ||
| 49 | - } | ||
| 50 | - }, | ||
| 51 | - "frameworks": { | ||
| 52 | - "net8.0": { | ||
| 53 | - "targetAlias": "net8.0", | ||
| 54 | - "dependencies": { | ||
| 55 | - "FreeSql": { | ||
| 56 | - "target": "Package", | ||
| 57 | - "version": "[3.2.821, )" | ||
| 58 | - }, | ||
| 59 | - "FreeSql.Provider.Sqlite": { | ||
| 60 | - "target": "Package", | ||
| 61 | - "version": "[3.2.821, )" | ||
| 62 | - }, | ||
| 63 | - "FreeSql.Repository": { | ||
| 64 | - "target": "Package", | ||
| 65 | - "version": "[3.2.821, )" | ||
| 66 | - }, | ||
| 67 | - "Swashbuckle.AspNetCore": { | ||
| 68 | - "target": "Package", | ||
| 69 | - "version": "[6.4.0, )" | ||
| 70 | - } | ||
| 71 | - }, | ||
| 72 | - "imports": [ | ||
| 73 | - "net461", | ||
| 74 | - "net462", | ||
| 75 | - "net47", | ||
| 76 | - "net471", | ||
| 77 | - "net472", | ||
| 78 | - "net48", | ||
| 79 | - "net481" | ||
| 80 | - ], | ||
| 81 | - "assetTargetFallback": true, | ||
| 82 | - "warn": true, | ||
| 83 | - "frameworkReferences": { | ||
| 84 | - "Microsoft.AspNetCore.App": { | ||
| 85 | - "privateAssets": "none" | ||
| 86 | - }, | ||
| 87 | - "Microsoft.NETCore.App": { | ||
| 88 | - "privateAssets": "all" | ||
| 89 | - } | ||
| 90 | - }, | ||
| 91 | - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.201/PortableRuntimeIdentifierGraph.json" | ||
| 92 | - } | ||
| 93 | - } | ||
| 94 | - } | ||
| 95 | - } | ||
| 96 | -} | ||
| 97 | \ No newline at end of file | 0 | \ No newline at end of file |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Blueprint.Net.Server.csproj.nuget.g.props deleted
100644 → 0
| 1 | -<?xml version="1.0" encoding="utf-8" standalone="no"?> | ||
| 2 | -<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
| 3 | - <PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' "> | ||
| 4 | - <RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess> | ||
| 5 | - <RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool> | ||
| 6 | - <ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile> | ||
| 7 | - <NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot> | ||
| 8 | - <NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\anan\.nuget\packages\;C:\Users\anan\AppData\Roaming\Godot\mono\GodotNuGetFallbackFolder;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages</NuGetPackageFolders> | ||
| 9 | - <NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle> | ||
| 10 | - <NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.9.1</NuGetToolVersion> | ||
| 11 | - </PropertyGroup> | ||
| 12 | - <ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' "> | ||
| 13 | - <SourceRoot Include="C:\Users\anan\.nuget\packages\" /> | ||
| 14 | - <SourceRoot Include="C:\Users\anan\AppData\Roaming\Godot\mono\GodotNuGetFallbackFolder\" /> | ||
| 15 | - <SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" /> | ||
| 16 | - </ItemGroup> | ||
| 17 | - <ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' "> | ||
| 18 | - <Import Project="$(NuGetPackageRoot)microsoft.extensions.apidescription.server\6.0.5\build\Microsoft.Extensions.ApiDescription.Server.props" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.apidescription.server\6.0.5\build\Microsoft.Extensions.ApiDescription.Server.props')" /> | ||
| 19 | - <Import Project="$(NuGetPackageRoot)swashbuckle.aspnetcore\6.4.0\build\Swashbuckle.AspNetCore.props" Condition="Exists('$(NuGetPackageRoot)swashbuckle.aspnetcore\6.4.0\build\Swashbuckle.AspNetCore.props')" /> | ||
| 20 | - </ImportGroup> | ||
| 21 | - <PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' "> | ||
| 22 | - <PkgMicrosoft_Extensions_ApiDescription_Server Condition=" '$(PkgMicrosoft_Extensions_ApiDescription_Server)' == '' ">C:\Users\anan\.nuget\packages\microsoft.extensions.apidescription.server\6.0.5</PkgMicrosoft_Extensions_ApiDescription_Server> | ||
| 23 | - </PropertyGroup> | ||
| 24 | -</Project> | ||
| 25 | \ No newline at end of file | 0 | \ No newline at end of file |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Blueprint.Net.Server.csproj.nuget.g.targets deleted
100644 → 0
| 1 | -<?xml version="1.0" encoding="utf-8" standalone="no"?> | ||
| 2 | -<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
| 3 | - <ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' "> | ||
| 4 | - <Import Project="$(NuGetPackageRoot)microsoft.extensions.apidescription.server\6.0.5\build\Microsoft.Extensions.ApiDescription.Server.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.apidescription.server\6.0.5\build\Microsoft.Extensions.ApiDescription.Server.targets')" /> | ||
| 5 | - </ImportGroup> | ||
| 6 | -</Project> | ||
| 7 | \ No newline at end of file | 0 | \ No newline at end of file |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs deleted
100644 → 0
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/ApiEndpoints.json deleted
100644 → 0
| 1 | -[ | ||
| 2 | - { | ||
| 3 | - "ContainingType": "Blueprint.Net.Server.Controllers.BlueprintController", | ||
| 4 | - "Method": "DeleteCard", | ||
| 5 | - "RelativePath": "Blueprint/DeleteCard/{id}", | ||
| 6 | - "HttpMethod": "DELETE", | ||
| 7 | - "IsController": true, | ||
| 8 | - "Order": 0, | ||
| 9 | - "Parameters": [ | ||
| 10 | - { | ||
| 11 | - "Name": "id", | ||
| 12 | - "Type": "System.Int64", | ||
| 13 | - "IsRequired": true | ||
| 14 | - } | ||
| 15 | - ], | ||
| 16 | - "ReturnTypes": [] | ||
| 17 | - }, | ||
| 18 | - { | ||
| 19 | - "ContainingType": "Blueprint.Net.Server.Controllers.BlueprintController", | ||
| 20 | - "Method": "DeleteLink", | ||
| 21 | - "RelativePath": "Blueprint/DeleteLink/{id}", | ||
| 22 | - "HttpMethod": "DELETE", | ||
| 23 | - "IsController": true, | ||
| 24 | - "Order": 0, | ||
| 25 | - "Parameters": [ | ||
| 26 | - { | ||
| 27 | - "Name": "id", | ||
| 28 | - "Type": "System.Int64", | ||
| 29 | - "IsRequired": true | ||
| 30 | - } | ||
| 31 | - ], | ||
| 32 | - "ReturnTypes": [] | ||
| 33 | - }, | ||
| 34 | - { | ||
| 35 | - "ContainingType": "Blueprint.Net.Server.Controllers.BlueprintController", | ||
| 36 | - "Method": "DeleteProject", | ||
| 37 | - "RelativePath": "Blueprint/DeleteProject/{id}", | ||
| 38 | - "HttpMethod": "DELETE", | ||
| 39 | - "IsController": true, | ||
| 40 | - "Order": 0, | ||
| 41 | - "Parameters": [ | ||
| 42 | - { | ||
| 43 | - "Name": "id", | ||
| 44 | - "Type": "System.Int64", | ||
| 45 | - "IsRequired": true | ||
| 46 | - } | ||
| 47 | - ], | ||
| 48 | - "ReturnTypes": [] | ||
| 49 | - }, | ||
| 50 | - { | ||
| 51 | - "ContainingType": "Blueprint.Net.Server.Controllers.BlueprintController", | ||
| 52 | - "Method": "DeleteWorkspace", | ||
| 53 | - "RelativePath": "Blueprint/DeleteWorkspace/{id}", | ||
| 54 | - "HttpMethod": "DELETE", | ||
| 55 | - "IsController": true, | ||
| 56 | - "Order": 0, | ||
| 57 | - "Parameters": [ | ||
| 58 | - { | ||
| 59 | - "Name": "id", | ||
| 60 | - "Type": "System.Int64", | ||
| 61 | - "IsRequired": true | ||
| 62 | - } | ||
| 63 | - ], | ||
| 64 | - "ReturnTypes": [] | ||
| 65 | - }, | ||
| 66 | - { | ||
| 67 | - "ContainingType": "Blueprint.Net.Server.Controllers.BlueprintController", | ||
| 68 | - "Method": "GetProjects", | ||
| 69 | - "RelativePath": "Blueprint/GetProjects", | ||
| 70 | - "HttpMethod": "GET", | ||
| 71 | - "IsController": true, | ||
| 72 | - "Order": 0, | ||
| 73 | - "Parameters": [], | ||
| 74 | - "ReturnTypes": [ | ||
| 75 | - { | ||
| 76 | - "Type": "System.Collections.Generic.IEnumerable\u00601[[Blueprint.Net.Server.Project, Blueprint.Net.Server, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]", | ||
| 77 | - "MediaTypes": [ | ||
| 78 | - "text/plain", | ||
| 79 | - "application/json", | ||
| 80 | - "text/json" | ||
| 81 | - ], | ||
| 82 | - "StatusCode": 200 | ||
| 83 | - } | ||
| 84 | - ] | ||
| 85 | - }, | ||
| 86 | - { | ||
| 87 | - "ContainingType": "Blueprint.Net.Server.Controllers.BlueprintController", | ||
| 88 | - "Method": "Project", | ||
| 89 | - "RelativePath": "Blueprint/Project", | ||
| 90 | - "HttpMethod": "POST", | ||
| 91 | - "IsController": true, | ||
| 92 | - "Order": 0, | ||
| 93 | - "Parameters": [ | ||
| 94 | - { | ||
| 95 | - "Name": "project", | ||
| 96 | - "Type": "Blueprint.Net.Server.Project", | ||
| 97 | - "IsRequired": true | ||
| 98 | - } | ||
| 99 | - ], | ||
| 100 | - "ReturnTypes": [ | ||
| 101 | - { | ||
| 102 | - "Type": "Blueprint.Net.Server.Project", | ||
| 103 | - "MediaTypes": [ | ||
| 104 | - "text/plain", | ||
| 105 | - "application/json", | ||
| 106 | - "text/json" | ||
| 107 | - ], | ||
| 108 | - "StatusCode": 200 | ||
| 109 | - } | ||
| 110 | - ] | ||
| 111 | - } | ||
| 112 | -] | ||
| 113 | \ No newline at end of file | 0 | \ No newline at end of file |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprin.F6C0E272.Up2Date deleted
100644 → 0
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.AssemblyInfo.cs deleted
100644 → 0
| 1 | -//------------------------------------------------------------------------------ | ||
| 2 | -// <auto-generated> | ||
| 3 | -// This code was generated by a tool. | ||
| 4 | -// | ||
| 5 | -// Changes to this file may cause incorrect behavior and will be lost if | ||
| 6 | -// the code is regenerated. | ||
| 7 | -// </auto-generated> | ||
| 8 | -//------------------------------------------------------------------------------ | ||
| 9 | - | ||
| 10 | -using System; | ||
| 11 | -using System.Reflection; | ||
| 12 | - | ||
| 13 | -[assembly: System.Reflection.AssemblyCompanyAttribute("Blueprint.Net.Server")] | ||
| 14 | -[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] | ||
| 15 | -[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] | ||
| 16 | -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+21310e5f9b84d697cb0feff5b5ab032eedbd8151")] | ||
| 17 | -[assembly: System.Reflection.AssemblyProductAttribute("Blueprint.Net.Server")] | ||
| 18 | -[assembly: System.Reflection.AssemblyTitleAttribute("Blueprint.Net.Server")] | ||
| 19 | -[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] | ||
| 20 | - | ||
| 21 | -// 由 MSBuild WriteCodeFragment 类生成。 | ||
| 22 | - |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.AssemblyInfoInputs.cache deleted
100644 → 0
| 1 | -5eddb37dc7a53e4fa87096743c7acd0b6360a57b70e21a4550930a7499bb9c12 |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.GeneratedMSBuildEditorConfig.editorconfig deleted
100644 → 0
| 1 | -is_global = true | ||
| 2 | -build_property.TargetFramework = net8.0 | ||
| 3 | -build_property.TargetPlatformMinVersion = | ||
| 4 | -build_property.UsingMicrosoftNETSdkWeb = true | ||
| 5 | -build_property.ProjectTypeGuids = | ||
| 6 | -build_property.InvariantGlobalization = | ||
| 7 | -build_property.PlatformNeutralAssembly = | ||
| 8 | -build_property.EnforceExtendedAnalyzerRules = | ||
| 9 | -build_property._SupportedPlatformList = Linux,macOS,Windows | ||
| 10 | -build_property.RootNamespace = Blueprint.Net.Server | ||
| 11 | -build_property.RootNamespace = Blueprint.Net.Server | ||
| 12 | -build_property.ProjectDir = E:\Code\Blueprint\Blueprint.Net.Server\ | ||
| 13 | -build_property.EnableComHosting = | ||
| 14 | -build_property.EnableGeneratedComInterfaceComImportInterop = | ||
| 15 | -build_property.RazorLangVersion = 8.0 | ||
| 16 | -build_property.SupportLocalizedComponentNames = | ||
| 17 | -build_property.GenerateRazorMetadataSourceChecksumAttributes = | ||
| 18 | -build_property.MSBuildProjectDirectory = E:\Code\Blueprint\Blueprint.Net.Server | ||
| 19 | -build_property._RazorSourceGeneratorDebug = |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.GlobalUsings.g.cs deleted
100644 → 0
| 1 | -// <auto-generated/> | ||
| 2 | -global using global::Microsoft.AspNetCore.Builder; | ||
| 3 | -global using global::Microsoft.AspNetCore.Hosting; | ||
| 4 | -global using global::Microsoft.AspNetCore.Http; | ||
| 5 | -global using global::Microsoft.AspNetCore.Routing; | ||
| 6 | -global using global::Microsoft.Extensions.Configuration; | ||
| 7 | -global using global::Microsoft.Extensions.DependencyInjection; | ||
| 8 | -global using global::Microsoft.Extensions.Hosting; | ||
| 9 | -global using global::Microsoft.Extensions.Logging; | ||
| 10 | -global using global::System; | ||
| 11 | -global using global::System.Collections.Generic; | ||
| 12 | -global using global::System.IO; | ||
| 13 | -global using global::System.Linq; | ||
| 14 | -global using global::System.Net.Http; | ||
| 15 | -global using global::System.Net.Http.Json; | ||
| 16 | -global using global::System.Threading; | ||
| 17 | -global using global::System.Threading.Tasks; |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.MvcApplicationPartsAssemblyInfo.cache deleted
100644 → 0
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.MvcApplicationPartsAssemblyInfo.cs deleted
100644 → 0
| 1 | -//------------------------------------------------------------------------------ | ||
| 2 | -// <auto-generated> | ||
| 3 | -// 此代码由工具生成。 | ||
| 4 | -// 运行时版本:4.0.30319.42000 | ||
| 5 | -// | ||
| 6 | -// 对此文件的更改可能会导致不正确的行为,并且如果 | ||
| 7 | -// 重新生成代码,这些更改将会丢失。 | ||
| 8 | -// </auto-generated> | ||
| 9 | -//------------------------------------------------------------------------------ | ||
| 10 | - | ||
| 11 | -using System; | ||
| 12 | -using System.Reflection; | ||
| 13 | - | ||
| 14 | -[assembly: Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartAttribute("Swashbuckle.AspNetCore.SwaggerGen")] | ||
| 15 | - | ||
| 16 | -// 由 MSBuild WriteCodeFragment 类生成。 | ||
| 17 | - |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.assets.cache deleted
100644 → 0
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.csproj.AssemblyReference.cache deleted
100644 → 0
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.csproj.BuildWithSkipAnalyzers deleted
100644 → 0
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.csproj.CoreCompileInputs.cache deleted
100644 → 0
| 1 | -e6649176d8592337858ccf92973fd389b3d88f5441cf720c89972060326574ca |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.csproj.FileListAbsolute.txt deleted
100644 → 0
| 1 | -E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\Blueprint.Net.Server.csproj.AssemblyReference.cache | ||
| 2 | -E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\Blueprint.Net.Server.GeneratedMSBuildEditorConfig.editorconfig | ||
| 3 | -E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\Blueprint.Net.Server.AssemblyInfoInputs.cache | ||
| 4 | -E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\Blueprint.Net.Server.AssemblyInfo.cs | ||
| 5 | -E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\Blueprint.Net.Server.csproj.CoreCompileInputs.cache | ||
| 6 | -E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\Blueprint.Net.Server.MvcApplicationPartsAssemblyInfo.cs | ||
| 7 | -E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\Blueprint.Net.Server.MvcApplicationPartsAssemblyInfo.cache | ||
| 8 | -E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\Blueprint.Net.Server.sourcelink.json | ||
| 9 | -E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\appsettings.Development.json | ||
| 10 | -E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\appsettings.json | ||
| 11 | -E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\Blueprint.Net.Server.exe | ||
| 12 | -E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\Blueprint.Net.Server.deps.json | ||
| 13 | -E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\Blueprint.Net.Server.runtimeconfig.json | ||
| 14 | -E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\Blueprint.Net.Server.dll | ||
| 15 | -E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\Blueprint.Net.Server.pdb | ||
| 16 | -E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\FreeSql.dll | ||
| 17 | -E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\FreeSql.Provider.Sqlite.dll | ||
| 18 | -E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\Microsoft.OpenApi.dll | ||
| 19 | -E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\System.Data.SQLite.dll | ||
| 20 | -E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\Swashbuckle.AspNetCore.Swagger.dll | ||
| 21 | -E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\Swashbuckle.AspNetCore.SwaggerGen.dll | ||
| 22 | -E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\Swashbuckle.AspNetCore.SwaggerUI.dll | ||
| 23 | -E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\zh-Hans\FreeSql.resources.dll | ||
| 24 | -E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\runtimes\linux-x64\native\SQLite.Interop.dll | ||
| 25 | -E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\runtimes\osx-x64\native\SQLite.Interop.dll | ||
| 26 | -E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\runtimes\win-x64\native\SQLite.Interop.dll | ||
| 27 | -E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\runtimes\win-x86\native\SQLite.Interop.dll | ||
| 28 | -E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\staticwebassets.build.json | ||
| 29 | -E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\staticwebassets.development.json | ||
| 30 | -E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\staticwebassets\msbuild.Blueprint.Net.Server.Microsoft.AspNetCore.StaticWebAssets.props | ||
| 31 | -E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\staticwebassets\msbuild.build.Blueprint.Net.Server.props | ||
| 32 | -E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\staticwebassets\msbuild.buildMultiTargeting.Blueprint.Net.Server.props | ||
| 33 | -E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\staticwebassets\msbuild.buildTransitive.Blueprint.Net.Server.props | ||
| 34 | -E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\staticwebassets.pack.json | ||
| 35 | -E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\scopedcss\bundle\Blueprint.Net.Server.styles.css | ||
| 36 | -E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\Blueprin.F6C0E272.Up2Date | ||
| 37 | -E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\Blueprint.Net.Server.dll | ||
| 38 | -E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\refint\Blueprint.Net.Server.dll | ||
| 39 | -E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\Blueprint.Net.Server.pdb | ||
| 40 | -E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\Blueprint.Net.Server.genruntimeconfig.cache | ||
| 41 | -E:\Code\Blueprint\Blueprint.Net.Server\obj\Debug\net8.0\ref\Blueprint.Net.Server.dll | ||
| 42 | -E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\FreeSql.DbContext.dll | ||
| 43 | -E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\FreeSql.Repository.dll | ||
| 44 | -E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\zh-Hans\FreeSql.DbContext.resources.dll | ||
| 45 | -E:\Code\Blueprint\Blueprint.Net.Server\bin\Debug\net8.0\Blueprint.Net.Server.staticwebassets.runtime.json |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.dll deleted
100644 → 0
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.genruntimeconfig.cache deleted
100644 → 0
| 1 | -8acfbde84a0808a05ea09472133bf8a326d26f20e0ddb65a94244d389946671b |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.pdb deleted
100644 → 0
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/Blueprint.Net.Server.sourcelink.json deleted
100644 → 0
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/apphost.exe deleted
100644 → 0
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/ref/Blueprint.Net.Server.dll deleted
100644 → 0
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/refint/Blueprint.Net.Server.dll deleted
100644 → 0
No preview for this file type
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/staticwebassets.build.json deleted
100644 → 0
| 1 | -{ | ||
| 2 | - "Version": 1, | ||
| 3 | - "Hash": "Pejh5880OWDtzUDeaYI0R3uZI5plIRGeOY+LIYo1sp8=", | ||
| 4 | - "Source": "Blueprint.Net.Server", | ||
| 5 | - "BasePath": "_content/Blueprint.Net.Server", | ||
| 6 | - "Mode": "Default", | ||
| 7 | - "ManifestType": "Build", | ||
| 8 | - "ReferencedProjectsConfiguration": [], | ||
| 9 | - "DiscoveryPatterns": [ | ||
| 10 | - { | ||
| 11 | - "Name": "Blueprint.Net.Server\\wwwroot", | ||
| 12 | - "Source": "Blueprint.Net.Server", | ||
| 13 | - "ContentRoot": "E:\\Code\\Blueprint\\Blueprint.Net.Server\\wwwroot\\", | ||
| 14 | - "BasePath": "_content/Blueprint.Net.Server", | ||
| 15 | - "Pattern": "**" | ||
| 16 | - } | ||
| 17 | - ], | ||
| 18 | - "Assets": [ | ||
| 19 | - { | ||
| 20 | - "Identity": "E:\\Code\\Blueprint\\Blueprint.Net.Server\\wwwroot\\index.html", | ||
| 21 | - "SourceId": "Blueprint.Net.Server", | ||
| 22 | - "SourceType": "Discovered", | ||
| 23 | - "ContentRoot": "E:\\Code\\Blueprint\\Blueprint.Net.Server\\wwwroot\\", | ||
| 24 | - "BasePath": "_content/Blueprint.Net.Server", | ||
| 25 | - "RelativePath": "index.html", | ||
| 26 | - "AssetKind": "All", | ||
| 27 | - "AssetMode": "All", | ||
| 28 | - "AssetRole": "Primary", | ||
| 29 | - "AssetMergeBehavior": "PreferTarget", | ||
| 30 | - "AssetMergeSource": "", | ||
| 31 | - "RelatedAsset": "", | ||
| 32 | - "AssetTraitName": "", | ||
| 33 | - "AssetTraitValue": "", | ||
| 34 | - "CopyToOutputDirectory": "Never", | ||
| 35 | - "CopyToPublishDirectory": "PreserveNewest", | ||
| 36 | - "OriginalItemSpec": "wwwroot\\index.html" | ||
| 37 | - } | ||
| 38 | - ] | ||
| 39 | -} | ||
| 40 | \ No newline at end of file | 0 | \ No newline at end of file |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/staticwebassets.development.json deleted
100644 → 0
| 1 | -{"ContentRoots":["E:\\Code\\Blueprint\\Blueprint.Net.Server\\wwwroot\\"],"Root":{"Children":{"index.html":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"index.html"},"Patterns":null}},"Asset":null,"Patterns":[{"ContentRootIndex":0,"Pattern":"**","Depth":0}]}} | ||
| 2 | \ No newline at end of file | 0 | \ No newline at end of file |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/staticwebassets.pack.json deleted
100644 → 0
| 1 | -{ | ||
| 2 | - "Files": [ | ||
| 3 | - { | ||
| 4 | - "Id": "E:\\Code\\Blueprint\\Blueprint.Net.Server\\wwwroot\\index.html", | ||
| 5 | - "PackagePath": "staticwebassets\\index.html" | ||
| 6 | - }, | ||
| 7 | - { | ||
| 8 | - "Id": "obj\\Debug\\net8.0\\staticwebassets\\msbuild.Blueprint.Net.Server.Microsoft.AspNetCore.StaticWebAssets.props", | ||
| 9 | - "PackagePath": "build\\Microsoft.AspNetCore.StaticWebAssets.props" | ||
| 10 | - }, | ||
| 11 | - { | ||
| 12 | - "Id": "obj\\Debug\\net8.0\\staticwebassets\\msbuild.build.Blueprint.Net.Server.props", | ||
| 13 | - "PackagePath": "build\\Blueprint.Net.Server.props" | ||
| 14 | - }, | ||
| 15 | - { | ||
| 16 | - "Id": "obj\\Debug\\net8.0\\staticwebassets\\msbuild.buildMultiTargeting.Blueprint.Net.Server.props", | ||
| 17 | - "PackagePath": "buildMultiTargeting\\Blueprint.Net.Server.props" | ||
| 18 | - }, | ||
| 19 | - { | ||
| 20 | - "Id": "obj\\Debug\\net8.0\\staticwebassets\\msbuild.buildTransitive.Blueprint.Net.Server.props", | ||
| 21 | - "PackagePath": "buildTransitive\\Blueprint.Net.Server.props" | ||
| 22 | - } | ||
| 23 | - ], | ||
| 24 | - "ElementsToRemove": [] | ||
| 25 | -} | ||
| 26 | \ No newline at end of file | 0 | \ No newline at end of file |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/staticwebassets/msbuild.Blueprint.Net.Server.Microsoft.AspNetCore.StaticWebAssets.props deleted
100644 → 0
| 1 | -<Project> | ||
| 2 | - <ItemGroup> | ||
| 3 | - <StaticWebAsset Include="$([System.IO.Path]::GetFullPath($(MSBuildThisFileDirectory)..\staticwebassets\index.html))"> | ||
| 4 | - <SourceType>Package</SourceType> | ||
| 5 | - <SourceId>Blueprint.Net.Server</SourceId> | ||
| 6 | - <ContentRoot>$(MSBuildThisFileDirectory)..\staticwebassets\</ContentRoot> | ||
| 7 | - <BasePath>_content/Blueprint.Net.Server</BasePath> | ||
| 8 | - <RelativePath>index.html</RelativePath> | ||
| 9 | - <AssetKind>All</AssetKind> | ||
| 10 | - <AssetMode>All</AssetMode> | ||
| 11 | - <AssetRole>Primary</AssetRole> | ||
| 12 | - <RelatedAsset></RelatedAsset> | ||
| 13 | - <AssetTraitName></AssetTraitName> | ||
| 14 | - <AssetTraitValue></AssetTraitValue> | ||
| 15 | - <CopyToOutputDirectory>Never</CopyToOutputDirectory> | ||
| 16 | - <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> | ||
| 17 | - <OriginalItemSpec>$([System.IO.Path]::GetFullPath($(MSBuildThisFileDirectory)..\staticwebassets\index.html))</OriginalItemSpec> | ||
| 18 | - </StaticWebAsset> | ||
| 19 | - </ItemGroup> | ||
| 20 | -</Project> | ||
| 21 | \ No newline at end of file | 0 | \ No newline at end of file |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/staticwebassets/msbuild.build.Blueprint.Net.Server.props deleted
100644 → 0
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/staticwebassets/msbuild.buildMultiTargeting.Blueprint.Net.Server.props deleted
100644 → 0
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/staticwebassets/msbuild.buildTransitive.Blueprint.Net.Server.props deleted
100644 → 0
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/project.assets.json deleted
100644 → 0
| 1 | -{ | ||
| 2 | - "version": 3, | ||
| 3 | - "targets": { | ||
| 4 | - "net8.0": { | ||
| 5 | - "FreeSql/3.2.821": { | ||
| 6 | - "type": "package", | ||
| 7 | - "compile": { | ||
| 8 | - "lib/netstandard2.1/FreeSql.dll": { | ||
| 9 | - "related": ".pdb;.xml" | ||
| 10 | - } | ||
| 11 | - }, | ||
| 12 | - "runtime": { | ||
| 13 | - "lib/netstandard2.1/FreeSql.dll": { | ||
| 14 | - "related": ".pdb;.xml" | ||
| 15 | - } | ||
| 16 | - }, | ||
| 17 | - "resource": { | ||
| 18 | - "lib/netstandard2.1/zh-Hans/FreeSql.resources.dll": { | ||
| 19 | - "locale": "zh-Hans" | ||
| 20 | - } | ||
| 21 | - } | ||
| 22 | - }, | ||
| 23 | - "FreeSql.DbContext/3.2.821": { | ||
| 24 | - "type": "package", | ||
| 25 | - "dependencies": { | ||
| 26 | - "FreeSql": "3.2.821", | ||
| 27 | - "Microsoft.Extensions.DependencyInjection": "8.0.0" | ||
| 28 | - }, | ||
| 29 | - "compile": { | ||
| 30 | - "lib/net8.0/FreeSql.DbContext.dll": { | ||
| 31 | - "related": ".pdb;.xml" | ||
| 32 | - } | ||
| 33 | - }, | ||
| 34 | - "runtime": { | ||
| 35 | - "lib/net8.0/FreeSql.DbContext.dll": { | ||
| 36 | - "related": ".pdb;.xml" | ||
| 37 | - } | ||
| 38 | - }, | ||
| 39 | - "resource": { | ||
| 40 | - "lib/net8.0/zh-Hans/FreeSql.DbContext.resources.dll": { | ||
| 41 | - "locale": "zh-Hans" | ||
| 42 | - } | ||
| 43 | - } | ||
| 44 | - }, | ||
| 45 | - "FreeSql.Provider.Sqlite/3.2.821": { | ||
| 46 | - "type": "package", | ||
| 47 | - "dependencies": { | ||
| 48 | - "FreeSql": "3.2.821", | ||
| 49 | - "System.Data.SQLite.Core": "1.0.115.5" | ||
| 50 | - }, | ||
| 51 | - "compile": { | ||
| 52 | - "lib/netstandard2.0/FreeSql.Provider.Sqlite.dll": { | ||
| 53 | - "related": ".pdb" | ||
| 54 | - } | ||
| 55 | - }, | ||
| 56 | - "runtime": { | ||
| 57 | - "lib/netstandard2.0/FreeSql.Provider.Sqlite.dll": { | ||
| 58 | - "related": ".pdb" | ||
| 59 | - } | ||
| 60 | - } | ||
| 61 | - }, | ||
| 62 | - "FreeSql.Repository/3.2.821": { | ||
| 63 | - "type": "package", | ||
| 64 | - "dependencies": { | ||
| 65 | - "FreeSql.DbContext": "3.2.821" | ||
| 66 | - }, | ||
| 67 | - "compile": { | ||
| 68 | - "lib/net8.0/FreeSql.Repository.dll": { | ||
| 69 | - "related": ".pdb" | ||
| 70 | - } | ||
| 71 | - }, | ||
| 72 | - "runtime": { | ||
| 73 | - "lib/net8.0/FreeSql.Repository.dll": { | ||
| 74 | - "related": ".pdb" | ||
| 75 | - } | ||
| 76 | - } | ||
| 77 | - }, | ||
| 78 | - "Microsoft.Extensions.ApiDescription.Server/6.0.5": { | ||
| 79 | - "type": "package", | ||
| 80 | - "build": { | ||
| 81 | - "build/Microsoft.Extensions.ApiDescription.Server.props": {}, | ||
| 82 | - "build/Microsoft.Extensions.ApiDescription.Server.targets": {} | ||
| 83 | - }, | ||
| 84 | - "buildMultiTargeting": { | ||
| 85 | - "buildMultiTargeting/Microsoft.Extensions.ApiDescription.Server.props": {}, | ||
| 86 | - "buildMultiTargeting/Microsoft.Extensions.ApiDescription.Server.targets": {} | ||
| 87 | - } | ||
| 88 | - }, | ||
| 89 | - "Microsoft.Extensions.DependencyInjection/8.0.0": { | ||
| 90 | - "type": "package", | ||
| 91 | - "dependencies": { | ||
| 92 | - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" | ||
| 93 | - }, | ||
| 94 | - "compile": { | ||
| 95 | - "lib/net8.0/Microsoft.Extensions.DependencyInjection.dll": { | ||
| 96 | - "related": ".xml" | ||
| 97 | - } | ||
| 98 | - }, | ||
| 99 | - "runtime": { | ||
| 100 | - "lib/net8.0/Microsoft.Extensions.DependencyInjection.dll": { | ||
| 101 | - "related": ".xml" | ||
| 102 | - } | ||
| 103 | - }, | ||
| 104 | - "build": { | ||
| 105 | - "buildTransitive/net6.0/_._": {} | ||
| 106 | - } | ||
| 107 | - }, | ||
| 108 | - "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": { | ||
| 109 | - "type": "package", | ||
| 110 | - "compile": { | ||
| 111 | - "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { | ||
| 112 | - "related": ".xml" | ||
| 113 | - } | ||
| 114 | - }, | ||
| 115 | - "runtime": { | ||
| 116 | - "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { | ||
| 117 | - "related": ".xml" | ||
| 118 | - } | ||
| 119 | - }, | ||
| 120 | - "build": { | ||
| 121 | - "buildTransitive/net6.0/_._": {} | ||
| 122 | - } | ||
| 123 | - }, | ||
| 124 | - "Microsoft.OpenApi/1.2.3": { | ||
| 125 | - "type": "package", | ||
| 126 | - "compile": { | ||
| 127 | - "lib/netstandard2.0/Microsoft.OpenApi.dll": { | ||
| 128 | - "related": ".pdb;.xml" | ||
| 129 | - } | ||
| 130 | - }, | ||
| 131 | - "runtime": { | ||
| 132 | - "lib/netstandard2.0/Microsoft.OpenApi.dll": { | ||
| 133 | - "related": ".pdb;.xml" | ||
| 134 | - } | ||
| 135 | - } | ||
| 136 | - }, | ||
| 137 | - "Stub.System.Data.SQLite.Core.NetStandard/1.0.115.5": { | ||
| 138 | - "type": "package", | ||
| 139 | - "compile": { | ||
| 140 | - "lib/netstandard2.1/System.Data.SQLite.dll": { | ||
| 141 | - "related": ".dll.altconfig;.xml" | ||
| 142 | - } | ||
| 143 | - }, | ||
| 144 | - "runtime": { | ||
| 145 | - "lib/netstandard2.1/System.Data.SQLite.dll": { | ||
| 146 | - "related": ".dll.altconfig;.xml" | ||
| 147 | - } | ||
| 148 | - }, | ||
| 149 | - "runtimeTargets": { | ||
| 150 | - "runtimes/linux-x64/native/SQLite.Interop.dll": { | ||
| 151 | - "assetType": "native", | ||
| 152 | - "rid": "linux-x64" | ||
| 153 | - }, | ||
| 154 | - "runtimes/osx-x64/native/SQLite.Interop.dll": { | ||
| 155 | - "assetType": "native", | ||
| 156 | - "rid": "osx-x64" | ||
| 157 | - }, | ||
| 158 | - "runtimes/win-x64/native/SQLite.Interop.dll": { | ||
| 159 | - "assetType": "native", | ||
| 160 | - "rid": "win-x64" | ||
| 161 | - }, | ||
| 162 | - "runtimes/win-x86/native/SQLite.Interop.dll": { | ||
| 163 | - "assetType": "native", | ||
| 164 | - "rid": "win-x86" | ||
| 165 | - } | ||
| 166 | - } | ||
| 167 | - }, | ||
| 168 | - "Swashbuckle.AspNetCore/6.4.0": { | ||
| 169 | - "type": "package", | ||
| 170 | - "dependencies": { | ||
| 171 | - "Microsoft.Extensions.ApiDescription.Server": "6.0.5", | ||
| 172 | - "Swashbuckle.AspNetCore.Swagger": "6.4.0", | ||
| 173 | - "Swashbuckle.AspNetCore.SwaggerGen": "6.4.0", | ||
| 174 | - "Swashbuckle.AspNetCore.SwaggerUI": "6.4.0" | ||
| 175 | - }, | ||
| 176 | - "build": { | ||
| 177 | - "build/Swashbuckle.AspNetCore.props": {} | ||
| 178 | - } | ||
| 179 | - }, | ||
| 180 | - "Swashbuckle.AspNetCore.Swagger/6.4.0": { | ||
| 181 | - "type": "package", | ||
| 182 | - "dependencies": { | ||
| 183 | - "Microsoft.OpenApi": "1.2.3" | ||
| 184 | - }, | ||
| 185 | - "compile": { | ||
| 186 | - "lib/net6.0/Swashbuckle.AspNetCore.Swagger.dll": { | ||
| 187 | - "related": ".pdb;.xml" | ||
| 188 | - } | ||
| 189 | - }, | ||
| 190 | - "runtime": { | ||
| 191 | - "lib/net6.0/Swashbuckle.AspNetCore.Swagger.dll": { | ||
| 192 | - "related": ".pdb;.xml" | ||
| 193 | - } | ||
| 194 | - }, | ||
| 195 | - "frameworkReferences": [ | ||
| 196 | - "Microsoft.AspNetCore.App" | ||
| 197 | - ] | ||
| 198 | - }, | ||
| 199 | - "Swashbuckle.AspNetCore.SwaggerGen/6.4.0": { | ||
| 200 | - "type": "package", | ||
| 201 | - "dependencies": { | ||
| 202 | - "Swashbuckle.AspNetCore.Swagger": "6.4.0" | ||
| 203 | - }, | ||
| 204 | - "compile": { | ||
| 205 | - "lib/net6.0/Swashbuckle.AspNetCore.SwaggerGen.dll": { | ||
| 206 | - "related": ".pdb;.xml" | ||
| 207 | - } | ||
| 208 | - }, | ||
| 209 | - "runtime": { | ||
| 210 | - "lib/net6.0/Swashbuckle.AspNetCore.SwaggerGen.dll": { | ||
| 211 | - "related": ".pdb;.xml" | ||
| 212 | - } | ||
| 213 | - } | ||
| 214 | - }, | ||
| 215 | - "Swashbuckle.AspNetCore.SwaggerUI/6.4.0": { | ||
| 216 | - "type": "package", | ||
| 217 | - "compile": { | ||
| 218 | - "lib/net6.0/Swashbuckle.AspNetCore.SwaggerUI.dll": { | ||
| 219 | - "related": ".pdb;.xml" | ||
| 220 | - } | ||
| 221 | - }, | ||
| 222 | - "runtime": { | ||
| 223 | - "lib/net6.0/Swashbuckle.AspNetCore.SwaggerUI.dll": { | ||
| 224 | - "related": ".pdb;.xml" | ||
| 225 | - } | ||
| 226 | - }, | ||
| 227 | - "frameworkReferences": [ | ||
| 228 | - "Microsoft.AspNetCore.App" | ||
| 229 | - ] | ||
| 230 | - }, | ||
| 231 | - "System.Data.SQLite.Core/1.0.115.5": { | ||
| 232 | - "type": "package", | ||
| 233 | - "dependencies": { | ||
| 234 | - "Stub.System.Data.SQLite.Core.NetStandard": "[1.0.115.5]" | ||
| 235 | - } | ||
| 236 | - } | ||
| 237 | - } | ||
| 238 | - }, | ||
| 239 | - "libraries": { | ||
| 240 | - "FreeSql/3.2.821": { | ||
| 241 | - "sha512": "bI/CTioEq4B9k5pqaZnXBSyJCIbHoUUTJGgQJF5osgq7/9kOxZo93hmZr8Vw6n5iFG5chx6wkcn4dnJJUsAEkA==", | ||
| 242 | - "type": "package", | ||
| 243 | - "path": "freesql/3.2.821", | ||
| 244 | - "files": [ | ||
| 245 | - ".nupkg.metadata", | ||
| 246 | - ".signature.p7s", | ||
| 247 | - "freesql.3.2.821.nupkg.sha512", | ||
| 248 | - "freesql.nuspec", | ||
| 249 | - "lib/net40/FreeSql.dll", | ||
| 250 | - "lib/net40/FreeSql.pdb", | ||
| 251 | - "lib/net40/FreeSql.xml", | ||
| 252 | - "lib/net40/zh-Hans/FreeSql.resources.dll", | ||
| 253 | - "lib/net45/FreeSql.dll", | ||
| 254 | - "lib/net45/FreeSql.pdb", | ||
| 255 | - "lib/net45/FreeSql.xml", | ||
| 256 | - "lib/net45/zh-Hans/FreeSql.resources.dll", | ||
| 257 | - "lib/net451/FreeSql.dll", | ||
| 258 | - "lib/net451/FreeSql.pdb", | ||
| 259 | - "lib/net451/FreeSql.xml", | ||
| 260 | - "lib/net451/zh-Hans/FreeSql.resources.dll", | ||
| 261 | - "lib/netstandard2.0/FreeSql.dll", | ||
| 262 | - "lib/netstandard2.0/FreeSql.pdb", | ||
| 263 | - "lib/netstandard2.0/FreeSql.xml", | ||
| 264 | - "lib/netstandard2.0/zh-Hans/FreeSql.resources.dll", | ||
| 265 | - "lib/netstandard2.1/FreeSql.dll", | ||
| 266 | - "lib/netstandard2.1/FreeSql.pdb", | ||
| 267 | - "lib/netstandard2.1/FreeSql.xml", | ||
| 268 | - "lib/netstandard2.1/zh-Hans/FreeSql.resources.dll", | ||
| 269 | - "logo.png", | ||
| 270 | - "readme.md" | ||
| 271 | - ] | ||
| 272 | - }, | ||
| 273 | - "FreeSql.DbContext/3.2.821": { | ||
| 274 | - "sha512": "wQWjKj7/2Iwzp5WxOE5WV/HmoVmj6fKPYGBxKB7JWxF7HudmXjeZS1Hll2ovQksqF/YujYf7SxGbDv5mU9qSGA==", | ||
| 275 | - "type": "package", | ||
| 276 | - "path": "freesql.dbcontext/3.2.821", | ||
| 277 | - "files": [ | ||
| 278 | - ".nupkg.metadata", | ||
| 279 | - ".signature.p7s", | ||
| 280 | - "freesql.dbcontext.3.2.821.nupkg.sha512", | ||
| 281 | - "freesql.dbcontext.nuspec", | ||
| 282 | - "lib/net40/FreeSql.DbContext.dll", | ||
| 283 | - "lib/net40/FreeSql.DbContext.pdb", | ||
| 284 | - "lib/net40/FreeSql.DbContext.xml", | ||
| 285 | - "lib/net40/zh-Hans/FreeSql.DbContext.resources.dll", | ||
| 286 | - "lib/net45/FreeSql.DbContext.dll", | ||
| 287 | - "lib/net45/FreeSql.DbContext.pdb", | ||
| 288 | - "lib/net45/FreeSql.DbContext.xml", | ||
| 289 | - "lib/net45/zh-Hans/FreeSql.DbContext.resources.dll", | ||
| 290 | - "lib/net5.0/FreeSql.DbContext.dll", | ||
| 291 | - "lib/net5.0/FreeSql.DbContext.pdb", | ||
| 292 | - "lib/net5.0/FreeSql.DbContext.xml", | ||
| 293 | - "lib/net5.0/zh-Hans/FreeSql.DbContext.resources.dll", | ||
| 294 | - "lib/net6.0/FreeSql.DbContext.dll", | ||
| 295 | - "lib/net6.0/FreeSql.DbContext.pdb", | ||
| 296 | - "lib/net6.0/FreeSql.DbContext.xml", | ||
| 297 | - "lib/net6.0/zh-Hans/FreeSql.DbContext.resources.dll", | ||
| 298 | - "lib/net7.0/FreeSql.DbContext.dll", | ||
| 299 | - "lib/net7.0/FreeSql.DbContext.pdb", | ||
| 300 | - "lib/net7.0/FreeSql.DbContext.xml", | ||
| 301 | - "lib/net7.0/zh-Hans/FreeSql.DbContext.resources.dll", | ||
| 302 | - "lib/net8.0/FreeSql.DbContext.dll", | ||
| 303 | - "lib/net8.0/FreeSql.DbContext.pdb", | ||
| 304 | - "lib/net8.0/FreeSql.DbContext.xml", | ||
| 305 | - "lib/net8.0/zh-Hans/FreeSql.DbContext.resources.dll", | ||
| 306 | - "lib/netcoreapp3.1/FreeSql.DbContext.dll", | ||
| 307 | - "lib/netcoreapp3.1/FreeSql.DbContext.pdb", | ||
| 308 | - "lib/netcoreapp3.1/FreeSql.DbContext.xml", | ||
| 309 | - "lib/netcoreapp3.1/zh-Hans/FreeSql.DbContext.resources.dll", | ||
| 310 | - "lib/netstandard2.0/FreeSql.DbContext.dll", | ||
| 311 | - "lib/netstandard2.0/FreeSql.DbContext.pdb", | ||
| 312 | - "lib/netstandard2.0/FreeSql.DbContext.xml", | ||
| 313 | - "lib/netstandard2.0/zh-Hans/FreeSql.DbContext.resources.dll", | ||
| 314 | - "lib/netstandard2.1/FreeSql.DbContext.dll", | ||
| 315 | - "lib/netstandard2.1/FreeSql.DbContext.pdb", | ||
| 316 | - "lib/netstandard2.1/FreeSql.DbContext.xml", | ||
| 317 | - "lib/netstandard2.1/zh-Hans/FreeSql.DbContext.resources.dll", | ||
| 318 | - "logo.png", | ||
| 319 | - "readme.md" | ||
| 320 | - ] | ||
| 321 | - }, | ||
| 322 | - "FreeSql.Provider.Sqlite/3.2.821": { | ||
| 323 | - "sha512": "vBvvq9mDz488XWYeNQSSt8t3FCKquS4DPab7hu7QVRF0ftXRAc6rRK5axFFJZjc5ABU7aIKtu1UiKQky8z/VnA==", | ||
| 324 | - "type": "package", | ||
| 325 | - "path": "freesql.provider.sqlite/3.2.821", | ||
| 326 | - "files": [ | ||
| 327 | - ".nupkg.metadata", | ||
| 328 | - ".signature.p7s", | ||
| 329 | - "freesql.provider.sqlite.3.2.821.nupkg.sha512", | ||
| 330 | - "freesql.provider.sqlite.nuspec", | ||
| 331 | - "lib/net40/FreeSql.Provider.Sqlite.dll", | ||
| 332 | - "lib/net40/FreeSql.Provider.Sqlite.pdb", | ||
| 333 | - "lib/net45/FreeSql.Provider.Sqlite.dll", | ||
| 334 | - "lib/net45/FreeSql.Provider.Sqlite.pdb", | ||
| 335 | - "lib/netstandard2.0/FreeSql.Provider.Sqlite.dll", | ||
| 336 | - "lib/netstandard2.0/FreeSql.Provider.Sqlite.pdb", | ||
| 337 | - "logo.png", | ||
| 338 | - "readme.md" | ||
| 339 | - ] | ||
| 340 | - }, | ||
| 341 | - "FreeSql.Repository/3.2.821": { | ||
| 342 | - "sha512": "cE/VG103FYXn2m63Xp7heYptPazNN+z+dUm9jZe2vNwV8LUCU3PbY04MD+liyQBCZ5WGCK70Pe4GXGfQzvRMLw==", | ||
| 343 | - "type": "package", | ||
| 344 | - "path": "freesql.repository/3.2.821", | ||
| 345 | - "files": [ | ||
| 346 | - ".nupkg.metadata", | ||
| 347 | - ".signature.p7s", | ||
| 348 | - "freesql.repository.3.2.821.nupkg.sha512", | ||
| 349 | - "freesql.repository.nuspec", | ||
| 350 | - "lib/net40/FreeSql.Repository.dll", | ||
| 351 | - "lib/net40/FreeSql.Repository.pdb", | ||
| 352 | - "lib/net45/FreeSql.Repository.dll", | ||
| 353 | - "lib/net45/FreeSql.Repository.pdb", | ||
| 354 | - "lib/net5.0/FreeSql.Repository.dll", | ||
| 355 | - "lib/net5.0/FreeSql.Repository.pdb", | ||
| 356 | - "lib/net6.0/FreeSql.Repository.dll", | ||
| 357 | - "lib/net6.0/FreeSql.Repository.pdb", | ||
| 358 | - "lib/net7.0/FreeSql.Repository.dll", | ||
| 359 | - "lib/net7.0/FreeSql.Repository.pdb", | ||
| 360 | - "lib/net8.0/FreeSql.Repository.dll", | ||
| 361 | - "lib/net8.0/FreeSql.Repository.pdb", | ||
| 362 | - "lib/netcoreapp3.1/FreeSql.Repository.dll", | ||
| 363 | - "lib/netcoreapp3.1/FreeSql.Repository.pdb", | ||
| 364 | - "lib/netstandard2.0/FreeSql.Repository.dll", | ||
| 365 | - "lib/netstandard2.0/FreeSql.Repository.pdb", | ||
| 366 | - "lib/netstandard2.1/FreeSql.Repository.dll", | ||
| 367 | - "lib/netstandard2.1/FreeSql.Repository.pdb", | ||
| 368 | - "logo.png", | ||
| 369 | - "readme.md" | ||
| 370 | - ] | ||
| 371 | - }, | ||
| 372 | - "Microsoft.Extensions.ApiDescription.Server/6.0.5": { | ||
| 373 | - "sha512": "Ckb5EDBUNJdFWyajfXzUIMRkhf52fHZOQuuZg/oiu8y7zDCVwD0iHhew6MnThjHmevanpxL3f5ci2TtHQEN6bw==", | ||
| 374 | - "type": "package", | ||
| 375 | - "path": "microsoft.extensions.apidescription.server/6.0.5", | ||
| 376 | - "hasTools": true, | ||
| 377 | - "files": [ | ||
| 378 | - ".nupkg.metadata", | ||
| 379 | - ".signature.p7s", | ||
| 380 | - "Icon.png", | ||
| 381 | - "build/Microsoft.Extensions.ApiDescription.Server.props", | ||
| 382 | - "build/Microsoft.Extensions.ApiDescription.Server.targets", | ||
| 383 | - "buildMultiTargeting/Microsoft.Extensions.ApiDescription.Server.props", | ||
| 384 | - "buildMultiTargeting/Microsoft.Extensions.ApiDescription.Server.targets", | ||
| 385 | - "microsoft.extensions.apidescription.server.6.0.5.nupkg.sha512", | ||
| 386 | - "microsoft.extensions.apidescription.server.nuspec", | ||
| 387 | - "tools/Newtonsoft.Json.dll", | ||
| 388 | - "tools/dotnet-getdocument.deps.json", | ||
| 389 | - "tools/dotnet-getdocument.dll", | ||
| 390 | - "tools/dotnet-getdocument.runtimeconfig.json", | ||
| 391 | - "tools/net461-x86/GetDocument.Insider.exe", | ||
| 392 | - "tools/net461-x86/GetDocument.Insider.exe.config", | ||
| 393 | - "tools/net461-x86/Microsoft.Win32.Primitives.dll", | ||
| 394 | - "tools/net461-x86/System.AppContext.dll", | ||
| 395 | - "tools/net461-x86/System.Buffers.dll", | ||
| 396 | - "tools/net461-x86/System.Collections.Concurrent.dll", | ||
| 397 | - "tools/net461-x86/System.Collections.NonGeneric.dll", | ||
| 398 | - "tools/net461-x86/System.Collections.Specialized.dll", | ||
| 399 | - "tools/net461-x86/System.Collections.dll", | ||
| 400 | - "tools/net461-x86/System.ComponentModel.EventBasedAsync.dll", | ||
| 401 | - "tools/net461-x86/System.ComponentModel.Primitives.dll", | ||
| 402 | - "tools/net461-x86/System.ComponentModel.TypeConverter.dll", | ||
| 403 | - "tools/net461-x86/System.ComponentModel.dll", | ||
| 404 | - "tools/net461-x86/System.Console.dll", | ||
| 405 | - "tools/net461-x86/System.Data.Common.dll", | ||
| 406 | - "tools/net461-x86/System.Diagnostics.Contracts.dll", | ||
| 407 | - "tools/net461-x86/System.Diagnostics.Debug.dll", | ||
| 408 | - "tools/net461-x86/System.Diagnostics.DiagnosticSource.dll", | ||
| 409 | - "tools/net461-x86/System.Diagnostics.FileVersionInfo.dll", | ||
| 410 | - "tools/net461-x86/System.Diagnostics.Process.dll", | ||
| 411 | - "tools/net461-x86/System.Diagnostics.StackTrace.dll", | ||
| 412 | - "tools/net461-x86/System.Diagnostics.TextWriterTraceListener.dll", | ||
| 413 | - "tools/net461-x86/System.Diagnostics.Tools.dll", | ||
| 414 | - "tools/net461-x86/System.Diagnostics.TraceSource.dll", | ||
| 415 | - "tools/net461-x86/System.Diagnostics.Tracing.dll", | ||
| 416 | - "tools/net461-x86/System.Drawing.Primitives.dll", | ||
| 417 | - "tools/net461-x86/System.Dynamic.Runtime.dll", | ||
| 418 | - "tools/net461-x86/System.Globalization.Calendars.dll", | ||
| 419 | - "tools/net461-x86/System.Globalization.Extensions.dll", | ||
| 420 | - "tools/net461-x86/System.Globalization.dll", | ||
| 421 | - "tools/net461-x86/System.IO.Compression.ZipFile.dll", | ||
| 422 | - "tools/net461-x86/System.IO.Compression.dll", | ||
| 423 | - "tools/net461-x86/System.IO.FileSystem.DriveInfo.dll", | ||
| 424 | - "tools/net461-x86/System.IO.FileSystem.Primitives.dll", | ||
| 425 | - "tools/net461-x86/System.IO.FileSystem.Watcher.dll", | ||
| 426 | - "tools/net461-x86/System.IO.FileSystem.dll", | ||
| 427 | - "tools/net461-x86/System.IO.IsolatedStorage.dll", | ||
| 428 | - "tools/net461-x86/System.IO.MemoryMappedFiles.dll", | ||
| 429 | - "tools/net461-x86/System.IO.Pipes.dll", | ||
| 430 | - "tools/net461-x86/System.IO.UnmanagedMemoryStream.dll", | ||
| 431 | - "tools/net461-x86/System.IO.dll", | ||
| 432 | - "tools/net461-x86/System.Linq.Expressions.dll", | ||
| 433 | - "tools/net461-x86/System.Linq.Parallel.dll", | ||
| 434 | - "tools/net461-x86/System.Linq.Queryable.dll", | ||
| 435 | - "tools/net461-x86/System.Linq.dll", | ||
| 436 | - "tools/net461-x86/System.Memory.dll", | ||
| 437 | - "tools/net461-x86/System.Net.Http.dll", | ||
| 438 | - "tools/net461-x86/System.Net.NameResolution.dll", | ||
| 439 | - "tools/net461-x86/System.Net.NetworkInformation.dll", | ||
| 440 | - "tools/net461-x86/System.Net.Ping.dll", | ||
| 441 | - "tools/net461-x86/System.Net.Primitives.dll", | ||
| 442 | - "tools/net461-x86/System.Net.Requests.dll", | ||
| 443 | - "tools/net461-x86/System.Net.Security.dll", | ||
| 444 | - "tools/net461-x86/System.Net.Sockets.dll", | ||
| 445 | - "tools/net461-x86/System.Net.WebHeaderCollection.dll", | ||
| 446 | - "tools/net461-x86/System.Net.WebSockets.Client.dll", | ||
| 447 | - "tools/net461-x86/System.Net.WebSockets.dll", | ||
| 448 | - "tools/net461-x86/System.Numerics.Vectors.dll", | ||
| 449 | - "tools/net461-x86/System.ObjectModel.dll", | ||
| 450 | - "tools/net461-x86/System.Reflection.Extensions.dll", | ||
| 451 | - "tools/net461-x86/System.Reflection.Primitives.dll", | ||
| 452 | - "tools/net461-x86/System.Reflection.dll", | ||
| 453 | - "tools/net461-x86/System.Resources.Reader.dll", | ||
| 454 | - "tools/net461-x86/System.Resources.ResourceManager.dll", | ||
| 455 | - "tools/net461-x86/System.Resources.Writer.dll", | ||
| 456 | - "tools/net461-x86/System.Runtime.CompilerServices.Unsafe.dll", | ||
| 457 | - "tools/net461-x86/System.Runtime.CompilerServices.VisualC.dll", | ||
| 458 | - "tools/net461-x86/System.Runtime.Extensions.dll", | ||
| 459 | - "tools/net461-x86/System.Runtime.Handles.dll", | ||
| 460 | - "tools/net461-x86/System.Runtime.InteropServices.RuntimeInformation.dll", | ||
| 461 | - "tools/net461-x86/System.Runtime.InteropServices.dll", | ||
| 462 | - "tools/net461-x86/System.Runtime.Numerics.dll", | ||
| 463 | - "tools/net461-x86/System.Runtime.Serialization.Formatters.dll", | ||
| 464 | - "tools/net461-x86/System.Runtime.Serialization.Json.dll", | ||
| 465 | - "tools/net461-x86/System.Runtime.Serialization.Primitives.dll", | ||
| 466 | - "tools/net461-x86/System.Runtime.Serialization.Xml.dll", | ||
| 467 | - "tools/net461-x86/System.Runtime.dll", | ||
| 468 | - "tools/net461-x86/System.Security.Claims.dll", | ||
| 469 | - "tools/net461-x86/System.Security.Cryptography.Algorithms.dll", | ||
| 470 | - "tools/net461-x86/System.Security.Cryptography.Csp.dll", | ||
| 471 | - "tools/net461-x86/System.Security.Cryptography.Encoding.dll", | ||
| 472 | - "tools/net461-x86/System.Security.Cryptography.Primitives.dll", | ||
| 473 | - "tools/net461-x86/System.Security.Cryptography.X509Certificates.dll", | ||
| 474 | - "tools/net461-x86/System.Security.Principal.dll", | ||
| 475 | - "tools/net461-x86/System.Security.SecureString.dll", | ||
| 476 | - "tools/net461-x86/System.Text.Encoding.Extensions.dll", | ||
| 477 | - "tools/net461-x86/System.Text.Encoding.dll", | ||
| 478 | - "tools/net461-x86/System.Text.RegularExpressions.dll", | ||
| 479 | - "tools/net461-x86/System.Threading.Overlapped.dll", | ||
| 480 | - "tools/net461-x86/System.Threading.Tasks.Parallel.dll", | ||
| 481 | - "tools/net461-x86/System.Threading.Tasks.dll", | ||
| 482 | - "tools/net461-x86/System.Threading.Thread.dll", | ||
| 483 | - "tools/net461-x86/System.Threading.ThreadPool.dll", | ||
| 484 | - "tools/net461-x86/System.Threading.Timer.dll", | ||
| 485 | - "tools/net461-x86/System.Threading.dll", | ||
| 486 | - "tools/net461-x86/System.ValueTuple.dll", | ||
| 487 | - "tools/net461-x86/System.Xml.ReaderWriter.dll", | ||
| 488 | - "tools/net461-x86/System.Xml.XDocument.dll", | ||
| 489 | - "tools/net461-x86/System.Xml.XPath.XDocument.dll", | ||
| 490 | - "tools/net461-x86/System.Xml.XPath.dll", | ||
| 491 | - "tools/net461-x86/System.Xml.XmlDocument.dll", | ||
| 492 | - "tools/net461-x86/System.Xml.XmlSerializer.dll", | ||
| 493 | - "tools/net461-x86/netstandard.dll", | ||
| 494 | - "tools/net461/GetDocument.Insider.exe", | ||
| 495 | - "tools/net461/GetDocument.Insider.exe.config", | ||
| 496 | - "tools/net461/Microsoft.Win32.Primitives.dll", | ||
| 497 | - "tools/net461/System.AppContext.dll", | ||
| 498 | - "tools/net461/System.Buffers.dll", | ||
| 499 | - "tools/net461/System.Collections.Concurrent.dll", | ||
| 500 | - "tools/net461/System.Collections.NonGeneric.dll", | ||
| 501 | - "tools/net461/System.Collections.Specialized.dll", | ||
| 502 | - "tools/net461/System.Collections.dll", | ||
| 503 | - "tools/net461/System.ComponentModel.EventBasedAsync.dll", | ||
| 504 | - "tools/net461/System.ComponentModel.Primitives.dll", | ||
| 505 | - "tools/net461/System.ComponentModel.TypeConverter.dll", | ||
| 506 | - "tools/net461/System.ComponentModel.dll", | ||
| 507 | - "tools/net461/System.Console.dll", | ||
| 508 | - "tools/net461/System.Data.Common.dll", | ||
| 509 | - "tools/net461/System.Diagnostics.Contracts.dll", | ||
| 510 | - "tools/net461/System.Diagnostics.Debug.dll", | ||
| 511 | - "tools/net461/System.Diagnostics.DiagnosticSource.dll", | ||
| 512 | - "tools/net461/System.Diagnostics.FileVersionInfo.dll", | ||
| 513 | - "tools/net461/System.Diagnostics.Process.dll", | ||
| 514 | - "tools/net461/System.Diagnostics.StackTrace.dll", | ||
| 515 | - "tools/net461/System.Diagnostics.TextWriterTraceListener.dll", | ||
| 516 | - "tools/net461/System.Diagnostics.Tools.dll", | ||
| 517 | - "tools/net461/System.Diagnostics.TraceSource.dll", | ||
| 518 | - "tools/net461/System.Diagnostics.Tracing.dll", | ||
| 519 | - "tools/net461/System.Drawing.Primitives.dll", | ||
| 520 | - "tools/net461/System.Dynamic.Runtime.dll", | ||
| 521 | - "tools/net461/System.Globalization.Calendars.dll", | ||
| 522 | - "tools/net461/System.Globalization.Extensions.dll", | ||
| 523 | - "tools/net461/System.Globalization.dll", | ||
| 524 | - "tools/net461/System.IO.Compression.ZipFile.dll", | ||
| 525 | - "tools/net461/System.IO.Compression.dll", | ||
| 526 | - "tools/net461/System.IO.FileSystem.DriveInfo.dll", | ||
| 527 | - "tools/net461/System.IO.FileSystem.Primitives.dll", | ||
| 528 | - "tools/net461/System.IO.FileSystem.Watcher.dll", | ||
| 529 | - "tools/net461/System.IO.FileSystem.dll", | ||
| 530 | - "tools/net461/System.IO.IsolatedStorage.dll", | ||
| 531 | - "tools/net461/System.IO.MemoryMappedFiles.dll", | ||
| 532 | - "tools/net461/System.IO.Pipes.dll", | ||
| 533 | - "tools/net461/System.IO.UnmanagedMemoryStream.dll", | ||
| 534 | - "tools/net461/System.IO.dll", | ||
| 535 | - "tools/net461/System.Linq.Expressions.dll", | ||
| 536 | - "tools/net461/System.Linq.Parallel.dll", | ||
| 537 | - "tools/net461/System.Linq.Queryable.dll", | ||
| 538 | - "tools/net461/System.Linq.dll", | ||
| 539 | - "tools/net461/System.Memory.dll", | ||
| 540 | - "tools/net461/System.Net.Http.dll", | ||
| 541 | - "tools/net461/System.Net.NameResolution.dll", | ||
| 542 | - "tools/net461/System.Net.NetworkInformation.dll", | ||
| 543 | - "tools/net461/System.Net.Ping.dll", | ||
| 544 | - "tools/net461/System.Net.Primitives.dll", | ||
| 545 | - "tools/net461/System.Net.Requests.dll", | ||
| 546 | - "tools/net461/System.Net.Security.dll", | ||
| 547 | - "tools/net461/System.Net.Sockets.dll", | ||
| 548 | - "tools/net461/System.Net.WebHeaderCollection.dll", | ||
| 549 | - "tools/net461/System.Net.WebSockets.Client.dll", | ||
| 550 | - "tools/net461/System.Net.WebSockets.dll", | ||
| 551 | - "tools/net461/System.Numerics.Vectors.dll", | ||
| 552 | - "tools/net461/System.ObjectModel.dll", | ||
| 553 | - "tools/net461/System.Reflection.Extensions.dll", | ||
| 554 | - "tools/net461/System.Reflection.Primitives.dll", | ||
| 555 | - "tools/net461/System.Reflection.dll", | ||
| 556 | - "tools/net461/System.Resources.Reader.dll", | ||
| 557 | - "tools/net461/System.Resources.ResourceManager.dll", | ||
| 558 | - "tools/net461/System.Resources.Writer.dll", | ||
| 559 | - "tools/net461/System.Runtime.CompilerServices.Unsafe.dll", | ||
| 560 | - "tools/net461/System.Runtime.CompilerServices.VisualC.dll", | ||
| 561 | - "tools/net461/System.Runtime.Extensions.dll", | ||
| 562 | - "tools/net461/System.Runtime.Handles.dll", | ||
| 563 | - "tools/net461/System.Runtime.InteropServices.RuntimeInformation.dll", | ||
| 564 | - "tools/net461/System.Runtime.InteropServices.dll", | ||
| 565 | - "tools/net461/System.Runtime.Numerics.dll", | ||
| 566 | - "tools/net461/System.Runtime.Serialization.Formatters.dll", | ||
| 567 | - "tools/net461/System.Runtime.Serialization.Json.dll", | ||
| 568 | - "tools/net461/System.Runtime.Serialization.Primitives.dll", | ||
| 569 | - "tools/net461/System.Runtime.Serialization.Xml.dll", | ||
| 570 | - "tools/net461/System.Runtime.dll", | ||
| 571 | - "tools/net461/System.Security.Claims.dll", | ||
| 572 | - "tools/net461/System.Security.Cryptography.Algorithms.dll", | ||
| 573 | - "tools/net461/System.Security.Cryptography.Csp.dll", | ||
| 574 | - "tools/net461/System.Security.Cryptography.Encoding.dll", | ||
| 575 | - "tools/net461/System.Security.Cryptography.Primitives.dll", | ||
| 576 | - "tools/net461/System.Security.Cryptography.X509Certificates.dll", | ||
| 577 | - "tools/net461/System.Security.Principal.dll", | ||
| 578 | - "tools/net461/System.Security.SecureString.dll", | ||
| 579 | - "tools/net461/System.Text.Encoding.Extensions.dll", | ||
| 580 | - "tools/net461/System.Text.Encoding.dll", | ||
| 581 | - "tools/net461/System.Text.RegularExpressions.dll", | ||
| 582 | - "tools/net461/System.Threading.Overlapped.dll", | ||
| 583 | - "tools/net461/System.Threading.Tasks.Parallel.dll", | ||
| 584 | - "tools/net461/System.Threading.Tasks.dll", | ||
| 585 | - "tools/net461/System.Threading.Thread.dll", | ||
| 586 | - "tools/net461/System.Threading.ThreadPool.dll", | ||
| 587 | - "tools/net461/System.Threading.Timer.dll", | ||
| 588 | - "tools/net461/System.Threading.dll", | ||
| 589 | - "tools/net461/System.ValueTuple.dll", | ||
| 590 | - "tools/net461/System.Xml.ReaderWriter.dll", | ||
| 591 | - "tools/net461/System.Xml.XDocument.dll", | ||
| 592 | - "tools/net461/System.Xml.XPath.XDocument.dll", | ||
| 593 | - "tools/net461/System.Xml.XPath.dll", | ||
| 594 | - "tools/net461/System.Xml.XmlDocument.dll", | ||
| 595 | - "tools/net461/System.Xml.XmlSerializer.dll", | ||
| 596 | - "tools/net461/netstandard.dll", | ||
| 597 | - "tools/netcoreapp2.1/GetDocument.Insider.deps.json", | ||
| 598 | - "tools/netcoreapp2.1/GetDocument.Insider.dll", | ||
| 599 | - "tools/netcoreapp2.1/GetDocument.Insider.runtimeconfig.json", | ||
| 600 | - "tools/netcoreapp2.1/System.Diagnostics.DiagnosticSource.dll" | ||
| 601 | - ] | ||
| 602 | - }, | ||
| 603 | - "Microsoft.Extensions.DependencyInjection/8.0.0": { | ||
| 604 | - "sha512": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==", | ||
| 605 | - "type": "package", | ||
| 606 | - "path": "microsoft.extensions.dependencyinjection/8.0.0", | ||
| 607 | - "files": [ | ||
| 608 | - ".nupkg.metadata", | ||
| 609 | - ".signature.p7s", | ||
| 610 | - "Icon.png", | ||
| 611 | - "LICENSE.TXT", | ||
| 612 | - "PACKAGE.md", | ||
| 613 | - "THIRD-PARTY-NOTICES.TXT", | ||
| 614 | - "buildTransitive/net461/Microsoft.Extensions.DependencyInjection.targets", | ||
| 615 | - "buildTransitive/net462/_._", | ||
| 616 | - "buildTransitive/net6.0/_._", | ||
| 617 | - "buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.targets", | ||
| 618 | - "lib/net462/Microsoft.Extensions.DependencyInjection.dll", | ||
| 619 | - "lib/net462/Microsoft.Extensions.DependencyInjection.xml", | ||
| 620 | - "lib/net6.0/Microsoft.Extensions.DependencyInjection.dll", | ||
| 621 | - "lib/net6.0/Microsoft.Extensions.DependencyInjection.xml", | ||
| 622 | - "lib/net7.0/Microsoft.Extensions.DependencyInjection.dll", | ||
| 623 | - "lib/net7.0/Microsoft.Extensions.DependencyInjection.xml", | ||
| 624 | - "lib/net8.0/Microsoft.Extensions.DependencyInjection.dll", | ||
| 625 | - "lib/net8.0/Microsoft.Extensions.DependencyInjection.xml", | ||
| 626 | - "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.dll", | ||
| 627 | - "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.xml", | ||
| 628 | - "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.dll", | ||
| 629 | - "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.xml", | ||
| 630 | - "microsoft.extensions.dependencyinjection.8.0.0.nupkg.sha512", | ||
| 631 | - "microsoft.extensions.dependencyinjection.nuspec", | ||
| 632 | - "useSharedDesignerContext.txt" | ||
| 633 | - ] | ||
| 634 | - }, | ||
| 635 | - "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": { | ||
| 636 | - "sha512": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==", | ||
| 637 | - "type": "package", | ||
| 638 | - "path": "microsoft.extensions.dependencyinjection.abstractions/8.0.0", | ||
| 639 | - "files": [ | ||
| 640 | - ".nupkg.metadata", | ||
| 641 | - ".signature.p7s", | ||
| 642 | - "Icon.png", | ||
| 643 | - "LICENSE.TXT", | ||
| 644 | - "PACKAGE.md", | ||
| 645 | - "THIRD-PARTY-NOTICES.TXT", | ||
| 646 | - "buildTransitive/net461/Microsoft.Extensions.DependencyInjection.Abstractions.targets", | ||
| 647 | - "buildTransitive/net462/_._", | ||
| 648 | - "buildTransitive/net6.0/_._", | ||
| 649 | - "buildTransitive/netcoreapp2.0/Microsoft.Extensions.DependencyInjection.Abstractions.targets", | ||
| 650 | - "lib/net462/Microsoft.Extensions.DependencyInjection.Abstractions.dll", | ||
| 651 | - "lib/net462/Microsoft.Extensions.DependencyInjection.Abstractions.xml", | ||
| 652 | - "lib/net6.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", | ||
| 653 | - "lib/net6.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", | ||
| 654 | - "lib/net7.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", | ||
| 655 | - "lib/net7.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", | ||
| 656 | - "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", | ||
| 657 | - "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", | ||
| 658 | - "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll", | ||
| 659 | - "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", | ||
| 660 | - "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.dll", | ||
| 661 | - "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.xml", | ||
| 662 | - "microsoft.extensions.dependencyinjection.abstractions.8.0.0.nupkg.sha512", | ||
| 663 | - "microsoft.extensions.dependencyinjection.abstractions.nuspec", | ||
| 664 | - "useSharedDesignerContext.txt" | ||
| 665 | - ] | ||
| 666 | - }, | ||
| 667 | - "Microsoft.OpenApi/1.2.3": { | ||
| 668 | - "sha512": "Nug3rO+7Kl5/SBAadzSMAVgqDlfGjJZ0GenQrLywJ84XGKO0uRqkunz5Wyl0SDwcR71bAATXvSdbdzPrYRYKGw==", | ||
| 669 | - "type": "package", | ||
| 670 | - "path": "microsoft.openapi/1.2.3", | ||
| 671 | - "files": [ | ||
| 672 | - ".nupkg.metadata", | ||
| 673 | - ".signature.p7s", | ||
| 674 | - "lib/net46/Microsoft.OpenApi.dll", | ||
| 675 | - "lib/net46/Microsoft.OpenApi.pdb", | ||
| 676 | - "lib/net46/Microsoft.OpenApi.xml", | ||
| 677 | - "lib/netstandard2.0/Microsoft.OpenApi.dll", | ||
| 678 | - "lib/netstandard2.0/Microsoft.OpenApi.pdb", | ||
| 679 | - "lib/netstandard2.0/Microsoft.OpenApi.xml", | ||
| 680 | - "microsoft.openapi.1.2.3.nupkg.sha512", | ||
| 681 | - "microsoft.openapi.nuspec" | ||
| 682 | - ] | ||
| 683 | - }, | ||
| 684 | - "Stub.System.Data.SQLite.Core.NetStandard/1.0.115.5": { | ||
| 685 | - "sha512": "WfrqQg6WL+r4H1sVKTenNj6ERLXUukUxqcjH1rqPqXadeIWccTVpydESieD7cZ/NWQVSKLYIHuoBX5du+BFhIQ==", | ||
| 686 | - "type": "package", | ||
| 687 | - "path": "stub.system.data.sqlite.core.netstandard/1.0.115.5", | ||
| 688 | - "files": [ | ||
| 689 | - ".nupkg.metadata", | ||
| 690 | - ".signature.p7s", | ||
| 691 | - "lib/netstandard2.0/System.Data.SQLite.dll", | ||
| 692 | - "lib/netstandard2.0/System.Data.SQLite.dll.altconfig", | ||
| 693 | - "lib/netstandard2.0/System.Data.SQLite.xml", | ||
| 694 | - "lib/netstandard2.1/System.Data.SQLite.dll", | ||
| 695 | - "lib/netstandard2.1/System.Data.SQLite.dll.altconfig", | ||
| 696 | - "lib/netstandard2.1/System.Data.SQLite.xml", | ||
| 697 | - "runtimes/linux-x64/native/SQLite.Interop.dll", | ||
| 698 | - "runtimes/osx-x64/native/SQLite.Interop.dll", | ||
| 699 | - "runtimes/win-x64/native/SQLite.Interop.dll", | ||
| 700 | - "runtimes/win-x86/native/SQLite.Interop.dll", | ||
| 701 | - "stub.system.data.sqlite.core.netstandard.1.0.115.5.nupkg.sha512", | ||
| 702 | - "stub.system.data.sqlite.core.netstandard.nuspec" | ||
| 703 | - ] | ||
| 704 | - }, | ||
| 705 | - "Swashbuckle.AspNetCore/6.4.0": { | ||
| 706 | - "sha512": "eUBr4TW0up6oKDA5Xwkul289uqSMgY0xGN4pnbOIBqCcN9VKGGaPvHX3vWaG/hvocfGDP+MGzMA0bBBKz2fkmQ==", | ||
| 707 | - "type": "package", | ||
| 708 | - "path": "swashbuckle.aspnetcore/6.4.0", | ||
| 709 | - "files": [ | ||
| 710 | - ".nupkg.metadata", | ||
| 711 | - ".signature.p7s", | ||
| 712 | - "build/Swashbuckle.AspNetCore.props", | ||
| 713 | - "swashbuckle.aspnetcore.6.4.0.nupkg.sha512", | ||
| 714 | - "swashbuckle.aspnetcore.nuspec" | ||
| 715 | - ] | ||
| 716 | - }, | ||
| 717 | - "Swashbuckle.AspNetCore.Swagger/6.4.0": { | ||
| 718 | - "sha512": "nl4SBgGM+cmthUcpwO/w1lUjevdDHAqRvfUoe4Xp/Uvuzt9mzGUwyFCqa3ODBAcZYBiFoKvrYwz0rabslJvSmQ==", | ||
| 719 | - "type": "package", | ||
| 720 | - "path": "swashbuckle.aspnetcore.swagger/6.4.0", | ||
| 721 | - "files": [ | ||
| 722 | - ".nupkg.metadata", | ||
| 723 | - ".signature.p7s", | ||
| 724 | - "lib/net5.0/Swashbuckle.AspNetCore.Swagger.dll", | ||
| 725 | - "lib/net5.0/Swashbuckle.AspNetCore.Swagger.pdb", | ||
| 726 | - "lib/net5.0/Swashbuckle.AspNetCore.Swagger.xml", | ||
| 727 | - "lib/net6.0/Swashbuckle.AspNetCore.Swagger.dll", | ||
| 728 | - "lib/net6.0/Swashbuckle.AspNetCore.Swagger.pdb", | ||
| 729 | - "lib/net6.0/Swashbuckle.AspNetCore.Swagger.xml", | ||
| 730 | - "lib/netcoreapp3.0/Swashbuckle.AspNetCore.Swagger.dll", | ||
| 731 | - "lib/netcoreapp3.0/Swashbuckle.AspNetCore.Swagger.pdb", | ||
| 732 | - "lib/netcoreapp3.0/Swashbuckle.AspNetCore.Swagger.xml", | ||
| 733 | - "lib/netstandard2.0/Swashbuckle.AspNetCore.Swagger.dll", | ||
| 734 | - "lib/netstandard2.0/Swashbuckle.AspNetCore.Swagger.pdb", | ||
| 735 | - "lib/netstandard2.0/Swashbuckle.AspNetCore.Swagger.xml", | ||
| 736 | - "swashbuckle.aspnetcore.swagger.6.4.0.nupkg.sha512", | ||
| 737 | - "swashbuckle.aspnetcore.swagger.nuspec" | ||
| 738 | - ] | ||
| 739 | - }, | ||
| 740 | - "Swashbuckle.AspNetCore.SwaggerGen/6.4.0": { | ||
| 741 | - "sha512": "lXhcUBVqKrPFAQF7e/ZeDfb5PMgE8n5t6L5B6/BQSpiwxgHzmBcx8Msu42zLYFTvR5PIqE9Q9lZvSQAcwCxJjw==", | ||
| 742 | - "type": "package", | ||
| 743 | - "path": "swashbuckle.aspnetcore.swaggergen/6.4.0", | ||
| 744 | - "files": [ | ||
| 745 | - ".nupkg.metadata", | ||
| 746 | - ".signature.p7s", | ||
| 747 | - "lib/net5.0/Swashbuckle.AspNetCore.SwaggerGen.dll", | ||
| 748 | - "lib/net5.0/Swashbuckle.AspNetCore.SwaggerGen.pdb", | ||
| 749 | - "lib/net5.0/Swashbuckle.AspNetCore.SwaggerGen.xml", | ||
| 750 | - "lib/net6.0/Swashbuckle.AspNetCore.SwaggerGen.dll", | ||
| 751 | - "lib/net6.0/Swashbuckle.AspNetCore.SwaggerGen.pdb", | ||
| 752 | - "lib/net6.0/Swashbuckle.AspNetCore.SwaggerGen.xml", | ||
| 753 | - "lib/netcoreapp3.0/Swashbuckle.AspNetCore.SwaggerGen.dll", | ||
| 754 | - "lib/netcoreapp3.0/Swashbuckle.AspNetCore.SwaggerGen.pdb", | ||
| 755 | - "lib/netcoreapp3.0/Swashbuckle.AspNetCore.SwaggerGen.xml", | ||
| 756 | - "lib/netstandard2.0/Swashbuckle.AspNetCore.SwaggerGen.dll", | ||
| 757 | - "lib/netstandard2.0/Swashbuckle.AspNetCore.SwaggerGen.pdb", | ||
| 758 | - "lib/netstandard2.0/Swashbuckle.AspNetCore.SwaggerGen.xml", | ||
| 759 | - "swashbuckle.aspnetcore.swaggergen.6.4.0.nupkg.sha512", | ||
| 760 | - "swashbuckle.aspnetcore.swaggergen.nuspec" | ||
| 761 | - ] | ||
| 762 | - }, | ||
| 763 | - "Swashbuckle.AspNetCore.SwaggerUI/6.4.0": { | ||
| 764 | - "sha512": "1Hh3atb3pi8c+v7n4/3N80Jj8RvLOXgWxzix6w3OZhB7zBGRwsy7FWr4e3hwgPweSBpwfElqj4V4nkjYabH9nQ==", | ||
| 765 | - "type": "package", | ||
| 766 | - "path": "swashbuckle.aspnetcore.swaggerui/6.4.0", | ||
| 767 | - "files": [ | ||
| 768 | - ".nupkg.metadata", | ||
| 769 | - ".signature.p7s", | ||
| 770 | - "lib/net5.0/Swashbuckle.AspNetCore.SwaggerUI.dll", | ||
| 771 | - "lib/net5.0/Swashbuckle.AspNetCore.SwaggerUI.pdb", | ||
| 772 | - "lib/net5.0/Swashbuckle.AspNetCore.SwaggerUI.xml", | ||
| 773 | - "lib/net6.0/Swashbuckle.AspNetCore.SwaggerUI.dll", | ||
| 774 | - "lib/net6.0/Swashbuckle.AspNetCore.SwaggerUI.pdb", | ||
| 775 | - "lib/net6.0/Swashbuckle.AspNetCore.SwaggerUI.xml", | ||
| 776 | - "lib/netcoreapp3.0/Swashbuckle.AspNetCore.SwaggerUI.dll", | ||
| 777 | - "lib/netcoreapp3.0/Swashbuckle.AspNetCore.SwaggerUI.pdb", | ||
| 778 | - "lib/netcoreapp3.0/Swashbuckle.AspNetCore.SwaggerUI.xml", | ||
| 779 | - "lib/netstandard2.0/Swashbuckle.AspNetCore.SwaggerUI.dll", | ||
| 780 | - "lib/netstandard2.0/Swashbuckle.AspNetCore.SwaggerUI.pdb", | ||
| 781 | - "lib/netstandard2.0/Swashbuckle.AspNetCore.SwaggerUI.xml", | ||
| 782 | - "swashbuckle.aspnetcore.swaggerui.6.4.0.nupkg.sha512", | ||
| 783 | - "swashbuckle.aspnetcore.swaggerui.nuspec" | ||
| 784 | - ] | ||
| 785 | - }, | ||
| 786 | - "System.Data.SQLite.Core/1.0.115.5": { | ||
| 787 | - "sha512": "vADIqqgpxaC5xR6qOV8/KMZkQeSDCfmmWpVOtQx0oEr3Yjq2XdTxX7+jfE4+oO2xPovAbYiz6Q5cLRbSsDkq6Q==", | ||
| 788 | - "type": "package", | ||
| 789 | - "path": "system.data.sqlite.core/1.0.115.5", | ||
| 790 | - "files": [ | ||
| 791 | - ".nupkg.metadata", | ||
| 792 | - ".signature.p7s", | ||
| 793 | - "system.data.sqlite.core.1.0.115.5.nupkg.sha512", | ||
| 794 | - "system.data.sqlite.core.nuspec" | ||
| 795 | - ] | ||
| 796 | - } | ||
| 797 | - }, | ||
| 798 | - "projectFileDependencyGroups": { | ||
| 799 | - "net8.0": [ | ||
| 800 | - "FreeSql >= 3.2.821", | ||
| 801 | - "FreeSql.Provider.Sqlite >= 3.2.821", | ||
| 802 | - "FreeSql.Repository >= 3.2.821", | ||
| 803 | - "Swashbuckle.AspNetCore >= 6.4.0" | ||
| 804 | - ] | ||
| 805 | - }, | ||
| 806 | - "packageFolders": { | ||
| 807 | - "C:\\Users\\anan\\.nuget\\packages\\": {}, | ||
| 808 | - "C:\\Users\\anan\\AppData\\Roaming\\Godot\\mono\\GodotNuGetFallbackFolder": {}, | ||
| 809 | - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {} | ||
| 810 | - }, | ||
| 811 | - "project": { | ||
| 812 | - "version": "1.0.0", | ||
| 813 | - "restore": { | ||
| 814 | - "projectUniqueName": "E:\\Code\\Blueprint\\Blueprint.Net.Server\\Blueprint.Net.Server.csproj", | ||
| 815 | - "projectName": "Blueprint.Net.Server", | ||
| 816 | - "projectPath": "E:\\Code\\Blueprint\\Blueprint.Net.Server\\Blueprint.Net.Server.csproj", | ||
| 817 | - "packagesPath": "C:\\Users\\anan\\.nuget\\packages\\", | ||
| 818 | - "outputPath": "E:\\Code\\Blueprint\\Blueprint.Net.Server\\obj\\", | ||
| 819 | - "projectStyle": "PackageReference", | ||
| 820 | - "fallbackFolders": [ | ||
| 821 | - "C:\\Users\\anan\\AppData\\Roaming\\Godot\\mono\\GodotNuGetFallbackFolder", | ||
| 822 | - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" | ||
| 823 | - ], | ||
| 824 | - "configFilePaths": [ | ||
| 825 | - "C:\\Users\\anan\\AppData\\Roaming\\NuGet\\NuGet.Config", | ||
| 826 | - "C:\\Users\\anan\\AppData\\Roaming\\NuGet\\config\\Godot.Offline.Config", | ||
| 827 | - "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", | ||
| 828 | - "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" | ||
| 829 | - ], | ||
| 830 | - "originalTargetFrameworks": [ | ||
| 831 | - "net8.0" | ||
| 832 | - ], | ||
| 833 | - "sources": { | ||
| 834 | - "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, | ||
| 835 | - "C:\\Program Files\\dotnet\\library-packs": {}, | ||
| 836 | - "https://api.nuget.org/v3/index.json": {} | ||
| 837 | - }, | ||
| 838 | - "frameworks": { | ||
| 839 | - "net8.0": { | ||
| 840 | - "targetAlias": "net8.0", | ||
| 841 | - "projectReferences": {} | ||
| 842 | - } | ||
| 843 | - }, | ||
| 844 | - "warningProperties": { | ||
| 845 | - "warnAsError": [ | ||
| 846 | - "NU1605" | ||
| 847 | - ] | ||
| 848 | - }, | ||
| 849 | - "restoreAuditProperties": { | ||
| 850 | - "enableAudit": "true", | ||
| 851 | - "auditLevel": "low", | ||
| 852 | - "auditMode": "direct" | ||
| 853 | - } | ||
| 854 | - }, | ||
| 855 | - "frameworks": { | ||
| 856 | - "net8.0": { | ||
| 857 | - "targetAlias": "net8.0", | ||
| 858 | - "dependencies": { | ||
| 859 | - "FreeSql": { | ||
| 860 | - "target": "Package", | ||
| 861 | - "version": "[3.2.821, )" | ||
| 862 | - }, | ||
| 863 | - "FreeSql.Provider.Sqlite": { | ||
| 864 | - "target": "Package", | ||
| 865 | - "version": "[3.2.821, )" | ||
| 866 | - }, | ||
| 867 | - "FreeSql.Repository": { | ||
| 868 | - "target": "Package", | ||
| 869 | - "version": "[3.2.821, )" | ||
| 870 | - }, | ||
| 871 | - "Swashbuckle.AspNetCore": { | ||
| 872 | - "target": "Package", | ||
| 873 | - "version": "[6.4.0, )" | ||
| 874 | - } | ||
| 875 | - }, | ||
| 876 | - "imports": [ | ||
| 877 | - "net461", | ||
| 878 | - "net462", | ||
| 879 | - "net47", | ||
| 880 | - "net471", | ||
| 881 | - "net472", | ||
| 882 | - "net48", | ||
| 883 | - "net481" | ||
| 884 | - ], | ||
| 885 | - "assetTargetFallback": true, | ||
| 886 | - "warn": true, | ||
| 887 | - "frameworkReferences": { | ||
| 888 | - "Microsoft.AspNetCore.App": { | ||
| 889 | - "privateAssets": "none" | ||
| 890 | - }, | ||
| 891 | - "Microsoft.NETCore.App": { | ||
| 892 | - "privateAssets": "all" | ||
| 893 | - } | ||
| 894 | - }, | ||
| 895 | - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.201/PortableRuntimeIdentifierGraph.json" | ||
| 896 | - } | ||
| 897 | - } | ||
| 898 | - } | ||
| 899 | -} | ||
| 900 | \ No newline at end of file | 0 | \ No newline at end of file |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/project.nuget.cache deleted
100644 → 0
| 1 | -{ | ||
| 2 | - "version": 2, | ||
| 3 | - "dgSpecHash": "DA7OQW1R/bNe9e6/SrjHTvIq5zA0jn0hwqi81cixrmZ4iGKP5aTwTMcL2WpK4pbrz1wFsABnWSUlUdTKp7LCLw==", | ||
| 4 | - "success": true, | ||
| 5 | - "projectFilePath": "E:\\Code\\Blueprint\\Blueprint.Net.Server\\Blueprint.Net.Server.csproj", | ||
| 6 | - "expectedPackageFiles": [ | ||
| 7 | - "C:\\Users\\anan\\.nuget\\packages\\freesql\\3.2.821\\freesql.3.2.821.nupkg.sha512", | ||
| 8 | - "C:\\Users\\anan\\.nuget\\packages\\freesql.dbcontext\\3.2.821\\freesql.dbcontext.3.2.821.nupkg.sha512", | ||
| 9 | - "C:\\Users\\anan\\.nuget\\packages\\freesql.provider.sqlite\\3.2.821\\freesql.provider.sqlite.3.2.821.nupkg.sha512", | ||
| 10 | - "C:\\Users\\anan\\.nuget\\packages\\freesql.repository\\3.2.821\\freesql.repository.3.2.821.nupkg.sha512", | ||
| 11 | - "C:\\Users\\anan\\.nuget\\packages\\microsoft.extensions.apidescription.server\\6.0.5\\microsoft.extensions.apidescription.server.6.0.5.nupkg.sha512", | ||
| 12 | - "C:\\Users\\anan\\.nuget\\packages\\microsoft.extensions.dependencyinjection\\8.0.0\\microsoft.extensions.dependencyinjection.8.0.0.nupkg.sha512", | ||
| 13 | - "C:\\Users\\anan\\.nuget\\packages\\microsoft.extensions.dependencyinjection.abstractions\\8.0.0\\microsoft.extensions.dependencyinjection.abstractions.8.0.0.nupkg.sha512", | ||
| 14 | - "C:\\Users\\anan\\.nuget\\packages\\microsoft.openapi\\1.2.3\\microsoft.openapi.1.2.3.nupkg.sha512", | ||
| 15 | - "C:\\Users\\anan\\.nuget\\packages\\stub.system.data.sqlite.core.netstandard\\1.0.115.5\\stub.system.data.sqlite.core.netstandard.1.0.115.5.nupkg.sha512", | ||
| 16 | - "C:\\Users\\anan\\.nuget\\packages\\swashbuckle.aspnetcore\\6.4.0\\swashbuckle.aspnetcore.6.4.0.nupkg.sha512", | ||
| 17 | - "C:\\Users\\anan\\.nuget\\packages\\swashbuckle.aspnetcore.swagger\\6.4.0\\swashbuckle.aspnetcore.swagger.6.4.0.nupkg.sha512", | ||
| 18 | - "C:\\Users\\anan\\.nuget\\packages\\swashbuckle.aspnetcore.swaggergen\\6.4.0\\swashbuckle.aspnetcore.swaggergen.6.4.0.nupkg.sha512", | ||
| 19 | - "C:\\Users\\anan\\.nuget\\packages\\swashbuckle.aspnetcore.swaggerui\\6.4.0\\swashbuckle.aspnetcore.swaggerui.6.4.0.nupkg.sha512", | ||
| 20 | - "C:\\Users\\anan\\.nuget\\packages\\system.data.sqlite.core\\1.0.115.5\\system.data.sqlite.core.1.0.115.5.nupkg.sha512" | ||
| 21 | - ], | ||
| 22 | - "logs": [] | ||
| 23 | -} | ||
| 24 | \ No newline at end of file | 0 | \ No newline at end of file |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/wwwroot/carddesign.html deleted
100644 → 0
| 1 | -<!DOCTYPE html> | ||
| 2 | -<html lang="en"> | ||
| 3 | -<head> | ||
| 4 | - <meta charset="UTF-8"> | ||
| 5 | - <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||
| 6 | - <title>Card Editor</title> | ||
| 7 | - | ||
| 8 | - | ||
| 9 | - | ||
| 10 | - <style> | ||
| 11 | - body { | ||
| 12 | - font-family: Arial, sans-serif; | ||
| 13 | - } | ||
| 14 | - | ||
| 15 | - .container { | ||
| 16 | - max-width: 800px; | ||
| 17 | - margin: auto; | ||
| 18 | - padding: 20px; | ||
| 19 | - } | ||
| 20 | - | ||
| 21 | - .json-output { | ||
| 22 | - background-color: #f4f4f4; | ||
| 23 | - border: 1px solid #ddd; | ||
| 24 | - padding: 10px; | ||
| 25 | - margin-top: 20px; | ||
| 26 | - } | ||
| 27 | - | ||
| 28 | - input, select, button { | ||
| 29 | - padding: 8px; | ||
| 30 | - margin-top: 5px; | ||
| 31 | - width: 100%; | ||
| 32 | - } | ||
| 33 | - | ||
| 34 | - button { | ||
| 35 | - cursor: pointer; | ||
| 36 | - } | ||
| 37 | - | ||
| 38 | - svg { | ||
| 39 | - background-color: #333; | ||
| 40 | - border: 1px solid #ccc; | ||
| 41 | - padding: 30px; | ||
| 42 | - } | ||
| 43 | - </style> | ||
| 44 | -</head> | ||
| 45 | -<body> | ||
| 46 | - <div class="container"> | ||
| 47 | - <h1>Card Editor</h1> | ||
| 48 | - <form id="cardForm"> | ||
| 49 | - <label for="id">Card ID:</label> | ||
| 50 | - <input type="text" id="id" name="id" required> | ||
| 51 | - | ||
| 52 | - <label for="label">Label:</label> | ||
| 53 | - <input type="text" id="label" name="label" required> | ||
| 54 | - | ||
| 55 | - <label for="type">Type:</label> | ||
| 56 | - <input type="text" id="type" name="type" required> | ||
| 57 | - | ||
| 58 | - <label for="titleBarColor">Title Bar Color (comma-separated):</label> | ||
| 59 | - <input type="text" id="titleBarColor" name="titleBarColor" required> | ||
| 60 | - | ||
| 61 | - <h3>Nodes</h3> | ||
| 62 | - <div id="nodesContainer"> | ||
| 63 | - <!-- Node inputs will be added here --> | ||
| 64 | - </div> | ||
| 65 | - <button type="button" onclick="addNode()">Add Node</button> | ||
| 66 | - <button type="submit">Update Card JSON</button> | ||
| 67 | - </form> | ||
| 68 | - | ||
| 69 | - <div class="json-output" id="jsonOutput"></div> | ||
| 70 | - | ||
| 71 | - <!-- SVG container for drawing the card --> | ||
| 72 | - <svg id="svgContainer" width="200" height="300"></svg> | ||
| 73 | - </div> | ||
| 74 | - | ||
| 75 | - <script type="text/javascript"> | ||
| 76 | - var card = { | ||
| 77 | - id: 'card0', | ||
| 78 | - x: 0, | ||
| 79 | - y: 0, | ||
| 80 | - label: 'Start', | ||
| 81 | - type: "start", | ||
| 82 | - nodes: [{ | ||
| 83 | - type: "out", | ||
| 84 | - level: 0, | ||
| 85 | - label: 'call', | ||
| 86 | - enumType: 'call', | ||
| 87 | - color: '#fff', | ||
| 88 | - multiConnected: 1 | ||
| 89 | - }], | ||
| 90 | - titleBarColor: ['#84fab0', '#8fd3f4'] | ||
| 91 | - }; | ||
| 92 | - | ||
| 93 | - function updateForm() { | ||
| 94 | - document.getElementById('id').value = card.id; | ||
| 95 | - document.getElementById('label').value = card.label; | ||
| 96 | - document.getElementById('type').value = card.type; | ||
| 97 | - document.getElementById('titleBarColor').value = card.titleBarColor.join(', '); | ||
| 98 | - | ||
| 99 | - const nodesContainer = document.getElementById('nodesContainer'); | ||
| 100 | - nodesContainer.innerHTML = ''; | ||
| 101 | - card.nodes.forEach((node, index) => { | ||
| 102 | - addNode(node, index); | ||
| 103 | - }); | ||
| 104 | - } | ||
| 105 | - | ||
| 106 | - function addNode(node = {}, index = card.nodes.length) { | ||
| 107 | - const container = document.createElement('div'); | ||
| 108 | - container.innerHTML = ` | ||
| 109 | - <label>Node ${index + 1}</label> | ||
| 110 | - <select name="nodeType-${index}"> | ||
| 111 | - <option value="in" ${node.type === 'in' ? 'selected' : ''}>In</option> | ||
| 112 | - <option value="out" ${node.type === 'out' ? 'selected' : ''}>Out</option> | ||
| 113 | - </select> | ||
| 114 | - <input type="number" placeholder="Level" value="${node.level || 0}" name="nodeLevel-${index}"> | ||
| 115 | - <input type="text" placeholder="Enum Type" value="${node.enumType || ''}" name="nodeEnumType-${index}"> | ||
| 116 | - <input type="text" placeholder="Label" value="${node.label || ''}" name="nodeLabel-${index}"> | ||
| 117 | - <input type="text" placeholder="Color" value="${node.color || ''}" name="nodeColor-${index}"> | ||
| 118 | - <input type="number" placeholder="Multi Connected" value="${node.multiConnected || 0}" name="nodeMultiConnected-${index}"> | ||
| 119 | - <button type="button" onclick="removeNode(${index})">Remove Node</button> | ||
| 120 | - `; | ||
| 121 | - document.getElementById('nodesContainer').appendChild(container); | ||
| 122 | - } | ||
| 123 | - | ||
| 124 | - function removeNode(index) { | ||
| 125 | - card.nodes.splice(index, 1); | ||
| 126 | - updateForm(); // Refresh the form and JSON output | ||
| 127 | - drawCard(); | ||
| 128 | - } | ||
| 129 | - | ||
| 130 | - document.getElementById('cardForm').onsubmit = function (event) { | ||
| 131 | - event.preventDefault(); | ||
| 132 | - card.id = document.getElementById('id').value; | ||
| 133 | - card.label = document.getElementById('label').value; | ||
| 134 | - card.type = document.getElementById('type').value; | ||
| 135 | - card.titleBarColor = document.getElementById('titleBarColor').value.split(',').map(color => color.trim()); | ||
| 136 | - | ||
| 137 | - card.nodes = []; | ||
| 138 | - const nodes = document.querySelectorAll('#nodesContainer > div'); | ||
| 139 | - nodes.forEach((node, index) => { | ||
| 140 | - card.nodes.push({ | ||
| 141 | - type: document.querySelector(`[name="nodeType-${index}"]`).value, | ||
| 142 | - level: parseInt(document.querySelector(`[name="nodeLevel-${index}"]`).value), | ||
| 143 | - enumType: document.querySelector(`[name="nodeEnumType-${index}"]`).value, | ||
| 144 | - label: document.querySelector(`[name="nodeLabel-${index}"]`).value, | ||
| 145 | - color: document.querySelector(`[name="nodeColor-${index}"]`).value, | ||
| 146 | - multiConnected: parseInt(document.querySelector(`[name="nodeMultiConnected-${index}"]`).value) | ||
| 147 | - }); | ||
| 148 | - }); | ||
| 149 | - | ||
| 150 | - updateJSONOutput(); | ||
| 151 | - drawCard(); | ||
| 152 | - }; | ||
| 153 | - | ||
| 154 | - function updateJSONOutput() { | ||
| 155 | - document.getElementById('jsonOutput').textContent = JSON.stringify(card, null, 2); | ||
| 156 | - } | ||
| 157 | - | ||
| 158 | - function drawCard() { | ||
| 159 | - const cardsContainer = document.getElementById('svgContainer'); | ||
| 160 | - cardsContainer.innerHTML = ''; // 清除现有的卡片 | ||
| 161 | - | ||
| 162 | - //创建标题栏渐变色 | ||
| 163 | - const defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs'); | ||
| 164 | - const linearGradient = document.createElementNS('http://www.w3.org/2000/svg', 'linearGradient'); | ||
| 165 | - linearGradient.setAttribute('id', `titleGradient-${card.id}`); | ||
| 166 | - linearGradient.setAttribute('x1', '0%'); // 渐变起点的x坐标 | ||
| 167 | - linearGradient.setAttribute('y1', '100%'); // 渐变起点的y坐标 | ||
| 168 | - linearGradient.setAttribute('x2', '100%'); // 渐变终点的x坐标 | ||
| 169 | - linearGradient.setAttribute('y2', '0%'); // 渐变终点的y坐标 | ||
| 170 | - | ||
| 171 | - const stop1 = document.createElementNS('http://www.w3.org/2000/svg', 'stop'); | ||
| 172 | - stop1.setAttribute('offset', '10%'); | ||
| 173 | - stop1.setAttribute('style', `stop-color: ${card.titleBarColor[0]}; stop-opacity: 1`); | ||
| 174 | - linearGradient.appendChild(stop1); | ||
| 175 | - | ||
| 176 | - const stop2 = document.createElementNS('http://www.w3.org/2000/svg', 'stop'); | ||
| 177 | - stop2.setAttribute('offset', '100%'); | ||
| 178 | - stop2.setAttribute('style', `stop-color: ${card.titleBarColor[1]}; stop-opacity: 1`); | ||
| 179 | - linearGradient.appendChild(stop2); | ||
| 180 | - | ||
| 181 | - defs.appendChild(linearGradient); | ||
| 182 | - cardsContainer.appendChild(defs); | ||
| 183 | - | ||
| 184 | - | ||
| 185 | - | ||
| 186 | - const nodeSpacing = 50; | ||
| 187 | - const topBottomPadding = 20; | ||
| 188 | - const titleBarHeight = 30; // 标题栏高度 | ||
| 189 | - const maxLevel = Math.max(...card.nodes.map(node => node.level)) + 1; | ||
| 190 | - const cardHeight = maxLevel * nodeSpacing + topBottomPadding * 2 + titleBarHeight; | ||
| 191 | - | ||
| 192 | - const group = document.createElementNS('http://www.w3.org/2000/svg', 'g'); | ||
| 193 | - group.setAttribute('class', 'draggable card-container'); | ||
| 194 | - group.setAttribute('data-id', card.id); | ||
| 195 | - group.setAttribute('user-select', 'none'); | ||
| 196 | - group.setAttribute('transform', `translate(${card.x},${card.y})`); | ||
| 197 | - | ||
| 198 | - const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect'); | ||
| 199 | - rect.setAttribute('fill', '#222'); | ||
| 200 | - rect.setAttribute('width', 150); | ||
| 201 | - rect.setAttribute('style', 'cursor: auto;'); | ||
| 202 | - rect.setAttribute('height', cardHeight); | ||
| 203 | - rect.setAttribute('rx', 10); // 圆角 | ||
| 204 | - rect.setAttribute('ry', 10); | ||
| 205 | - group.appendChild(rect); | ||
| 206 | - | ||
| 207 | - // 使用path绘制带有指定圆角的矩形 | ||
| 208 | - // 创建标题栏 | ||
| 209 | - const titleBarWidth = 150; | ||
| 210 | - const borderRadius = 10; // 圆角大小 | ||
| 211 | - const titleBar = document.createElementNS('http://www.w3.org/2000/svg', 'path'); | ||
| 212 | - const dValue = `M 0,${borderRadius} | ||
| 213 | - a ${borderRadius},${borderRadius} 0 0 1 ${borderRadius},-${borderRadius} | ||
| 214 | - h ${titleBarWidth - borderRadius * 2} | ||
| 215 | - a ${borderRadius},${borderRadius} 0 0 1 ${borderRadius},${borderRadius} | ||
| 216 | - v ${titleBarHeight - borderRadius} | ||
| 217 | - h -${titleBarWidth} | ||
| 218 | - z`; | ||
| 219 | - titleBar.setAttribute('class', 'card'); | ||
| 220 | - titleBar.setAttribute('d', dValue); | ||
| 221 | - titleBar.setAttribute('fill', `url(#titleGradient-${card.id})`); | ||
| 222 | - group.appendChild(titleBar); | ||
| 223 | - | ||
| 224 | - const text = document.createElementNS('http://www.w3.org/2000/svg', 'text'); | ||
| 225 | - text.setAttribute('x', titleBarWidth / 2); | ||
| 226 | - text.setAttribute('y', titleBarHeight / 2); | ||
| 227 | - text.setAttribute('text-anchor', 'middle'); | ||
| 228 | - text.setAttribute('alignment-baseline', 'middle'); | ||
| 229 | - text.textContent = card.label; | ||
| 230 | - group.appendChild(text); | ||
| 231 | - | ||
| 232 | - card.nodes.forEach((node, index) => { | ||
| 233 | - | ||
| 234 | - | ||
| 235 | - const circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle'); | ||
| 236 | - circle.setAttribute('class', 'node'); | ||
| 237 | - circle.setAttribute('cx', node.type === 'in' ? 0 : 150); | ||
| 238 | - circle.setAttribute('cy', topBottomPadding + titleBarHeight + (node.level + 1) * | ||
| 239 | - nodeSpacing - (nodeSpacing / 2)); | ||
| 240 | - circle.setAttribute('r', 7); | ||
| 241 | - circle.setAttribute('fill', node.color); | ||
| 242 | - circle.setAttribute('data-card-id', card.id); | ||
| 243 | - circle.setAttribute('data-node-id', `${card.id}-node${index + 1}`); | ||
| 244 | - group.appendChild(circle); | ||
| 245 | - | ||
| 246 | - let labelX = node.type === 'in' ? 12 : 138; // 基本的X坐标 | ||
| 247 | - const labelY = topBottomPadding + titleBarHeight + node.level * nodeSpacing + 21; | ||
| 248 | - | ||
| 249 | - // 创建SVG文本元素 | ||
| 250 | - const multiConnectedLabel = document.createElementNS('http://www.w3.org/2000/svg', | ||
| 251 | - 'text'); | ||
| 252 | - multiConnectedLabel.setAttribute('x', labelX); | ||
| 253 | - multiConnectedLabel.setAttribute('y', labelY); | ||
| 254 | - multiConnectedLabel.setAttribute('text-anchor', 'middle'); | ||
| 255 | - multiConnectedLabel.setAttribute('fill', '#aaa'); | ||
| 256 | - multiConnectedLabel.setAttribute('style', 'font-size: 8px;'); | ||
| 257 | - multiConnectedLabel.setAttribute('alignment-baseline', 'hanging'); | ||
| 258 | - | ||
| 259 | - | ||
| 260 | - // 计算文本的宽度(假定的,因为SVG没有直接获取文本宽度的方法) | ||
| 261 | - let estimatedTextLength; | ||
| 262 | - if (node.multiConnected == undefined) { | ||
| 263 | - estimatedTextLength = 20 | ||
| 264 | - multiConnectedLabel.textContent = 'N'; | ||
| 265 | - } else { | ||
| 266 | - estimatedTextLength = node.multiConnected.length; | ||
| 267 | - multiConnectedLabel.textContent = node.multiConnected; | ||
| 268 | - } | ||
| 269 | - | ||
| 270 | - // 确保文本不会超出卡片右边界 | ||
| 271 | - if (labelX + estimatedTextLength / 2 > 150) { | ||
| 272 | - labelX = 150 - estimatedTextLength / 2; | ||
| 273 | - nodeLabel.setAttribute('x', labelX); | ||
| 274 | - } | ||
| 275 | - | ||
| 276 | - // 确保文本不会超出卡片左边界 | ||
| 277 | - if (labelX - estimatedTextLength / 2 < 0) { | ||
| 278 | - labelX = estimatedTextLength / 2; | ||
| 279 | - nodeLabel.setAttribute('x', labelX); | ||
| 280 | - } | ||
| 281 | - | ||
| 282 | - group.appendChild(multiConnectedLabel); | ||
| 283 | - | ||
| 284 | - if (node.label != undefined) { | ||
| 285 | - // 计算文本标签的位置 | ||
| 286 | - let labelX = node.type === 'in' ? 15 : 135; // 基本的X坐标 | ||
| 287 | - const labelY = topBottomPadding + titleBarHeight + node.level * nodeSpacing + 40; | ||
| 288 | - | ||
| 289 | - // 创建SVG文本元素 | ||
| 290 | - const nodeLabel = document.createElementNS('http://www.w3.org/2000/svg', 'text'); | ||
| 291 | - nodeLabel.setAttribute('x', labelX); | ||
| 292 | - nodeLabel.setAttribute('y', labelY); // 在节点下方留出一定空间 | ||
| 293 | - nodeLabel.setAttribute('text-anchor', 'middle'); // 文本居中对齐 | ||
| 294 | - nodeLabel.setAttribute('fill', '#aaa'); // 文本居中对齐 | ||
| 295 | - nodeLabel.setAttribute('alignment-baseline', 'hanging'); | ||
| 296 | - nodeLabel.textContent = node.label; | ||
| 297 | - | ||
| 298 | - // 计算文本的宽度(假定的,因为SVG没有直接获取文本宽度的方法) | ||
| 299 | - const estimatedTextLength = node.label.length * 10; // 估算每个字符6像素宽 | ||
| 300 | - | ||
| 301 | - // 确保文本不会超出卡片右边界 | ||
| 302 | - if (labelX + estimatedTextLength / 2 > 150) { | ||
| 303 | - labelX = 150 - estimatedTextLength / 2; | ||
| 304 | - nodeLabel.setAttribute('x', labelX); | ||
| 305 | - } | ||
| 306 | - | ||
| 307 | - // 确保文本不会超出卡片左边界 | ||
| 308 | - if (labelX - estimatedTextLength / 2 < 0) { | ||
| 309 | - labelX = estimatedTextLength / 2; | ||
| 310 | - nodeLabel.setAttribute('x', labelX); | ||
| 311 | - } | ||
| 312 | - | ||
| 313 | - group.appendChild(nodeLabel); | ||
| 314 | - | ||
| 315 | - } | ||
| 316 | - | ||
| 317 | - switch (node.slot) { | ||
| 318 | - case 'input': | ||
| 319 | - const foreignObject = document.createElementNS('http://www.w3.org/2000/svg', | ||
| 320 | - 'foreignObject'); | ||
| 321 | - foreignObject.setAttribute('x', 0); | ||
| 322 | - foreignObject.setAttribute('y', topBottomPadding + titleBarHeight + node.level * | ||
| 323 | - nodeSpacing + 12); | ||
| 324 | - foreignObject.setAttribute('width', 130); // 保持原始宽度 | ||
| 325 | - foreignObject.setAttribute('height', nodeSpacing - 24); // 保持原始高度,减去的24像素为上下内边距之和 | ||
| 326 | - const input = document.createElement('input'); | ||
| 327 | - input.type = 'text'; | ||
| 328 | - if (node.value == undefined) { | ||
| 329 | - node.value = ''; | ||
| 330 | - } | ||
| 331 | - input.value = node.value; | ||
| 332 | - input.addEventListener('input', function () { | ||
| 333 | - node.value = input.value; | ||
| 334 | - }); | ||
| 335 | - // Set adjusted input styles | ||
| 336 | - input.style.width = '110px'; | ||
| 337 | - input.style.height = '100%'; | ||
| 338 | - input.style.marginLeft = '20px'; | ||
| 339 | - input.style.borderRadius = '5px'; | ||
| 340 | - input.style.border = '1px solid white'; | ||
| 341 | - input.style.backgroundColor = '#222'; | ||
| 342 | - input.style.color = 'white'; | ||
| 343 | - input.style.fontSize = '1em'; | ||
| 344 | - input.style.padding = '0px'; // 可能需要调整或去除内边距以适应固定尺寸 | ||
| 345 | - input.style.boxSizing = 'border-box'; // 确保宽高包含内容、内边距和边框 | ||
| 346 | - | ||
| 347 | - // Change border color on focus and blur | ||
| 348 | - input.addEventListener('focus', () => { | ||
| 349 | - input.style.outline = 'none'; // Remove default focus outline | ||
| 350 | - input.style.borderColor = | ||
| 351 | - 'white'; // Keep border color white on focus | ||
| 352 | - }); | ||
| 353 | - | ||
| 354 | - input.addEventListener('blur', () => { | ||
| 355 | - input.style.borderColor = | ||
| 356 | - 'white'; // Revert to white when not focused | ||
| 357 | - }); | ||
| 358 | - | ||
| 359 | - // 阻止事件冒泡 | ||
| 360 | - input.addEventListener('click', function (event) { | ||
| 361 | - event.stopPropagation(); | ||
| 362 | - }); | ||
| 363 | - | ||
| 364 | - input.addEventListener('mousedown', function (event) { | ||
| 365 | - event.stopPropagation(); | ||
| 366 | - }); | ||
| 367 | - | ||
| 368 | - input.addEventListener('touchstart', function (event) { | ||
| 369 | - event.stopPropagation(); | ||
| 370 | - }); | ||
| 371 | - | ||
| 372 | - foreignObject.appendChild(input); | ||
| 373 | - group.appendChild(foreignObject); | ||
| 374 | - break; | ||
| 375 | - } | ||
| 376 | - | ||
| 377 | - | ||
| 378 | - | ||
| 379 | - }); | ||
| 380 | - | ||
| 381 | - const deleteIcon = document.createElementNS('http://www.w3.org/2000/svg', 'rect'); | ||
| 382 | - deleteIcon.setAttribute('class', 'card-delete-icon'); | ||
| 383 | - deleteIcon.setAttribute('x', 125); | ||
| 384 | - deleteIcon.setAttribute('y', 5); // 使其贴近标题栏的右上角 | ||
| 385 | - deleteIcon.setAttribute('width', 20); | ||
| 386 | - deleteIcon.setAttribute('height', 20); | ||
| 387 | - deleteIcon.setAttribute('fill', 'transparent'); | ||
| 388 | - deleteIcon.setAttribute('data-card-id', card.id); | ||
| 389 | - deleteIcon.setAttribute('style', 'cursor: pointer;'); | ||
| 390 | - group.appendChild(de,eIcon); | ||
| 391 | - | ||
| 392 | - const delText = document.createElementNS('http://www.w3.org/2000/svg', 'text'); | ||
| 393 | - delText.setAttribute('x', 135); | ||
| 394 | - delText.setAttribute('y', 20); // 调整位置以垂直居中 | ||
| 395 | - delText.setAttribute('text-anchor', 'middle'); | ||
| 396 | - delText.setAttribute('fill', 'white'); | ||
| 397 | - delText.setAttribute('font-size', '16px'); // 适当调整字体大小以适应图标 | ||
| 398 | - delText.setAttribute('pointer-events', 'none'); // 确保点击事件只触发于删除图标上 | ||
| 399 | - delText.textContent = '×'; | ||
| 400 | - group.appendChild(delText); | ||
| 401 | - | ||
| 402 | - cardsContainer.appendChild(group); | ||
| 403 | - | ||
| 404 | - attachNodeEventListeners(); | ||
| 405 | - } | ||
| 406 | - | ||
| 407 | - | ||
| 408 | - | ||
| 409 | - | ||
| 410 | - | ||
| 411 | - updateForm(); | ||
| 412 | - updateJSONOutput(); | ||
| 413 | - drawCard(); | ||
| 414 | - </script> | ||
| 415 | -</body> | ||
| 416 | -</html> |
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/wwwroot/index.html deleted
100644 → 0
| 1 | -<!-- | ||
| 2 | -<!DOCTYPE html> | ||
| 3 | -<html lang="zh-cn"> | ||
| 4 | - | ||
| 5 | - <head> | ||
| 6 | - <meta charset="UTF-8"> | ||
| 7 | - <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||
| 8 | - <title>Blueprint</title> | ||
| 9 | - <style> | ||
| 10 | - body, | ||
| 11 | - html { | ||
| 12 | - margin: 0; | ||
| 13 | - padding: 0; | ||
| 14 | - width: 100%; | ||
| 15 | - height: 100%; | ||
| 16 | - overflow: hidden; | ||
| 17 | - } | ||
| 18 | - | ||
| 19 | - /* 弹窗容器样式 */ | ||
| 20 | - #card-creation-modal { | ||
| 21 | - border: 1px solid #444; | ||
| 22 | - background: linear-gradient(145deg, #333, #555); | ||
| 23 | - padding: 5px; | ||
| 24 | - z-index: 100; | ||
| 25 | - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); | ||
| 26 | - border-radius: 5px; | ||
| 27 | - overflow: hidden; | ||
| 28 | - margin: 0; | ||
| 29 | - user-select: none; | ||
| 30 | - } | ||
| 31 | - | ||
| 32 | - #card-type-list { | ||
| 33 | - | ||
| 34 | - padding-left: 0px; | ||
| 35 | - } | ||
| 36 | - | ||
| 37 | - /* 列表项基础样式 */ | ||
| 38 | - #card-type-list li { | ||
| 39 | - list-style: none; | ||
| 40 | - /* 去除列表项目符号 */ | ||
| 41 | - padding: 8px 15px; | ||
| 42 | - /* 减少垂直内边距使其更紧凑 */ | ||
| 43 | - border-bottom: 1px solid #666; | ||
| 44 | - /* 暗色底部边框线 */ | ||
| 45 | - color: #ddd; | ||
| 46 | - /* 暗色系字体颜色 */ | ||
| 47 | - cursor: pointer; | ||
| 48 | - /* 鼠标指针样式 */ | ||
| 49 | - margin-left: 0; | ||
| 50 | - /* 消除左边间隙 */ | ||
| 51 | - | ||
| 52 | - } | ||
| 53 | - | ||
| 54 | - /* 列表项高亮样式 */ | ||
| 55 | - #card-type-list li:hover, | ||
| 56 | - #card-type-list li:focus { | ||
| 57 | - background-color: #777; | ||
| 58 | - /* 暗色背景颜色 */ | ||
| 59 | - color: #fff; | ||
| 60 | - /* 高亮字体颜色 */ | ||
| 61 | - } | ||
| 62 | - | ||
| 63 | - /* 最后一个列表项的底部边框 */ | ||
| 64 | - #card-type-list li:last-child { | ||
| 65 | - border-bottom: none; | ||
| 66 | - } | ||
| 67 | - | ||
| 68 | - .grid-background { | ||
| 69 | - background-color: #292929; | ||
| 70 | - background-image: | ||
| 71 | - linear-gradient(to right, black 1px, transparent 1px), | ||
| 72 | - linear-gradient(to bottom, black 1px, transparent 1px), | ||
| 73 | - linear-gradient(to right, #404040 1px, transparent 1px), | ||
| 74 | - linear-gradient(to bottom, #404040 1px, transparent 1px); | ||
| 75 | - background-size: | ||
| 76 | - 100px 100px, | ||
| 77 | - 100px 100px, | ||
| 78 | - 10px 10px, | ||
| 79 | - 10px 10px; | ||
| 80 | - width: 100%; | ||
| 81 | - height: 100%; | ||
| 82 | - } | ||
| 83 | - | ||
| 84 | - .draggable { | ||
| 85 | - cursor: grab; | ||
| 86 | - } | ||
| 87 | - | ||
| 88 | - .node { | ||
| 89 | - | ||
| 90 | - cursor: pointer; | ||
| 91 | - } | ||
| 92 | - | ||
| 93 | - .link { | ||
| 94 | - stroke: black; | ||
| 95 | - stroke-width: 2; | ||
| 96 | - } | ||
| 97 | - | ||
| 98 | - .card { | ||
| 99 | - /* fill: lightgrey; | ||
| 100 | - stroke: black; */ | ||
| 101 | - | ||
| 102 | - stroke-width: 1; | ||
| 103 | - user-select: none; | ||
| 104 | - } | ||
| 105 | - | ||
| 106 | - text { | ||
| 107 | - pointer-events: none; | ||
| 108 | - user-select: none; | ||
| 109 | - } | ||
| 110 | - </style> | ||
| 111 | - </head> | ||
| 112 | - | ||
| 113 | - <body> | ||
| 114 | - <!– 弹窗容器 –> | ||
| 115 | - <div id="card-creation-modal" | ||
| 116 | - style="display:none; position: absolute; border: 1px solid #ccc; background-color: #fff; padding: 10px; z-index: 100;"> | ||
| 117 | - <!– 搜索结果列表 –> | ||
| 118 | - <ul id="card-type-list"></ul> | ||
| 119 | - </div> | ||
| 120 | - | ||
| 121 | - | ||
| 122 | - | ||
| 123 | - <svg style="width: 100%;height: 100%;" id="svgContainer" class="grid-background"> | ||
| 124 | - <g id="linksContainer"></g> <!– 用于存放线条 –> | ||
| 125 | - <g id="cardsContainer"></g> <!– 用于存放卡片 –> | ||
| 126 | - </svg> | ||
| 127 | - | ||
| 128 | - <script> | ||
| 129 | - let cards = [{ | ||
| 130 | - id: 'card0', | ||
| 131 | - x: 0, | ||
| 132 | - y: 0, | ||
| 133 | - label: 'Start', | ||
| 134 | - type: "start", | ||
| 135 | - nodes: [{ | ||
| 136 | - type: "out", | ||
| 137 | - level: 0, | ||
| 138 | - enumType: 'call', | ||
| 139 | - color: '#fff', | ||
| 140 | - multiConnected: 1 | ||
| 141 | - }, ], | ||
| 142 | - titleBarColor: ['#84fab0', '#8fd3f4'] | ||
| 143 | - }, | ||
| 144 | - { | ||
| 145 | - id: 'card1', | ||
| 146 | - x: 100, | ||
| 147 | - y: 200, | ||
| 148 | - label: 'Condition', | ||
| 149 | - type: "condition", | ||
| 150 | - nodes: [{ | ||
| 151 | - type: "in", | ||
| 152 | - level: 0, | ||
| 153 | - enumType: 'call', | ||
| 154 | - color: '#fff' | ||
| 155 | - }, | ||
| 156 | - { | ||
| 157 | - type: "in", | ||
| 158 | - level: 1, | ||
| 159 | - enumType: 'int', | ||
| 160 | - color: '#28C76F', | ||
| 161 | - slot: 'input', | ||
| 162 | - label: 'int', | ||
| 163 | - multiConnected: 1 | ||
| 164 | - }, | ||
| 165 | - { | ||
| 166 | - type: "in", | ||
| 167 | - level: 2, | ||
| 168 | - enumType: 'int', | ||
| 169 | - color: '#28C76F', | ||
| 170 | - slot: 'input', | ||
| 171 | - label: 'int', | ||
| 172 | - multiConnected: 1 | ||
| 173 | - }, | ||
| 174 | - { | ||
| 175 | - type: "out", | ||
| 176 | - level: 0, | ||
| 177 | - enumType: 'call', | ||
| 178 | - color: '#fff' | ||
| 179 | - }, | ||
| 180 | - { | ||
| 181 | - type: "out", | ||
| 182 | - level: 1, | ||
| 183 | - enumType: 'bool', | ||
| 184 | - color: '#0396FF', | ||
| 185 | - label: 'bool', | ||
| 186 | - multiConnected: 1 | ||
| 187 | - }, | ||
| 188 | - ], | ||
| 189 | - titleBarColor: ['#fccb90', '#d57eeb'] | ||
| 190 | - }, | ||
| 191 | - { | ||
| 192 | - id: 'card2', | ||
| 193 | - x: 300, | ||
| 194 | - y: 400, | ||
| 195 | - label: 'BoolToString', | ||
| 196 | - type: "call", | ||
| 197 | - nodes: [{ | ||
| 198 | - type: "in", | ||
| 199 | - level: 0, | ||
| 200 | - enumType: 'call', | ||
| 201 | - color: '#fff' | ||
| 202 | - }, | ||
| 203 | - { | ||
| 204 | - type: "in", | ||
| 205 | - level: 1, | ||
| 206 | - enumType: 'bool', | ||
| 207 | - color: '#0396FF', | ||
| 208 | - label: 'bool', | ||
| 209 | - multiConnected: 1 | ||
| 210 | - }, | ||
| 211 | - { | ||
| 212 | - type: "out", | ||
| 213 | - level: 0, | ||
| 214 | - enumType: 'call', | ||
| 215 | - color: '#fff' | ||
| 216 | - }, | ||
| 217 | - { | ||
| 218 | - type: "out", | ||
| 219 | - level: 1, | ||
| 220 | - enumType: 'string', | ||
| 221 | - color: '#DE4313', | ||
| 222 | - label: 'string', | ||
| 223 | - multiConnected: 1 | ||
| 224 | - } | ||
| 225 | - ], | ||
| 226 | - titleBarColor: ['#3C8CE7', '#00EAFF'] | ||
| 227 | - | ||
| 228 | - }, | ||
| 229 | - { | ||
| 230 | - id: 'card3', | ||
| 231 | - x: 100, | ||
| 232 | - y: 300, | ||
| 233 | - label: 'Print', | ||
| 234 | - type: "print", | ||
| 235 | - nodes: [{ | ||
| 236 | - type: "in", | ||
| 237 | - level: 0, | ||
| 238 | - enumType: 'call', | ||
| 239 | - color: '#fff' | ||
| 240 | - }, | ||
| 241 | - { | ||
| 242 | - type: "in", | ||
| 243 | - level: 1, | ||
| 244 | - enumType: 'string', | ||
| 245 | - color: '#DE4313', | ||
| 246 | - label: 'string', | ||
| 247 | - multiConnected: 1 | ||
| 248 | - } | ||
| 249 | - ], | ||
| 250 | - titleBarColor: ['#f6d365', '#fda085'] | ||
| 251 | - } | ||
| 252 | - ]; | ||
| 253 | - | ||
| 254 | - | ||
| 255 | - let links = []; | ||
| 256 | - let currentLink = null; | ||
| 257 | - let isDragging = false; | ||
| 258 | - let isLinking = false; | ||
| 259 | - let dragOffsetX, dragOffsetY; | ||
| 260 | - let currentCard; | ||
| 261 | - | ||
| 262 | - function init() { | ||
| 263 | - drawLinks(); | ||
| 264 | - drawCards(); | ||
| 265 | - attachEventListeners(); | ||
| 266 | - } | ||
| 267 | - | ||
| 268 | - function drawCards() { | ||
| 269 | - const cardsContainer = document.getElementById('cardsContainer'); | ||
| 270 | - cardsContainer.innerHTML = ''; // 清除现有的卡片 | ||
| 271 | - | ||
| 272 | - cards.forEach(card => { | ||
| 273 | - | ||
| 274 | - //创建标题栏渐变色 | ||
| 275 | - const defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs'); | ||
| 276 | - const linearGradient = document.createElementNS('http://www.w3.org/2000/svg', 'linearGradient'); | ||
| 277 | - linearGradient.setAttribute('id', `titleGradient-${card.id}`); | ||
| 278 | - linearGradient.setAttribute('x1', '0%'); // 渐变起点的x坐标 | ||
| 279 | - linearGradient.setAttribute('y1', '100%'); // 渐变起点的y坐标 | ||
| 280 | - linearGradient.setAttribute('x2', '100%'); // 渐变终点的x坐标 | ||
| 281 | - linearGradient.setAttribute('y2', '0%'); // 渐变终点的y坐标 | ||
| 282 | - | ||
| 283 | - const stop1 = document.createElementNS('http://www.w3.org/2000/svg', 'stop'); | ||
| 284 | - stop1.setAttribute('offset', '10%'); | ||
| 285 | - stop1.setAttribute('style', `stop-color: ${card.titleBarColor[0]}; stop-opacity: 1`); | ||
| 286 | - linearGradient.appendChild(stop1); | ||
| 287 | - | ||
| 288 | - const stop2 = document.createElementNS('http://www.w3.org/2000/svg', 'stop'); | ||
| 289 | - stop2.setAttribute('offset', '100%'); | ||
| 290 | - stop2.setAttribute('style', `stop-color: ${card.titleBarColor[1]}; stop-opacity: 1`); | ||
| 291 | - linearGradient.appendChild(stop2); | ||
| 292 | - | ||
| 293 | - defs.appendChild(linearGradient); | ||
| 294 | - cardsContainer.appendChild(defs); | ||
| 295 | - | ||
| 296 | - | ||
| 297 | - | ||
| 298 | - const nodeSpacing = 50; | ||
| 299 | - const topBottomPadding = 20; | ||
| 300 | - const titleBarHeight = 30; // 标题栏高度 | ||
| 301 | - const maxLevel = Math.max(...card.nodes.map(node => node.level)) + 1; | ||
| 302 | - const cardHeight = maxLevel * nodeSpacing + topBottomPadding * 2 + titleBarHeight; | ||
| 303 | - | ||
| 304 | - const group = document.createElementNS('http://www.w3.org/2000/svg', 'g'); | ||
| 305 | - group.setAttribute('class', 'draggable card-container'); | ||
| 306 | - group.setAttribute('data-id', card.id); | ||
| 307 | - group.setAttribute('user-select', 'none'); | ||
| 308 | - group.setAttribute('transform', `translate(${card.x},${card.y})`); | ||
| 309 | - | ||
| 310 | - const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect'); | ||
| 311 | - rect.setAttribute('fill', '#222'); | ||
| 312 | - rect.setAttribute('width', 150); | ||
| 313 | - rect.setAttribute('style', 'cursor: auto;'); | ||
| 314 | - rect.setAttribute('height', cardHeight); | ||
| 315 | - rect.setAttribute('rx', 10); // 圆角 | ||
| 316 | - rect.setAttribute('ry', 10); | ||
| 317 | - group.appendChild(rect); | ||
| 318 | - | ||
| 319 | - // 使用path绘制带有指定圆角的矩形 | ||
| 320 | - // 创建标题栏 | ||
| 321 | - const titleBarWidth = 150; | ||
| 322 | - const borderRadius = 10; // 圆角大小 | ||
| 323 | - const titleBar = document.createElementNS('http://www.w3.org/2000/svg', 'path'); | ||
| 324 | - const dValue = `M 0,${borderRadius} | ||
| 325 | - a ${borderRadius},${borderRadius} 0 0 1 ${borderRadius},-${borderRadius} | ||
| 326 | - h ${titleBarWidth - borderRadius * 2} | ||
| 327 | - a ${borderRadius},${borderRadius} 0 0 1 ${borderRadius},${borderRadius} | ||
| 328 | - v ${titleBarHeight - borderRadius} | ||
| 329 | - h -${titleBarWidth} | ||
| 330 | - z`; | ||
| 331 | - titleBar.setAttribute('class', 'card'); | ||
| 332 | - titleBar.setAttribute('d', dValue); | ||
| 333 | - titleBar.setAttribute('fill', `url(#titleGradient-${card.id})`); | ||
| 334 | - group.appendChild(titleBar); | ||
| 335 | - | ||
| 336 | - const text = document.createElementNS('http://www.w3.org/2000/svg', 'text'); | ||
| 337 | - text.setAttribute('x', titleBarWidth / 2); | ||
| 338 | - text.setAttribute('y', titleBarHeight / 2); | ||
| 339 | - text.setAttribute('text-anchor', 'middle'); | ||
| 340 | - text.setAttribute('alignment-baseline', 'middle'); | ||
| 341 | - text.textContent = card.label; | ||
| 342 | - group.appendChild(text); | ||
| 343 | - | ||
| 344 | - card.nodes.forEach((node, index) => { | ||
| 345 | - | ||
| 346 | - | ||
| 347 | - const circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle'); | ||
| 348 | - circle.setAttribute('class', 'node'); | ||
| 349 | - circle.setAttribute('cx', node.type === 'in' ? 0 : 150); | ||
| 350 | - circle.setAttribute('cy', topBottomPadding + titleBarHeight + (node.level + 1) * | ||
| 351 | - nodeSpacing - (nodeSpacing / 2)); | ||
| 352 | - circle.setAttribute('r', 7); | ||
| 353 | - circle.setAttribute('fill', node.color); | ||
| 354 | - circle.setAttribute('data-card-id', card.id); | ||
| 355 | - circle.setAttribute('data-node-id', `${card.id}-node${index + 1}`); | ||
| 356 | - group.appendChild(circle); | ||
| 357 | - | ||
| 358 | - let labelX = node.type === 'in' ? 12 : 138; // 基本的X坐标 | ||
| 359 | - const labelY = topBottomPadding + titleBarHeight + node.level * nodeSpacing + 21; | ||
| 360 | - | ||
| 361 | - // 创建SVG文本元素 | ||
| 362 | - const multiConnectedLabel = document.createElementNS('http://www.w3.org/2000/svg', | ||
| 363 | - 'text'); | ||
| 364 | - multiConnectedLabel.setAttribute('x', labelX); | ||
| 365 | - multiConnectedLabel.setAttribute('y', labelY); | ||
| 366 | - multiConnectedLabel.setAttribute('text-anchor', 'middle'); | ||
| 367 | - multiConnectedLabel.setAttribute('fill', '#aaa'); | ||
| 368 | - multiConnectedLabel.setAttribute('style', 'font-size: 8px;'); | ||
| 369 | - multiConnectedLabel.setAttribute('alignment-baseline', 'hanging'); | ||
| 370 | - | ||
| 371 | - | ||
| 372 | - // 计算文本的宽度(假定的,因为SVG没有直接获取文本宽度的方法) | ||
| 373 | - let estimatedTextLength; | ||
| 374 | - if (node.multiConnected == undefined) { | ||
| 375 | - estimatedTextLength = 20 | ||
| 376 | - multiConnectedLabel.textContent = 'N'; | ||
| 377 | - } else { | ||
| 378 | - estimatedTextLength = node.multiConnected.length; | ||
| 379 | - multiConnectedLabel.textContent = node.multiConnected; | ||
| 380 | - } | ||
| 381 | - | ||
| 382 | - // 确保文本不会超出卡片右边界 | ||
| 383 | - if (labelX + estimatedTextLength / 2 > 150) { | ||
| 384 | - labelX = 150 - estimatedTextLength / 2; | ||
| 385 | - nodeLabel.setAttribute('x', labelX); | ||
| 386 | - } | ||
| 387 | - | ||
| 388 | - // 确保文本不会超出卡片左边界 | ||
| 389 | - if (labelX - estimatedTextLength / 2 < 0) { | ||
| 390 | - labelX = estimatedTextLength / 2; | ||
| 391 | - nodeLabel.setAttribute('x', labelX); | ||
| 392 | - } | ||
| 393 | - | ||
| 394 | - group.appendChild(multiConnectedLabel); | ||
| 395 | - | ||
| 396 | - if (node.label != undefined) { | ||
| 397 | - // 计算文本标签的位置 | ||
| 398 | - let labelX = node.type === 'in' ? 15 : 135; // 基本的X坐标 | ||
| 399 | - const labelY = topBottomPadding + titleBarHeight + node.level * nodeSpacing + 40; | ||
| 400 | - | ||
| 401 | - // 创建SVG文本元素 | ||
| 402 | - const nodeLabel = document.createElementNS('http://www.w3.org/2000/svg', 'text'); | ||
| 403 | - nodeLabel.setAttribute('x', labelX); | ||
| 404 | - nodeLabel.setAttribute('y', labelY); // 在节点下方留出一定空间 | ||
| 405 | - nodeLabel.setAttribute('text-anchor', 'middle'); // 文本居中对齐 | ||
| 406 | - nodeLabel.setAttribute('fill', '#aaa'); // 文本居中对齐 | ||
| 407 | - nodeLabel.setAttribute('alignment-baseline', 'hanging'); | ||
| 408 | - nodeLabel.textContent = node.label; | ||
| 409 | - | ||
| 410 | - // 计算文本的宽度(假定的,因为SVG没有直接获取文本宽度的方法) | ||
| 411 | - const estimatedTextLength = node.label.length * 10; // 估算每个字符6像素宽 | ||
| 412 | - | ||
| 413 | - // 确保文本不会超出卡片右边界 | ||
| 414 | - if (labelX + estimatedTextLength / 2 > 150) { | ||
| 415 | - labelX = 150 - estimatedTextLength / 2; | ||
| 416 | - nodeLabel.setAttribute('x', labelX); | ||
| 417 | - } | ||
| 418 | - | ||
| 419 | - // 确保文本不会超出卡片左边界 | ||
| 420 | - if (labelX - estimatedTextLength / 2 < 0) { | ||
| 421 | - labelX = estimatedTextLength / 2; | ||
| 422 | - nodeLabel.setAttribute('x', labelX); | ||
| 423 | - } | ||
| 424 | - | ||
| 425 | - group.appendChild(nodeLabel); | ||
| 426 | - | ||
| 427 | - } | ||
| 428 | - | ||
| 429 | - switch (node.slot) { | ||
| 430 | - case 'input': | ||
| 431 | - const foreignObject = document.createElementNS('http://www.w3.org/2000/svg', | ||
| 432 | - 'foreignObject'); | ||
| 433 | - foreignObject.setAttribute('x', 0); | ||
| 434 | - foreignObject.setAttribute('y', topBottomPadding + titleBarHeight + node.level * | ||
| 435 | - nodeSpacing + 12); | ||
| 436 | - foreignObject.setAttribute('width', 130); // 保持原始宽度 | ||
| 437 | - foreignObject.setAttribute('height', nodeSpacing - 24); // 保持原始高度,减去的24像素为上下内边距之和 | ||
| 438 | - const input = document.createElement('input'); | ||
| 439 | - input.type = 'text'; | ||
| 440 | - if (node.value == undefined) { | ||
| 441 | - node.value = ''; | ||
| 442 | - } | ||
| 443 | - input.value = node.value; | ||
| 444 | - input.addEventListener('input', function() { | ||
| 445 | - node.value = input.value; | ||
| 446 | - }); | ||
| 447 | - // Set adjusted input styles | ||
| 448 | - input.style.width = '110px'; | ||
| 449 | - input.style.height = '100%'; | ||
| 450 | - input.style.marginLeft = '20px'; | ||
| 451 | - input.style.borderRadius = '5px'; | ||
| 452 | - input.style.border = '1px solid white'; | ||
| 453 | - input.style.backgroundColor = '#222'; | ||
| 454 | - input.style.color = 'white'; | ||
| 455 | - input.style.fontSize = '1em'; | ||
| 456 | - input.style.padding = '0px'; // 可能需要调整或去除内边距以适应固定尺寸 | ||
| 457 | - input.style.boxSizing = 'border-box'; // 确保宽高包含内容、内边距和边框 | ||
| 458 | - | ||
| 459 | - // Change border color on focus and blur | ||
| 460 | - input.addEventListener('focus', () => { | ||
| 461 | - input.style.outline = 'none'; // Remove default focus outline | ||
| 462 | - input.style.borderColor = | ||
| 463 | - 'white'; // Keep border color white on focus | ||
| 464 | - }); | ||
| 465 | - | ||
| 466 | - input.addEventListener('blur', () => { | ||
| 467 | - input.style.borderColor = | ||
| 468 | - 'white'; // Revert to white when not focused | ||
| 469 | - }); | ||
| 470 | - | ||
| 471 | - // 阻止事件冒泡 | ||
| 472 | - input.addEventListener('click', function(event) { | ||
| 473 | - event.stopPropagation(); | ||
| 474 | - }); | ||
| 475 | - | ||
| 476 | - input.addEventListener('mousedown', function(event) { | ||
| 477 | - event.stopPropagation(); | ||
| 478 | - }); | ||
| 479 | - | ||
| 480 | - input.addEventListener('touchstart', function(event) { | ||
| 481 | - event.stopPropagation(); | ||
| 482 | - }); | ||
| 483 | - | ||
| 484 | - foreignObject.appendChild(input); | ||
| 485 | - group.appendChild(foreignObject); | ||
| 486 | - break; | ||
| 487 | - } | ||
| 488 | - | ||
| 489 | - | ||
| 490 | - | ||
| 491 | - }); | ||
| 492 | - | ||
| 493 | - const deleteIcon = document.createElementNS('http://www.w3.org/2000/svg', 'rect'); | ||
| 494 | - deleteIcon.setAttribute('class', 'card-delete-icon'); | ||
| 495 | - deleteIcon.setAttribute('x', 125); | ||
| 496 | - deleteIcon.setAttribute('y', 5); // 使其贴近标题栏的右上角 | ||
| 497 | - deleteIcon.setAttribute('width', 20); | ||
| 498 | - deleteIcon.setAttribute('height', 20); | ||
| 499 | - deleteIcon.setAttribute('fill', 'transparent'); | ||
| 500 | - deleteIcon.setAttribute('data-card-id', card.id); | ||
| 501 | - deleteIcon.setAttribute('style', 'cursor: pointer;'); | ||
| 502 | - group.appendChild(deleteIcon); | ||
| 503 | - | ||
| 504 | - const delText = document.createElementNS('http://www.w3.org/2000/svg', 'text'); | ||
| 505 | - delText.setAttribute('x', 135); | ||
| 506 | - delText.setAttribute('y', 20); // 调整位置以垂直居中 | ||
| 507 | - delText.setAttribute('text-anchor', 'middle'); | ||
| 508 | - delText.setAttribute('fill', 'white'); | ||
| 509 | - delText.setAttribute('font-size', '16px'); // 适当调整字体大小以适应图标 | ||
| 510 | - delText.setAttribute('pointer-events', 'none'); // 确保点击事件只触发于删除图标上 | ||
| 511 | - delText.textContent = '×'; | ||
| 512 | - group.appendChild(delText); | ||
| 513 | - | ||
| 514 | - cardsContainer.appendChild(group); | ||
| 515 | - }); | ||
| 516 | - | ||
| 517 | - attachNodeEventListeners(); | ||
| 518 | - } | ||
| 519 | - | ||
| 520 | - | ||
| 521 | - | ||
| 522 | - function drawLinks() { | ||
| 523 | - const linksContainer = document.getElementById('linksContainer'); | ||
| 524 | - linksContainer.innerHTML = ''; // 清除现有的线条 | ||
| 525 | - // 清除旧的删除图标 | ||
| 526 | - document.querySelectorAll('.delete-icon').forEach(icon => icon.remove()); | ||
| 527 | - | ||
| 528 | - links.forEach((link, index) => { | ||
| 529 | - const path = document.createElementNS('http://www.w3.org/2000/svg', 'path'); | ||
| 530 | - //path.setAttribute('class', 'link'); | ||
| 531 | - path.setAttribute('stroke', link.target.color) | ||
| 532 | - path.setAttribute('stroke-width', 5) | ||
| 533 | - path.setAttribute('fill', 'none'); | ||
| 534 | - | ||
| 535 | - | ||
| 536 | - const isCallType = link.source.enumType === 'call'; | ||
| 537 | - if (isCallType) { | ||
| 538 | - path.setAttribute('stroke-dasharray', '10'); | ||
| 539 | - path.setAttribute('stroke-dashoffset', '0'); | ||
| 540 | - | ||
| 541 | - // Add animation element to the path for dashed lines | ||
| 542 | - const animate = document.createElementNS('http://www.w3.org/2000/svg', 'animate'); | ||
| 543 | - animate.setAttribute('attributeName', 'stroke-dashoffset'); | ||
| 544 | - animate.setAttribute('dur', '0.5s'); | ||
| 545 | - animate.setAttribute('repeatCount', 'indefinite'); | ||
| 546 | - animate.setAttribute('from', '20'); | ||
| 547 | - animate.setAttribute('to', '0'); | ||
| 548 | - path.appendChild(animate); | ||
| 549 | - } | ||
| 550 | - | ||
| 551 | - | ||
| 552 | - let dist; | ||
| 553 | - // 使用动态计算的控制点距离来定义曲线,根据源点和终点的X坐标差异动态计算控制点的距离 | ||
| 554 | - if (link.source.type === 'out') { | ||
| 555 | - if (link.source.x - link.target.x > 0) { | ||
| 556 | - dist = 200; // 如果终点在源点的左侧,控制点距离更远 | ||
| 557 | - } else { | ||
| 558 | - dist = Math.abs(link.target.x - link.source.x) * 0.3; // 否则,根据两点间的距离调整控制点距离 | ||
| 559 | - } | ||
| 560 | - const d = | ||
| 561 | - `M${link.source.x} ${link.source.y} C${link.source.x + dist} ${link.source.y} ${link.target.x - dist} ${link.target.y} ${link.target.x} ${link.target.y}`; | ||
| 562 | - path.setAttribute('d', d); | ||
| 563 | - linksContainer.appendChild(path); | ||
| 564 | - } else { | ||
| 565 | - if (link.target.x - link.source.x > 0) { | ||
| 566 | - dist = 200; // 如果终点在源点的右侧,控制点距离更远 | ||
| 567 | - } else { | ||
| 568 | - dist = Math.abs(link.target.x - link.source.x) * 0.3; // 否则,根据两点间的距离调整控制点距离 | ||
| 569 | - } | ||
| 570 | - const d = | ||
| 571 | - `M${link.source.x} ${link.source.y} C${link.source.x - dist} ${link.source.y} ${link.target.x + dist} ${link.target.y} ${link.target.x} ${link.target.y}`; | ||
| 572 | - path.setAttribute('d', d); | ||
| 573 | - linksContainer.appendChild(path); | ||
| 574 | - } | ||
| 575 | - | ||
| 576 | - | ||
| 577 | - // 计算中点 | ||
| 578 | - const midX = (link.source.x + link.target.x) / 2; | ||
| 579 | - const midY = (link.source.y + link.target.y) / 2; | ||
| 580 | - | ||
| 581 | - // 绘制删除图标 | ||
| 582 | - const deleteIcon = document.createElementNS('http://www.w3.org/2000/svg', 'circle'); | ||
| 583 | - deleteIcon.setAttribute('class', 'delete-icon'); | ||
| 584 | - deleteIcon.setAttribute('cx', midX); | ||
| 585 | - deleteIcon.setAttribute('cy', midY); | ||
| 586 | - deleteIcon.setAttribute('style', "cursor: pointer;"); | ||
| 587 | - deleteIcon.setAttribute('r', 10); | ||
| 588 | - deleteIcon.setAttribute('fill', 'red'); | ||
| 589 | - deleteIcon.setAttribute('data-link-level', index); // 用于标识该删除图标对应的线 | ||
| 590 | - linksContainer.appendChild(deleteIcon); | ||
| 591 | - | ||
| 592 | - // 可以选择添加一个×文本在圆圈中间 | ||
| 593 | - const text = document.createElementNS('http://www.w3.org/2000/svg', 'text'); | ||
| 594 | - text.setAttribute('x', midX); | ||
| 595 | - text.setAttribute('y', midY + 5); // 轻微调整以垂直居中 | ||
| 596 | - text.setAttribute('text-anchor', 'middle'); | ||
| 597 | - text.setAttribute('fill', 'white'); | ||
| 598 | - text.setAttribute('font-size', '15px'); | ||
| 599 | - text.setAttribute('pointer-events', 'none'); // 确保点击事件只触发于圆圈上 | ||
| 600 | - text.textContent = '×'; | ||
| 601 | - linksContainer.appendChild(text); | ||
| 602 | - | ||
| 603 | - }); | ||
| 604 | - } | ||
| 605 | - | ||
| 606 | - // 定义变量来追踪是否正在拖动以及拖动的起始位置 | ||
| 607 | - let isPanning = false; | ||
| 608 | - let startPan = { | ||
| 609 | - x: 0, | ||
| 610 | - y: 0 | ||
| 611 | - }; | ||
| 612 | - | ||
| 613 | - // 用于调整SVG视图窗口的变量 | ||
| 614 | - let currentPan = { | ||
| 615 | - x: 0, | ||
| 616 | - y: 0 | ||
| 617 | - }; | ||
| 618 | - | ||
| 619 | - function attachEventListeners() { | ||
| 620 | - | ||
| 621 | - const svgContainer = document.getElementById('svgContainer'); | ||
| 622 | - document.querySelectorAll('.link').forEach(link => { | ||
| 623 | - link.addEventListener('contextmenu', function(e) { | ||
| 624 | - e.preventDefault(); // 阻止默认的右键菜单 | ||
| 625 | - const linkId = e.target.getAttribute('data-link-id'); // 确保你在绘制线条时添加了 data-link-id 属性 | ||
| 626 | - showContextMenu(e.clientX, e.clientY, linkId); | ||
| 627 | - }); | ||
| 628 | - }); | ||
| 629 | - document.getElementById('svgContainer').addEventListener('click', function(e) { | ||
| 630 | - if (e.target.classList.contains('delete-icon')) { | ||
| 631 | - // 获取点击的删除图标对应的线的索引 | ||
| 632 | - const linkIndex = e.target.getAttribute('data-link-level'); | ||
| 633 | - // 从数组中移除该线 | ||
| 634 | - links.splice(linkIndex, 1); | ||
| 635 | - // 重新绘制剩余的线和删除图标 | ||
| 636 | - drawLinks(); | ||
| 637 | - drawCards(); // 如果你的线条与卡片有关联,可能需要重新绘制卡片以更新视图 | ||
| 638 | - } else if (e.target.classList.contains('card-delete-icon')) { | ||
| 639 | - // 获取点击的删除图标对应的卡片ID | ||
| 640 | - const cardId = e.target.getAttribute('data-card-id'); | ||
| 641 | - // 从`cards`数组中移除对应的卡片 | ||
| 642 | - cards = cards.filter(card => card.id !== cardId); | ||
| 643 | - // 同时移除所有与该卡片连接的线 | ||
| 644 | - links = links.filter(link => !(link.source.node.startsWith(cardId) || (link.target && link.target | ||
| 645 | - .node.startsWith(cardId)))); | ||
| 646 | - // 重新绘制卡片和线 | ||
| 647 | - drawLinks(); | ||
| 648 | - drawCards(); | ||
| 649 | - } else { | ||
| 650 | - let targetCardContainer = e.target.closest('.card-container'); | ||
| 651 | - if (targetCardContainer) { | ||
| 652 | - const cardId = targetCardContainer.getAttribute('data-id'); | ||
| 653 | - // 将SVG元素移动到最后,使其在视觉上显示在最前面 | ||
| 654 | - targetCardContainer.parentNode.appendChild(targetCardContainer); | ||
| 655 | - | ||
| 656 | - // 更新cards数组,将点击的卡片移动到数组的末尾 | ||
| 657 | - const cardIndex = cards.findIndex(card => card.id === cardId); | ||
| 658 | - if (cardIndex > -1) { | ||
| 659 | - const card = cards.splice(cardIndex, 1)[0]; | ||
| 660 | - cards.push(card); | ||
| 661 | - } | ||
| 662 | - | ||
| 663 | - // 这里不需要立即调用drawCards或drawLinks, | ||
| 664 | - // 除非你需要根据cards数组的新顺序进行其他更新 | ||
| 665 | - } | ||
| 666 | - } | ||
| 667 | - }); | ||
| 668 | - | ||
| 669 | - svgContainer.addEventListener('contextmenu', function(e) { | ||
| 670 | - e.preventDefault(); // 阻止右键菜单 | ||
| 671 | - }); | ||
| 672 | - | ||
| 673 | - svgContainer.addEventListener('mousedown', e => { | ||
| 674 | - | ||
| 675 | - // 检查是否是鼠标右键点击 | ||
| 676 | - | ||
| 677 | - const target = e.target; | ||
| 678 | - if (e.button === 2) { | ||
| 679 | - isPanning = true; | ||
| 680 | - startPan.x = e.clientX - currentPan.x; | ||
| 681 | - startPan.y = e.clientY - currentPan.y; | ||
| 682 | - } else if (target | ||
| 683 | - | ||
| 684 | - .classList.contains('card') || target.tagName === 'text') { | ||
| 685 | - const cardContainer = target.closest('.card-container'); | ||
| 686 | - const cardId = cardContainer.getAttribute('data-id'); | ||
| 687 | - startDragCard(e, cardId); | ||
| 688 | - } | ||
| 689 | - }); | ||
| 690 | - document.addEventListener('mousemove', e => { | ||
| 691 | - if (isPanning) { | ||
| 692 | - // 正确计算新的视图窗口位置 | ||
| 693 | - currentPan.x = e.clientX - startPan.x; | ||
| 694 | - currentPan.y = e.clientY - startPan.y; | ||
| 695 | - | ||
| 696 | - // 正确调整SVG的viewBox来实现拖动效果 | ||
| 697 | - // 这里需要更新的是开始拖动的点,而不是当前的点,因此我们反向更新 | ||
| 698 | - svgContainer.setAttribute('viewBox', | ||
| 699 | - `${-currentPan.x} ${-currentPan.y} ${svgContainer.clientWidth} ${svgContainer.clientHeight}` | ||
| 700 | - ); | ||
| 701 | - svgContainer.style.backgroundPosition = `${currentPan.x % 100}px ${currentPan.y % 100}px`; | ||
| 702 | - } else if (isDragging) { | ||
| 703 | - moveCard(e); | ||
| 704 | - } else if (isLinking && currentLink) { | ||
| 705 | - updateLink(e); | ||
| 706 | - } | ||
| 707 | - }); | ||
| 708 | - | ||
| 709 | - document.addEventListener('mouseup', e => { | ||
| 710 | - if (e.button === 2) { | ||
| 711 | - console.log(currentPan); | ||
| 712 | - isPanning = false; | ||
| 713 | - } else if (isDragging) { | ||
| 714 | - endDragCard(); | ||
| 715 | - } else if (isLinking) { | ||
| 716 | - endDragLink(e); | ||
| 717 | - } | ||
| 718 | - }); | ||
| 719 | - } | ||
| 720 | - | ||
| 721 | - function startDragCard(e, cardId) { | ||
| 722 | - isDragging = true; | ||
| 723 | - const card = cards.find(c => c.id === cardId); | ||
| 724 | - currentCard = card; | ||
| 725 | - | ||
| 726 | - const svgRect = svgContainer.getBoundingClientRect(); | ||
| 727 | - dragOffsetX = e.clientX - svgRect.left - card.x; | ||
| 728 | - dragOffsetY = e.clientY - svgRect.top - card.y; | ||
| 729 | - } | ||
| 730 | - | ||
| 731 | - function moveCard(e) { | ||
| 732 | - const svgRect = svgContainer.getBoundingClientRect(); | ||
| 733 | - currentCard.x = e.clientX - svgRect.left - dragOffsetX; | ||
| 734 | - currentCard.y = e.clientY - svgRect.top - dragOffsetY; | ||
| 735 | - | ||
| 736 | - // Update link positions associated with the currentCard | ||
| 737 | - links.forEach(link => { | ||
| 738 | - if (link.source.node.startsWith(currentCard.id)) { | ||
| 739 | - // 根据节点ID更新链接的源位置 | ||
| 740 | - const nodeIndex = parseInt(link.source.node.split('-node')[1]) - 1; | ||
| 741 | - const nodeConfig = currentCard.nodes[nodeIndex]; // 获取当前节点的配置 | ||
| 742 | - const nodeSpacing = 50; // 节点间隔,应与drawCards函数中使用的相同 | ||
| 743 | - const topBottomPadding = 20; // 顶部和底部的边距,应与drawCards函数中使用的相同 | ||
| 744 | - link.source.x = currentCard.x + (nodeConfig.type === "in" ? 0 : 150); // 根据节点类型调整x坐标 | ||
| 745 | - link.source.y = 30 + currentCard.y + topBottomPadding + (nodeConfig.level + 1) * nodeSpacing - ( | ||
| 746 | - nodeSpacing / 2); // 根据节点的index调整y坐标 | ||
| 747 | - } | ||
| 748 | - if (link.target && link.target.node.startsWith(currentCard.id)) { | ||
| 749 | - // 根据节点ID更新链接的目标位置 | ||
| 750 | - const nodeIndex = parseInt(link.target.node.split('-node')[1]) - 1; | ||
| 751 | - const nodeConfig = currentCard.nodes[nodeIndex]; // 获取当前节点的配置 | ||
| 752 | - link.target.x = currentCard.x + (nodeConfig.type === "in" ? 0 : 150); // 根据节点类型调整x坐标 | ||
| 753 | - link.target.y = 30 + currentCard.y + 20 + (nodeConfig.level + 1) * 50 - (50 / | ||
| 754 | - 2); // 根据节点的index调整y坐标 | ||
| 755 | - } | ||
| 756 | - }); | ||
| 757 | - | ||
| 758 | - drawLinks(); // Redraw links to reflect updated positions | ||
| 759 | - drawCards(); // Redraw cards and nodes | ||
| 760 | - } | ||
| 761 | - | ||
| 762 | - | ||
| 763 | - | ||
| 764 | - function endDragCard() { | ||
| 765 | - isDragging = false; | ||
| 766 | - } | ||
| 767 | - | ||
| 768 | - function getNodeCurrentConnections(nodeId) { | ||
| 769 | - let count = 0; | ||
| 770 | - links.forEach(link => { | ||
| 771 | - if (link.source.node === nodeId || (link.target && link.target.node === nodeId)) { | ||
| 772 | - count++; | ||
| 773 | - } | ||
| 774 | - }); | ||
| 775 | - return count; | ||
| 776 | - } | ||
| 777 | - | ||
| 778 | - function startDragLink(e) { | ||
| 779 | - e.stopPropagation(); // Prevent card drag | ||
| 780 | - | ||
| 781 | - const nodeId = e.target.getAttribute('data-node-id'); | ||
| 782 | - const cardId = e.target.getAttribute('data-card-id'); | ||
| 783 | - const card = cards.find(c => c.id === cardId); | ||
| 784 | - const nodeElement = e.target; | ||
| 785 | - const node = card.nodes.find(n => `${card.id}-node${card.nodes.indexOf(n) + 1}` === nodeId); | ||
| 786 | - | ||
| 787 | - | ||
| 788 | - // 检查源节点是否允许发起新的连接 | ||
| 789 | - const currentConnections = getNodeCurrentConnections(nodeId); | ||
| 790 | - if (node.multiConnected !== -1 && currentConnections >= node.multiConnected) { | ||
| 791 | - console.log('此节点不允许更多的连接。'); | ||
| 792 | - return; // 不允许创建新的连接 | ||
| 793 | - } | ||
| 794 | - isLinking = true; | ||
| 795 | - | ||
| 796 | - const svgRect = svgContainer.getBoundingClientRect(); | ||
| 797 | - const nodeX = e.clientX - svgRect.left; | ||
| 798 | - const nodeY = e.clientY - svgRect.top; | ||
| 799 | - | ||
| 800 | - currentLink = { | ||
| 801 | - source: { | ||
| 802 | - node: nodeId, | ||
| 803 | - x: nodeX, | ||
| 804 | - y: nodeY, | ||
| 805 | - color: nodeElement.getAttribute('fill'), | ||
| 806 | - type: node.type, | ||
| 807 | - enumType: node.enumType | ||
| 808 | - }, | ||
| 809 | - target: null | ||
| 810 | - }; | ||
| 811 | - } | ||
| 812 | - | ||
| 813 | - function updateLink(e) { | ||
| 814 | - const svgRect = svgContainer.getBoundingClientRect(); | ||
| 815 | - currentLink.target = { | ||
| 816 | - x: e.clientX - svgRect.left, | ||
| 817 | - y: e.clientY - svgRect.top | ||
| 818 | - }; | ||
| 819 | - drawCurrentLink(); | ||
| 820 | - } | ||
| 821 | - | ||
| 822 | - function endDragLink(e) { | ||
| 823 | - isLinking = false; | ||
| 824 | - const svgRect = svgContainer.getBoundingClientRect(); | ||
| 825 | - const x = e.clientX - svgRect.left; | ||
| 826 | - const y = e.clientY - svgRect.top; | ||
| 827 | - | ||
| 828 | - // 默认情况下,假设目标节点就是e.target | ||
| 829 | - let targetNode = e.target; | ||
| 830 | - | ||
| 831 | - // 检查e.target是否是我们期望的节点类型,如果不是,则尝试使用document.elementFromPoint | ||
| 832 | - if (!targetNode.classList.contains('node')) { | ||
| 833 | - e.target.style.display = 'none'; | ||
| 834 | - targetNode = document.elementFromPoint(e.clientX, e.clientY); | ||
| 835 | - e.target.style.display = ''; | ||
| 836 | - } | ||
| 837 | - | ||
| 838 | - let validTargetFound = false; | ||
| 839 | - | ||
| 840 | - // 进行节点的有效性判断 | ||
| 841 | - if (targetNode && targetNode.classList.contains('node')) { | ||
| 842 | - const sourceNodeId = currentLink.source.node; | ||
| 843 | - const targetNodeId = targetNode.getAttribute('data-node-id'); | ||
| 844 | - | ||
| 845 | - // 从节点ID分解出卡片ID和节点索引 | ||
| 846 | - const sourceNodeParts = sourceNodeId.split('-node'); | ||
| 847 | - const targetNodeParts = targetNodeId.split('-node'); | ||
| 848 | - const sourceCard = cards.find(card => card.id === sourceNodeParts[0]); | ||
| 849 | - const targetCard = cards.find(card => card.id === targetNodeParts[0]); | ||
| 850 | - | ||
| 851 | - // 根据节点ID找到对应的节点对象 | ||
| 852 | - const sourceNodeIndex = parseInt(sourceNodeParts[1]) - 1; | ||
| 853 | - const targetNodeIndex = parseInt(targetNodeParts[1]) - 1; | ||
| 854 | - const sourceNode = sourceCard.nodes[sourceNodeIndex]; | ||
| 855 | - const targetNodeObj = targetCard.nodes[targetNodeIndex]; | ||
| 856 | - | ||
| 857 | - // 检查目标节点是否允许接受新的连接 | ||
| 858 | - const targetCurrentConnections = getNodeCurrentConnections(targetNodeId); | ||
| 859 | - if (targetNodeObj.multiConnected !== -1 && targetCurrentConnections >= targetNodeObj.multiConnected) { | ||
| 860 | - console.log('目标节点不允许更多的连接。'); | ||
| 861 | - // 移除临时绘制的连接线 | ||
| 862 | - const tempLink = document.querySelector('.temp-link'); | ||
| 863 | - if (tempLink) { | ||
| 864 | - tempLink.remove(); | ||
| 865 | - } | ||
| 866 | - currentLink = null; | ||
| 867 | - drawLinks(); | ||
| 868 | - return; | ||
| 869 | - } | ||
| 870 | - // 确保目标节点不是起始节点自身,避免自连接 | ||
| 871 | - if (currentLink.source.node !== targetNodeId && sourceNode.enumType === targetNodeObj.enumType) { | ||
| 872 | - validTargetFound = true; | ||
| 873 | - currentLink.source.enumType = sourceNode.enumType; | ||
| 874 | - currentLink.source.x = currentLink.source.x - currentPan.x; | ||
| 875 | - currentLink.source.y = currentLink.source.y - currentPan.y; | ||
| 876 | - // 更新连接的目标信息,并保存该连接 | ||
| 877 | - links.push({ | ||
| 878 | - ...currentLink, | ||
| 879 | - target: { | ||
| 880 | - node: targetNodeId, | ||
| 881 | - x: x - currentPan.x, | ||
| 882 | - y: y - currentPan.y, | ||
| 883 | - color: sourceNode.color, | ||
| 884 | - enumType: sourceNode.enumType | ||
| 885 | - } | ||
| 886 | - }); | ||
| 887 | - } | ||
| 888 | - } else { | ||
| 889 | - const sourceNodeId = currentLink.source.node; | ||
| 890 | - const sourceNodeParts = sourceNodeId.split('-node'); | ||
| 891 | - const sourceCard = cards.find(card => card.id === sourceNodeParts[0]); | ||
| 892 | - const sourceNodeIndex = parseInt(sourceNodeParts[1]) - 1; | ||
| 893 | - const sourceNode = sourceCard.nodes[sourceNodeIndex]; | ||
| 894 | - currentLink.source.enumType = sourceNode.enumType; | ||
| 895 | - showCardCreationModal(e.clientX, e.clientY, currentLink.source); | ||
| 896 | - | ||
| 897 | - } | ||
| 898 | - | ||
| 899 | - const tempLink = document.querySelector('.temp-link'); | ||
| 900 | - if (tempLink) { | ||
| 901 | - tempLink.remove(); | ||
| 902 | - } | ||
| 903 | - currentLink = null; | ||
| 904 | - drawLinks(); | ||
| 905 | - } | ||
| 906 | - | ||
| 907 | - | ||
| 908 | - | ||
| 909 | - | ||
| 910 | - | ||
| 911 | - | ||
| 912 | - // 更新drawCurrentLink函数,增加线宽 | ||
| 913 | - // 更新drawCurrentLink函数,增加线宽 | ||
| 914 | - function drawCurrentLink() { | ||
| 915 | - const tempLink = document.querySelector('.temp-link'); | ||
| 916 | - if (tempLink) tempLink.remove(); | ||
| 917 | - | ||
| 918 | - if (!currentLink || !currentLink.target) return; | ||
| 919 | - | ||
| 920 | - const svgContainer = document.getElementById('svgContainer'); | ||
| 921 | - const path = document.createElementNS('http://www.w3.org/2000/svg', 'path'); | ||
| 922 | - path.setAttribute('class', 'temp-link'); | ||
| 923 | - // 设置等宽线属性 | ||
| 924 | - path.setAttribute('stroke', currentLink.source.color); | ||
| 925 | - path.setAttribute('stroke-width', 5); | ||
| 926 | - path.setAttribute('fill', 'none'); | ||
| 927 | - | ||
| 928 | - // 计算考虑了平移偏移的起点和终点 | ||
| 929 | - const adjustedSourceX = currentLink.source.x - currentPan.x; | ||
| 930 | - const adjustedSourceY = currentLink.source.y - currentPan.y; | ||
| 931 | - const adjustedTargetX = currentLink.target.x - currentPan.x; | ||
| 932 | - const adjustedTargetY = currentLink.target.y - currentPan.y; | ||
| 933 | - | ||
| 934 | - // 更新路径以使用调整后的坐标 | ||
| 935 | - if (currentLink.source.type === 'out') { | ||
| 936 | - const d = | ||
| 937 | - `M${adjustedSourceX},${adjustedSourceY} C${adjustedSourceX + 100},${adjustedSourceY} ${adjustedTargetX - 100},${adjustedTargetY} ${adjustedTargetX},${adjustedTargetY}`; | ||
| 938 | - path.setAttribute('d', d); | ||
| 939 | - } else { | ||
| 940 | - const d = | ||
| 941 | - `M${adjustedSourceX},${adjustedSourceY} C${adjustedSourceX - 100},${adjustedSourceY} ${adjustedTargetX + 100},${adjustedTargetY} ${adjustedTargetX},${adjustedTargetY}`; | ||
| 942 | - path.setAttribute('d', d); | ||
| 943 | - } | ||
| 944 | - | ||
| 945 | - svgContainer.appendChild(path); | ||
| 946 | - } | ||
| 947 | - | ||
| 948 | - function attachNodeEventListeners() { | ||
| 949 | - document.querySelectorAll('.node').forEach(node => { | ||
| 950 | - node.addEventListener('mousedown', startDragLink); | ||
| 951 | - }); | ||
| 952 | - } | ||
| 953 | - | ||
| 954 | - function populateCardTypeList(mouseX, mouseY, sourceNode) { | ||
| 955 | - const listElement = document.getElementById('card-type-list'); | ||
| 956 | - listElement.innerHTML = ''; // 清空现有列表项 | ||
| 957 | - const addedTypes = new Set(); | ||
| 958 | - | ||
| 959 | - cards.forEach(card => { | ||
| 960 | - if (!addedTypes.has(card.type)) { | ||
| 961 | - const listItem = document.createElement('li'); | ||
| 962 | - listItem.tabIndex = 0; // 使元素能够获得焦点,以便能够监听键盘事件 | ||
| 963 | - listItem.textContent = card.label; // 使用卡片的标签或类型 | ||
| 964 | - listItem.onclick = function() { | ||
| 965 | - createNewCard(card, mouseX, mouseY, sourceNode); | ||
| 966 | - hideCardCreationModal(); // 新建卡片后隐藏模态框 | ||
| 967 | - }; | ||
| 968 | - listItem.onkeydown = function(event) { | ||
| 969 | - if (event.key === 'Enter') { | ||
| 970 | - createNewCard(card, mouseX, mouseY, sourceNode); | ||
| 971 | - hideCardCreationModal(); // 新建卡片后隐藏模态框 | ||
| 972 | - } | ||
| 973 | - }; | ||
| 974 | - listElement.appendChild(listItem); | ||
| 975 | - addedTypes.add(card.type); | ||
| 976 | - } | ||
| 977 | - }); | ||
| 978 | - } | ||
| 979 | - | ||
| 980 | - | ||
| 981 | - function showCardCreationModal(mouseX, mouseY, sourceNode) { | ||
| 982 | - populateCardTypeList(mouseX, mouseY, sourceNode); // 填充卡片类型列表 | ||
| 983 | - const modal = document.getElementById('card-creation-modal'); | ||
| 984 | - // 在这里添加取消按钮 | ||
| 985 | - if (!document.getElementById('cancel-btn')) { | ||
| 986 | - const cancelButton = document.createElement('button'); | ||
| 987 | - cancelButton.id = 'cancel-btn'; | ||
| 988 | - cancelButton.textContent = '取消'; | ||
| 989 | - cancelButton.onclick = function() { | ||
| 990 | - hideCardCreationModal(); | ||
| 991 | - }; | ||
| 992 | - modal.appendChild(cancelButton); | ||
| 993 | - } | ||
| 994 | - | ||
| 995 | - | ||
| 996 | - | ||
| 997 | - // 设置弹出框的位置 | ||
| 998 | - modal.style.left = mouseX + 'px'; | ||
| 999 | - modal.style.top = mouseY + 'px'; | ||
| 1000 | - modal.style.display = 'block'; // 显示弹窗 | ||
| 1001 | - } | ||
| 1002 | - | ||
| 1003 | - function createNewCard(cardTemplate, mouseX, mouseY, sourceNode) { | ||
| 1004 | - const newCard = { | ||
| 1005 | - ...cardTemplate, | ||
| 1006 | - nodes: JSON.parse(JSON.stringify(cardTemplate.nodes)), // 深拷贝nodes属性 | ||
| 1007 | - id: 'card' + (cards.length + 1) | ||
| 1008 | - }; | ||
| 1009 | - // 将每个node的value设置为空字符串 | ||
| 1010 | - newCard.nodes.forEach(node => { | ||
| 1011 | - node.value = ''; | ||
| 1012 | - }); | ||
| 1013 | - newCard.x = mouseX - 75 - currentPan.x; // 调整为鼠标中心 | ||
| 1014 | - newCard.y = mouseY - 15 - currentPan.y; // 调整为鼠标中心 | ||
| 1015 | - cards.push(newCard); // 将新创建的卡片添加到卡片列表中 | ||
| 1016 | - | ||
| 1017 | - // 如果提供了sourceNode,找到新卡片的合适target node并创建连接 | ||
| 1018 | - if (sourceNode) { | ||
| 1019 | - sourceNode.x -= currentPan.x; | ||
| 1020 | - sourceNode.y -= currentPan.y; | ||
| 1021 | - let targetNode = newCard.nodes.find(node => node.enumType === sourceNode.enumType && node.type === 'in'); | ||
| 1022 | - if (targetNode) { | ||
| 1023 | - links.push({ | ||
| 1024 | - source: sourceNode, | ||
| 1025 | - target: { | ||
| 1026 | - node: `${newCard.id}-node${newCard.nodes.indexOf(targetNode) + 1}`, | ||
| 1027 | - x: newCard.x + (targetNode.type === 'in' ? 0 : 150), | ||
| 1028 | - y: newCard.y + 30 + 20 + (targetNode.level + 1) * 50 - 25, | ||
| 1029 | - color: targetNode.color, | ||
| 1030 | - enumType: targetNode.enumType | ||
| 1031 | - } | ||
| 1032 | - }); | ||
| 1033 | - } | ||
| 1034 | - } | ||
| 1035 | - | ||
| 1036 | - | ||
| 1037 | - drawLinks(); | ||
| 1038 | - drawCards(); | ||
| 1039 | - } | ||
| 1040 | - | ||
| 1041 | - | ||
| 1042 | - | ||
| 1043 | - function hideCardCreationModal() { | ||
| 1044 | - const modal = document.getElementById('card-creation-modal'); | ||
| 1045 | - modal.style.display = 'none'; // 隐藏弹窗 | ||
| 1046 | - } | ||
| 1047 | - | ||
| 1048 | - init(); | ||
| 1049 | - </script> | ||
| 1050 | - </body> | ||
| 1051 | - | ||
| 1052 | -</html>--> |
src/main/resources/static/pages/zndd_yuan/demo.html deleted
100644 → 0
| 1 | -<!DOCTYPE html> | ||
| 2 | -<html lang="zh-cn"> | ||
| 3 | - | ||
| 4 | - <head> | ||
| 5 | - <meta charset="UTF-8"> | ||
| 6 | - <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||
| 7 | - <title>Blueprint</title> | ||
| 8 | - <style> | ||
| 9 | - body, | ||
| 10 | - html { | ||
| 11 | - margin: 0; | ||
| 12 | - padding: 0; | ||
| 13 | - width: 100%; | ||
| 14 | - height: 100%; | ||
| 15 | - overflow: hidden; | ||
| 16 | - } | ||
| 17 | - | ||
| 18 | - /* 弹窗容器样式 */ | ||
| 19 | - #card-creation-modal { | ||
| 20 | - border: 1px solid #444; | ||
| 21 | - background: linear-gradient(145deg, #333, #555); | ||
| 22 | - padding: 5px; | ||
| 23 | - z-index: 100; | ||
| 24 | - box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); | ||
| 25 | - border-radius: 5px; | ||
| 26 | - overflow: hidden; | ||
| 27 | - margin: 0; | ||
| 28 | - user-select: none; | ||
| 29 | - } | ||
| 30 | - | ||
| 31 | - #card-type-list { | ||
| 32 | - | ||
| 33 | - padding-left: 0px; | ||
| 34 | - } | ||
| 35 | - | ||
| 36 | - /* 列表项基础样式 */ | ||
| 37 | - #card-type-list li { | ||
| 38 | - list-style: none; | ||
| 39 | - /* 去除列表项目符号 */ | ||
| 40 | - padding: 8px 15px; | ||
| 41 | - /* 减少垂直内边距使其更紧凑 */ | ||
| 42 | - border-bottom: 1px solid #666; | ||
| 43 | - /* 暗色底部边框线 */ | ||
| 44 | - color: #ddd; | ||
| 45 | - /* 暗色系字体颜色 */ | ||
| 46 | - cursor: pointer; | ||
| 47 | - /* 鼠标指针样式 */ | ||
| 48 | - margin-left: 0; | ||
| 49 | - /* 消除左边间隙 */ | ||
| 50 | - | ||
| 51 | - } | ||
| 52 | - | ||
| 53 | - /* 列表项高亮样式 */ | ||
| 54 | - #card-type-list li:hover, | ||
| 55 | - #card-type-list li:focus { | ||
| 56 | - background-color: #777; | ||
| 57 | - /* 暗色背景颜色 */ | ||
| 58 | - color: #fff; | ||
| 59 | - /* 高亮字体颜色 */ | ||
| 60 | - } | ||
| 61 | - | ||
| 62 | - /* 最后一个列表项的底部边框 */ | ||
| 63 | - #card-type-list li:last-child { | ||
| 64 | - border-bottom: none; | ||
| 65 | - } | ||
| 66 | - | ||
| 67 | - .grid-background { | ||
| 68 | - background-color: #292929; | ||
| 69 | - background-image: | ||
| 70 | - linear-gradient(to right, black 1px, transparent 1px), | ||
| 71 | - linear-gradient(to bottom, black 1px, transparent 1px), | ||
| 72 | - linear-gradient(to right, #404040 1px, transparent 1px), | ||
| 73 | - linear-gradient(to bottom, #404040 1px, transparent 1px); | ||
| 74 | - background-size: | ||
| 75 | - 100px 100px, | ||
| 76 | - 100px 100px, | ||
| 77 | - 10px 10px, | ||
| 78 | - 10px 10px; | ||
| 79 | - width: 100%; | ||
| 80 | - height: 100%; | ||
| 81 | - } | ||
| 82 | - | ||
| 83 | - .draggable { | ||
| 84 | - cursor: grab; | ||
| 85 | - } | ||
| 86 | - | ||
| 87 | - .node { | ||
| 88 | - | ||
| 89 | - cursor: pointer; | ||
| 90 | - } | ||
| 91 | - | ||
| 92 | - .link { | ||
| 93 | - stroke: black; | ||
| 94 | - stroke-width: 2; | ||
| 95 | - } | ||
| 96 | - | ||
| 97 | - .card { | ||
| 98 | - /* fill: lightgrey; | ||
| 99 | - stroke: black; */ | ||
| 100 | - | ||
| 101 | - stroke-width: 1; | ||
| 102 | - user-select: none; | ||
| 103 | - } | ||
| 104 | - | ||
| 105 | - text { | ||
| 106 | - pointer-events: none; | ||
| 107 | - user-select: none; | ||
| 108 | - } | ||
| 109 | - </style> | ||
| 110 | - </head> | ||
| 111 | - | ||
| 112 | - <body> | ||
| 113 | - <!-- 弹窗容器 --> | ||
| 114 | - <div id="card-creation-modal" | ||
| 115 | - style="display:none; position: absolute; border: 1px solid #ccc; background-color: #fff; padding: 10px; z-index: 100;"> | ||
| 116 | - <!-- 搜索结果列表 --> | ||
| 117 | - <ul id="card-type-list"></ul> | ||
| 118 | - </div> | ||
| 119 | - | ||
| 120 | - | ||
| 121 | - | ||
| 122 | - <svg style="width: 100%;height: 100%;" id="svgContainer" class="grid-background"> | ||
| 123 | - <g id="linksContainer"></g> <!-- 用于存放线条 --> | ||
| 124 | - <g id="cardsContainer"></g> <!-- 用于存放卡片 --> | ||
| 125 | - </svg> | ||
| 126 | - | ||
| 127 | - <script> | ||
| 128 | - var cards = [{ | ||
| 129 | - id: 'card0', | ||
| 130 | - x: 0, | ||
| 131 | - y: 0, | ||
| 132 | - label: 'Start', | ||
| 133 | - type: "start", | ||
| 134 | - nodes: [{ | ||
| 135 | - type: "out", | ||
| 136 | - level: 0, | ||
| 137 | - enumType: 'call', | ||
| 138 | - color: '#fff', | ||
| 139 | - multiConnected: 1 | ||
| 140 | - }, ], | ||
| 141 | - titleBarColor: ['#84fab0', '#8fd3f4'] | ||
| 142 | - }, | ||
| 143 | - { | ||
| 144 | - id: 'card1', | ||
| 145 | - x: 100, | ||
| 146 | - y: 200, | ||
| 147 | - label: 'Condition', | ||
| 148 | - type: "condition", | ||
| 149 | - nodes: [{ | ||
| 150 | - type: "in", | ||
| 151 | - level: 0, | ||
| 152 | - enumType: 'call', | ||
| 153 | - color: '#fff' | ||
| 154 | - }, | ||
| 155 | - { | ||
| 156 | - type: "in", | ||
| 157 | - level: 1, | ||
| 158 | - enumType: 'int', | ||
| 159 | - color: '#28C76F', | ||
| 160 | - slot: 'input', | ||
| 161 | - label: 'int', | ||
| 162 | - multiConnected: 1 | ||
| 163 | - }, | ||
| 164 | - { | ||
| 165 | - type: "in", | ||
| 166 | - level: 2, | ||
| 167 | - enumType: 'int', | ||
| 168 | - color: '#28C76F', | ||
| 169 | - slot: 'input', | ||
| 170 | - label: 'int', | ||
| 171 | - multiConnected: 1 | ||
| 172 | - }, | ||
| 173 | - { | ||
| 174 | - type: "out", | ||
| 175 | - level: 0, | ||
| 176 | - enumType: 'call', | ||
| 177 | - color: '#fff' | ||
| 178 | - }, | ||
| 179 | - { | ||
| 180 | - type: "out", | ||
| 181 | - level: 1, | ||
| 182 | - enumType: 'bool', | ||
| 183 | - color: '#0396FF', | ||
| 184 | - label: 'bool', | ||
| 185 | - multiConnected: 1 | ||
| 186 | - }, | ||
| 187 | - ], | ||
| 188 | - titleBarColor: ['#fccb90', '#d57eeb'] | ||
| 189 | - }, | ||
| 190 | - { | ||
| 191 | - id: 'card2', | ||
| 192 | - x: 300, | ||
| 193 | - y: 400, | ||
| 194 | - label: 'BoolToString', | ||
| 195 | - type: "call", | ||
| 196 | - nodes: [{ | ||
| 197 | - type: "in", | ||
| 198 | - level: 0, | ||
| 199 | - enumType: 'call', | ||
| 200 | - color: '#fff' | ||
| 201 | - }, | ||
| 202 | - { | ||
| 203 | - type: "in", | ||
| 204 | - level: 1, | ||
| 205 | - enumType: 'bool', | ||
| 206 | - color: '#0396FF', | ||
| 207 | - label: 'bool', | ||
| 208 | - multiConnected: 1 | ||
| 209 | - }, | ||
| 210 | - { | ||
| 211 | - type: "out", | ||
| 212 | - level: 0, | ||
| 213 | - enumType: 'call', | ||
| 214 | - color: '#fff' | ||
| 215 | - }, | ||
| 216 | - { | ||
| 217 | - type: "out", | ||
| 218 | - level: 1, | ||
| 219 | - enumType: 'string', | ||
| 220 | - color: '#DE4313', | ||
| 221 | - label: 'string', | ||
| 222 | - multiConnected: 1 | ||
| 223 | - } | ||
| 224 | - ], | ||
| 225 | - titleBarColor: ['#3C8CE7', '#00EAFF'] | ||
| 226 | - | ||
| 227 | - }, | ||
| 228 | - { | ||
| 229 | - id: 'card3', | ||
| 230 | - x: 100, | ||
| 231 | - y: 300, | ||
| 232 | - label: 'Print', | ||
| 233 | - type: "print", | ||
| 234 | - nodes: [{ | ||
| 235 | - type: "in", | ||
| 236 | - level: 0, | ||
| 237 | - enumType: 'call', | ||
| 238 | - color: '#fff' | ||
| 239 | - }, | ||
| 240 | - { | ||
| 241 | - type: "in", | ||
| 242 | - level: 1, | ||
| 243 | - enumType: 'string', | ||
| 244 | - color: '#DE4313', | ||
| 245 | - label: 'string', | ||
| 246 | - multiConnected: 1 | ||
| 247 | - } | ||
| 248 | - ], | ||
| 249 | - titleBarColor: ['#f6d365', '#fda085'] | ||
| 250 | - } | ||
| 251 | - ]; | ||
| 252 | - | ||
| 253 | - | ||
| 254 | - var links = []; | ||
| 255 | - var currentLink = null; | ||
| 256 | - var isDragging = false; | ||
| 257 | - var isLinking = false; | ||
| 258 | - var dragOffsetX, dragOffsetY; | ||
| 259 | - var currentCard; | ||
| 260 | - | ||
| 261 | - function init() { | ||
| 262 | - drawLinks(); | ||
| 263 | - drawCards(); | ||
| 264 | - attachEventListeners(); | ||
| 265 | - } | ||
| 266 | - | ||
| 267 | - function drawCards() { | ||
| 268 | - const cardsContainer = document.getElementById('cardsContainer'); | ||
| 269 | - cardsContainer.innerHTML = ''; // 清除现有的卡片 | ||
| 270 | - | ||
| 271 | - cards.forEach(card => { | ||
| 272 | - | ||
| 273 | - //创建标题栏渐变色 | ||
| 274 | - const defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs'); | ||
| 275 | - const linearGradient = document.createElementNS('http://www.w3.org/2000/svg', 'linearGradient'); | ||
| 276 | - linearGradient.setAttribute('id', `titleGradient-${card.id}`); | ||
| 277 | - linearGradient.setAttribute('x1', '0%'); // 渐变起点的x坐标 | ||
| 278 | - linearGradient.setAttribute('y1', '100%'); // 渐变起点的y坐标 | ||
| 279 | - linearGradient.setAttribute('x2', '100%'); // 渐变终点的x坐标 | ||
| 280 | - linearGradient.setAttribute('y2', '0%'); // 渐变终点的y坐标 | ||
| 281 | - | ||
| 282 | - const stop1 = document.createElementNS('http://www.w3.org/2000/svg', 'stop'); | ||
| 283 | - stop1.setAttribute('offset', '10%'); | ||
| 284 | - stop1.setAttribute('style', `stop-color: ${card.titleBarColor[0]}; stop-opacity: 1`); | ||
| 285 | - linearGradient.appendChild(stop1); | ||
| 286 | - | ||
| 287 | - const stop2 = document.createElementNS('http://www.w3.org/2000/svg', 'stop'); | ||
| 288 | - stop2.setAttribute('offset', '100%'); | ||
| 289 | - stop2.setAttribute('style', `stop-color: ${card.titleBarColor[1]}; stop-opacity: 1`); | ||
| 290 | - linearGradient.appendChild(stop2); | ||
| 291 | - | ||
| 292 | - defs.appendChild(linearGradient); | ||
| 293 | - cardsContainer.appendChild(defs); | ||
| 294 | - | ||
| 295 | - | ||
| 296 | - | ||
| 297 | - const nodeSpacing = 50; | ||
| 298 | - const topBottomPadding = 20; | ||
| 299 | - const titleBarHeight = 30; // 标题栏高度 | ||
| 300 | - const maxLevel = Math.max(...card.nodes.map(node => node.level)) + 1; | ||
| 301 | - const cardHeight = maxLevel * nodeSpacing + topBottomPadding * 2 + titleBarHeight; | ||
| 302 | - | ||
| 303 | - const group = document.createElementNS('http://www.w3.org/2000/svg', 'g'); | ||
| 304 | - group.setAttribute('class', 'draggable card-container'); | ||
| 305 | - group.setAttribute('data-id', card.id); | ||
| 306 | - group.setAttribute('user-select', 'none'); | ||
| 307 | - group.setAttribute('transform', `translate(${card.x},${card.y})`); | ||
| 308 | - | ||
| 309 | - const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect'); | ||
| 310 | - rect.setAttribute('fill', '#222'); | ||
| 311 | - rect.setAttribute('width', 150); | ||
| 312 | - rect.setAttribute('style', 'cursor: auto;'); | ||
| 313 | - rect.setAttribute('height', cardHeight); | ||
| 314 | - rect.setAttribute('rx', 10); // 圆角 | ||
| 315 | - rect.setAttribute('ry', 10); | ||
| 316 | - group.appendChild(rect); | ||
| 317 | - | ||
| 318 | - // 使用path绘制带有指定圆角的矩形 | ||
| 319 | - // 创建标题栏 | ||
| 320 | - const titleBarWidth = 150; | ||
| 321 | - const borderRadius = 10; // 圆角大小 | ||
| 322 | - const titleBar = document.createElementNS('http://www.w3.org/2000/svg', 'path'); | ||
| 323 | - const dValue = `M 0,${borderRadius} | ||
| 324 | - a ${borderRadius},${borderRadius} 0 0 1 ${borderRadius},-${borderRadius} | ||
| 325 | - h ${titleBarWidth - borderRadius * 2} | ||
| 326 | - a ${borderRadius},${borderRadius} 0 0 1 ${borderRadius},${borderRadius} | ||
| 327 | - v ${titleBarHeight - borderRadius} | ||
| 328 | - h -${titleBarWidth} | ||
| 329 | - z`; | ||
| 330 | - titleBar.setAttribute('class', 'card'); | ||
| 331 | - titleBar.setAttribute('d', dValue); | ||
| 332 | - titleBar.setAttribute('fill', `url(#titleGradient-${card.id})`); | ||
| 333 | - group.appendChild(titleBar); | ||
| 334 | - | ||
| 335 | - const text = document.createElementNS('http://www.w3.org/2000/svg', 'text'); | ||
| 336 | - text.setAttribute('x', titleBarWidth / 2); | ||
| 337 | - text.setAttribute('y', titleBarHeight / 2); | ||
| 338 | - text.setAttribute('text-anchor', 'middle'); | ||
| 339 | - text.setAttribute('alignment-baseline', 'middle'); | ||
| 340 | - text.textContent = card.label; | ||
| 341 | - group.appendChild(text); | ||
| 342 | - | ||
| 343 | - card.nodes.forEach((node, index) => { | ||
| 344 | - | ||
| 345 | - | ||
| 346 | - const circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle'); | ||
| 347 | - circle.setAttribute('class', 'node'); | ||
| 348 | - circle.setAttribute('cx', node.type === 'in' ? 0 : 150); | ||
| 349 | - circle.setAttribute('cy', topBottomPadding + titleBarHeight + (node.level + 1) * | ||
| 350 | - nodeSpacing - (nodeSpacing / 2)); | ||
| 351 | - circle.setAttribute('r', 7); | ||
| 352 | - circle.setAttribute('fill', node.color); | ||
| 353 | - circle.setAttribute('data-card-id', card.id); | ||
| 354 | - circle.setAttribute('data-node-id', `${card.id}-node${index + 1}`); | ||
| 355 | - group.appendChild(circle); | ||
| 356 | - | ||
| 357 | - var labelX = node.type === 'in' ? 12 : 138; // 基本的X坐标 | ||
| 358 | - const labelY = topBottomPadding + titleBarHeight + node.level * nodeSpacing + 21; | ||
| 359 | - | ||
| 360 | - // 创建SVG文本元素 | ||
| 361 | - const multiConnectedLabel = document.createElementNS('http://www.w3.org/2000/svg', | ||
| 362 | - 'text'); | ||
| 363 | - multiConnectedLabel.setAttribute('x', labelX); | ||
| 364 | - multiConnectedLabel.setAttribute('y', labelY); | ||
| 365 | - multiConnectedLabel.setAttribute('text-anchor', 'middle'); | ||
| 366 | - multiConnectedLabel.setAttribute('fill', '#aaa'); | ||
| 367 | - multiConnectedLabel.setAttribute('style', 'font-size: 8px;'); | ||
| 368 | - multiConnectedLabel.setAttribute('alignment-baseline', 'hanging'); | ||
| 369 | - | ||
| 370 | - | ||
| 371 | - // 计算文本的宽度(假定的,因为SVG没有直接获取文本宽度的方法) | ||
| 372 | - var estimatedTextLength; | ||
| 373 | - if (node.multiConnected == undefined) { | ||
| 374 | - estimatedTextLength = 20 | ||
| 375 | - multiConnectedLabel.textContent = 'N'; | ||
| 376 | - } else { | ||
| 377 | - estimatedTextLength = node.multiConnected.length; | ||
| 378 | - multiConnectedLabel.textContent = node.multiConnected; | ||
| 379 | - } | ||
| 380 | - | ||
| 381 | - // 确保文本不会超出卡片右边界 | ||
| 382 | - if (labelX + estimatedTextLength / 2 > 150) { | ||
| 383 | - labelX = 150 - estimatedTextLength / 2; | ||
| 384 | - nodeLabel.setAttribute('x', labelX); | ||
| 385 | - } | ||
| 386 | - | ||
| 387 | - // 确保文本不会超出卡片左边界 | ||
| 388 | - if (labelX - estimatedTextLength / 2 < 0) { | ||
| 389 | - labelX = estimatedTextLength / 2; | ||
| 390 | - nodeLabel.setAttribute('x', labelX); | ||
| 391 | - } | ||
| 392 | - | ||
| 393 | - group.appendChild(multiConnectedLabel); | ||
| 394 | - | ||
| 395 | - if (node.label != undefined) { | ||
| 396 | - // 计算文本标签的位置 | ||
| 397 | - var labelX = node.type === 'in' ? 15 : 135; // 基本的X坐标 | ||
| 398 | - const labelY = topBottomPadding + titleBarHeight + node.level * nodeSpacing + 40; | ||
| 399 | - | ||
| 400 | - // 创建SVG文本元素 | ||
| 401 | - const nodeLabel = document.createElementNS('http://www.w3.org/2000/svg', 'text'); | ||
| 402 | - nodeLabel.setAttribute('x', labelX); | ||
| 403 | - nodeLabel.setAttribute('y', labelY); // 在节点下方留出一定空间 | ||
| 404 | - nodeLabel.setAttribute('text-anchor', 'middle'); // 文本居中对齐 | ||
| 405 | - nodeLabel.setAttribute('fill', '#aaa'); // 文本居中对齐 | ||
| 406 | - nodeLabel.setAttribute('alignment-baseline', 'hanging'); | ||
| 407 | - nodeLabel.textContent = node.label; | ||
| 408 | - | ||
| 409 | - // 计算文本的宽度(假定的,因为SVG没有直接获取文本宽度的方法) | ||
| 410 | - const estimatedTextLength = node.label.length * 10; // 估算每个字符6像素宽 | ||
| 411 | - | ||
| 412 | - // 确保文本不会超出卡片右边界 | ||
| 413 | - if (labelX + estimatedTextLength / 2 > 150) { | ||
| 414 | - labelX = 150 - estimatedTextLength / 2; | ||
| 415 | - nodeLabel.setAttribute('x', labelX); | ||
| 416 | - } | ||
| 417 | - | ||
| 418 | - // 确保文本不会超出卡片左边界 | ||
| 419 | - if (labelX - estimatedTextLength / 2 < 0) { | ||
| 420 | - labelX = estimatedTextLength / 2; | ||
| 421 | - nodeLabel.setAttribute('x', labelX); | ||
| 422 | - } | ||
| 423 | - | ||
| 424 | - group.appendChild(nodeLabel); | ||
| 425 | - | ||
| 426 | - } | ||
| 427 | - | ||
| 428 | - switch (node.slot) { | ||
| 429 | - case 'input': | ||
| 430 | - const foreignObject = document.createElementNS('http://www.w3.org/2000/svg', | ||
| 431 | - 'foreignObject'); | ||
| 432 | - foreignObject.setAttribute('x', 0); | ||
| 433 | - foreignObject.setAttribute('y', topBottomPadding + titleBarHeight + node.level * | ||
| 434 | - nodeSpacing + 12); | ||
| 435 | - foreignObject.setAttribute('width', 130); // 保持原始宽度 | ||
| 436 | - foreignObject.setAttribute('height', nodeSpacing - 24); // 保持原始高度,减去的24像素为上下内边距之和 | ||
| 437 | - const input = document.createElement('input'); | ||
| 438 | - input.type = 'text'; | ||
| 439 | - if (node.value == undefined) { | ||
| 440 | - node.value = ''; | ||
| 441 | - } | ||
| 442 | - input.value = node.value; | ||
| 443 | - input.addEventListener('input', function() { | ||
| 444 | - node.value = input.value; | ||
| 445 | - }); | ||
| 446 | - // Set adjusted input styles | ||
| 447 | - input.style.width = '110px'; | ||
| 448 | - input.style.height = '100%'; | ||
| 449 | - input.style.marginLeft = '20px'; | ||
| 450 | - input.style.borderRadius = '5px'; | ||
| 451 | - input.style.border = '1px solid white'; | ||
| 452 | - input.style.backgroundColor = '#222'; | ||
| 453 | - input.style.color = 'white'; | ||
| 454 | - input.style.fontSize = '1em'; | ||
| 455 | - input.style.padding = '0px'; // 可能需要调整或去除内边距以适应固定尺寸 | ||
| 456 | - input.style.boxSizing = 'border-box'; // 确保宽高包含内容、内边距和边框 | ||
| 457 | - | ||
| 458 | - // Change border color on focus and blur | ||
| 459 | - input.addEventListener('focus', () => { | ||
| 460 | - input.style.outline = 'none'; // Remove default focus outline | ||
| 461 | - input.style.borderColor = | ||
| 462 | - 'white'; // Keep border color white on focus | ||
| 463 | - }); | ||
| 464 | - | ||
| 465 | - input.addEventListener('blur', () => { | ||
| 466 | - input.style.borderColor = | ||
| 467 | - 'white'; // Revert to white when not focused | ||
| 468 | - }); | ||
| 469 | - | ||
| 470 | - // 阻止事件冒泡 | ||
| 471 | - input.addEventListener('click', function(event) { | ||
| 472 | - event.stopPropagation(); | ||
| 473 | - }); | ||
| 474 | - | ||
| 475 | - input.addEventListener('mousedown', function(event) { | ||
| 476 | - event.stopPropagation(); | ||
| 477 | - }); | ||
| 478 | - | ||
| 479 | - input.addEventListener('touchstart', function(event) { | ||
| 480 | - event.stopPropagation(); | ||
| 481 | - }); | ||
| 482 | - | ||
| 483 | - foreignObject.appendChild(input); | ||
| 484 | - group.appendChild(foreignObject); | ||
| 485 | - break; | ||
| 486 | - } | ||
| 487 | - | ||
| 488 | - | ||
| 489 | - | ||
| 490 | - }); | ||
| 491 | - | ||
| 492 | - const deleteIcon = document.createElementNS('http://www.w3.org/2000/svg', 'rect'); | ||
| 493 | - deleteIcon.setAttribute('class', 'card-delete-icon'); | ||
| 494 | - deleteIcon.setAttribute('x', 125); | ||
| 495 | - deleteIcon.setAttribute('y', 5); // 使其贴近标题栏的右上角 | ||
| 496 | - deleteIcon.setAttribute('width', 20); | ||
| 497 | - deleteIcon.setAttribute('height', 20); | ||
| 498 | - deleteIcon.setAttribute('fill', 'transparent'); | ||
| 499 | - deleteIcon.setAttribute('data-card-id', card.id); | ||
| 500 | - deleteIcon.setAttribute('style', 'cursor: pointer;'); | ||
| 501 | - group.appendChild(deleteIcon); | ||
| 502 | - | ||
| 503 | - const delText = document.createElementNS('http://www.w3.org/2000/svg', 'text'); | ||
| 504 | - delText.setAttribute('x', 135); | ||
| 505 | - delText.setAttribute('y', 20); // 调整位置以垂直居中 | ||
| 506 | - delText.setAttribute('text-anchor', 'middle'); | ||
| 507 | - delText.setAttribute('fill', 'white'); | ||
| 508 | - delText.setAttribute('font-size', '16px'); // 适当调整字体大小以适应图标 | ||
| 509 | - delText.setAttribute('pointer-events', 'none'); // 确保点击事件只触发于删除图标上 | ||
| 510 | - delText.textContent = '×'; | ||
| 511 | - group.appendChild(delText); | ||
| 512 | - | ||
| 513 | - cardsContainer.appendChild(group); | ||
| 514 | - }); | ||
| 515 | - | ||
| 516 | - attachNodeEventListeners(); | ||
| 517 | - } | ||
| 518 | - | ||
| 519 | - | ||
| 520 | - | ||
| 521 | - function drawLinks() { | ||
| 522 | - const linksContainer = document.getElementById('linksContainer'); | ||
| 523 | - linksContainer.innerHTML = ''; // 清除现有的线条 | ||
| 524 | - // 清除旧的删除图标 | ||
| 525 | - document.querySelectorAll('.delete-icon').forEach(icon => icon.remove()); | ||
| 526 | - | ||
| 527 | - links.forEach((link, index) => { | ||
| 528 | - const path = document.createElementNS('http://www.w3.org/2000/svg', 'path'); | ||
| 529 | - //path.setAttribute('class', 'link'); | ||
| 530 | - path.setAttribute('stroke', link.target.color) | ||
| 531 | - path.setAttribute('stroke-width', 5) | ||
| 532 | - path.setAttribute('fill', 'none'); | ||
| 533 | - | ||
| 534 | - | ||
| 535 | - const isCallType = link.source.enumType === 'call'; | ||
| 536 | - if (isCallType) { | ||
| 537 | - path.setAttribute('stroke-dasharray', '10'); | ||
| 538 | - path.setAttribute('stroke-dashoffset', '0'); | ||
| 539 | - | ||
| 540 | - // Add animation element to the path for dashed lines | ||
| 541 | - const animate = document.createElementNS('http://www.w3.org/2000/svg', 'animate'); | ||
| 542 | - animate.setAttribute('attributeName', 'stroke-dashoffset'); | ||
| 543 | - animate.setAttribute('dur', '0.5s'); | ||
| 544 | - animate.setAttribute('repeatCount', 'indefinite'); | ||
| 545 | - animate.setAttribute('from', '20'); | ||
| 546 | - animate.setAttribute('to', '0'); | ||
| 547 | - path.appendChild(animate); | ||
| 548 | - } | ||
| 549 | - | ||
| 550 | - | ||
| 551 | - var dist; | ||
| 552 | - // 使用动态计算的控制点距离来定义曲线,根据源点和终点的X坐标差异动态计算控制点的距离 | ||
| 553 | - if (link.source.type === 'out') { | ||
| 554 | - if (link.source.x - link.target.x > 0) { | ||
| 555 | - dist = 200; // 如果终点在源点的左侧,控制点距离更远 | ||
| 556 | - } else { | ||
| 557 | - dist = Math.abs(link.target.x - link.source.x) * 0.3; // 否则,根据两点间的距离调整控制点距离 | ||
| 558 | - } | ||
| 559 | - const d = | ||
| 560 | - `M${link.source.x} ${link.source.y} C${link.source.x + dist} ${link.source.y} ${link.target.x - dist} ${link.target.y} ${link.target.x} ${link.target.y}`; | ||
| 561 | - path.setAttribute('d', d); | ||
| 562 | - linksContainer.appendChild(path); | ||
| 563 | - } else { | ||
| 564 | - if (link.target.x - link.source.x > 0) { | ||
| 565 | - dist = 200; // 如果终点在源点的右侧,控制点距离更远 | ||
| 566 | - } else { | ||
| 567 | - dist = Math.abs(link.target.x - link.source.x) * 0.3; // 否则,根据两点间的距离调整控制点距离 | ||
| 568 | - } | ||
| 569 | - const d = | ||
| 570 | - `M${link.source.x} ${link.source.y} C${link.source.x - dist} ${link.source.y} ${link.target.x + dist} ${link.target.y} ${link.target.x} ${link.target.y}`; | ||
| 571 | - path.setAttribute('d', d); | ||
| 572 | - linksContainer.appendChild(path); | ||
| 573 | - } | ||
| 574 | - | ||
| 575 | - | ||
| 576 | - // 计算中点 | ||
| 577 | - const midX = (link.source.x + link.target.x) / 2; | ||
| 578 | - const midY = (link.source.y + link.target.y) / 2; | ||
| 579 | - | ||
| 580 | - // 绘制删除图标 | ||
| 581 | - const deleteIcon = document.createElementNS('http://www.w3.org/2000/svg', 'circle'); | ||
| 582 | - deleteIcon.setAttribute('class', 'delete-icon'); | ||
| 583 | - deleteIcon.setAttribute('cx', midX); | ||
| 584 | - deleteIcon.setAttribute('cy', midY); | ||
| 585 | - deleteIcon.setAttribute('style', "cursor: pointer;"); | ||
| 586 | - deleteIcon.setAttribute('r', 10); | ||
| 587 | - deleteIcon.setAttribute('fill', 'red'); | ||
| 588 | - deleteIcon.setAttribute('data-link-level', index); // 用于标识该删除图标对应的线 | ||
| 589 | - linksContainer.appendChild(deleteIcon); | ||
| 590 | - | ||
| 591 | - // 可以选择添加一个×文本在圆圈中间 | ||
| 592 | - const text = document.createElementNS('http://www.w3.org/2000/svg', 'text'); | ||
| 593 | - text.setAttribute('x', midX); | ||
| 594 | - text.setAttribute('y', midY + 5); // 轻微调整以垂直居中 | ||
| 595 | - text.setAttribute('text-anchor', 'middle'); | ||
| 596 | - text.setAttribute('fill', 'white'); | ||
| 597 | - text.setAttribute('font-size', '15px'); | ||
| 598 | - text.setAttribute('pointer-events', 'none'); // 确保点击事件只触发于圆圈上 | ||
| 599 | - text.textContent = '×'; | ||
| 600 | - linksContainer.appendChild(text); | ||
| 601 | - | ||
| 602 | - }); | ||
| 603 | - } | ||
| 604 | - | ||
| 605 | - // 定义变量来追踪是否正在拖动以及拖动的起始位置 | ||
| 606 | - var isPanning = false; | ||
| 607 | - var startPan = { | ||
| 608 | - x: 0, | ||
| 609 | - y: 0 | ||
| 610 | - }; | ||
| 611 | - | ||
| 612 | - // 用于调整SVG视图窗口的变量 | ||
| 613 | - var currentPan = { | ||
| 614 | - x: 0, | ||
| 615 | - y: 0 | ||
| 616 | - }; | ||
| 617 | - | ||
| 618 | - function attachEventListeners() { | ||
| 619 | - | ||
| 620 | - const svgContainer = document.getElementById('svgContainer'); | ||
| 621 | - document.querySelectorAll('.link').forEach(link => { | ||
| 622 | - link.addEventListener('contextmenu', function(e) { | ||
| 623 | - e.preventDefault(); // 阻止默认的右键菜单 | ||
| 624 | - const linkId = e.target.getAttribute('data-link-id'); // 确保你在绘制线条时添加了 data-link-id 属性 | ||
| 625 | - showContextMenu(e.clientX, e.clientY, linkId); | ||
| 626 | - }); | ||
| 627 | - }); | ||
| 628 | - document.getElementById('svgContainer').addEventListener('click', function(e) { | ||
| 629 | - if (e.target.classList.contains('delete-icon')) { | ||
| 630 | - // 获取点击的删除图标对应的线的索引 | ||
| 631 | - const linkIndex = e.target.getAttribute('data-link-level'); | ||
| 632 | - // 从数组中移除该线 | ||
| 633 | - links.splice(linkIndex, 1); | ||
| 634 | - // 重新绘制剩余的线和删除图标 | ||
| 635 | - drawLinks(); | ||
| 636 | - drawCards(); // 如果你的线条与卡片有关联,可能需要重新绘制卡片以更新视图 | ||
| 637 | - } else if (e.target.classList.contains('card-delete-icon')) { | ||
| 638 | - // 获取点击的删除图标对应的卡片ID | ||
| 639 | - const cardId = e.target.getAttribute('data-card-id'); | ||
| 640 | - // 从`cards`数组中移除对应的卡片 | ||
| 641 | - cards = cards.filter(card => card.id !== cardId); | ||
| 642 | - // 同时移除所有与该卡片连接的线 | ||
| 643 | - links = links.filter(link => !(link.source.node.startsWith(cardId) || (link.target && link.target | ||
| 644 | - .node.startsWith(cardId)))); | ||
| 645 | - // 重新绘制卡片和线 | ||
| 646 | - drawLinks(); | ||
| 647 | - drawCards(); | ||
| 648 | - } else { | ||
| 649 | - var targetCardContainer = e.target.closest('.card-container'); | ||
| 650 | - if (targetCardContainer) { | ||
| 651 | - const cardId = targetCardContainer.getAttribute('data-id'); | ||
| 652 | - // 将SVG元素移动到最后,使其在视觉上显示在最前面 | ||
| 653 | - targetCardContainer.parentNode.appendChild(targetCardContainer); | ||
| 654 | - | ||
| 655 | - // 更新cards数组,将点击的卡片移动到数组的末尾 | ||
| 656 | - const cardIndex = cards.findIndex(card => card.id === cardId); | ||
| 657 | - if (cardIndex > -1) { | ||
| 658 | - const card = cards.splice(cardIndex, 1)[0]; | ||
| 659 | - cards.push(card); | ||
| 660 | - } | ||
| 661 | - | ||
| 662 | - // 这里不需要立即调用drawCards或drawLinks, | ||
| 663 | - // 除非你需要根据cards数组的新顺序进行其他更新 | ||
| 664 | - } | ||
| 665 | - } | ||
| 666 | - }); | ||
| 667 | - | ||
| 668 | - svgContainer.addEventListener('contextmenu', function(e) { | ||
| 669 | - e.preventDefault(); // 阻止右键菜单 | ||
| 670 | - }); | ||
| 671 | - | ||
| 672 | - svgContainer.addEventListener('mousedown', e => { | ||
| 673 | - | ||
| 674 | - // 检查是否是鼠标右键点击 | ||
| 675 | - | ||
| 676 | - const target = e.target; | ||
| 677 | - if (e.button === 2) { | ||
| 678 | - isPanning = true; | ||
| 679 | - startPan.x = e.clientX - currentPan.x; | ||
| 680 | - startPan.y = e.clientY - currentPan.y; | ||
| 681 | - } else if (target | ||
| 682 | - | ||
| 683 | - .classList.contains('card') || target.tagName === 'text') { | ||
| 684 | - const cardContainer = target.closest('.card-container'); | ||
| 685 | - const cardId = cardContainer.getAttribute('data-id'); | ||
| 686 | - startDragCard(e, cardId); | ||
| 687 | - } | ||
| 688 | - }); | ||
| 689 | - document.addEventListener('mousemove', e => { | ||
| 690 | - if (isPanning) { | ||
| 691 | - // 正确计算新的视图窗口位置 | ||
| 692 | - currentPan.x = e.clientX - startPan.x; | ||
| 693 | - currentPan.y = e.clientY - startPan.y; | ||
| 694 | - | ||
| 695 | - // 正确调整SVG的viewBox来实现拖动效果 | ||
| 696 | - // 这里需要更新的是开始拖动的点,而不是当前的点,因此我们反向更新 | ||
| 697 | - svgContainer.setAttribute('viewBox', | ||
| 698 | - `${-currentPan.x} ${-currentPan.y} ${svgContainer.clientWidth} ${svgContainer.clientHeight}` | ||
| 699 | - ); | ||
| 700 | - svgContainer.style.backgroundPosition = `${currentPan.x % 100}px ${currentPan.y % 100}px`; | ||
| 701 | - } else if (isDragging) { | ||
| 702 | - moveCard(e); | ||
| 703 | - } else if (isLinking && currentLink) { | ||
| 704 | - updateLink(e); | ||
| 705 | - } | ||
| 706 | - }); | ||
| 707 | - | ||
| 708 | - document.addEventListener('mouseup', e => { | ||
| 709 | - if (e.button === 2) { | ||
| 710 | - console.log(currentPan); | ||
| 711 | - isPanning = false; | ||
| 712 | - } else if (isDragging) { | ||
| 713 | - endDragCard(); | ||
| 714 | - } else if (isLinking) { | ||
| 715 | - endDragLink(e); | ||
| 716 | - } | ||
| 717 | - }); | ||
| 718 | - } | ||
| 719 | - | ||
| 720 | - function startDragCard(e, cardId) { | ||
| 721 | - isDragging = true; | ||
| 722 | - const card = cards.find(c => c.id === cardId); | ||
| 723 | - currentCard = card; | ||
| 724 | - | ||
| 725 | - const svgRect = svgContainer.getBoundingClientRect(); | ||
| 726 | - dragOffsetX = e.clientX - svgRect.left - card.x; | ||
| 727 | - dragOffsetY = e.clientY - svgRect.top - card.y; | ||
| 728 | - } | ||
| 729 | - | ||
| 730 | - function moveCard(e) { | ||
| 731 | - const svgRect = svgContainer.getBoundingClientRect(); | ||
| 732 | - currentCard.x = e.clientX - svgRect.left - dragOffsetX; | ||
| 733 | - currentCard.y = e.clientY - svgRect.top - dragOffsetY; | ||
| 734 | - | ||
| 735 | - // Update link positions associated with the currentCard | ||
| 736 | - links.forEach(link => { | ||
| 737 | - if (link.source.node.startsWith(currentCard.id)) { | ||
| 738 | - // 根据节点ID更新链接的源位置 | ||
| 739 | - const nodeIndex = parseInt(link.source.node.split('-node')[1]) - 1; | ||
| 740 | - const nodeConfig = currentCard.nodes[nodeIndex]; // 获取当前节点的配置 | ||
| 741 | - const nodeSpacing = 50; // 节点间隔,应与drawCards函数中使用的相同 | ||
| 742 | - const topBottomPadding = 20; // 顶部和底部的边距,应与drawCards函数中使用的相同 | ||
| 743 | - link.source.x = currentCard.x + (nodeConfig.type === "in" ? 0 : 150); // 根据节点类型调整x坐标 | ||
| 744 | - link.source.y = 30 + currentCard.y + topBottomPadding + (nodeConfig.level + 1) * nodeSpacing - ( | ||
| 745 | - nodeSpacing / 2); // 根据节点的index调整y坐标 | ||
| 746 | - } | ||
| 747 | - if (link.target && link.target.node.startsWith(currentCard.id)) { | ||
| 748 | - // 根据节点ID更新链接的目标位置 | ||
| 749 | - const nodeIndex = parseInt(link.target.node.split('-node')[1]) - 1; | ||
| 750 | - const nodeConfig = currentCard.nodes[nodeIndex]; // 获取当前节点的配置 | ||
| 751 | - link.target.x = currentCard.x + (nodeConfig.type === "in" ? 0 : 150); // 根据节点类型调整x坐标 | ||
| 752 | - link.target.y = 30 + currentCard.y + 20 + (nodeConfig.level + 1) * 50 - (50 / | ||
| 753 | - 2); // 根据节点的index调整y坐标 | ||
| 754 | - } | ||
| 755 | - }); | ||
| 756 | - | ||
| 757 | - drawLinks(); // Redraw links to reflect updated positions | ||
| 758 | - drawCards(); // Redraw cards and nodes | ||
| 759 | - } | ||
| 760 | - | ||
| 761 | - | ||
| 762 | - | ||
| 763 | - function endDragCard() { | ||
| 764 | - isDragging = false; | ||
| 765 | - } | ||
| 766 | - | ||
| 767 | - function getNodeCurrentConnections(nodeId) { | ||
| 768 | - var count = 0; | ||
| 769 | - links.forEach(link => { | ||
| 770 | - if (link.source.node === nodeId || (link.target && link.target.node === nodeId)) { | ||
| 771 | - count++; | ||
| 772 | - } | ||
| 773 | - }); | ||
| 774 | - return count; | ||
| 775 | - } | ||
| 776 | - | ||
| 777 | - function startDragLink(e) { | ||
| 778 | - e.stopPropagation(); // Prevent card drag | ||
| 779 | - | ||
| 780 | - const nodeId = e.target.getAttribute('data-node-id'); | ||
| 781 | - const cardId = e.target.getAttribute('data-card-id'); | ||
| 782 | - const card = cards.find(c => c.id === cardId); | ||
| 783 | - const nodeElement = e.target; | ||
| 784 | - const node = card.nodes.find(n => `${card.id}-node${card.nodes.indexOf(n) + 1}` === nodeId); | ||
| 785 | - | ||
| 786 | - | ||
| 787 | - // 检查源节点是否允许发起新的连接 | ||
| 788 | - const currentConnections = getNodeCurrentConnections(nodeId); | ||
| 789 | - if (node.multiConnected !== -1 && currentConnections >= node.multiConnected) { | ||
| 790 | - console.log('此节点不允许更多的连接。'); | ||
| 791 | - return; // 不允许创建新的连接 | ||
| 792 | - } | ||
| 793 | - isLinking = true; | ||
| 794 | - | ||
| 795 | - const svgRect = svgContainer.getBoundingClientRect(); | ||
| 796 | - const nodeX = e.clientX - svgRect.left; | ||
| 797 | - const nodeY = e.clientY - svgRect.top; | ||
| 798 | - | ||
| 799 | - currentLink = { | ||
| 800 | - source: { | ||
| 801 | - node: nodeId, | ||
| 802 | - x: nodeX, | ||
| 803 | - y: nodeY, | ||
| 804 | - color: nodeElement.getAttribute('fill'), | ||
| 805 | - type: node.type, | ||
| 806 | - enumType: node.enumType | ||
| 807 | - }, | ||
| 808 | - target: null | ||
| 809 | - }; | ||
| 810 | - } | ||
| 811 | - | ||
| 812 | - function updateLink(e) { | ||
| 813 | - const svgRect = svgContainer.getBoundingClientRect(); | ||
| 814 | - currentLink.target = { | ||
| 815 | - x: e.clientX - svgRect.left, | ||
| 816 | - y: e.clientY - svgRect.top | ||
| 817 | - }; | ||
| 818 | - drawCurrentLink(); | ||
| 819 | - } | ||
| 820 | - | ||
| 821 | - function endDragLink(e) { | ||
| 822 | - isLinking = false; | ||
| 823 | - const svgRect = svgContainer.getBoundingClientRect(); | ||
| 824 | - const x = e.clientX - svgRect.left; | ||
| 825 | - const y = e.clientY - svgRect.top; | ||
| 826 | - | ||
| 827 | - // 默认情况下,假设目标节点就是e.target | ||
| 828 | - var targetNode = e.target; | ||
| 829 | - | ||
| 830 | - // 检查e.target是否是我们期望的节点类型,如果不是,则尝试使用document.elementFromPoint | ||
| 831 | - if (!targetNode.classList.contains('node')) { | ||
| 832 | - e.target.style.display = 'none'; | ||
| 833 | - targetNode = document.elementFromPoint(e.clientX, e.clientY); | ||
| 834 | - e.target.style.display = ''; | ||
| 835 | - } | ||
| 836 | - | ||
| 837 | - var validTargetFound = false; | ||
| 838 | - | ||
| 839 | - // 进行节点的有效性判断 | ||
| 840 | - if (targetNode && targetNode.classList.contains('node')) { | ||
| 841 | - const sourceNodeId = currentLink.source.node; | ||
| 842 | - const targetNodeId = targetNode.getAttribute('data-node-id'); | ||
| 843 | - | ||
| 844 | - // 从节点ID分解出卡片ID和节点索引 | ||
| 845 | - const sourceNodeParts = sourceNodeId.split('-node'); | ||
| 846 | - const targetNodeParts = targetNodeId.split('-node'); | ||
| 847 | - const sourceCard = cards.find(card => card.id === sourceNodeParts[0]); | ||
| 848 | - const targetCard = cards.find(card => card.id === targetNodeParts[0]); | ||
| 849 | - | ||
| 850 | - // 根据节点ID找到对应的节点对象 | ||
| 851 | - const sourceNodeIndex = parseInt(sourceNodeParts[1]) - 1; | ||
| 852 | - const targetNodeIndex = parseInt(targetNodeParts[1]) - 1; | ||
| 853 | - const sourceNode = sourceCard.nodes[sourceNodeIndex]; | ||
| 854 | - const targetNodeObj = targetCard.nodes[targetNodeIndex]; | ||
| 855 | - | ||
| 856 | - // 检查目标节点是否允许接受新的连接 | ||
| 857 | - const targetCurrentConnections = getNodeCurrentConnections(targetNodeId); | ||
| 858 | - if (targetNodeObj.multiConnected !== -1 && targetCurrentConnections >= targetNodeObj.multiConnected) { | ||
| 859 | - console.log('目标节点不允许更多的连接。'); | ||
| 860 | - // 移除临时绘制的连接线 | ||
| 861 | - const tempLink = document.querySelector('.temp-link'); | ||
| 862 | - if (tempLink) { | ||
| 863 | - tempLink.remove(); | ||
| 864 | - } | ||
| 865 | - currentLink = null; | ||
| 866 | - drawLinks(); | ||
| 867 | - return; | ||
| 868 | - } | ||
| 869 | - // 确保目标节点不是起始节点自身,避免自连接 | ||
| 870 | - if (currentLink.source.node !== targetNodeId && sourceNode.enumType === targetNodeObj.enumType) { | ||
| 871 | - validTargetFound = true; | ||
| 872 | - currentLink.source.enumType = sourceNode.enumType; | ||
| 873 | - currentLink.source.x = currentLink.source.x - currentPan.x; | ||
| 874 | - currentLink.source.y = currentLink.source.y - currentPan.y; | ||
| 875 | - // 更新连接的目标信息,并保存该连接 | ||
| 876 | - links.push({ | ||
| 877 | - ...currentLink, | ||
| 878 | - target: { | ||
| 879 | - node: targetNodeId, | ||
| 880 | - x: x - currentPan.x, | ||
| 881 | - y: y - currentPan.y, | ||
| 882 | - color: sourceNode.color, | ||
| 883 | - enumType: sourceNode.enumType | ||
| 884 | - } | ||
| 885 | - }); | ||
| 886 | - } | ||
| 887 | - } else { | ||
| 888 | - const sourceNodeId = currentLink.source.node; | ||
| 889 | - const sourceNodeParts = sourceNodeId.split('-node'); | ||
| 890 | - const sourceCard = cards.find(card => card.id === sourceNodeParts[0]); | ||
| 891 | - const sourceNodeIndex = parseInt(sourceNodeParts[1]) - 1; | ||
| 892 | - const sourceNode = sourceCard.nodes[sourceNodeIndex]; | ||
| 893 | - currentLink.source.enumType = sourceNode.enumType; | ||
| 894 | - showCardCreationModal(e.clientX, e.clientY, currentLink.source); | ||
| 895 | - | ||
| 896 | - } | ||
| 897 | - | ||
| 898 | - const tempLink = document.querySelector('.temp-link'); | ||
| 899 | - if (tempLink) { | ||
| 900 | - tempLink.remove(); | ||
| 901 | - } | ||
| 902 | - currentLink = null; | ||
| 903 | - drawLinks(); | ||
| 904 | - } | ||
| 905 | - | ||
| 906 | - | ||
| 907 | - | ||
| 908 | - | ||
| 909 | - | ||
| 910 | - | ||
| 911 | - // 更新drawCurrentLink函数,增加线宽 | ||
| 912 | - // 更新drawCurrentLink函数,增加线宽 | ||
| 913 | - function drawCurrentLink() { | ||
| 914 | - const tempLink = document.querySelector('.temp-link'); | ||
| 915 | - if (tempLink) tempLink.remove(); | ||
| 916 | - | ||
| 917 | - if (!currentLink || !currentLink.target) return; | ||
| 918 | - | ||
| 919 | - const svgContainer = document.getElementById('svgContainer'); | ||
| 920 | - const path = document.createElementNS('http://www.w3.org/2000/svg', 'path'); | ||
| 921 | - path.setAttribute('class', 'temp-link'); | ||
| 922 | - // 设置等宽线属性 | ||
| 923 | - path.setAttribute('stroke', currentLink.source.color); | ||
| 924 | - path.setAttribute('stroke-width', 5); | ||
| 925 | - path.setAttribute('fill', 'none'); | ||
| 926 | - | ||
| 927 | - // 计算考虑了平移偏移的起点和终点 | ||
| 928 | - const adjustedSourceX = currentLink.source.x - currentPan.x; | ||
| 929 | - const adjustedSourceY = currentLink.source.y - currentPan.y; | ||
| 930 | - const adjustedTargetX = currentLink.target.x - currentPan.x; | ||
| 931 | - const adjustedTargetY = currentLink.target.y - currentPan.y; | ||
| 932 | - | ||
| 933 | - // 更新路径以使用调整后的坐标 | ||
| 934 | - if (currentLink.source.type === 'out') { | ||
| 935 | - const d = | ||
| 936 | - `M${adjustedSourceX},${adjustedSourceY} C${adjustedSourceX + 100},${adjustedSourceY} ${adjustedTargetX - 100},${adjustedTargetY} ${adjustedTargetX},${adjustedTargetY}`; | ||
| 937 | - path.setAttribute('d', d); | ||
| 938 | - } else { | ||
| 939 | - const d = | ||
| 940 | - `M${adjustedSourceX},${adjustedSourceY} C${adjustedSourceX - 100},${adjustedSourceY} ${adjustedTargetX + 100},${adjustedTargetY} ${adjustedTargetX},${adjustedTargetY}`; | ||
| 941 | - path.setAttribute('d', d); | ||
| 942 | - } | ||
| 943 | - | ||
| 944 | - svgContainer.appendChild(path); | ||
| 945 | - } | ||
| 946 | - | ||
| 947 | - function attachNodeEventListeners() { | ||
| 948 | - document.querySelectorAll('.node').forEach(node => { | ||
| 949 | - node.addEventListener('mousedown', startDragLink); | ||
| 950 | - }); | ||
| 951 | - } | ||
| 952 | - | ||
| 953 | - function populateCardTypeList(mouseX, mouseY, sourceNode) { | ||
| 954 | - const listElement = document.getElementById('card-type-list'); | ||
| 955 | - listElement.innerHTML = ''; // 清空现有列表项 | ||
| 956 | - const addedTypes = new Set(); | ||
| 957 | - | ||
| 958 | - cards.forEach(card => { | ||
| 959 | - if (!addedTypes.has(card.type)) { | ||
| 960 | - const listItem = document.createElement('li'); | ||
| 961 | - listItem.tabIndex = 0; // 使元素能够获得焦点,以便能够监听键盘事件 | ||
| 962 | - listItem.textContent = card.label; // 使用卡片的标签或类型 | ||
| 963 | - listItem.onclick = function() { | ||
| 964 | - createNewCard(card, mouseX, mouseY, sourceNode); | ||
| 965 | - hideCardCreationModal(); // 新建卡片后隐藏模态框 | ||
| 966 | - }; | ||
| 967 | - listItem.onkeydown = function(event) { | ||
| 968 | - if (event.key === 'Enter') { | ||
| 969 | - createNewCard(card, mouseX, mouseY, sourceNode); | ||
| 970 | - hideCardCreationModal(); // 新建卡片后隐藏模态框 | ||
| 971 | - } | ||
| 972 | - }; | ||
| 973 | - listElement.appendChild(listItem); | ||
| 974 | - addedTypes.add(card.type); | ||
| 975 | - } | ||
| 976 | - }); | ||
| 977 | - } | ||
| 978 | - | ||
| 979 | - | ||
| 980 | - function showCardCreationModal(mouseX, mouseY, sourceNode) { | ||
| 981 | - populateCardTypeList(mouseX, mouseY, sourceNode); // 填充卡片类型列表 | ||
| 982 | - const modal = document.getElementById('card-creation-modal'); | ||
| 983 | - // 在这里添加取消按钮 | ||
| 984 | - if (!document.getElementById('cancel-btn')) { | ||
| 985 | - const cancelButton = document.createElement('button'); | ||
| 986 | - cancelButton.id = 'cancel-btn'; | ||
| 987 | - cancelButton.textContent = '取消'; | ||
| 988 | - cancelButton.onclick = function() { | ||
| 989 | - hideCardCreationModal(); | ||
| 990 | - }; | ||
| 991 | - modal.appendChild(cancelButton); | ||
| 992 | - } | ||
| 993 | - | ||
| 994 | - | ||
| 995 | - | ||
| 996 | - // 设置弹出框的位置 | ||
| 997 | - modal.style.left = mouseX + 'px'; | ||
| 998 | - modal.style.top = mouseY + 'px'; | ||
| 999 | - modal.style.display = 'block'; // 显示弹窗 | ||
| 1000 | - } | ||
| 1001 | - | ||
| 1002 | - function createNewCard(cardTemplate, mouseX, mouseY, sourceNode) { | ||
| 1003 | - const newCard = { | ||
| 1004 | - ...cardTemplate, | ||
| 1005 | - nodes: JSON.parse(JSON.stringify(cardTemplate.nodes)), // 深拷贝nodes属性 | ||
| 1006 | - id: 'card' + (cards.length + 1) | ||
| 1007 | - }; | ||
| 1008 | - // 将每个node的value设置为空字符串 | ||
| 1009 | - newCard.nodes.forEach(node => { | ||
| 1010 | - node.value = ''; | ||
| 1011 | - }); | ||
| 1012 | - newCard.x = mouseX - 75 - currentPan.x; // 调整为鼠标中心 | ||
| 1013 | - newCard.y = mouseY - 15 - currentPan.y; // 调整为鼠标中心 | ||
| 1014 | - cards.push(newCard); // 将新创建的卡片添加到卡片列表中 | ||
| 1015 | - | ||
| 1016 | - // 如果提供了sourceNode,找到新卡片的合适target node并创建连接 | ||
| 1017 | - if (sourceNode) { | ||
| 1018 | - sourceNode.x -= currentPan.x; | ||
| 1019 | - sourceNode.y -= currentPan.y; | ||
| 1020 | - var targetNode = newCard.nodes.find(node => node.enumType === sourceNode.enumType && node.type === 'in'); | ||
| 1021 | - if (targetNode) { | ||
| 1022 | - links.push({ | ||
| 1023 | - source: sourceNode, | ||
| 1024 | - target: { | ||
| 1025 | - node: `${newCard.id}-node${newCard.nodes.indexOf(targetNode) + 1}`, | ||
| 1026 | - x: newCard.x + (targetNode.type === 'in' ? 0 : 150), | ||
| 1027 | - y: newCard.y + 30 + 20 + (targetNode.level + 1) * 50 - 25, | ||
| 1028 | - color: targetNode.color, | ||
| 1029 | - enumType: targetNode.enumType | ||
| 1030 | - } | ||
| 1031 | - }); | ||
| 1032 | - } | ||
| 1033 | - } | ||
| 1034 | - | ||
| 1035 | - | ||
| 1036 | - drawLinks(); | ||
| 1037 | - drawCards(); | ||
| 1038 | - } | ||
| 1039 | - | ||
| 1040 | - | ||
| 1041 | - | ||
| 1042 | - function hideCardCreationModal() { | ||
| 1043 | - const modal = document.getElementById('card-creation-modal'); | ||
| 1044 | - modal.style.display = 'none'; // 隐藏弹窗 | ||
| 1045 | - } | ||
| 1046 | - | ||
| 1047 | - init(); | ||
| 1048 | - </script> | ||
| 1049 | - </body> | ||
| 1050 | - | ||
| 1051 | -</html> |
src/main/resources/static/real_control_v2/call/assets/css/index.css
| @@ -133,18 +133,19 @@ p { | @@ -133,18 +133,19 @@ p { | ||
| 133 | } */ | 133 | } */ |
| 134 | 134 | ||
| 135 | .container-fluid { | 135 | .container-fluid { |
| 136 | - /* height: 52px; */ | 136 | + height: 52px; |
| 137 | + width: 105px; | ||
| 137 | padding: 14px 0; | 138 | padding: 14px 0; |
| 138 | border-color: #40a3fc; | 139 | border-color: #40a3fc; |
| 139 | background: #40a3fc; | 140 | background: #40a3fc; |
| 140 | - /* border-radius: 26px; */ | 141 | + border-radius: 26px; |
| 141 | box-shadow: 0px 3px 3px 0px rgba(0, 0, 0, 0.17); | 142 | box-shadow: 0px 3px 3px 0px rgba(0, 0, 0, 0.17); |
| 142 | font-size: 1.2em; | 143 | font-size: 1.2em; |
| 143 | display: flex; | 144 | display: flex; |
| 144 | justify-content: center; | 145 | justify-content: center; |
| 145 | align-items: center; | 146 | align-items: center; |
| 146 | - margin: 0 10px; | ||
| 147 | color: #fff !important; | 147 | color: #fff !important; |
| 148 | + margin-top:400px; | ||
| 148 | } | 149 | } |
| 149 | 150 | ||
| 150 | .login-form_ownid { | 151 | .login-form_ownid { |
| @@ -429,7 +430,7 @@ p { | @@ -429,7 +430,7 @@ p { | ||
| 429 | /* */ | 430 | /* */ |
| 430 | .invitation { | 431 | .invitation { |
| 431 | padding: 40px 15px; | 432 | padding: 40px 15px; |
| 432 | - width: 420px; | 433 | + width: 100%; |
| 433 | background-color: #169bd5; | 434 | background-color: #169bd5; |
| 434 | } | 435 | } |
| 435 | 436 | ||
| @@ -442,7 +443,7 @@ p { | @@ -442,7 +443,7 @@ p { | ||
| 442 | background: url(../images/call_bg.png) no-repeat; | 443 | background: url(../images/call_bg.png) no-repeat; |
| 443 | background-position: center; | 444 | background-position: center; |
| 444 | background-size: initial; | 445 | background-size: initial; |
| 445 | - border-radius: 20px; | 446 | + /*border-radius: 20px;*/ |
| 446 | box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.3); | 447 | box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.3); |
| 447 | } | 448 | } |
| 448 | 449 |
src/main/resources/static/real_control_v2/call/assets/js/index.js
| @@ -1325,13 +1325,14 @@ var OperationPackge = { | @@ -1325,13 +1325,14 @@ var OperationPackge = { | ||
| 1325 | }, | 1325 | }, |
| 1326 | p2p: { | 1326 | p2p: { |
| 1327 | // 语音呼叫 | 1327 | // 语音呼叫 |
| 1328 | - makeVoiceCall: async function () { | 1328 | + makeVoiceCall: async function (calleeId) { |
| 1329 | // 关闭设置 | 1329 | // 关闭设置 |
| 1330 | await OperationPackge.p2p.closeSeting(); | 1330 | await OperationPackge.p2p.closeSeting(); |
| 1331 | // 获取输入的用户 | 1331 | // 获取输入的用户 |
| 1332 | - var oPeerId = await OperationPackge.p2p.getPeerUserId(); | 1332 | + /*var oPeerId = await OperationPackge.p2p.getPeerUserId();*/ |
| 1333 | // 查询输入用户合法性 | 1333 | // 查询输入用户合法性 |
| 1334 | - Store.peerUserId = await OperationPackge.p2p.peerUserVaplidity(oPeerId); | 1334 | + console.log("呼叫:"+calleeId) |
| 1335 | + Store.peerUserId = await OperationPackge.p2p.peerUserVaplidity(calleeId); | ||
| 1335 | if (Store.peerUserId) { | 1336 | if (Store.peerUserId) { |
| 1336 | Store.repetitionClick = true; | 1337 | Store.repetitionClick = true; |
| 1337 | Store.network = Object.assign(Store.network, { | 1338 | Store.network = Object.assign(Store.network, { |
| @@ -2783,9 +2784,10 @@ var OperationPackge = { | @@ -2783,9 +2784,10 @@ var OperationPackge = { | ||
| 2783 | Utils.inputChangId("#userInputs > input"); | 2784 | Utils.inputChangId("#userInputs > input"); |
| 2784 | // 语音呼叫 | 2785 | // 语音呼叫 |
| 2785 | $("#p2pAudioMakeCall").click(function () { | 2786 | $("#p2pAudioMakeCall").click(function () { |
| 2787 | + var calleeId=$(this).val(); | ||
| 2786 | if (navigator.onLine && Store.lineworkRTC && Store.lineworkRTM) { | 2788 | if (navigator.onLine && Store.lineworkRTC && Store.lineworkRTM) { |
| 2787 | if (!Store.repetitionClick) { | 2789 | if (!Store.repetitionClick) { |
| 2788 | - OperationPackge.p2p.makeVoiceCall(); | 2790 | + OperationPackge.p2p.makeVoiceCall(calleeId); |
| 2789 | } | 2791 | } |
| 2790 | } else { | 2792 | } else { |
| 2791 | // 页面提示 | 2793 | // 页面提示 |
src/main/resources/static/real_control_v2/call/index.html
| @@ -32,7 +32,7 @@ | @@ -32,7 +32,7 @@ | ||
| 32 | 32 | ||
| 33 | > | 33 | > |
| 34 | <!-- --> | 34 | <!-- --> |
| 35 | - <div class="login d-flex flex-row align-items-stretch"> | 35 | + <div> |
| 36 | <!-- 警告框 --> | 36 | <!-- 警告框 --> |
| 37 | <div class="warning_box" id="warningBox"></div> | 37 | <div class="warning_box" id="warningBox"></div> |
| 38 | <!-- --> | 38 | <!-- --> |
| @@ -726,4 +726,11 @@ | @@ -726,4 +726,11 @@ | ||
| 726 | </div> | 726 | </div> |
| 727 | <script src="/real_control_v2/call/assets/js/index.js"></script> | 727 | <script src="/real_control_v2/call/assets/js/index.js"></script> |
| 728 | </body> | 728 | </body> |
| 729 | +<script> | ||
| 730 | + (function() { | ||
| 731 | + const urlParams = new URLSearchParams(window.location.search); | ||
| 732 | + const calleeId = urlParams.get('calleeId'); | ||
| 733 | + $("#p2pAudioMakeCall").val(calleeId); | ||
| 734 | + })(); | ||
| 735 | +</script> | ||
| 729 | </html> | 736 | </html> |
src/main/resources/static/real_control_v2/css/main.css
| @@ -1006,6 +1006,72 @@ option.oil_station_opt { | @@ -1006,6 +1006,72 @@ option.oil_station_opt { | ||
| 1006 | margin-right: 5px; | 1006 | margin-right: 5px; |
| 1007 | } | 1007 | } |
| 1008 | 1008 | ||
| 1009 | + | ||
| 1010 | +.multi_plat_msg_pops .tests { | ||
| 1011 | + display: block; | ||
| 1012 | +} | ||
| 1013 | + | ||
| 1014 | + | ||
| 1015 | +/** 智能调度 */ | ||
| 1016 | +.multi_plat_msg_pop_zndd { | ||
| 1017 | + position: absolute; | ||
| 1018 | + right: 12px; | ||
| 1019 | + bottom: 12px; | ||
| 1020 | + z-index: 99; | ||
| 1021 | +} | ||
| 1022 | + | ||
| 1023 | +/** 催發 */ | ||
| 1024 | +.multi_plat_msg_pop_cf { | ||
| 1025 | + position: absolute; | ||
| 1026 | + right: 12px; | ||
| 1027 | + bottom: 12px; | ||
| 1028 | + z-index: 99; | ||
| 1029 | + background: #ffffff | ||
| 1030 | +} | ||
| 1031 | + | ||
| 1032 | +.multi_plat_msg_pop_klyj { | ||
| 1033 | + position: absolute; | ||
| 1034 | + right: 12px; | ||
| 1035 | + bottom: 12px; | ||
| 1036 | + z-index: 99; | ||
| 1037 | + background: #ffffff | ||
| 1038 | +} | ||
| 1039 | + | ||
| 1040 | + .multi_plat_msg_pops { | ||
| 1041 | + color: grey; | ||
| 1042 | + margin: 7px 0; | ||
| 1043 | + padding: 7px 12px; | ||
| 1044 | + cursor: pointer; | ||
| 1045 | + min-width: 200px; | ||
| 1046 | + box-sizing: border-box; | ||
| 1047 | + min-height: 60px; | ||
| 1048 | + border-radius: 5px; | ||
| 1049 | + background-color: #e0effd; | ||
| 1050 | +} | ||
| 1051 | + | ||
| 1052 | + | ||
| 1053 | +.multi_plat_msg_pops .desc { | ||
| 1054 | + display: block; | ||
| 1055 | + font-size: 12px; | ||
| 1056 | + color: #ff9d9d; | ||
| 1057 | + text-align: right; | ||
| 1058 | + margin-right: 5px; | ||
| 1059 | +} | ||
| 1060 | +.multi_plat_msg_pops .time { | ||
| 1061 | + display: block; | ||
| 1062 | + font-size: 12px; | ||
| 1063 | + color: darkgray; | ||
| 1064 | + margin-right: 5px; | ||
| 1065 | +} | ||
| 1066 | +.multi_plat_msg_pops .reminder { | ||
| 1067 | + display: block; | ||
| 1068 | + font-size: 15px; | ||
| 1069 | + color: red; | ||
| 1070 | + margin-right: 5px; | ||
| 1071 | +} | ||
| 1072 | + | ||
| 1073 | + | ||
| 1074 | + | ||
| 1009 | /** 嵌入表单modal滚动条样式 */ | 1075 | /** 嵌入表单modal滚动条样式 */ |
| 1010 | #formFragmentModal::-webkit-scrollbar { | 1076 | #formFragmentModal::-webkit-scrollbar { |
| 1011 | width: 10px; | 1077 | width: 10px; |
src/main/resources/static/real_control_v2/fragments/north/nav/station_notice/add.html
0 → 100644
| 1 | +<div class="uk-modal" id="notice_add_mobal"> | ||
| 2 | + <div class="uk-modal-dialog" style="width: 600px;"> | ||
| 3 | + <a href="" class="uk-modal-close uk-close"></a> | ||
| 4 | + <div class="uk-modal-header"> | ||
| 5 | + <h2>添加公告</h2> | ||
| 6 | + </div> | ||
| 7 | + <div class="uk-form uk-form-horizontal" id="report_register_form"> | ||
| 8 | + <form id="add_head_table"> | ||
| 9 | + <input type="hidden" name="NOTICE_BBR" id="NOTICE_BBR" value=""> | ||
| 10 | + <input type="hidden" name="NOTICE_XLNAME" id="NOTICE_XLNAME" value=""> | ||
| 11 | + | ||
| 12 | + <!-- 报备时间 --> | ||
| 13 | + <div class="uk-grid uk-width-2-3 uk-container-center"> | ||
| 14 | + <div class="uk-form-row"> | ||
| 15 | + <label class="uk-form-label"> | ||
| 16 | + 报备时间: | ||
| 17 | + </label> | ||
| 18 | + <div class="uk-form-controls"> | ||
| 19 | + <input type="text" class="form-control" name="NOTICE_DATE" id="NOTICE_DATE" readonly="readonly"> | ||
| 20 | + </div> | ||
| 21 | + </div> | ||
| 22 | + </div> | ||
| 23 | + <div class="uk-grid uk-width-2-3 uk-container-center"> | ||
| 24 | + <div class="uk-form-row"> | ||
| 25 | + <label class="uk-form-label"> | ||
| 26 | + 公告截止: | ||
| 27 | + </label> | ||
| 28 | + <div class="uk-form-controls"> | ||
| 29 | + <input class="form-control" type="text" name="NOTICE_TIME" id="NOTICE_TIME"> | ||
| 30 | + </div> | ||
| 31 | + </div> | ||
| 32 | + </div> | ||
| 33 | + <!-- 类型 --> | ||
| 34 | + <div class="uk-grid uk-width-2-3 uk-container-center" hidden> | ||
| 35 | + <div class="uk-form-row"> | ||
| 36 | + <label class="uk-form-label"> | ||
| 37 | + 类型: | ||
| 38 | + </label> | ||
| 39 | + <div class="uk-form-controls"> | ||
| 40 | + <select class="form-control typeSelect" name="NOTICE_TYPE" id="NOTICE_TYPE"> | ||
| 41 | + <option value="1">突发事件</option> | ||
| 42 | + <option value="2">区域公告</option> | ||
| 43 | + </select> | ||
| 44 | + </div> | ||
| 45 | + </div> | ||
| 46 | + </div> | ||
| 47 | + </form> | ||
| 48 | + | ||
| 49 | + <!-- 突发事件--> | ||
| 50 | + <form id="add_emergency_table" class="c_register_form" style="display:none; margin-top: 35px;"> | ||
| 51 | + <div class="uk-grid uk-width-2-3 uk-container-center"> | ||
| 52 | + <div class="uk-form-row"> | ||
| 53 | + <label class="uk-form-label"> | ||
| 54 | + 线路: | ||
| 55 | + </label> | ||
| 56 | + <div class="uk-form-controls"> | ||
| 57 | + <select class="form-control lineSelect" name="NOTICE_XL" id="NOTICE_XL"> | ||
| 58 | + </select> | ||
| 59 | + </div> | ||
| 60 | + </div> | ||
| 61 | + </div> | ||
| 62 | + <div class="uk-grid uk-width-2-3 uk-container-center"> | ||
| 63 | + <div class="uk-form-row"> | ||
| 64 | + <label class="uk-form-label"> | ||
| 65 | + 方向: | ||
| 66 | + </label> | ||
| 67 | + <div class="uk-form-controls"> | ||
| 68 | + <select class="form-control typeSelect" name="NOTICE_XSFX" id="NOTICE_XSFX" > | ||
| 69 | + <option value="0">上行</option> | ||
| 70 | + <option value="1">下行</option> | ||
| 71 | + </select> | ||
| 72 | + </div> | ||
| 73 | + </div> | ||
| 74 | + </div> | ||
| 75 | + <div class="uk-grid uk-width-2-3 uk-container-center"> | ||
| 76 | + <div class="uk-form-row"> | ||
| 77 | + <label class="uk-form-label"> | ||
| 78 | + 突发事件: | ||
| 79 | + </label> | ||
| 80 | + <div class="uk-form-controls"> | ||
| 81 | + <select class="form-control typeSelect" name="NOTICE_TFSJ" id="NOTICE_TFSJ" > | ||
| 82 | + <option value="1">重大活动</option> | ||
| 83 | + <option value="2">恶劣天气</option> | ||
| 84 | + <option value="3">交通事故</option> | ||
| 85 | + <option value="3">道路拥堵</option> | ||
| 86 | + </select> | ||
| 87 | + </div> | ||
| 88 | + </div> | ||
| 89 | + </div> | ||
| 90 | + <div class="uk-grid uk-width-2-3 uk-container-center"> | ||
| 91 | + <div class="uk-form-row"> | ||
| 92 | + <label class="uk-form-label"> | ||
| 93 | + 事件影响: | ||
| 94 | + </label> | ||
| 95 | + <div class="uk-form-controls"> | ||
| 96 | + <select class="form-control typeSelect" name="NOTICE_SJYX" id="NOTICE_SJYX" > | ||
| 97 | + <option value="1">临时改道</option> | ||
| 98 | + <option value="2">班次延误</option> | ||
| 99 | + </select> | ||
| 100 | + </div> | ||
| 101 | + </div> | ||
| 102 | + </div> | ||
| 103 | + <div class="uk-grid uk-width-2-3 uk-container-center"> | ||
| 104 | + <div class="uk-form-row"> | ||
| 105 | + <label class="uk-form-label"> | ||
| 106 | + 影响站点: | ||
| 107 | + </label> | ||
| 108 | + <div class="uk-form-controls"> | ||
| 109 | + <select class="form-control lineSelect" name="NOTICE_STATION" id="NOTICE_STATION" > | ||
| 110 | + </select> | ||
| 111 | + </div> | ||
| 112 | + </div> | ||
| 113 | + </div> | ||
| 114 | + <div class="uk-modal-footer uk-text-right"> | ||
| 115 | + <span class="bind_gas_station_panel" style="position: absolute;left: 30px;text-decoration: underline;"></span> | ||
| 116 | + <button type="button" class="uk-button uk-modal-close">取消</button> | ||
| 117 | + <button type="submit" class="uk-button uk-button-primary submitBtn"><i class="uk-icon-check"></i> 保存</button> | ||
| 118 | + </div> | ||
| 119 | + </form> | ||
| 120 | + <!-- 区域公告--> | ||
| 121 | + <form id="add_regional_table" class="c_register_form" style="display:none; margin-top: 35px;"> | ||
| 122 | + <div class="uk-grid uk-width-2-3 uk-container-center"> | ||
| 123 | + <div class="uk-form-row"> | ||
| 124 | + <label class="uk-form-label"> | ||
| 125 | + 区域: | ||
| 126 | + </label> | ||
| 127 | + <div class="uk-form-controls"> | ||
| 128 | + <select class="form-control lineSelect" name="NOTICE_QY" id="NOTICE_QY"> | ||
| 129 | + <option value='0'>全部</option> | ||
| 130 | + <option value='1'>区域1</option> | ||
| 131 | + <option value='2'>区域2</option> | ||
| 132 | + <option value='3'>区域3</option> | ||
| 133 | + </select> | ||
| 134 | + </div> | ||
| 135 | + </div> | ||
| 136 | + </div> | ||
| 137 | + <div class="uk-grid uk-width-2-3 uk-container-center"> | ||
| 138 | + <div class="uk-form-row"> | ||
| 139 | + <label class="uk-form-label"> | ||
| 140 | + 公告信息: | ||
| 141 | + </label> | ||
| 142 | + <div class="uk-form-controls"> | ||
| 143 | + <select class="form-control typeSelect" name="NOTICE_GG" id="NOTICE_GG" style="max-width: 220px"> | ||
| 144 | + <option value="0">雨天路滑,安全出行。</option> | ||
| 145 | + <option value="1">高峰时段,道路拥堵,请乘客合理安排出行。</option> | ||
| 146 | + <option value="2">请先下后上,注意乘车安全。</option> | ||
| 147 | + </select> | ||
| 148 | + </div> | ||
| 149 | + </div> | ||
| 150 | + </div> | ||
| 151 | + <div class="uk-modal-footer uk-text-right"> | ||
| 152 | + <span class="bind_gas_station_panel" style="position: absolute;left: 30px;text-decoration: underline;"></span> | ||
| 153 | + <button type="button" class="uk-button uk-modal-close">取消</button> | ||
| 154 | + <button type="submit" class="uk-button uk-button-primary submitBtn"><i class="uk-icon-check"></i> 保存</button> | ||
| 155 | + </div> | ||
| 156 | + </form> | ||
| 157 | + </div> | ||
| 158 | + </div> | ||
| 159 | + | ||
| 160 | + <script> | ||
| 161 | + (function () { | ||
| 162 | + var modal = '#notice_add_mobal'; | ||
| 163 | + var tableActive = '',formActive = ''; | ||
| 164 | + var NOTICE_TYPE, | ||
| 165 | + lineList = {}, | ||
| 166 | + user = {}; | ||
| 167 | + var stationRoutes = []; | ||
| 168 | + //加载站点 | ||
| 169 | + $("#NOTICE_XL").on("change", function(){ | ||
| 170 | + var lineCode = $(this).val(); | ||
| 171 | + var direction = $('#NOTICE_XSFX').val(); | ||
| 172 | + loadStation(lineCode,direction); | ||
| 173 | + | ||
| 174 | + }); | ||
| 175 | + $("#NOTICE_XSFX").on("change", function(){ | ||
| 176 | + var lineCode = $('#NOTICE_XL').val(); | ||
| 177 | + var direction = $(this).val(); | ||
| 178 | + loadStation(lineCode,direction); | ||
| 179 | + }); | ||
| 180 | + | ||
| 181 | + $(modal).on('init', function (e, data) { | ||
| 182 | + $('#NOTICE_DATE').datetimepicker({ | ||
| 183 | + format : 'YYYY-MM-DD HH:mm:ss', | ||
| 184 | + locale : 'zh-cn' | ||
| 185 | + }); | ||
| 186 | + $("#NOTICE_TIME").datetimepicker({ | ||
| 187 | + format : 'YYYY-MM-DD HH:mm:ss', | ||
| 188 | + locale : 'zh-cn' | ||
| 189 | + }); | ||
| 190 | + var dateTime = moment(new Date()).format('YYYY-MM-DD HH:mm:ss'); | ||
| 191 | + var d = new Date(); | ||
| 192 | + d.setTime(d.getTime() + 1*1000*60*60*24); | ||
| 193 | + var dateTime2 = moment(d).format('YYYY-MM-DD HH:mm:ss'); | ||
| 194 | + $('#NOTICE_DATE').val(dateTime); | ||
| 195 | + $("#NOTICE_TIME").val(dateTime2); | ||
| 196 | + tableActive = "add_"+data.tableActive; | ||
| 197 | + var typeInt = 1; | ||
| 198 | + if (tableActive == 'add_emergency_table') { | ||
| 199 | + typeInt = 1; | ||
| 200 | + } else if (tableActive == 'add_regional_table') { | ||
| 201 | + typeInt = 2; | ||
| 202 | + } else { | ||
| 203 | + UIkit.modal(modal).hide(); | ||
| 204 | + notify_err('您所选的数据有问题,请重新选择!'); | ||
| 205 | + return; | ||
| 206 | + } | ||
| 207 | + $('#NOTICE_TYPE').val(typeInt); | ||
| 208 | + document.getElementById(tableActive).style.display = ""; | ||
| 209 | + user = data.user; | ||
| 210 | + $('#NOTICE_BBR').val(user.userName+'/'+user.name); | ||
| 211 | + //加载线路 | ||
| 212 | + lineList = data.lineList; | ||
| 213 | + var options = ''; | ||
| 214 | + $.each(lineList, function (i,line) { | ||
| 215 | + options += '<option value='+line.lineCode+'>'+line.name+'</option>'; | ||
| 216 | + }); | ||
| 217 | + $('#NOTICE_XL').html(options); | ||
| 218 | + // 模拟change给公司分公司赋值 | ||
| 219 | + $('#NOTICE_XL').trigger("change"); | ||
| 220 | + changeType(tableActive); | ||
| 221 | + | ||
| 222 | + $('#NOTICE_TYPE').on('change',function () { | ||
| 223 | + document.getElementById(tableActive).style.display = "none"; | ||
| 224 | + NOTICE_TYPE = this.value; | ||
| 225 | + if (NOTICE_TYPE == 1) { | ||
| 226 | + tableActive = 'add_emergency_table'; | ||
| 227 | + } else if (NOTICE_TYPE == 2) { | ||
| 228 | + tableActive = 'add_regional_table'; | ||
| 229 | + } | ||
| 230 | + document.getElementById(tableActive).style.display = ""; | ||
| 231 | + changeType(tableActive); | ||
| 232 | + }); | ||
| 233 | + }); | ||
| 234 | + | ||
| 235 | + function loadStation(lineCode,direction){ | ||
| 236 | + //站点路由 | ||
| 237 | + stationRoutes = gb_common.groupBy(gb_data_basic.stationRoutes(lineCode).sort(function (a, b) { | ||
| 238 | + return a.stationRouteCode - b.stationRouteCode; | ||
| 239 | + }), 'directions')[direction]; | ||
| 240 | + var options = ''; | ||
| 241 | + $.each(stationRoutes, function (i,station) { | ||
| 242 | + options += '<option value='+station.stationCode+'>'+station.stationName+'</option>'; | ||
| 243 | + }); | ||
| 244 | + $('#NOTICE_STATION').html(options); | ||
| 245 | + // 模拟change给公司分公司赋值 | ||
| 246 | + $('#NOTICE_STATION').trigger("change"); | ||
| 247 | + } | ||
| 248 | + function changeType(tableActiveStr) { | ||
| 249 | + formActive = $('#'+tableActiveStr); | ||
| 250 | + //校验不过 | ||
| 251 | + formActive.on('err.field.fv', function () { | ||
| 252 | + $('#submitChildTaskBtn', modal).removeClass('disabled').removeAttr('disabled'); | ||
| 253 | + }); | ||
| 254 | + | ||
| 255 | + //校验 | ||
| 256 | + formActive.formValidation({framework: 'uikit', locale: 'zh_CN'}); | ||
| 257 | + //提交 | ||
| 258 | + formActive.on('success.form.fv', function (e) { | ||
| 259 | + e.preventDefault(); | ||
| 260 | + var headData = $('#add_head_table').serializeJSON(); | ||
| 261 | + var bodyData = $(formActive).serializeJSON(); | ||
| 262 | + var params = {}; | ||
| 263 | + Object.assign(params,headData,bodyData); | ||
| 264 | + params.STATUS = 0; | ||
| 265 | + gb_common.$post('/notice/', params, function (rs) { | ||
| 266 | + if(rs.status == 'SUCCESS'){ | ||
| 267 | + UIkit.modal(modal).hide(); | ||
| 268 | + notify_succ('新增成功!'); | ||
| 269 | + manageJs.refreshDate(); | ||
| 270 | + } else | ||
| 271 | + notify_err('新增失败!'); | ||
| 272 | + | ||
| 273 | + }); | ||
| 274 | + }); | ||
| 275 | + } | ||
| 276 | + | ||
| 277 | + //submit | ||
| 278 | + $('.submitBtn', modal).on('click', function () { | ||
| 279 | + $(this).addClass('disabled').attr('disabled', 'disabled'); | ||
| 280 | + formActive.data('valid', false); | ||
| 281 | + formActive.formValidation('validate'); | ||
| 282 | + }); | ||
| 283 | + })(); | ||
| 284 | + </script> | ||
| 285 | +</div> | ||
| 0 | \ No newline at end of file | 286 | \ No newline at end of file |
src/main/resources/static/real_control_v2/fragments/north/nav/station_notice/css/main.css
0 → 100644
| 1 | + | ||
| 2 | +.report-register-table1 dl dt:nth-of-type(1), .report-register-table1 dl dd:nth-of-type(1) { | ||
| 3 | + width: 2%; | ||
| 4 | +} | ||
| 5 | +.report-register-table1 dl dt:nth-of-type(2), .report-register-table1 dl dd:nth-of-type(2) { | ||
| 6 | + width: 4%; | ||
| 7 | +} | ||
| 8 | +.report-register-table1 dl dt:nth-of-type(3), .report-register-table1 dl dd:nth-of-type(3) { | ||
| 9 | + width: 7%; | ||
| 10 | +} | ||
| 11 | +.report-register-table1 dl dt:nth-of-type(4), .report-register-table1 dl dd:nth-of-type(4) { | ||
| 12 | + width: 7%; | ||
| 13 | +} | ||
| 14 | +.report-register-table1 dl dt:nth-of-type(5), .report-register-table1 dl dd:nth-of-type(5) { | ||
| 15 | + width: 7%; | ||
| 16 | +} | ||
| 17 | +.report-register-table1 dl dt:nth-of-type(6), .report-register-table1 dl dd:nth-of-type(6) { | ||
| 18 | + width: 7%; | ||
| 19 | +} | ||
| 20 | +.report-register-table1 dl dt:nth-of-type(7), .report-register-table1 dl dd:nth-of-type(7) { | ||
| 21 | + width: 10%; | ||
| 22 | +} | ||
| 23 | +.report-register-table1 dl dt:nth-of-type(8), .report-register-table1 dl dd:nth-of-type(8) { | ||
| 24 | + width: 7%; | ||
| 25 | +} | ||
| 26 | +.report-register-table1 dl dt:nth-of-type(9), .report-register-table1 dl dd:nth-of-type(9) { | ||
| 27 | + width: 7%; | ||
| 28 | +} | ||
| 29 | +.report-register-table1 dl dt:nth-of-type(10), .report-register-table1 dl dd:nth-of-type(10) { | ||
| 30 | + width: 7%; | ||
| 31 | +} | ||
| 32 | +.report-register-table1 dl dt:nth-of-type(11), .report-register-table1 dl dd:nth-of-type(11) { | ||
| 33 | + width: 7%; | ||
| 34 | +} | ||
| 35 | +.report-register-table1 dl dt:nth-of-type(12), .report-register-table1 dl dd:nth-of-type(12) { | ||
| 36 | + width: 7%; | ||
| 37 | +} | ||
| 38 | +.report-register-table1 dl dt:nth-of-type(13), .report-register-table1 dl dd:nth-of-type(13) { | ||
| 39 | + width: 7%; | ||
| 40 | +} | ||
| 41 | +.report-register-table1 dl dt:nth-of-type(14), .report-register-table1 dl dd:nth-of-type(14) { | ||
| 42 | + width: 7%; | ||
| 43 | +} | ||
| 44 | +.report-register-table1 dl dt:nth-of-type(15), .report-register-table1 dl dd:nth-of-type(15) { | ||
| 45 | + width: 7%; | ||
| 46 | +} | ||
| 47 | +.report-register-table1 dl dt:nth-of-type(16), .report-register-table1 dl dd:nth-of-type(16) { | ||
| 48 | + width: 7%; | ||
| 49 | +} | ||
| 50 | +.report-register-table1 dl dt:nth-of-type(17), .report-register-table1 dl dd:nth-of-type(17) { | ||
| 51 | + width: 7%; | ||
| 52 | +} | ||
| 53 | +.report-register-table1 dl dt:nth-of-type(18), .report-register-table1 dl dd:nth-of-type(18) { | ||
| 54 | + width: 7%; | ||
| 55 | +} | ||
| 56 | + | ||
| 57 | + | ||
| 58 | +.report-register-table2 dl dt:nth-of-type(1), .report-register-table2 dl dd:nth-of-type(1) { | ||
| 59 | + width: 2%; | ||
| 60 | +} | ||
| 61 | +.report-register-table2 dl dt:nth-of-type(2), .report-register-table2 dl dd:nth-of-type(2) { | ||
| 62 | + width: 4%; | ||
| 63 | +} | ||
| 64 | +.report-register-table2 dl dt:nth-of-type(3), .report-register-table2 dl dd:nth-of-type(3) { | ||
| 65 | + width: 7%; | ||
| 66 | +} | ||
| 67 | +.report-register-table2 dl dt:nth-of-type(4), .report-register-table2 dl dd:nth-of-type(4) { | ||
| 68 | + width: 7%; | ||
| 69 | +} | ||
| 70 | +.report-register-table2 dl dt:nth-of-type(5), .report-register-table2 dl dd:nth-of-type(5) { | ||
| 71 | + width: 7%; | ||
| 72 | +} | ||
| 73 | +.report-register-table2 dl dt:nth-of-type(6), .report-register-table2 dl dd:nth-of-type(6) { | ||
| 74 | + width: 7%; | ||
| 75 | +} | ||
| 76 | +.report-register-table2 dl dt:nth-of-type(7), .report-register-table2 dl dd:nth-of-type(7) { | ||
| 77 | + width: 7%; | ||
| 78 | +} | ||
| 79 | +.report-register-table2 dl dt:nth-of-type(8), .report-register-table2 dl dd:nth-of-type(8) { | ||
| 80 | + width: 7%; | ||
| 81 | +} | ||
| 82 | +.report-register-table2 dl dt:nth-of-type(9), .report-register-table2 dl dd:nth-of-type(9) { | ||
| 83 | + width: 7%; | ||
| 84 | +} | ||
| 85 | +.report-register-table2 dl dt:nth-of-type(10), .report-register-table2 dl dd:nth-of-type(10) { | ||
| 86 | + width: 7%; | ||
| 87 | +} | ||
| 88 | +.report-register-table2 dl dt:nth-of-type(11), .report-register-table2 dl dd:nth-of-type(11) { | ||
| 89 | + width: 7%; | ||
| 90 | +} | ||
| 91 | + | ||
| 92 | +.report-register-table3 dl dt:nth-of-type(1), .report-register-table3 dl dd:nth-of-type(1) { | ||
| 93 | + width: 2%; | ||
| 94 | +} | ||
| 95 | +.report-register-table3 dl dt:nth-of-type(2), .report-register-table3 dl dd:nth-of-type(2) { | ||
| 96 | + width: 4%; | ||
| 97 | +} | ||
| 98 | +.report-register-table3 dl dt:nth-of-type(3), .report-register-table3 dl dd:nth-of-type(3) { | ||
| 99 | + width: 7%; | ||
| 100 | +} | ||
| 101 | +.report-register-table3 dl dt:nth-of-type(4), .report-register-table3 dl dd:nth-of-type(4) { | ||
| 102 | + width: 7%; | ||
| 103 | +} | ||
| 104 | +.report-register-table3 dl dt:nth-of-type(5), .report-register-table3 dl dd:nth-of-type(5) { | ||
| 105 | + width: 12%; | ||
| 106 | +} | ||
| 107 | +.report-register-table3 dl dt:nth-of-type(6), .report-register-table3 dl dd:nth-of-type(6) { | ||
| 108 | + width: 7%; | ||
| 109 | +} | ||
| 110 | +.report-register-table3 dl dt:nth-of-type(7), .report-register-table3 dl dd:nth-of-type(7) { | ||
| 111 | + width: 7%; | ||
| 112 | +} | ||
| 113 | +.report-register-table3 dl dt:nth-of-type(8), .report-register-table3 dl dd:nth-of-type(8) { | ||
| 114 | + width: 7%; | ||
| 115 | +} | ||
| 116 | +.report-register-table3 dl dt:nth-of-type(9), .report-register-table3 dl dd:nth-of-type(9) { | ||
| 117 | + width: 7%; | ||
| 118 | +} | ||
| 119 | +.report-register-table3 dl dt:nth-of-type(10), .report-register-table3 dl dd:nth-of-type(10) { | ||
| 120 | + width: 7%; | ||
| 121 | +} | ||
| 122 | + | ||
| 123 | +.report-register-table4 dl dt:nth-of-type(1), .report-register-table4 dl dd:nth-of-type(1) { | ||
| 124 | + width: 2%; | ||
| 125 | +} | ||
| 126 | +.report-register-table4 dl dt:nth-of-type(2), .report-register-table4 dl dd:nth-of-type(2) { | ||
| 127 | + width: 4%; | ||
| 128 | +} | ||
| 129 | +.report-register-table4 dl dt:nth-of-type(3), .report-register-table4 dl dd:nth-of-type(3) { | ||
| 130 | + width: 7%; | ||
| 131 | +} | ||
| 132 | +.report-register-table4 dl dt:nth-of-type(4), .report-register-table4 dl dd:nth-of-type(4) { | ||
| 133 | + width: 7%; | ||
| 134 | +} | ||
| 135 | +.report-register-table4 dl dt:nth-of-type(5), .report-register-table4 dl dd:nth-of-type(5) { | ||
| 136 | + width: 7%; | ||
| 137 | +} | ||
| 138 | +.report-register-table4 dl dt:nth-of-type(6), .report-register-table4 dl dd:nth-of-type(6) { | ||
| 139 | + width: 7%; | ||
| 140 | +} | ||
| 141 | +.report-register-table4 dl dt:nth-of-type(7), .report-register-table4 dl dd:nth-of-type(7) { | ||
| 142 | + width: 7%; | ||
| 143 | +} | ||
| 144 | +.report-register-table4 dl dt:nth-of-type(8), .report-register-table4 dl dd:nth-of-type(8) { | ||
| 145 | + width: 9%; | ||
| 146 | +} | ||
| 147 | +.report-register-table4 dl dt:nth-of-type(9), .report-register-table4 dl dd:nth-of-type(9) { | ||
| 148 | + width: 12%; | ||
| 149 | +} | ||
| 150 | +.report-register-table4 dl dt:nth-of-type(10), .report-register-table4 dl dd:nth-of-type(10) { | ||
| 151 | + width: 7%; | ||
| 152 | +} | ||
| 153 | +.report-register-table4 dl dt:nth-of-type(11), .report-register-table4 dl dd:nth-of-type(11) { | ||
| 154 | + width: 7%; | ||
| 155 | +} | ||
| 156 | +.report-register-table4 dl dt:nth-of-type(12), .report-register-table4 dl dd:nth-of-type(12) { | ||
| 157 | + width: 20%; | ||
| 158 | +} | ||
| 159 | +.report-register-table4 dl dt:nth-of-type(13), .report-register-table4 dl dd:nth-of-type(13) { | ||
| 160 | + width: 7%; | ||
| 161 | +} | ||
| 162 | +.report-register-table4 dl dt:nth-of-type(14), .report-register-table4 dl dd:nth-of-type(14) { | ||
| 163 | + width: 7%; | ||
| 164 | +} | ||
| 165 | +.report-register-table4 dl dt:nth-of-type(15), .report-register-table4 dl dd:nth-of-type(15) { | ||
| 166 | + width: 7%; | ||
| 167 | +} | ||
| 168 | +.report-register-table4 dl dt:nth-of-type(16), .report-register-table4 dl dd:nth-of-type(16) { | ||
| 169 | + width: 7%; | ||
| 170 | +} | ||
| 171 | +.report-register-table4 dl dt:nth-of-type(17), .report-register-table4 dl dd:nth-of-type(17) { | ||
| 172 | + width: 7%; | ||
| 173 | +} | ||
| 174 | + | ||
| 175 | + | ||
| 176 | +.report-register-table5 dl dt:nth-of-type(1), .report-register-table5 dl dd:nth-of-type(1) { | ||
| 177 | + width: 2%; | ||
| 178 | +} | ||
| 179 | +.report-register-table5 dl dt:nth-of-type(2), .report-register-table5 dl dd:nth-of-type(2) { | ||
| 180 | + width: 4%; | ||
| 181 | +} | ||
| 182 | +.report-register-table5 dl dt:nth-of-type(3), .report-register-table5 dl dd:nth-of-type(3) { | ||
| 183 | + width: 7%; | ||
| 184 | +} | ||
| 185 | +.report-register-table5 dl dt:nth-of-type(4), .report-register-table5 dl dd:nth-of-type(4) { | ||
| 186 | + width: 7%; | ||
| 187 | +} | ||
| 188 | +.report-register-table5 dl dt:nth-of-type(5), .report-register-table5 dl dd:nth-of-type(5) { | ||
| 189 | + width: 7%; | ||
| 190 | +} | ||
| 191 | + | ||
| 192 | + | ||
| 193 | +.report-register-table6 dl dt:nth-of-type(1), .report-register-table6 dl dd:nth-of-type(1) { | ||
| 194 | + width: 2%; | ||
| 195 | +} | ||
| 196 | +.report-register-table6 dl dt:nth-of-type(2), .report-register-table6 dl dd:nth-of-type(2) { | ||
| 197 | + width: 4%; | ||
| 198 | +} | ||
| 199 | +.report-register-table6 dl dt:nth-of-type(3), .report-register-table6 dl dd:nth-of-type(3) { | ||
| 200 | + width: 7%; | ||
| 201 | +} | ||
| 202 | +.report-register-table6 dl dt:nth-of-type(4), .report-register-table6 dl dd:nth-of-type(4) { | ||
| 203 | + width: 7%; | ||
| 204 | +} | ||
| 205 | +.report-register-table6 dl dt:nth-of-type(5), .report-register-table6 dl dd:nth-of-type(5) { | ||
| 206 | + width: 7%; | ||
| 207 | +} | ||
| 208 | +.report-register-table6 dl dt:nth-of-type(6), .report-register-table6 dl dd:nth-of-type(6) { | ||
| 209 | + width: 7%; | ||
| 210 | +} | ||
| 211 | +.form-control { | ||
| 212 | + display: block; | ||
| 213 | + width: 100%; | ||
| 214 | + height: 34px; | ||
| 215 | + padding: 6px 12px; | ||
| 216 | + font-size: 14px; | ||
| 217 | + line-height: 1.42857; | ||
| 218 | + color: #555555; | ||
| 219 | + background-color: #fff; | ||
| 220 | + background-image: none; | ||
| 221 | + border: 1px solid #c2cad8; | ||
| 222 | + border-radius: 4px; | ||
| 223 | + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); | ||
| 224 | + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); | ||
| 225 | + -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; | ||
| 226 | + -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; | ||
| 227 | + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; } | ||
| 0 | \ No newline at end of file | 228 | \ No newline at end of file |
src/main/resources/static/real_control_v2/fragments/north/nav/station_notice/list.html
0 → 100644
| 1 | +<div class="uk-modal ct_move_modal" id="report-register-modal"> | ||
| 2 | + <!-- editable --> | ||
| 3 | + <!--<link href="/metronic_v4.5.4/plugins/bootstrap-editable/bootstrap-editable/css/bootstrap-editable.css" rel="stylesheet" type="text/css" />--> | ||
| 4 | + <!-- Bootstrap style --> | ||
| 5 | + <link href="/metronic_v4.5.4/plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" /> | ||
| 6 | + <!-- select2 下拉框插件 --> | ||
| 7 | + <link href="/metronic_v4.5.4/plugins/select2/css/select2.min.css" | ||
| 8 | + rel="stylesheet" type="text/css" /> | ||
| 9 | + <link | ||
| 10 | + href="/metronic_v4.5.4/plugins/select2/css/select2-bootstrap.min.css" | ||
| 11 | + rel="stylesheet" type="text/css" /> | ||
| 12 | + <style> | ||
| 13 | + /*ul.navigation_bar:before {*/ | ||
| 14 | + /*content: "报备类型";*/ | ||
| 15 | + /*position: absolute;*/ | ||
| 16 | + /*top: -9px;*/ | ||
| 17 | + /*font-size: 12px;*/ | ||
| 18 | + /*background: white;*/ | ||
| 19 | + /*padding: 0 4px;*/ | ||
| 20 | + /*color: #7d7b7b;*/ | ||
| 21 | + /*left: 10px;*/ | ||
| 22 | + /*}*/ | ||
| 23 | + </style> | ||
| 24 | + <div class="uk-modal-dialog" style="width: 1800px;"> | ||
| 25 | + <a href="" class="uk-modal-close uk-close"></a> | ||
| 26 | + <div class="uk-modal-header"> | ||
| 27 | + <h2>报备登记报表</h2> | ||
| 28 | + </div> | ||
| 29 | + | ||
| 30 | + | ||
| 31 | + <div style="padding-left: 12px;margin: 10px 0"> | ||
| 32 | + <ul class="uk-subnav uk-subnav-pill navigation_bar"> | ||
| 33 | + <li id="first_last_late" class="uk-active"><a>首末班误点</a></li> | ||
| 34 | + <li id="large_interval"><a>大间隔</a></li> | ||
| 35 | + <li id="emergency"><a>突发事件</a></li> | ||
| 36 | + <li id="detour"><a>绕改道</a></li> | ||
| 37 | +<!-- <li id="accident"><a>事故</a></li> --> | ||
| 38 | + <li id="rests"><a>其他</a></li> | ||
| 39 | +<!-- <li id="consult"><a>咨询</a></li> --> | ||
| 40 | + </ul> | ||
| 41 | + </div> | ||
| 42 | + | ||
| 43 | + <div class="uk-panel uk-panel-box uk-panel-box-primary" style="margin: 10px 0;"> | ||
| 44 | + <!--<form class="uk-form search-form">--> | ||
| 45 | + <!--<fieldset data-uk-margin>--> | ||
| 46 | + <span class="horizontal-field">线路</span> | ||
| 47 | + <select name="line" id="line" style="width: 180px;"></select> | ||
| 48 | + <span class="horizontal-field">时间</span> | ||
| 49 | + <input class=" horizontal-field" type="text" id="date1" style="width: 180px;"/> - | ||
| 50 | + <input class="horizontal-field" type="text" id="date2" style="width: 180px;"/> | ||
| 51 | + | ||
| 52 | + <button class="uk-button horizontal-field" id="query">检索</button> | ||
| 53 | + <button class="uk-button horizontal-field" id="export">导出</button> | ||
| 54 | + <!--</fieldset>--> | ||
| 55 | + <!--</form>--> | ||
| 56 | + </div> | ||
| 57 | + | ||
| 58 | + <div class="ct_table_wrap" style="height: 510px"> | ||
| 59 | + <!-- 首末班误点--> | ||
| 60 | + <table class="table table-striped table-bordered table-hover table-checkable report-register-table active" id="first_last_late_table"> | ||
| 61 | + <thead > | ||
| 62 | + <tr role="row"> | ||
| 63 | + <th width="2%">序号</th> | ||
| 64 | + <th width="5%">报备时间</th> | ||
| 65 | + <th width="5%">报备人</th> | ||
| 66 | + <th width="5%">公司</th> | ||
| 67 | + <th width="5%">分公司</th> | ||
| 68 | + <th width="7%">线路</th> | ||
| 69 | + <th width="7%">延误站点</th> | ||
| 70 | + <th width="5%">延误时间</th> | ||
| 71 | + <th width="10%">首末班延误原因</th> | ||
| 72 | + </tr> | ||
| 73 | + </thead> | ||
| 74 | + <tbody class="table_body"> | ||
| 75 | + </tbody> | ||
| 76 | + </table> | ||
| 77 | + <!-- 大间隔--> | ||
| 78 | + <table class="table table-striped table-bordered table-hover table-checkable report-register-table" style="display:none" id="large_interval_table"> | ||
| 79 | + <thead > | ||
| 80 | + <tr role="row"> | ||
| 81 | + <th width="2%">序号</th> | ||
| 82 | + <th width="5%">报备时间</th> | ||
| 83 | + <th width="5%">报备人</th> | ||
| 84 | + <th width="5%">公司</th> | ||
| 85 | + <th width="5%">分公司</th> | ||
| 86 | + <th width="7%">线路</th> | ||
| 87 | + <th width="7%">路段</th> | ||
| 88 | + <th width="7%">行驶方向</th> | ||
| 89 | + <th width="7%">站点</th> | ||
| 90 | + <th width="7%">大间隔时间</th> | ||
| 91 | + <th width="7%">大间隔原因</th> | ||
| 92 | + </tr> | ||
| 93 | + </thead> | ||
| 94 | + <tbody class="table_body"> | ||
| 95 | + </tbody> | ||
| 96 | + </table> | ||
| 97 | + <!-- 突发事件--> | ||
| 98 | + <table class="table table-striped table-bordered table-hover table-checkable report-register-table" style="display:none" id="emergency_table"> | ||
| 99 | + <thead > | ||
| 100 | + <tr role="row"> | ||
| 101 | + <th width="2%">序号</th> | ||
| 102 | + <th width="5%">报备时间</th> | ||
| 103 | + <th width="5%">报备人</th> | ||
| 104 | + <th width="5%">公司</th> | ||
| 105 | + <th width="5%">分公司</th> | ||
| 106 | + <th width="7%">影响线路</th> | ||
| 107 | + <th width="7%">重大活动货突发事件</th> | ||
| 108 | + <th width="7%">影响时间</th> | ||
| 109 | + <th width="7%">影响班次数</th> | ||
| 110 | + <th width="7%">调整措施</th> | ||
| 111 | + </tr> | ||
| 112 | + </thead> | ||
| 113 | + <tbody class="table_body"> | ||
| 114 | + </tbody> | ||
| 115 | + </table> | ||
| 116 | + <!-- 事故--> | ||
| 117 | + <table class="table table-striped table-bordered table-hover table-checkable report-register-table" style="display:none" id="accident_table"> | ||
| 118 | + <thead > | ||
| 119 | + <tr role="row"> | ||
| 120 | + <th width="2%">序号</th> | ||
| 121 | + <th width="5%">报备时间</th> | ||
| 122 | + <th width="5%">报备人</th> | ||
| 123 | + <th width="5%">公司</th> | ||
| 124 | + <th width="5%">分公司</th> | ||
| 125 | + <th width="5%">线路</th> | ||
| 126 | + <th width="5%">车辆自编号</th> | ||
| 127 | + <th width="5%">驾驶员</th> | ||
| 128 | + <th width="5%">事故发生时间</th> | ||
| 129 | + <th width="5%">事故发生地点</th> | ||
| 130 | + <th width="5%">行驶方向</th> | ||
| 131 | + <th width="5%">事故对象</th> | ||
| 132 | + <th width="5%">对象车牌号</th> | ||
| 133 | + <th width="5%">事故概况</th> | ||
| 134 | + <th width="5%">受伤人数</th> | ||
| 135 | + <th width="5%">死亡人数</th> | ||
| 136 | + <th width="5%">报告人</th> | ||
| 137 | + <th width="5%">报告人电话</th> | ||
| 138 | + <th width="5%">备注</th> | ||
| 139 | + </tr> | ||
| 140 | + </thead> | ||
| 141 | + <tbody class="table_body"> | ||
| 142 | + </tbody> | ||
| 143 | + </table> | ||
| 144 | + <!-- 绕改道--> | ||
| 145 | + <table class="table table-striped table-bordered table-hover table-checkable report-register-table" style="display:none" id="detour_table"> | ||
| 146 | + <thead class=""> | ||
| 147 | + <tr role="row"> | ||
| 148 | + <th width="2%">序号</th> | ||
| 149 | + <th width="5%">报备时间</th> | ||
| 150 | + <th width="5%">报备人</th> | ||
| 151 | + <th width="5%">公司</th> | ||
| 152 | + <th width="5%">分公司</th> | ||
| 153 | + <th width="5%">线路</th> | ||
| 154 | + <th width="5%">路段</th> | ||
| 155 | + <th width="5%">行驶方向</th> | ||
| 156 | + <th width="5%">跳站</th> | ||
| 157 | + <th width="7%">原因</th> | ||
| 158 | + </tr> | ||
| 159 | + </thead> | ||
| 160 | + <tbody class="table_body"> | ||
| 161 | + </tbody> | ||
| 162 | + </table> | ||
| 163 | + <!-- 其他--> | ||
| 164 | + <table class="table table-striped table-bordered table-hover table-checkable report-register-table" style="display:none" id="rests_table"> | ||
| 165 | + <tr role="row"> | ||
| 166 | + <th width="2%">序号</th> | ||
| 167 | + <th width="5%">报备时间</th> | ||
| 168 | + <th width="5%">报备人</th> | ||
| 169 | + <th width="5%">公司</th> | ||
| 170 | + <th width="5%">分公司</th> | ||
| 171 | + <th width="7%">线路</th> | ||
| 172 | + <th width="7%">报备内容</th> | ||
| 173 | + </tr> | ||
| 174 | + </thead> | ||
| 175 | + <tbody class="table_body"> | ||
| 176 | + </tbody> | ||
| 177 | + </table> | ||
| 178 | + <!-- 咨询--> | ||
| 179 | + <table class="table table-striped table-bordered table-hover table-checkable report-register-table" style="display:none" id="consult_table"> | ||
| 180 | + <thead > | ||
| 181 | + <tr role="row"> | ||
| 182 | + <th width="2%">序号</th> | ||
| 183 | + <th width="5%">报备时间</th> | ||
| 184 | + <th width="5%">报备人</th> | ||
| 185 | + <th width="5%">公司</th> | ||
| 186 | + <th width="5%">分公司</th> | ||
| 187 | + <th width="7%">线路</th> | ||
| 188 | + <th width="7%">班线名称</th> | ||
| 189 | + <th width="7%">内容</th> | ||
| 190 | + </tr> | ||
| 191 | + </thead> | ||
| 192 | + <tbody class="table_body"> | ||
| 193 | + </tbody> | ||
| 194 | + </table> | ||
| 195 | + </div> | ||
| 196 | + | ||
| 197 | + <div class="load-panel"> | ||
| 198 | + <i class="uk-icon-spinner uk-icon-spin"></i> | ||
| 199 | + 正在加载数据 | ||
| 200 | + </div> | ||
| 201 | + </div> | ||
| 202 | + | ||
| 203 | + <script id="first_last_late_table_body_list" type="text/html"> | ||
| 204 | + {{each data.list as obj i}} | ||
| 205 | + {{if obj.status == 2}} | ||
| 206 | + <tr style="background-color: #ff5f78"> | ||
| 207 | + {{else}} | ||
| 208 | + <tr> | ||
| 209 | + {{/if}} | ||
| 210 | + <td style="vertical-align: middle;">{{i + 1}}</td> | ||
| 211 | + <td style="vertical-align: middle;">{{obj.report_DATE}}</td> | ||
| 212 | + <td style="vertical-align: middle;">{{obj.report_BBR}}</td> | ||
| 213 | + <td style="vertical-align: middle;">{{obj.report_GSNAME}}</td> | ||
| 214 | + <td style="vertical-align: middle;">{{obj.report_FGSNAME}}</td> | ||
| 215 | + <td style="vertical-align: middle;">{{obj.report_XLNAME}}</td> | ||
| 216 | + <td style="vertical-align: middle;">{{obj.report_STATION}}</td> | ||
| 217 | + <td style="vertical-align: middle;">{{obj.report_YWSJ}}</td> | ||
| 218 | + <td style="vertical-align: middle;">{{obj.report_SMBWD}}</td> | ||
| 219 | + </tr> | ||
| 220 | + {{/each}} | ||
| 221 | + </script> | ||
| 222 | + <script id="large_interval_table_body_list" type="text/html"> | ||
| 223 | + {{each data.list as obj i}} | ||
| 224 | + {{if obj.status == 2}} | ||
| 225 | + <tr style="background-color: #ff5f78"> | ||
| 226 | + {{else}} | ||
| 227 | + <tr> | ||
| 228 | + {{/if}} | ||
| 229 | + <td style="vertical-align: middle;">{{i + 1}}</td> | ||
| 230 | + <td style="vertical-align: middle;">{{obj.report_DATE}}</td> | ||
| 231 | + <td style="vertical-align: middle;">{{obj.report_BBR}}</td> | ||
| 232 | + <td style="vertical-align: middle;">{{obj.report_GSNAME}}</td> | ||
| 233 | + <td style="vertical-align: middle;">{{obj.report_FGSNAME}}</td> | ||
| 234 | + <td style="vertical-align: middle;">{{obj.report_XLNAME}}</td> | ||
| 235 | + <td style="vertical-align: middle;">{{obj.report_ROAD}}</td> | ||
| 236 | + <td style="vertical-align: middle;">{{obj.report_XSFX}}</td> | ||
| 237 | + <td style="vertical-align: middle;">{{obj.report_STATION}}</td> | ||
| 238 | + <td style="vertical-align: middle;">{{obj.report_DJGSJ}}</td> | ||
| 239 | + <td style="vertical-align: middle;">{{obj.report_DJGYY}}</td> | ||
| 240 | + </tr> | ||
| 241 | + {{/each}} | ||
| 242 | + </script> | ||
| 243 | + <script id="emergency_table_body_list" type="text/html"> | ||
| 244 | + {{each data.list as obj i}} | ||
| 245 | + {{if obj.status == 2}} | ||
| 246 | + <tr style="background-color: #ff5f78"> | ||
| 247 | + {{else}} | ||
| 248 | + <tr> | ||
| 249 | + {{/if}} | ||
| 250 | + <td style="vertical-align: middle;">{{i + 1}}</td> | ||
| 251 | + <td style="vertical-align: middle;">{{obj.report_DATE}}</td> | ||
| 252 | + <td style="vertical-align: middle;">{{obj.report_BBR}}</td> | ||
| 253 | + <td style="vertical-align: middle;">{{obj.report_GSNAME}}</td> | ||
| 254 | + <td style="vertical-align: middle;">{{obj.report_FGSNAME}}</td> | ||
| 255 | + <td style="vertical-align: middle;">{{obj.report_XLNAME}}</td> | ||
| 256 | + <td style="vertical-align: middle;">{{obj.report_TFSJ}}</td> | ||
| 257 | + <td style="vertical-align: middle;">{{obj.report_YXSJ}}</td> | ||
| 258 | + <td style="vertical-align: middle;">{{obj.report_YXBC}}</td> | ||
| 259 | + <td style="vertical-align: middle;">{{obj.report_TZCS}}</td> | ||
| 260 | + </tr> | ||
| 261 | + {{/each}} | ||
| 262 | + </script> | ||
| 263 | + <script id="accident_table_body_list" type="text/html"> | ||
| 264 | + {{each data.list as obj i}} | ||
| 265 | + {{if obj.status == 2}} | ||
| 266 | + <tr style="background-color: #ff5f78"> | ||
| 267 | + {{else}} | ||
| 268 | + <tr> | ||
| 269 | + {{/if}} | ||
| 270 | + <td style="vertical-align: middle;">{{i + 1}}</td> | ||
| 271 | + <td style="vertical-align: middle;">{{obj.report_DATE}}</td> | ||
| 272 | + <td style="vertical-align: middle;">{{obj.report_BBR}}</td> | ||
| 273 | + <td style="vertical-align: middle;">{{obj.report_GSNAME}}</td> | ||
| 274 | + <td style="vertical-align: middle;">{{obj.report_FGSNAME}}</td> | ||
| 275 | + <td style="vertical-align: middle;">{{obj.report_XLNAME}}</td> | ||
| 276 | + <td style="vertical-align: middle;">{{obj.report_ZBH}}</td> | ||
| 277 | + <td style="vertical-align: middle;">{{obj.report_JSY}}</td> | ||
| 278 | + <td style="vertical-align: middle;">{{obj.report_SGSJ}}</td> | ||
| 279 | + <td style="vertical-align: middle;">{{obj.report_SGDD}}</td> | ||
| 280 | + <td style="vertical-align: middle;">{{obj.report_XSFX}}</td> | ||
| 281 | + <td style="vertical-align: middle;">{{obj.report_SGDX}}</td> | ||
| 282 | + <td style="vertical-align: middle;">{{obj.report_DXPZH}}</td> | ||
| 283 | + <td style="vertical-align: middle;">{{obj.report_SGGK}}</td> | ||
| 284 | + <td style="vertical-align: middle;">{{obj.report_SSRS}}</td> | ||
| 285 | + <td style="vertical-align: middle;">{{obj.report_SWRS}}</td> | ||
| 286 | + <td style="vertical-align: middle;">{{obj.report_BGR}}</td> | ||
| 287 | + <td style="vertical-align: middle;">{{obj.report_BGRDH}}</td> | ||
| 288 | + <td style="vertical-align: middle;">{{obj.report_BZ}}</td> | ||
| 289 | + </tr> | ||
| 290 | + {{/each}} | ||
| 291 | + </script> | ||
| 292 | + <script id="detour_table_body_list" type="text/html"> | ||
| 293 | + {{each data.list as obj i}} | ||
| 294 | + {{if obj.status == 2}} | ||
| 295 | + <tr style="background-color: #ff5f78"> | ||
| 296 | + {{else}} | ||
| 297 | + <tr> | ||
| 298 | + {{/if}} | ||
| 299 | + <td style="vertical-align: middle;">{{i + 1}}</td> | ||
| 300 | + <td style="vertical-align: middle;">{{obj.report_DATE}}</td> | ||
| 301 | + <td style="vertical-align: middle;">{{obj.report_BBR}}</td> | ||
| 302 | + <td style="vertical-align: middle;">{{obj.report_GSNAME}}</td> | ||
| 303 | + <td style="vertical-align: middle;">{{obj.report_FGSNAME}}</td> | ||
| 304 | + <td style="vertical-align: middle;">{{obj.report_XLNAME}}</td> | ||
| 305 | + <td style="vertical-align: middle;">{{obj.report_ROAD}}</td> | ||
| 306 | + <td style="vertical-align: middle;">{{obj.report_XSFX}}</td> | ||
| 307 | + <td style="vertical-align: middle;">{{obj.report_SGGK}}</td> | ||
| 308 | + <td style="vertical-align: middle;">{{obj.report_BZ}}</td> | ||
| 309 | + </tr> | ||
| 310 | + {{/each}} | ||
| 311 | + </script> | ||
| 312 | + <script id="rests_table_body_list" type="text/html"> | ||
| 313 | + {{each data.list as obj i}} | ||
| 314 | + {{if obj.status == 2}} | ||
| 315 | + <tr style="background-color: #ff5f78"> | ||
| 316 | + {{else}} | ||
| 317 | + <tr> | ||
| 318 | + {{/if}} | ||
| 319 | + <td style="vertical-align: middle;">{{i + 1}}</td> | ||
| 320 | + <td style="vertical-align: middle;">{{obj.report_DATE}}</td> | ||
| 321 | + <td style="vertical-align: middle;">{{obj.report_BBR}}</td> | ||
| 322 | + <td style="vertical-align: middle;">{{obj.report_GSNAME}}</td> | ||
| 323 | + <td style="vertical-align: middle;">{{obj.report_FGSNAME}}</td> | ||
| 324 | + <td style="vertical-align: middle;">{{obj.report_XLNAME}}</td> | ||
| 325 | + <td style="vertical-align: middle;">{{obj.report_BZ}}</td> | ||
| 326 | + </tr> | ||
| 327 | + {{/each}} | ||
| 328 | + </script> | ||
| 329 | + <script id="consult_table_body_list" type="text/html"> | ||
| 330 | + {{each data.list as obj i}} | ||
| 331 | + {{if obj.status == 2}} | ||
| 332 | + <tr style="background-color: #ff5f78"> | ||
| 333 | + {{else}} | ||
| 334 | + <tr> | ||
| 335 | + {{/if}} | ||
| 336 | + <td style="vertical-align: middle;">{{i + 1}}</td> | ||
| 337 | + <td style="vertical-align: middle;">{{obj.report_DATE}}</td> | ||
| 338 | + <td style="vertical-align: middle;">{{obj.report_BBR}}</td> | ||
| 339 | + <td style="vertical-align: middle;">{{obj.report_GSNAME}}</td> | ||
| 340 | + <td style="vertical-align: middle;">{{obj.report_FGSNAME}}</td> | ||
| 341 | + <td style="vertical-align: middle;">{{obj.report_XLNAME}}</td> | ||
| 342 | + <td style="vertical-align: middle;">{{obj.report_STATION}}</td> | ||
| 343 | + <td style="vertical-align: middle;">{{obj.report_BZ}}</td> | ||
| 344 | + </tr> | ||
| 345 | + {{/each}} | ||
| 346 | + </script> | ||
| 347 | + | ||
| 348 | + | ||
| 349 | + <!-- common js --> | ||
| 350 | + <script src="/assets/js/common.js"></script> | ||
| 351 | + <!-- select2 下拉框 --> | ||
| 352 | + <script src="/metronic_v4.5.4/plugins/select2/js/select2.full.min.js"></script> | ||
| 353 | + <!-- moment.js 日期处理类库 --> | ||
| 354 | + <script src="/assets/plugins/moment-with-locales.js" data-exclude=1></script> | ||
| 355 | + <!-- 日期控件 --> | ||
| 356 | + <script src="/metronic_v4.5.4/plugins/bootstrap-datetimepicker-2/js/bootstrap-datetimepicker.min.js"></script> | ||
| 357 | + <!-- bootstrap --> | ||
| 358 | + <script src="/metronic_v4.5.4/plugins/bootstrap/js/bootstrap.min.js" data-exclude=1></script> | ||
| 359 | + <!--<script src="/metronic_v4.5.4/plugins/bootstrap-wizard/jquery.bootstrap.wizard.min.js"></script>--> | ||
| 360 | + <!-- editable.js --> | ||
| 361 | + <!--<script src="/metronic_v4.5.4/plugins/bootstrap-editable/bootstrap-editable/js/bootstrap-editable.min.js"></script>--> | ||
| 362 | + <script> | ||
| 363 | + var manageJs = (function () { | ||
| 364 | + $('#export').attr('disabled', "true"); | ||
| 365 | + | ||
| 366 | + var modal = '#report-register-modal'; | ||
| 367 | + var activeDiv='first_last_late_table'; | ||
| 368 | + var lineList = gb_data_basic.activeLines; | ||
| 369 | + var loading=false; | ||
| 370 | + | ||
| 371 | + var line = $("#line").val(); | ||
| 372 | + var date1 = $("#date1").val(); | ||
| 373 | + var date2 = $("#date2").val(); | ||
| 374 | + var dataType = $("#dataType").val(); | ||
| 375 | + var lineName = $('#line option:selected').text(); | ||
| 376 | + | ||
| 377 | + $(modal).on('init', function (e,data) { | ||
| 378 | + | ||
| 379 | + $("#date1").datetimepicker({ | ||
| 380 | + format : 'YYYY-MM-DD', | ||
| 381 | + locale : 'zh-cn' | ||
| 382 | + }); | ||
| 383 | + $("#date2").datetimepicker({ | ||
| 384 | + format : 'YYYY-MM-DD', | ||
| 385 | + locale : 'zh-cn' | ||
| 386 | + }); | ||
| 387 | + $('#date1').val(moment(new Date()).format('YYYY-MM-DD')); | ||
| 388 | + $('#date2').val(moment(new Date()).format('YYYY-MM-DD')); | ||
| 389 | + var data = []; | ||
| 390 | + $.get('/user/companyData', function(result){ | ||
| 391 | + for(var i = 0; i < result.length; i++){ | ||
| 392 | + var companyCode = result[i].companyCode; | ||
| 393 | + var children = result[i].children; | ||
| 394 | + for(var j = 0; j < children.length; j++){ | ||
| 395 | + var code = children[j].code; | ||
| 396 | + for(var k=0;k < lineList.length;k++ ){ | ||
| 397 | + if(lineList[k]["brancheCompany"]==code && lineList[k]["company"]==companyCode){ | ||
| 398 | + data.push({id: lineList[k]["lineCode"], text: lineList[k]["name"]}); | ||
| 399 | + } | ||
| 400 | + } | ||
| 401 | + } | ||
| 402 | + } | ||
| 403 | + initPinYinSelect2('#line',data,''); | ||
| 404 | + | ||
| 405 | + }); | ||
| 406 | + | ||
| 407 | + //滚动条 | ||
| 408 | + $('.report-register-table-wrap', modal).perfectScrollbar(); | ||
| 409 | + }); | ||
| 410 | + | ||
| 411 | + $("#query").on("click",function(){ | ||
| 412 | + if(loading) | ||
| 413 | + return; | ||
| 414 | + $('.load-panel', modal).show(); | ||
| 415 | + loading=true; | ||
| 416 | + line = $("#line").val(); | ||
| 417 | + date1 = $("#date1").val(); | ||
| 418 | + date2 = $("#date2").val(); | ||
| 419 | + if(line == null || line == '' || line.length == 0){ | ||
| 420 | + $('.load-panel', modal).hide(); | ||
| 421 | + loading=false; | ||
| 422 | + layer.msg("请选择线路"); | ||
| 423 | + return; | ||
| 424 | + } | ||
| 425 | + if(date1 == null || date1.trim().length == 0 || date2 == null || date2.trim().length == 0){ | ||
| 426 | + $('.load-panel', modal).hide(); | ||
| 427 | + loading=false; | ||
| 428 | + layer.msg("请选择时间"); | ||
| 429 | + return; | ||
| 430 | + } else if(date1 > date2){ | ||
| 431 | + $('.load-panel', modal).hide(); | ||
| 432 | + loading=false; | ||
| 433 | + layer.msg("时间区间不正确,第二个时间不能大于第一个时间"); | ||
| 434 | + return; | ||
| 435 | + } | ||
| 436 | + var type = "query"; | ||
| 437 | + gb_common.$get("/reportRegister/findList", {lineCodes:line,date1:date1,date2:date2,type:type}, function (data) { | ||
| 438 | + if (data.status == "SUCCESS") { | ||
| 439 | + var list = data.list; | ||
| 440 | + var tableList1 = [], tableList2 = [], tableList3 = [], tableList4 = [], tableList5 = [], | ||
| 441 | + tableList6 = [], tableList7 = []; | ||
| 442 | + $.each(list, function (i, rr) { | ||
| 443 | + rr.report_DATE = formatDate(new Date(rr.report_DATE)); | ||
| 444 | + if (rr.report_TYPE == 1) { | ||
| 445 | + tableList1.push(rr); | ||
| 446 | + } else if (rr.report_TYPE == 2) { | ||
| 447 | + tableList2.push(rr); | ||
| 448 | + } else if (rr.report_TYPE == 3) { | ||
| 449 | + tableList3.push(rr); | ||
| 450 | + } else if (rr.report_TYPE == 4) { | ||
| 451 | + tableList4.push(rr); | ||
| 452 | + } else if (rr.report_TYPE == 5) { | ||
| 453 | + tableList5.push(rr); | ||
| 454 | + } else if (rr.report_TYPE == 6) { | ||
| 455 | + tableList6.push(rr); | ||
| 456 | + } else if (rr.report_TYPE == 7) { | ||
| 457 | + tableList7.push(rr); | ||
| 458 | + } | ||
| 459 | + }); | ||
| 460 | + var htmlStr = template('first_last_late_table_body_list', {'data':{'list': tableList1,'line':lineList}}); | ||
| 461 | + $('#first_last_late_table .table_body', modal).html(htmlStr); | ||
| 462 | + htmlStr = template('large_interval_table_body_list', {'data':{'list': tableList2,'line':lineList}}); | ||
| 463 | + $('#large_interval_table .table_body', modal).html(htmlStr); | ||
| 464 | + htmlStr = template('emergency_table_body_list', {'data':{'list': tableList3,'line':lineList}}); | ||
| 465 | + $('#emergency_table .table_body', modal).html(htmlStr); | ||
| 466 | + htmlStr = template('accident_table_body_list', {'data':{'list': tableList4,'line':lineList}}); | ||
| 467 | + $('#accident_table .table_body', modal).html(htmlStr); | ||
| 468 | + htmlStr = template('detour_table_body_list', {'data':{'list': tableList7,'line':lineList}}); | ||
| 469 | + $('#detour_table .table_body', modal).html(htmlStr); | ||
| 470 | + htmlStr = template('rests_table_body_list', {'data':{'list': tableList5,'line':lineList}}); | ||
| 471 | + $('#rests_table .table_body', modal).html(htmlStr); | ||
| 472 | + htmlStr = template('consult_table_body_list', {'data':{'list': tableList6,'line':lineList}}); | ||
| 473 | + $('#consult_table .table_body', modal).html(htmlStr); | ||
| 474 | + $('.load-panel', modal).hide(); | ||
| 475 | + loading=false; | ||
| 476 | + if(list.length == 0) | ||
| 477 | + $("#export").attr('disabled',"true"); | ||
| 478 | + else | ||
| 479 | + $("#export").removeAttr("disabled"); | ||
| 480 | + } | ||
| 481 | + }); | ||
| 482 | + }); | ||
| 483 | + | ||
| 484 | + $("#export").on("click",function(){ | ||
| 485 | + line = $("#line").val(); | ||
| 486 | + date1 = $("#date1").val(); | ||
| 487 | + date2 = $("#date2").val(); | ||
| 488 | + var dateTime=''; | ||
| 489 | + if (date1 == date2) { | ||
| 490 | + dateTime = moment(date1).format("YYYYMMDD"); | ||
| 491 | + } else { | ||
| 492 | + dateTime = moment(date1).format("YYYYMMDD") | ||
| 493 | + +"-"+moment(date2).format("YYYYMMDD"); | ||
| 494 | + } | ||
| 495 | + if(date1 == null || date1.trim().length == 0 || date2 == null || date2.trim().length == 0){ | ||
| 496 | + layer.msg("请选择时间"); | ||
| 497 | + return; | ||
| 498 | + } else if(date1 > date2){ | ||
| 499 | + layer.msg("时间区间不正确,第二个时间不能大于第一个时间"); | ||
| 500 | + return; | ||
| 501 | + } | ||
| 502 | + lineName = $('#line option:selected').text(); | ||
| 503 | + var type = "export"; | ||
| 504 | + gb_common.$get("/reportRegister/findList", {lineCodes:line,lineName:lineName,date1:date1,date2:date2,type:type}, function (data) { | ||
| 505 | + if (data.status == "SUCCESS") { | ||
| 506 | + window.open("/downloadFile/download?fileName=" | ||
| 507 | + +dateTime+"_"+lineName+"_报备登记"); | ||
| 508 | + } | ||
| 509 | + }); | ||
| 510 | + }); | ||
| 511 | + | ||
| 512 | + | ||
| 513 | + $(modal).on('click', '.navigation_bar li', function () { | ||
| 514 | + $(this).parent().find('li.uk-active').removeClass('uk-active'); | ||
| 515 | + $(this).addClass('uk-active'); | ||
| 516 | + var typeName = $(this).attr('id'); | ||
| 517 | + var oldActiveDivId = $("#"+typeName+"_table").parent().find('.active'); | ||
| 518 | + var oldActiveDiv = document.getElementById(oldActiveDivId.attr('id')); | ||
| 519 | + oldActiveDiv.style.display = "none"; | ||
| 520 | + oldActiveDivId.removeClass("active"); | ||
| 521 | + | ||
| 522 | + activeDiv = typeName+"_table"; | ||
| 523 | + $("#"+typeName+"_table").addClass("active"); | ||
| 524 | + var activeTable = document.getElementById(typeName+"_table"); | ||
| 525 | + activeTable.style.display = ""; | ||
| 526 | + }); | ||
| 527 | + | ||
| 528 | + var formatDate = function(now) { | ||
| 529 | + var year=now.getFullYear(); | ||
| 530 | + var month=now.getMonth()+1; | ||
| 531 | + var date=now.getDate(); | ||
| 532 | + var hour=now.getHours(); | ||
| 533 | + var minute=now.getMinutes(); | ||
| 534 | + var second=now.getSeconds(); | ||
| 535 | + return year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second; | ||
| 536 | + }; | ||
| 537 | + | ||
| 538 | + })(); | ||
| 539 | + </script> | ||
| 540 | +</div> | ||
| 0 | \ No newline at end of file | 541 | \ No newline at end of file |
src/main/resources/static/real_control_v2/fragments/north/nav/station_notice/list2.html
0 → 100644
| 1 | +<style type="text/css"> | ||
| 2 | + .table-bordered { | ||
| 3 | + border: 1px solid; } | ||
| 4 | + .table-bordered > thead > tr > th, | ||
| 5 | + .table-bordered > thead > tr > td, | ||
| 6 | + .table-bordered > tbody > tr > th, | ||
| 7 | + .table-bordered > tbody > tr > td, | ||
| 8 | + .table-bordered > tfoot > tr > th, | ||
| 9 | + .table-bordered > tfoot > tr > td { | ||
| 10 | + border: 1px solid; } | ||
| 11 | + .table-bordered > thead > tr > th, | ||
| 12 | + .table-bordered > thead > tr > td { | ||
| 13 | + border-bottom-width: 2px; } | ||
| 14 | + | ||
| 15 | + .table > tbody + tbody { | ||
| 16 | + border-top: 1px solid; } | ||
| 17 | +</style> | ||
| 18 | + | ||
| 19 | +<div class="page-head"> | ||
| 20 | + <div class="page-title"> | ||
| 21 | + <h1>报备登记报表</h1> | ||
| 22 | + </div> | ||
| 23 | +</div> | ||
| 24 | + | ||
| 25 | +<div class="row"> | ||
| 26 | + <div class="col-md-12"> | ||
| 27 | + <div class="portlet light porttlet-fit bordered"> | ||
| 28 | + <div class="portlet-title"> | ||
| 29 | + <form id="history" class="form-inline" action=""> | ||
| 30 | + <div style="display: inline-block;"> | ||
| 31 | + <span class="item-label" style="width: 80px;">线路: </span> | ||
| 32 | + <select class="form-control" name="line" id="line" style="width: 180px;"></select> | ||
| 33 | + </div> | ||
| 34 | + <div style="display: inline-block;margin-left: 15px;"> | ||
| 35 | + <span class="item-label" style="width: 80px;">时间: </span> | ||
| 36 | + <input class="form-control" type="text" id="date1" style="width: 180px;"/> - | ||
| 37 | + <input class="form-control" type="text" id="date2" style="width: 180px;"/> | ||
| 38 | + </div> | ||
| 39 | + <div style="display: inline-block;margin-left: 15px"> | ||
| 40 | + <span class="item-label" style="width: 140px;">类型: </span> | ||
| 41 | + <select class="form-control" name="code" id="code" style="width: 180px;"> | ||
| 42 | + <!--<option value="0">所有类型</option>--> | ||
| 43 | + <option value="1">首末班误点</option> | ||
| 44 | + <option value="2">大间隔</option> | ||
| 45 | + <option value="3">突发事件</option> | ||
| 46 | +<!-- <option value="4">事故</option> --> | ||
| 47 | + <option value="5">其他</option> | ||
| 48 | +<!-- <option value="6">咨询</option> --> | ||
| 49 | + </select> | ||
| 50 | + </div> | ||
| 51 | + <div class="form-group"> | ||
| 52 | + <input class="btn btn-default" type="button" id="query" value="筛选"/> | ||
| 53 | + <input class="btn btn-default" type="button" id="export" value="导出"/> | ||
| 54 | + </div> | ||
| 55 | + </form> | ||
| 56 | + </div> | ||
| 57 | + <div class="portlet-body"> | ||
| 58 | + <div class="table-container" style="margin-top: 10px;overflow:auto;min-width: 906px;"> | ||
| 59 | + <table class="table table-bordered table-hover table-checkable" id="forms"> | ||
| 60 | + | ||
| 61 | + </table> | ||
| 62 | + </div> | ||
| 63 | + </div> | ||
| 64 | + </div> | ||
| 65 | + </div> | ||
| 66 | + | ||
| 67 | + <script> | ||
| 68 | + $(function(){ | ||
| 69 | + $('#export').attr('disabled', "true"); | ||
| 70 | + | ||
| 71 | + // 关闭左侧栏 | ||
| 72 | + if (!$('body').hasClass('page-sidebar-closed')) | ||
| 73 | + $('.menu-toggler.sidebar-toggler').click(); | ||
| 74 | + | ||
| 75 | + $("#date").datetimepicker({ | ||
| 76 | + format : 'YYYY-MM-DD', | ||
| 77 | + locale : 'zh-cn' | ||
| 78 | + }); | ||
| 79 | + | ||
| 80 | + $.get('/report/lineList',function(xlList){ | ||
| 81 | + var data = []; | ||
| 82 | + $.get('/user/companyData', function(result){ | ||
| 83 | + for(var i = 0; i < result.length; i++){ | ||
| 84 | + var companyCode = result[i].companyCode; | ||
| 85 | + var children = result[i].children; | ||
| 86 | + for(var j = 0; j < children.length; j++){ | ||
| 87 | + var code = children[j].code; | ||
| 88 | + for(var k=0;k < xlList.length;k++ ){ | ||
| 89 | + if(xlList[k]["fgsbm"]==code && xlList[k]["gsbm"]==companyCode){ | ||
| 90 | + data.push({id: xlList[k]["xlbm"], text: xlList[k]["xlname"]}); | ||
| 91 | + } | ||
| 92 | + } | ||
| 93 | + } | ||
| 94 | + } | ||
| 95 | + initPinYinSelect2('#line',data,''); | ||
| 96 | + | ||
| 97 | + }); | ||
| 98 | + }); | ||
| 99 | + | ||
| 100 | + | ||
| 101 | + $('#code').select2({ | ||
| 102 | + ajax: { | ||
| 103 | + url: '/realSchedule/sreachVehic', | ||
| 104 | + dataType: 'json', | ||
| 105 | + delay: 150, | ||
| 106 | + data: function(params){ | ||
| 107 | + return{nbbm: params.term}; | ||
| 108 | + }, | ||
| 109 | + processResults: function (data) { | ||
| 110 | + return { | ||
| 111 | + results: data | ||
| 112 | + }; | ||
| 113 | + }, | ||
| 114 | + cache: true | ||
| 115 | + }, | ||
| 116 | + templateResult: function(repo){ | ||
| 117 | + if (repo.loading) return repo.text; | ||
| 118 | + var h = '<span>'+repo.text+'</span>'; | ||
| 119 | + h += (repo.lineName?' <span class="select2-desc">'+repo.lineName+'</span>':''); | ||
| 120 | + return h; | ||
| 121 | + }, | ||
| 122 | + escapeMarkup: function (markup) { return markup; }, | ||
| 123 | + minimumInputLength: 1, | ||
| 124 | + templateSelection: function(repo){ | ||
| 125 | + return repo.text; | ||
| 126 | + }, | ||
| 127 | + language: { | ||
| 128 | + noResults: function(){ | ||
| 129 | + return '<span style="color:red;font-size: 12px;">没有搜索到车辆!</span>'; | ||
| 130 | + }, | ||
| 131 | + inputTooShort : function(e) { | ||
| 132 | + return '<span style="color:gray;font-size: 12px;"><i class="fa fa-search"></i> 输入自编号搜索车辆</span>'; | ||
| 133 | + }, | ||
| 134 | + searching : function() { | ||
| 135 | + return '<span style="color:gray;font-size: 12px;"> 正在搜索车辆...</span>'; | ||
| 136 | + } | ||
| 137 | + } | ||
| 138 | + }); | ||
| 139 | + | ||
| 140 | + var line = $("#line").val(); | ||
| 141 | + var date = $("#date").val(); | ||
| 142 | + var code = $("#code").val(); | ||
| 143 | + var lineName = $('#line option:selected').text(); | ||
| 144 | + $("#query").on("click",function(){ | ||
| 145 | + if($("#date").val() == null || $("#date").val().trim().length == 0){ | ||
| 146 | + layer.msg("请选择时间"); | ||
| 147 | + return; | ||
| 148 | + } | ||
| 149 | + line = $("#line").val(); | ||
| 150 | + date = $("#date").val(); | ||
| 151 | + code = $("#code").val(); | ||
| 152 | + lineName = $('#line option:selected').text(); | ||
| 153 | + var type = "query"; | ||
| 154 | + $(".hidden").removeClass("hidden"); | ||
| 155 | + var i = layer.load(2); | ||
| 156 | + $get('/realSchedule/wxsb',{line:line,date:date,code:code,type:type},function(result){ | ||
| 157 | + // 把数据填充到模版中 | ||
| 158 | + var tbodyHtml = template('list_repair',{list:result}); | ||
| 159 | + // 把渲染好的模版html文本追加到表格中 | ||
| 160 | + $('#forms tbody').html(tbodyHtml); | ||
| 161 | + layer.close(i); | ||
| 162 | + | ||
| 163 | + if(result.length == 0) | ||
| 164 | + $("#export").attr('disabled',"true"); | ||
| 165 | + else | ||
| 166 | + $("#export").removeAttr("disabled"); | ||
| 167 | + | ||
| 168 | + }); | ||
| 169 | + }); | ||
| 170 | + | ||
| 171 | + $("#export").on("click",function(){ | ||
| 172 | + var type = "export"; | ||
| 173 | + var i = layer.load(2); | ||
| 174 | + $get('/realSchedule/wxsb', {line:line,date:date,code:code,type:type}, function(result){ | ||
| 175 | + window.open("/downloadFile/download?fileName=" | ||
| 176 | + +moment(date).format("YYYYMMDD") | ||
| 177 | + +"-"+lineName+"-维修上报记录"); | ||
| 178 | + layer.close(i); | ||
| 179 | + }); | ||
| 180 | + }); | ||
| 181 | + | ||
| 182 | + }); | ||
| 183 | + </script> | ||
| 184 | + <script type="text/html" id="table1"> | ||
| 185 | + <thead> | ||
| 186 | + <tr> | ||
| 187 | + <th width="4%">序号</th> | ||
| 188 | + <th width="5%">报备时间</th> | ||
| 189 | + <th width="7%">线路</th> | ||
| 190 | + <th width="7%">延误站点</th> | ||
| 191 | + <th width="5%">延误时间</th> | ||
| 192 | + <th width="10%">首末班延误原因</th> | ||
| 193 | + </tr> | ||
| 194 | + </thead> | ||
| 195 | + <tbody> | ||
| 196 | + {{each data.list as obj i}} | ||
| 197 | + <tr> | ||
| 198 | + <td style="vertical-align: middle;">{{i + 1}}</td> | ||
| 199 | + <td style="vertical-align: middle;">{{obj.report_DATE}}</td> | ||
| 200 | + <td style="vertical-align: middle;display:none">{{obj.report_BBR}}</td> | ||
| 201 | + <td style="vertical-align: middle;display:none">{{obj.report_GS}}</td> | ||
| 202 | + <td style="vertical-align: middle;display:none">{{obj.report_FGS}}</td> | ||
| 203 | + <td style="vertical-align: middle;">{{obj.report_XLNAME}}</td> | ||
| 204 | + <td style="vertical-align: middle;">{{obj.report_STATION}}</td> | ||
| 205 | + <td style="vertical-align: middle;">{{obj.report_YWSJ}}</td> | ||
| 206 | + <td style="vertical-align: middle;">{{obj.report_SMBWD}}</td> | ||
| 207 | + </tr> | ||
| 208 | + {{/each}} | ||
| 209 | + {{if list.length == 0}} | ||
| 210 | + <tr> | ||
| 211 | + <td colspan="8"><h6 class="muted">没有找到相关数据</h6></td> | ||
| 212 | + </tr> | ||
| 213 | + {{/if}} | ||
| 214 | + </tbody> | ||
| 215 | + </script> | ||
| 216 | + <script type="text/html" id="table2"> | ||
| 217 | + <thead> | ||
| 218 | + <tr> | ||
| 219 | + <th width="4%">序号</th> | ||
| 220 | + <th width="5%">报备时间</th> | ||
| 221 | + <th width="7%">线路</th> | ||
| 222 | + <th width="7%">路段</th> | ||
| 223 | + <th width="7%">行驶方向</th> | ||
| 224 | + <th width="7%">站点</th> | ||
| 225 | + <th width="7%">大间隔时间</th> | ||
| 226 | + <th width="7%">大间隔原因</th> | ||
| 227 | + </tr> | ||
| 228 | + </thead> | ||
| 229 | + <tbody> | ||
| 230 | + {{each list as obj i}} | ||
| 231 | + <tr> | ||
| 232 | + <td style="vertical-align: middle;">{{i + 1}}</td> | ||
| 233 | + <td style="vertical-align: middle;">{{obj.report_DATE}}</td> | ||
| 234 | + <td style="vertical-align: middle;display:none">{{obj.report_BBR}}</td> | ||
| 235 | + <td style="vertical-align: middle;display:none">{{obj.report_GS}}</td> | ||
| 236 | + <td style="vertical-align: middle;display:none">{{obj.report_FGS}}</td> | ||
| 237 | + <td style="vertical-align: middle;">{{obj.report_XLNAME}}</td> | ||
| 238 | + <td style="vertical-align: middle;">{{obj.report_ROAD}}</td> | ||
| 239 | + <td style="vertical-align: middle;">{{obj.report_XSFX}}</td> | ||
| 240 | + <td style="vertical-align: middle;">{{obj.report_STATION}}</td> | ||
| 241 | + <td style="vertical-align: middle;">{{obj.report_DJGSJ}}</td> | ||
| 242 | + <td style="vertical-align: middle;">{{obj.report_DJGYY}}</td> | ||
| 243 | + </tr> | ||
| 244 | + {{/each}} | ||
| 245 | + {{if list.length == 0}} | ||
| 246 | + <tr> | ||
| 247 | + <td colspan="10"><h6 class="muted">没有找到相关数据</h6></td> | ||
| 248 | + </tr> | ||
| 249 | + {{/if}} | ||
| 250 | + </tbody> | ||
| 251 | + </script> | ||
| 252 | + <script type="text/html" id="table3"> | ||
| 253 | + <thead> | ||
| 254 | + <tr> | ||
| 255 | + <th width="4%">序号</th> | ||
| 256 | + <th width="5%">报备时间</th> | ||
| 257 | + <th width="7%">影响线路</th> | ||
| 258 | + <th width="7%">重大活动货突发事件</th> | ||
| 259 | + <th width="7%">影响时间</th> | ||
| 260 | + <th width="7%">影响班次数</th> | ||
| 261 | + <th width="7%">调整措施</th> | ||
| 262 | + </tr> | ||
| 263 | + </thead> | ||
| 264 | + <tbody> | ||
| 265 | + {{each list as obj i}} | ||
| 266 | + <tr> | ||
| 267 | + <td style="vertical-align: middle;">{{i + 1}}</td> | ||
| 268 | + <td style="vertical-align: middle;">{{obj.report_DATE}}</td> | ||
| 269 | + <td style="vertical-align: middle;display:none">{{obj.report_BBR}}</td> | ||
| 270 | + <td style="vertical-align: middle;display:none">{{obj.report_GS}}</td> | ||
| 271 | + <td style="vertical-align: middle;display:none">{{obj.report_FGS}}</td> | ||
| 272 | + <td style="vertical-align: middle;display:none">{{obj.report_XLNAME}}</td> | ||
| 273 | + <td style="vertical-align: middle;">{{obj.report_TFSJ}}</td> | ||
| 274 | + <td style="vertical-align: middle;">{{obj.report_YXSJ}}</td> | ||
| 275 | + <td style="vertical-align: middle;">{{obj.report_YXBC}}</td> | ||
| 276 | + <td style="vertical-align: middle;">{{obj.report_TZCS}}</td> | ||
| 277 | + </tr> | ||
| 278 | + {{/each}} | ||
| 279 | + {{if list.length == 0}} | ||
| 280 | + <tr> | ||
| 281 | + <td colspan="9"><h6 class="muted">没有找到相关数据</h6></td> | ||
| 282 | + </tr> | ||
| 283 | + {{/if}} | ||
| 284 | + </tbody> | ||
| 285 | + </script> | ||
| 286 | + <script type="text/html" id="table4"> | ||
| 287 | + <thead> | ||
| 288 | + <tr> | ||
| 289 | + <th width="3%">序号</th> | ||
| 290 | + <th width="5%">报备时间</th> | ||
| 291 | + <th width="7%">线路</th> | ||
| 292 | + <th width="7%">车辆自编号</th> | ||
| 293 | + <th width="7%">驾驶员</th> | ||
| 294 | + <th width="7%">事故发生时间</th> | ||
| 295 | + <th width="7%">事故发生地点</th> | ||
| 296 | + <th width="7%">行驶方向</th> | ||
| 297 | + <th width="7%">事故对象</th> | ||
| 298 | + <th width="7%">对象车牌号</th> | ||
| 299 | + <th width="7%">事故概况</th> | ||
| 300 | + <th width="7%">受伤人数</th> | ||
| 301 | + <th width="7%">死亡人数</th> | ||
| 302 | + <th width="7%">报告人</th> | ||
| 303 | + <th width="7%">报告人电话</th> | ||
| 304 | + <th width="7%">备注</th> | ||
| 305 | + </tr> | ||
| 306 | + </thead> | ||
| 307 | + <tbody> | ||
| 308 | + {{each list as obj i}} | ||
| 309 | + <tr> | ||
| 310 | + <td style="vertical-align: middle;">{{i + 1}}</td> | ||
| 311 | + <td style="vertical-align: middle;">{{obj.report_DATE}}</td> | ||
| 312 | + <td style="vertical-align: middle;display:none">{{obj.report_BBR}}</td> | ||
| 313 | + <td style="vertical-align: middle;display:none">{{obj.report_GS}}</td> | ||
| 314 | + <td style="vertical-align: middle;display:none">{{obj.report_FGS}}</td> | ||
| 315 | + <td style="vertical-align: middle;">{{obj.report_XLNAME}}</td> | ||
| 316 | + <td style="vertical-align: middle;">{{obj.report_ZBH}}</td> | ||
| 317 | + <td style="vertical-align: middle;">{{obj.report_JSY}}</td> | ||
| 318 | + <td style="vertical-align: middle;">{{obj.report_SGSJ}}</td> | ||
| 319 | + <td style="vertical-align: middle;">{{obj.report_SGDD}}</td> | ||
| 320 | + <td style="vertical-align: middle;">{{obj.report_XSFX}}</td> | ||
| 321 | + <td style="vertical-align: middle;">{{obj.report_SGDX}}</td> | ||
| 322 | + <td style="vertical-align: middle;">{{obj.report_DXPZH}}</td> | ||
| 323 | + <td style="vertical-align: middle;">{{obj.report_SGGK}}</td> | ||
| 324 | + <td style="vertical-align: middle;">{{obj.report_SSRS}}</td> | ||
| 325 | + <td style="vertical-align: middle;">{{obj.report_SWRS}}</td> | ||
| 326 | + <td style="vertical-align: middle;">{{obj.report_BGR}}</td> | ||
| 327 | + <td style="vertical-align: middle;">{{obj.report_BGRDH}}</td> | ||
| 328 | + <td style="vertical-align: middle;">{{obj.report_BZ}}</td> | ||
| 329 | + </tr> | ||
| 330 | + {{/each}} | ||
| 331 | + {{if list.length == 0}} | ||
| 332 | + <tr> | ||
| 333 | + <td colspan="16"><h6 class="muted">没有找到相关数据</h6></td> | ||
| 334 | + </tr> | ||
| 335 | + {{/if}} | ||
| 336 | + </tbody> | ||
| 337 | + </script> | ||
| 338 | + <script type="text/html" id="table5"> | ||
| 339 | + <thead> | ||
| 340 | + <tr> | ||
| 341 | + <th width="4%">序号</th> | ||
| 342 | + <th width="5%">报备时间</th> | ||
| 343 | + <th width="7%">线路</th> | ||
| 344 | + <th width="7%">报备内容</th> | ||
| 345 | + </tr> | ||
| 346 | + </thead> | ||
| 347 | + <tbody> | ||
| 348 | + {{each list as obj i}} | ||
| 349 | + <tr> | ||
| 350 | + <td style="vertical-align: middle;">{{i + 1}}</td> | ||
| 351 | + <td style="vertical-align: middle;">{{obj.report_DATE}}</td> | ||
| 352 | + <td style="vertical-align: middle;display:none">{{obj.report_BBR}}</td> | ||
| 353 | + <td style="vertical-align: middle;display:none">{{obj.report_GS}}</td> | ||
| 354 | + <td style="vertical-align: middle;display:none">{{obj.report_FGS}}</td> | ||
| 355 | + <td style="vertical-align: middle;">{{obj.report_XLNAME}}</td> | ||
| 356 | + <td style="vertical-align: middle;">{{obj.report_BZ}}</td> | ||
| 357 | + </tr> | ||
| 358 | + {{/each}} | ||
| 359 | + {{if list.length == 0}} | ||
| 360 | + <tr> | ||
| 361 | + <td colspan="4"><h6 class="muted">没有找到相关数据</h6></td> | ||
| 362 | + </tr> | ||
| 363 | + {{/if}} | ||
| 364 | + </tbody> | ||
| 365 | + </script> | ||
| 366 | + <script type="text/html" id="table6"> | ||
| 367 | + <thead> | ||
| 368 | + <tr> | ||
| 369 | + <th width="4%">序号</th> | ||
| 370 | + <th width="5%">报备时间</th> | ||
| 371 | + <th width="7%">线路</th> | ||
| 372 | + <th width="7%">班线名称</th> | ||
| 373 | + <th width="7%">内容</th> | ||
| 374 | + </tr> | ||
| 375 | + </thead> | ||
| 376 | + <tbody> | ||
| 377 | + {{each list as obj i}} | ||
| 378 | + <tr> | ||
| 379 | + <td style="vertical-align: middle;">{{i + 1}}</td> | ||
| 380 | + <td style="vertical-align: middle;">{{obj.report_DATE}}</td> | ||
| 381 | + <td style="vertical-align: middle;">{{obj.report_XLNAME}}</td> | ||
| 382 | + <td style="vertical-align: middle;">{{obj.report_STATION}}</td> | ||
| 383 | + <td style="vertical-align: middle;">{{obj.report_BZ}}</td> | ||
| 384 | + </tr> | ||
| 385 | + {{/each}} | ||
| 386 | + {{if list.length == 0}} | ||
| 387 | + <tr> | ||
| 388 | + <td colspan="5"><h6 class="muted">没有找到相关数据</h6></td> | ||
| 389 | + </tr> | ||
| 390 | + {{/if}} | ||
| 391 | + </tbody> | ||
| 392 | + </script> | ||
| 393 | + | ||
| 394 | + <script> | ||
| 395 | + (function () { | ||
| 396 | + $('#export').attr('disabled', "true"); | ||
| 397 | + | ||
| 398 | + // 关闭左侧栏 | ||
| 399 | + if (!$('body').hasClass('page-sidebar-closed')) | ||
| 400 | + $('.menu-toggler.sidebar-toggler').click(); | ||
| 401 | + | ||
| 402 | + $("#date1").datetimepicker({ | ||
| 403 | + format : 'YYYY-MM-DD', | ||
| 404 | + locale : 'zh-cn' | ||
| 405 | + }); | ||
| 406 | + $("#date2").datetimepicker({ | ||
| 407 | + format : 'YYYY-MM-DD', | ||
| 408 | + locale : 'zh-cn' | ||
| 409 | + }); | ||
| 410 | + | ||
| 411 | + $.get('/report/lineList',function(xlList){ | ||
| 412 | + var data = []; | ||
| 413 | + $.get('/user/companyData', function(result){ | ||
| 414 | + for(var i = 0; i < result.length; i++){ | ||
| 415 | + var companyCode = result[i].companyCode; | ||
| 416 | + var children = result[i].children; | ||
| 417 | + for(var j = 0; j < children.length; j++){ | ||
| 418 | + var code = children[j].code; | ||
| 419 | + for(var k=0;k < xlList.length;k++ ){ | ||
| 420 | + if(xlList[k]["fgsbm"]==code && xlList[k]["gsbm"]==companyCode){ | ||
| 421 | + data.push({id: xlList[k]["xlbm"], text: xlList[k]["xlname"]}); | ||
| 422 | + } | ||
| 423 | + } | ||
| 424 | + } | ||
| 425 | + } | ||
| 426 | + initPinYinSelect2('#line',data,''); | ||
| 427 | + | ||
| 428 | + }); | ||
| 429 | + }); | ||
| 430 | + var line = $("#line").val(); | ||
| 431 | + var date1 = $("#date1").val(); | ||
| 432 | + var date2 = $("#date2").val(); | ||
| 433 | + var dataType = $("#dataType").val(); | ||
| 434 | + var lineName = $('#line option:selected').text(); | ||
| 435 | + $("#query").on("click",function(){ | ||
| 436 | + line = $("#line").val(); | ||
| 437 | + date1 = $("#date1").val(); | ||
| 438 | + date2 = $("#date2").val(); | ||
| 439 | + if(date1 == null || date1.trim().length == 0 || date2 == null || date2.trim().length == 0){ | ||
| 440 | + layer.msg("请选择时间"); | ||
| 441 | + return; | ||
| 442 | + } else if(date1 > date2){ | ||
| 443 | + layer.msg("时间区间不正确,第二个时间不能大于第一个时间"); | ||
| 444 | + return; | ||
| 445 | + } | ||
| 446 | + dataType = $("#dataType").val(); | ||
| 447 | + lineName = $('#line option:selected').text(); | ||
| 448 | + var type = "query"; | ||
| 449 | + $(".hidden").removeClass("hidden"); | ||
| 450 | + var i = layer.load(2); | ||
| 451 | + $get('/realSchedule/wxsb',{line:line,date:date,dataType:dataType,type:type},function(result){ | ||
| 452 | + // 把数据填充到模版中 | ||
| 453 | + var tbodyHtml = template('list_repair',{list:result}); | ||
| 454 | + // 把渲染好的模版html文本追加到表格中 | ||
| 455 | + $('#forms tbody').html(tbodyHtml); | ||
| 456 | + layer.close(i); | ||
| 457 | + | ||
| 458 | + if(result.length == 0) | ||
| 459 | + $("#export").attr('disabled',"true"); | ||
| 460 | + else | ||
| 461 | + $("#export").removeAttr("disabled"); | ||
| 462 | + | ||
| 463 | + }); | ||
| 464 | + }); | ||
| 465 | + | ||
| 466 | + $("#export").on("click",function(){ | ||
| 467 | + var type = "export"; | ||
| 468 | + var i = layer.load(2); | ||
| 469 | + $get('/realSchedule/wxsb', {line:line,date:date,code:code,type:type}, function(result){ | ||
| 470 | + window.open("/downloadFile/download?fileName=" | ||
| 471 | + +moment(date).format("YYYYMMDD") | ||
| 472 | + +"-"+lineName+"-维修上报记录"); | ||
| 473 | + layer.close(i); | ||
| 474 | + }); | ||
| 475 | + }); | ||
| 476 | + | ||
| 477 | + })(); | ||
| 478 | + | ||
| 479 | + </script> | ||
| 480 | +</div> |
src/main/resources/static/real_control_v2/fragments/north/nav/station_notice/manage.html
0 → 100644
| 1 | +<div class="uk-modal ct_move_modal" id="notice-modal"> | ||
| 2 | + | ||
| 3 | + <!-- editable --> | ||
| 4 | + <!--<link href="/metronic_v4.5.4/plugins/bootstrap-editable/bootstrap-editable/css/bootstrap-editable.css" rel="stylesheet" type="text/css" />--> | ||
| 5 | + <!-- Bootstrap style --> | ||
| 6 | + <link href="/metronic_v4.5.4/plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" /> | ||
| 7 | + <!-- select2 下拉框插件 --> | ||
| 8 | + <!--<link href="/metronic_v4.5.4/plugins/select2/css/select2.min.css" rel="stylesheet" type="text/css" />--> | ||
| 9 | + <!--<link href="/metronic_v4.5.4/plugins/select2/css/select2-bootstrap.min.css" rel="stylesheet" type="text/css" />--> | ||
| 10 | + | ||
| 11 | + <style> | ||
| 12 | + .lineSelect{ | ||
| 13 | + width:174px !important | ||
| 14 | + } | ||
| 15 | + | ||
| 16 | + /*ul.navigation_bar:before { | ||
| 17 | + content: "报备类型"; | ||
| 18 | + position: absolute; | ||
| 19 | + top: -9px; | ||
| 20 | + font-size: 12px; | ||
| 21 | + background: white; | ||
| 22 | + padding: 0 4px; | ||
| 23 | + color: #7d7b7b; | ||
| 24 | + left: 10px; | ||
| 25 | + }*/ | ||
| 26 | + </style> | ||
| 27 | + <div class="uk-modal-dialog" style="width: 1800px;"> | ||
| 28 | + <a href="" class="uk-modal-close uk-close"></a> | ||
| 29 | + <div class="uk-modal-header"> | ||
| 30 | + <h2>站牌公告</h2> | ||
| 31 | + </div> | ||
| 32 | + | ||
| 33 | + | ||
| 34 | + <div style="padding-left: 12px;margin: 10px 0"> | ||
| 35 | + <ul class="uk-subnav uk-subnav-pill navigation_bar"> | ||
| 36 | + <li id="emergency" class="uk-active"><a>线路公告</a></li> | ||
| 37 | + <li id="regional"><a>区域公告</a></li> | ||
| 38 | + </ul> | ||
| 39 | + </div> | ||
| 40 | + | ||
| 41 | + <div style="padding-left: 12px;margin: 10px 0"> | ||
| 42 | + <div class=" uk-subnav-pill management_bar" > | ||
| 43 | + <button class="uk-button uk-button-primary" id="add">添加</button> | ||
| 44 | + <button class="uk-button uk-button-danger" id="update">修改</button> | ||
| 45 | + <button class="uk-button uk-button-danger" id="delete">删除</button> | ||
| 46 | + </div> | ||
| 47 | + </div> | ||
| 48 | + | ||
| 49 | + <div class="ct_table_wrap" style="height: 510px"> | ||
| 50 | + <!-- 突发事件--> | ||
| 51 | + <table class="table table-striped table-bordered table-hover table-checkable report-register-table active" id="emergency_table"> | ||
| 52 | + <thead class=""> | ||
| 53 | + <tr role="row"> | ||
| 54 | + <!--<th width="2%"><input type="radio" name="checkItems"></th>--> | ||
| 55 | + <th width="2%">#</th> | ||
| 56 | + <th width="2%">序号</th> | ||
| 57 | + <th width="5%">报备时间</th> | ||
| 58 | + <th width="5%">报备人</th> | ||
| 59 | + <th width="5%">截止时间</th> | ||
| 60 | + <th width="8%">影响线路</th> | ||
| 61 | + <th width="4%">方向</th> | ||
| 62 | + <th width="8%">突发事件</th> | ||
| 63 | + <th width="8%">事件影响</th> | ||
| 64 | + <th width="8%">影响站点</th> | ||
| 65 | + </tr> | ||
| 66 | + </thead> | ||
| 67 | + <tbody class="table_body"> | ||
| 68 | + </tbody> | ||
| 69 | + </table> | ||
| 70 | + <!-- 绕改道--> | ||
| 71 | + <table class="table table-striped table-bordered table-hover table-checkable report-register-table" style="display:none" id="regional_table"> | ||
| 72 | + <thead class=""> | ||
| 73 | + <tr role="row"> | ||
| 74 | + <!--<th width="2%"><input type="radio" name="checkItems"></th>--> | ||
| 75 | + <th width="2%">#</th> | ||
| 76 | + <th width="2%">序号</th> | ||
| 77 | + <th width="5%">报备时间</th> | ||
| 78 | + <th width="5%">报备人</th> | ||
| 79 | + <th width="5%">截止时间</th> | ||
| 80 | + <th width="5%">公告区域</th> | ||
| 81 | + <th width="20%">公告信息</th> | ||
| 82 | + </tr> | ||
| 83 | + </thead> | ||
| 84 | + <tbody class="table_body"> | ||
| 85 | + </tbody> | ||
| 86 | + </table> | ||
| 87 | + </div> | ||
| 88 | + | ||
| 89 | + <div class="load-panel"> | ||
| 90 | + <i class="uk-icon-spinner uk-icon-spin"></i> | ||
| 91 | + 正在加载数据 | ||
| 92 | + </div> | ||
| 93 | + </div> | ||
| 94 | + | ||
| 95 | + | ||
| 96 | + | ||
| 97 | + <script id="emergency_table_body" type="text/html"> | ||
| 98 | + {{each data.list as obj i}} | ||
| 99 | + {{if obj.status == 2}} | ||
| 100 | + <tr style="background-color: #ff5f78"> | ||
| 101 | + <td style="vertical-align: middle;"> | ||
| 102 | + <!--<input type="radio" class="group-checkable icheck" name="idRadio" value="{{obj.id}}" data-lineCode="{{obj.report_XL}}">--> | ||
| 103 | + </td> | ||
| 104 | + {{else}} | ||
| 105 | + <tr> | ||
| 106 | + <td style="vertical-align: middle;"> | ||
| 107 | + <input type="radio" class="group-checkable icheck" name="idRadio" value="{{obj.id}}" data-lineCode="{{obj.notice_XL}}"> | ||
| 108 | + </td> | ||
| 109 | + {{/if}} | ||
| 110 | + <td style="vertical-align: middle;">{{i + 1}}</td> | ||
| 111 | + <td style="vertical-align: middle;">{{obj.notice_DATE}}</td> | ||
| 112 | + <td style="vertical-align: middle;">{{obj.notice_BBR}}</td> | ||
| 113 | + <td style="vertical-align: middle;">{{obj.notice_TIME}}</td> | ||
| 114 | + <td style="vertical-align: middle;">{{obj.notice_XLNAME}}</td> | ||
| 115 | + <td style="vertical-align: middle;">{{obj.notice_XSFX}}</td> | ||
| 116 | + <td style="vertical-align: middle;">{{obj.notice_TFSJ}}</td> | ||
| 117 | + <td style="vertical-align: middle;">{{obj.notice_SJYX}}</td> | ||
| 118 | + <td style="vertical-align: middle;">{{obj.notice_STATIONNAME}}</td> | ||
| 119 | + </tr> | ||
| 120 | + {{/each}} | ||
| 121 | + </script> | ||
| 122 | + <script id="regional_table_body" type="text/html"> | ||
| 123 | + {{each data.list as obj i}} | ||
| 124 | + | ||
| 125 | + {{if obj.status == 2}} | ||
| 126 | + <tr style="background-color: #ff5f78"> | ||
| 127 | + <td style="vertical-align: middle;"> | ||
| 128 | + <!--<input type="radio" class="group-checkable icheck" name="idRadio" value="{{obj.id}}" data-lineCode="{{obj.report_XL}}">--> | ||
| 129 | + </td> | ||
| 130 | + {{else}} | ||
| 131 | + <tr> | ||
| 132 | + <td style="vertical-align: middle;"> | ||
| 133 | + <input type="radio" class="group-checkable icheck" name="idRadio" value="{{obj.id}}" data-lineCode="{{obj.notice_XL}}"> | ||
| 134 | + </td> | ||
| 135 | + {{/if}} | ||
| 136 | + <td style="vertical-align: middle;">{{i + 1}}</td> | ||
| 137 | + <td style="vertical-align: middle;">{{obj.notice_DATE}}</td> | ||
| 138 | + <td style="vertical-align: middle">{{obj.notice_BBR}}</td> | ||
| 139 | + <td style="vertical-align: middle">{{obj.notice_TIME}}</td> | ||
| 140 | + <td style="vertical-align: middle">{{obj.notice_QY}}</td> | ||
| 141 | + <td style="vertical-align: middle">{{obj.notice_GG}}</td> | ||
| 142 | + </tr> | ||
| 143 | + {{/each}} | ||
| 144 | + </script> | ||
| 145 | + | ||
| 146 | + | ||
| 147 | + <!-- common js --> | ||
| 148 | + <!--<script src="/assets/js/common.js"></script>--> | ||
| 149 | + <!--<!– select2 下拉框 –>--> | ||
| 150 | + <!--<script src="/metronic_v4.5.4/plugins/select2/js/select2.full.min.js"></script>--> | ||
| 151 | + <!-- moment.js 日期处理类库 --> | ||
| 152 | + <script src="/assets/plugins/moment-with-locales.js" data-exclude=1></script> | ||
| 153 | + <!-- 日期控件 --> | ||
| 154 | + <script src="/metronic_v4.5.4/plugins/bootstrap-datetimepicker-2/js/bootstrap-datetimepicker.min.js"></script> | ||
| 155 | + <!-- bootstrap --> | ||
| 156 | + <script src="/metronic_v4.5.4/plugins/bootstrap/js/bootstrap.min.js" data-exclude=1></script> | ||
| 157 | + <!--<script src="/metronic_v4.5.4/plugins/bootstrap-wizard/jquery.bootstrap.wizard.min.js"></script>--> | ||
| 158 | + <!-- editable.js --> | ||
| 159 | + <!--<script src="/metronic_v4.5.4/plugins/bootstrap-editable/bootstrap-editable/js/bootstrap-editable.min.js"></script>--> | ||
| 160 | + <script> | ||
| 161 | + var manageJs = (function () { | ||
| 162 | + var modal = '#notice-modal'; | ||
| 163 | + var editType = false;//编辑状态,修改过东西 | ||
| 164 | + var lineCodes ='',// 选择的线路 | ||
| 165 | + companyMap = {}, | ||
| 166 | + user = {};//当前用户信息 | ||
| 167 | + var activeDiv='emergency_table'; | ||
| 168 | + var lineList = gb_data_basic.activeLines; | ||
| 169 | + | ||
| 170 | + //当前用户信息 | ||
| 171 | + gb_common.$get('/user/currentUser', null,function (data) { | ||
| 172 | + user = data; | ||
| 173 | + }); | ||
| 174 | + | ||
| 175 | + $(modal).on('init', function (e,data) { | ||
| 176 | + // 遍历出所有需要查询的线路 | ||
| 177 | + lineCodes = ''; | ||
| 178 | + $.each(lineList, function (i, g) { | ||
| 179 | + lineCodes += '"'+g.lineCode + '",'; | ||
| 180 | + }); | ||
| 181 | + console.log(lineCodes); | ||
| 182 | + refreshDate(); | ||
| 183 | + //滚动条 | ||
| 184 | + $('.report-register-table-wrap', modal).perfectScrollbar(); | ||
| 185 | + }); | ||
| 186 | + | ||
| 187 | + var refreshDate = function() { | ||
| 188 | + console.log("222"); | ||
| 189 | + $('.load-panel', modal).show(); | ||
| 190 | + loading=true; | ||
| 191 | + gb_common.$get("/notice/findList", {lineCodes: lineCodes.substring(0, lineCodes.length - 1)}, function (data) { | ||
| 192 | + if (data.status == "SUCCESS") { | ||
| 193 | + var list = data.list; | ||
| 194 | + var tableList1 = [], tableList2 = []; | ||
| 195 | + $.each(list, function (i, rr) { | ||
| 196 | + console.log(rr); | ||
| 197 | + rr.notice_DATE = formatDate(new Date(rr.notice_DATE)); | ||
| 198 | + rr.notice_TIME = formatDate(new Date(rr.notice_TIME)); | ||
| 199 | + if (rr.notice_TYPE == 1) { | ||
| 200 | + rr.notice_XSFX=rr.notice_XSFX==0?'上行':'下行'; | ||
| 201 | + tableList1.push(rr); | ||
| 202 | + } else if (rr.notice_TYPE == 2) { | ||
| 203 | + tableList2.push(rr); | ||
| 204 | + } | ||
| 205 | + }); | ||
| 206 | + console.log(tableList1); | ||
| 207 | + console.log(tableList2); | ||
| 208 | + var htmlStr = template('emergency_table_body', {'data':{'list': tableList1,'line':lineList}}); | ||
| 209 | + $('#emergency_table .table_body', modal).html(htmlStr); | ||
| 210 | + htmlStr = template('regional_table_body', {'data':{'list': tableList2,'line':lineList}}); | ||
| 211 | + $('#regional_table .table_body', modal).html(htmlStr); | ||
| 212 | + $('.load-panel', modal).hide(); | ||
| 213 | + loading=false; | ||
| 214 | + } | ||
| 215 | + }); | ||
| 216 | + }; | ||
| 217 | + | ||
| 218 | + | ||
| 219 | + $("#add", modal).on('click', function () { | ||
| 220 | + var activeDivId = $('.ct_table_wrap .active').attr('id'); | ||
| 221 | + open_modal('/real_control_v2/fragments/north/nav/station_notice/add.html', {'tableActive' : activeDivId,'companyMap':companyMap,'lineList':lineList,'user':user}, { | ||
| 222 | + bgclose: false, | ||
| 223 | + modal: false | ||
| 224 | + }); | ||
| 225 | + }); | ||
| 226 | + $("#update", modal).on('click', function () { | ||
| 227 | + var activeDivId = $('.ct_table_wrap .active').attr('id'); | ||
| 228 | + var id = $("#"+activeDivId+" .table_body input[name='idRadio']:checked", modal).val(); | ||
| 229 | + if(id){ | ||
| 230 | + gb_common.$get('/notice/' + id,null, function (rs) { | ||
| 231 | + // 全转换为大写 | ||
| 232 | + var rr = nameTo_(rs); | ||
| 233 | + open_modal('/real_control_v2/fragments/north/nav/station_notice/update.html', {'tableActive' : activeDivId,'lineList':lineList,'user':user,'rr':rr}, { | ||
| 234 | + bgclose: false, | ||
| 235 | + modal: false | ||
| 236 | + }); | ||
| 237 | + }); | ||
| 238 | + } else { | ||
| 239 | + notify_succ('当前类型没有选中!'); | ||
| 240 | + } | ||
| 241 | + }); | ||
| 242 | + $("#delete").on('click', function () { | ||
| 243 | + var activeDivId = $('.ct_table_wrap .active').attr('id'); | ||
| 244 | + var id = $("#"+activeDivId+" .table_body input[name='idRadio']:checked", modal).val(); | ||
| 245 | + if(id){ | ||
| 246 | + alt_confirm('确实要删除这个公告吗?', function () { | ||
| 247 | + gb_common.$post('/notice/delete',{ID:id,NOTICE_BBR:user.userName+'/'+user.name}, function (rs) { | ||
| 248 | + manageJs.refreshDate(); | ||
| 249 | + notify_succ('删除成功!'); | ||
| 250 | + }); | ||
| 251 | + }, '确定删除'); | ||
| 252 | + } else { | ||
| 253 | + notify_succ('当前类型没有选中!'); | ||
| 254 | + } | ||
| 255 | + }); | ||
| 256 | + | ||
| 257 | + | ||
| 258 | + $(modal).on('click', '.navigation_bar li', function () { | ||
| 259 | + $(this).parent().find('li.uk-active').removeClass('uk-active'); | ||
| 260 | + $(this).addClass('uk-active'); | ||
| 261 | + var typeName = $(this).attr('id'); | ||
| 262 | + var oldActiveDivId = $("#"+typeName+"_table").parent().find('.active'); | ||
| 263 | + var oldActiveDiv = document.getElementById(oldActiveDivId.attr('id')); | ||
| 264 | + oldActiveDiv.style.display = "none"; | ||
| 265 | + oldActiveDivId.removeClass("active"); | ||
| 266 | + | ||
| 267 | + activeDiv = typeName+"_table"; | ||
| 268 | + $("#"+typeName+"_table").addClass("active"); | ||
| 269 | + var activeTable = document.getElementById(typeName+"_table"); | ||
| 270 | + activeTable.style.display = ""; | ||
| 271 | + }); | ||
| 272 | + | ||
| 273 | + var formatDate = function(now) { | ||
| 274 | + var year=now.getFullYear(); | ||
| 275 | + var month=now.getMonth()+1; | ||
| 276 | + var date=now.getDate(); | ||
| 277 | + var hour=now.getHours(); | ||
| 278 | + var minute=now.getMinutes(); | ||
| 279 | + var second=now.getSeconds(); | ||
| 280 | + return year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second; | ||
| 281 | + }; | ||
| 282 | + | ||
| 283 | + function nameTo_(object) { | ||
| 284 | + for (var i in object) { | ||
| 285 | + if (object.hasOwnProperty(i)) { | ||
| 286 | + var temp = object[i]; | ||
| 287 | + var oldI = i; | ||
| 288 | + temp = object[i.toUpperCase()] = object[i]; | ||
| 289 | + delete object[oldI]; | ||
| 290 | + if (typeof temp === 'object' || Object.prototype.toString.call(temp) === '[object Array]') { | ||
| 291 | + nameTo_(temp); | ||
| 292 | + } | ||
| 293 | + } | ||
| 294 | + } | ||
| 295 | + return object; | ||
| 296 | + } | ||
| 297 | + | ||
| 298 | + return{ | ||
| 299 | + refreshDate:refreshDate | ||
| 300 | + } | ||
| 301 | + })(); | ||
| 302 | + </script> | ||
| 303 | +</div> | ||
| 0 | \ No newline at end of file | 304 | \ No newline at end of file |
src/main/resources/static/real_control_v2/fragments/north/nav/station_notice/mould/manage2.html
0 → 100644
| 1 | +<div class="uk-modal ct_move_modal" id="report-register-modal"> | ||
| 2 | + | ||
| 3 | + <!-- editable --> | ||
| 4 | + <!--<link href="/metronic_v4.5.4/plugins/bootstrap-editable/bootstrap-editable/css/bootstrap-editable.css" rel="stylesheet" type="text/css" />--> | ||
| 5 | + <!-- Bootstrap style --> | ||
| 6 | + <link href="/metronic_v4.5.4/plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" /> | ||
| 7 | + <!-- select2 下拉框插件 --> | ||
| 8 | + <!--<link href="/metronic_v4.5.4/plugins/select2/css/select2.min.css" rel="stylesheet" type="text/css" />--> | ||
| 9 | + <!--<link href="/metronic_v4.5.4/plugins/select2/css/select2-bootstrap.min.css" rel="stylesheet" type="text/css" />--> | ||
| 10 | + | ||
| 11 | + <style> | ||
| 12 | + .lineSelect{ | ||
| 13 | + width:174px !important | ||
| 14 | + } | ||
| 15 | + | ||
| 16 | + /*ul.navigation_bar:before { | ||
| 17 | + content: "报备类型"; | ||
| 18 | + position: absolute; | ||
| 19 | + top: -9px; | ||
| 20 | + font-size: 12px; | ||
| 21 | + background: white; | ||
| 22 | + padding: 0 4px; | ||
| 23 | + color: #7d7b7b; | ||
| 24 | + left: 10px; | ||
| 25 | + }*/ | ||
| 26 | + </style> | ||
| 27 | + <div class="uk-modal-dialog" style="width: 1800px;"> | ||
| 28 | + <a href="" class="uk-modal-close uk-close"></a> | ||
| 29 | + <div class="uk-modal-header"> | ||
| 30 | + <h2>站牌公告</h2> | ||
| 31 | + </div> | ||
| 32 | + | ||
| 33 | + | ||
| 34 | + <div style="padding-left: 12px;margin: 10px 0"> | ||
| 35 | + <ul class="uk-subnav uk-subnav-pill navigation_bar"> | ||
| 36 | + <li id="emergency" class="uk-active"><a>突发事件</a></li> | ||
| 37 | + <li id="regional"><a>区域公告</a></li> | ||
| 38 | + </ul> | ||
| 39 | + </div> | ||
| 40 | + | ||
| 41 | + <div style="padding-left: 12px;margin: 10px 0"> | ||
| 42 | + <div class=" uk-subnav-pill management_bar" > | ||
| 43 | + <button class="uk-button uk-button-primary" id="add">添加</button> | ||
| 44 | + <button class="uk-button uk-button-danger" id="update">修改</button> | ||
| 45 | + <button class="uk-button uk-button-danger" id="delete">删除</button> | ||
| 46 | + </div> | ||
| 47 | + </div> | ||
| 48 | + | ||
| 49 | + <div class="ct_table_wrap" style="height: 510px"> | ||
| 50 | + <!-- 突发事件--> | ||
| 51 | + <table class="table table-striped table-bordered table-hover table-checkable report-register-table active" id="emergency_table"> | ||
| 52 | + <thead class=""> | ||
| 53 | + <tr role="row"> | ||
| 54 | + <!--<th width="2%"><input type="radio" name="checkItems"></th>--> | ||
| 55 | + <th width="2%">#</th> | ||
| 56 | + <th width="2%">序号</th> | ||
| 57 | + <th width="5%">报备时间</th> | ||
| 58 | + <th width="8%">影响线路</th> | ||
| 59 | + <th width="4%">方向</th> | ||
| 60 | + <th width="8%">突发事件</th> | ||
| 61 | + <th width="8%">产生影响</th> | ||
| 62 | + <th width="8%">影响站点</th> | ||
| 63 | + </tr> | ||
| 64 | + </thead> | ||
| 65 | + <tbody class="table_body"> | ||
| 66 | + </tbody> | ||
| 67 | + </table> | ||
| 68 | + <!-- 绕改道--> | ||
| 69 | + <table class="table table-striped table-bordered table-hover table-checkable report-register-table" style="display:none" id="regional_table"> | ||
| 70 | + <thead class=""> | ||
| 71 | + <tr role="row"> | ||
| 72 | + <!--<th width="2%"><input type="radio" name="checkItems"></th>--> | ||
| 73 | + <th width="2%">#</th> | ||
| 74 | + <th width="2%">序号</th> | ||
| 75 | + <th width="5%">报备时间</th> | ||
| 76 | + <th width="5%">公告区域</th> | ||
| 77 | + <th width="20%">公告信息</th> | ||
| 78 | + </tr> | ||
| 79 | + </thead> | ||
| 80 | + <tbody class="table_body"> | ||
| 81 | + </tbody> | ||
| 82 | + </table> | ||
| 83 | + </div> | ||
| 84 | + | ||
| 85 | + <div class="load-panel"> | ||
| 86 | + <i class="uk-icon-spinner uk-icon-spin"></i> | ||
| 87 | + 正在加载数据 | ||
| 88 | + </div> | ||
| 89 | + </div> | ||
| 90 | + | ||
| 91 | + | ||
| 92 | + | ||
| 93 | + <script id="emergency_table_body" type="text/html"> | ||
| 94 | + {{each data.list as obj i}} | ||
| 95 | + {{if obj.status == 2}} | ||
| 96 | + <tr style="background-color: #ff5f78"> | ||
| 97 | + <td style="vertical-align: middle;"> | ||
| 98 | + <!--<input type="radio" class="group-checkable icheck" name="idRadio" value="{{obj.id}}" data-lineCode="{{obj.report_XL}}">--> | ||
| 99 | + </td> | ||
| 100 | + {{else}} | ||
| 101 | + <tr> | ||
| 102 | + <td style="vertical-align: middle;"> | ||
| 103 | + <input type="radio" class="group-checkable icheck" name="idRadio" value="{{obj.id}}" data-lineCode="{{obj.report_XL}}"> | ||
| 104 | + </td> | ||
| 105 | + {{/if}} | ||
| 106 | + <td style="vertical-align: middle;">{{i + 1}}</td> | ||
| 107 | + <td style="vertical-align: middle;">{{obj.report_DATE}}</td> | ||
| 108 | + <td style="vertical-align: middle;display:none">{{obj.report_BBR}}</td> | ||
| 109 | + <td style="vertical-align: middle;display:none">{{obj.report_GS}}</td> | ||
| 110 | + <td style="vertical-align: middle;display:none">{{obj.report_FGS}}</td> | ||
| 111 | + <td style="vertical-align: middle;">{{obj.report_XLNAME}}</td> | ||
| 112 | + <td style="vertical-align: middle;">{{obj.report_TFSJ}}</td> | ||
| 113 | + <td style="vertical-align: middle;">{{obj.report_YXSJ}}</td> | ||
| 114 | + <td style="vertical-align: middle;">{{obj.report_YXBC}}</td> | ||
| 115 | + <td style="vertical-align: middle;">{{obj.report_TZCS}}</td> | ||
| 116 | + </tr> | ||
| 117 | + {{/each}} | ||
| 118 | + </script> | ||
| 119 | + <script id="regional_table_body" type="text/html"> | ||
| 120 | + {{each data.list as obj i}} | ||
| 121 | + | ||
| 122 | + {{if obj.status == 2}} | ||
| 123 | + <tr style="background-color: #ff5f78"> | ||
| 124 | + <td style="vertical-align: middle;"> | ||
| 125 | + <!--<input type="radio" class="group-checkable icheck" name="idRadio" value="{{obj.id}}" data-lineCode="{{obj.report_XL}}">--> | ||
| 126 | + </td> | ||
| 127 | + {{else}} | ||
| 128 | + <tr> | ||
| 129 | + <td style="vertical-align: middle;"> | ||
| 130 | + <input type="radio" class="group-checkable icheck" name="idRadio" value="{{obj.id}}" data-lineCode="{{obj.report_XL}}"> | ||
| 131 | + </td> | ||
| 132 | + {{/if}} | ||
| 133 | + <td style="vertical-align: middle;">{{i + 1}}</td> | ||
| 134 | + <td style="vertical-align: middle;">{{obj.report_DATE}}</td> | ||
| 135 | + <td style="vertical-align: middle;display:none">{{obj.report_BBR}}</td> | ||
| 136 | + <td style="vertical-align: middle;display:none">{{obj.report_GS}}</td> | ||
| 137 | + <td style="vertical-align: middle;display:none">{{obj.report_FGS}}</td> | ||
| 138 | + <td style="vertical-align: middle;">{{obj.report_XLNAME}}</td> | ||
| 139 | + <td style="vertical-align: middle;">{{obj.report_ROAD}}</td> | ||
| 140 | + <td style="vertical-align: middle;">{{obj.report_XSFX}}</td> | ||
| 141 | + <td style="vertical-align: middle;">{{obj.report_SGGK}}</td> | ||
| 142 | + <td style="vertical-align: middle;">{{obj.report_BZ}}</td> | ||
| 143 | + </tr> | ||
| 144 | + {{/each}} | ||
| 145 | + </script> | ||
| 146 | + | ||
| 147 | + | ||
| 148 | + <!-- common js --> | ||
| 149 | + <!--<script src="/assets/js/common.js"></script>--> | ||
| 150 | + <!--<!– select2 下拉框 –>--> | ||
| 151 | + <!--<script src="/metronic_v4.5.4/plugins/select2/js/select2.full.min.js"></script>--> | ||
| 152 | + <!-- moment.js 日期处理类库 --> | ||
| 153 | + <script src="/assets/plugins/moment-with-locales.js" data-exclude=1></script> | ||
| 154 | + <!-- 日期控件 --> | ||
| 155 | + <script src="/metronic_v4.5.4/plugins/bootstrap-datetimepicker-2/js/bootstrap-datetimepicker.min.js"></script> | ||
| 156 | + <!-- bootstrap --> | ||
| 157 | + <script src="/metronic_v4.5.4/plugins/bootstrap/js/bootstrap.min.js" data-exclude=1></script> | ||
| 158 | + <!--<script src="/metronic_v4.5.4/plugins/bootstrap-wizard/jquery.bootstrap.wizard.min.js"></script>--> | ||
| 159 | + <!-- editable.js --> | ||
| 160 | + <!--<script src="/metronic_v4.5.4/plugins/bootstrap-editable/bootstrap-editable/js/bootstrap-editable.min.js"></script>--> | ||
| 161 | + <script> | ||
| 162 | + var manageJs = (function () { | ||
| 163 | + var modal = '#report-register-modal'; | ||
| 164 | + var editType = false;//编辑状态,修改过东西 | ||
| 165 | + var lineCodes ='',// 选择的线路 | ||
| 166 | + companyMap = {}, | ||
| 167 | + user = {};//当前用户信息 | ||
| 168 | + var activeDiv='emergency_table'; | ||
| 169 | + var lineList = gb_data_basic.activeLines; | ||
| 170 | + | ||
| 171 | + //当前用户信息 | ||
| 172 | + gb_common.$get('/user/currentUser', null,function (data) { | ||
| 173 | + user = data; | ||
| 174 | + }); | ||
| 175 | + | ||
| 176 | + $(modal).on('init', function (e,data) { | ||
| 177 | + // get请求获取公司 | ||
| 178 | + /*gb_common.$get("/user/companyData",null,function(result){ | ||
| 179 | + var len_ = lineList.length; | ||
| 180 | + if(len_>0) { | ||
| 181 | + // 遍历线路对应的公司 | ||
| 182 | + for(var i = 0; i < result.length; i++){ | ||
| 183 | + var companyCode = result[i].companyCode; | ||
| 184 | + var children = result[i].children; | ||
| 185 | + for(var j = 0; j < children.length; j++){ | ||
| 186 | + var code = children[j].code; | ||
| 187 | + for(var k=0;k < lineList.length;k++ ){ | ||
| 188 | + if(lineList[k].brancheCompany==code && lineList[k].company==companyCode){ | ||
| 189 | + companyMap[lineList[k].lineCode] = companyCode+":"+code+"-"+result[i].companyName+":"+result[i].children[j].name; | ||
| 190 | + } | ||
| 191 | + } | ||
| 192 | + } | ||
| 193 | + } | ||
| 194 | + | ||
| 195 | + | ||
| 196 | + // initPinYinSelect2($('.lineSelect'), paramsD, function (selector) { | ||
| 197 | + // selector.select2("val", ""); | ||
| 198 | + // }); | ||
| 199 | + } | ||
| 200 | + });*/ | ||
| 201 | + // 遍历出所有需要查询的线路 | ||
| 202 | + lineCodes = ''; | ||
| 203 | + $.each(lineList, function (i, g) { | ||
| 204 | + lineCodes += '"'+g.lineCode + '",'; | ||
| 205 | + }); | ||
| 206 | + | ||
| 207 | + refreshDate(); | ||
| 208 | + //滚动条 | ||
| 209 | + $('.report-register-table-wrap', modal).perfectScrollbar(); | ||
| 210 | + }); | ||
| 211 | + | ||
| 212 | + var refreshDate = function() { | ||
| 213 | + | ||
| 214 | + $('.load-panel', modal).show(); | ||
| 215 | + loading=true; | ||
| 216 | + gb_common.$get("/reportRegister/findList", {lineCodes: lineCodes.substring(0, lineCodes.length - 1)}, function (data) { | ||
| 217 | + if (data.status == "SUCCESS") { | ||
| 218 | + var list = data.list; | ||
| 219 | + var tableList1 = [], tableList2 = []; | ||
| 220 | + $.each(list, function (i, rr) { | ||
| 221 | + rr.report_DATE = formatDate(new Date(rr.report_DATE)); | ||
| 222 | + if (rr.report_TYPE == 1) { | ||
| 223 | + tableList1.push(rr); | ||
| 224 | + } else if (rr.report_TYPE == 2) { | ||
| 225 | + tableList2.push(rr); | ||
| 226 | + } | ||
| 227 | + }); | ||
| 228 | + var htmlStr = template('emergency_table_body', {'data':{'list': tableList1,'line':lineList}}); | ||
| 229 | + $('#emergency_table .table_body', modal).html(htmlStr); | ||
| 230 | + htmlStr = template('regional_table_body', {'data':{'list': tableList2,'line':lineList}}); | ||
| 231 | + $('#regional_table .table_body', modal).html(htmlStr); | ||
| 232 | + $('.load-panel', modal).hide(); | ||
| 233 | + loading=false; | ||
| 234 | + } | ||
| 235 | + }); | ||
| 236 | + }; | ||
| 237 | + | ||
| 238 | + | ||
| 239 | + $("#add", modal).on('click', function () { | ||
| 240 | + var activeDivId = $('.ct_table_wrap .active').attr('id'); | ||
| 241 | + open_modal('/real_control_v2/fragments/north/nav/station_notice/add.html', {'tableActive' : activeDivId,'companyMap':companyMap,'lineList':lineList,'user':user}, { | ||
| 242 | + bgclose: false, | ||
| 243 | + modal: false | ||
| 244 | + }); | ||
| 245 | + }); | ||
| 246 | + $("#update", modal).on('click', function () { | ||
| 247 | + var activeDivId = $('.ct_table_wrap .active').attr('id'); | ||
| 248 | + var id = $("#"+activeDivId+" .table_body input[name='idRadio']:checked", modal).val(); | ||
| 249 | + if(id){ | ||
| 250 | + gb_common.$get('/reportRegister/' + id,null, function (rs) { | ||
| 251 | + // 全转换为大写 | ||
| 252 | + var rr = nameTo_(rs); | ||
| 253 | + open_modal('/real_control_v2/fragments/north/nav/report_register/update.html', {'tableActive' : activeDivId,'companyMap':companyMap,'lineList':lineList,'user':user,'rr':rr}, { | ||
| 254 | + bgclose: false, | ||
| 255 | + modal: false | ||
| 256 | + }); | ||
| 257 | + }); | ||
| 258 | + } else { | ||
| 259 | + notify_succ('当前类型没有选中!'); | ||
| 260 | + } | ||
| 261 | + }); | ||
| 262 | + $("#delete").on('click', function () { | ||
| 263 | + var activeDivId = $('.ct_table_wrap .active').attr('id'); | ||
| 264 | + var id = $("#"+activeDivId+" .table_body input[name='idRadio']:checked", modal).val(); | ||
| 265 | + if(id){ | ||
| 266 | + alt_confirm('确实要删除这个报备登记吗?', function () { | ||
| 267 | + // gb_common.$del('/reportRegister/' + id, function (rs) { | ||
| 268 | + gb_common.$post('/reportRegister/delete',{ID:id,REPORT_BBR:user.userName+'/'+user.name}, function (rs) { | ||
| 269 | + manageJs.refreshDate(); | ||
| 270 | + notify_succ('删除成功!'); | ||
| 271 | + if(rs.status2.CODE == '0') | ||
| 272 | + notify_succ('同步到服务热线系统成功!'); | ||
| 273 | + else | ||
| 274 | + notify_err('同步到服务热线系统失败!'); | ||
| 275 | + }); | ||
| 276 | + }, '确定删除'); | ||
| 277 | + } else { | ||
| 278 | + notify_succ('当前类型没有选中!'); | ||
| 279 | + } | ||
| 280 | + }); | ||
| 281 | + | ||
| 282 | + | ||
| 283 | + $(modal).on('click', '.navigation_bar li', function () { | ||
| 284 | + $(this).parent().find('li.uk-active').removeClass('uk-active'); | ||
| 285 | + $(this).addClass('uk-active'); | ||
| 286 | + var typeName = $(this).attr('id'); | ||
| 287 | + var oldActiveDivId = $("#"+typeName+"_table").parent().find('.active'); | ||
| 288 | + var oldActiveDiv = document.getElementById(oldActiveDivId.attr('id')); | ||
| 289 | + oldActiveDiv.style.display = "none"; | ||
| 290 | + oldActiveDivId.removeClass("active"); | ||
| 291 | + | ||
| 292 | + activeDiv = typeName+"_table"; | ||
| 293 | + $("#"+typeName+"_table").addClass("active"); | ||
| 294 | + var activeTable = document.getElementById(typeName+"_table"); | ||
| 295 | + activeTable.style.display = ""; | ||
| 296 | + }); | ||
| 297 | + | ||
| 298 | + var formatDate = function(now) { | ||
| 299 | + var year=now.getFullYear(); | ||
| 300 | + var month=now.getMonth()+1; | ||
| 301 | + var date=now.getDate(); | ||
| 302 | + var hour=now.getHours(); | ||
| 303 | + var minute=now.getMinutes(); | ||
| 304 | + var second=now.getSeconds(); | ||
| 305 | + return year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second; | ||
| 306 | + }; | ||
| 307 | + | ||
| 308 | + function nameTo_(object) { | ||
| 309 | + for (var i in object) { | ||
| 310 | + if (object.hasOwnProperty(i)) { | ||
| 311 | + var temp = object[i]; | ||
| 312 | + var oldI = i; | ||
| 313 | + temp = object[i.toUpperCase()] = object[i]; | ||
| 314 | + delete object[oldI]; | ||
| 315 | + if (typeof temp === 'object' || Object.prototype.toString.call(temp) === '[object Array]') { | ||
| 316 | + nameTo_(temp); | ||
| 317 | + } | ||
| 318 | + } | ||
| 319 | + } | ||
| 320 | + return object; | ||
| 321 | + } | ||
| 322 | + | ||
| 323 | + return{ | ||
| 324 | + refreshDate:refreshDate | ||
| 325 | + } | ||
| 326 | + })(); | ||
| 327 | + </script> | ||
| 328 | +</div> | ||
| 0 | \ No newline at end of file | 329 | \ No newline at end of file |
src/main/resources/static/real_control_v2/fragments/north/nav/station_notice/mould/report_register.xls
0 → 100644
No preview for this file type
src/main/resources/static/real_control_v2/fragments/north/nav/station_notice/update.html
0 → 100644
| 1 | +<div class="uk-modal" id="notice_update_mobal"> | ||
| 2 | + <div class="uk-modal-dialog" style="width: 600px;"> | ||
| 3 | + <a href="" class="uk-modal-close uk-close"></a> | ||
| 4 | + <div class="uk-modal-header"> | ||
| 5 | + <h2>修改公告</h2> | ||
| 6 | + </div> | ||
| 7 | + <div class="uk-form uk-form-horizontal" id="report_register_form"> | ||
| 8 | + <form id="add_head_table"> | ||
| 9 | + <input type="hidden" name="ID" id="ID"> | ||
| 10 | + <input type="hidden" name="NOTICE_BBR" id="NOTICE_BBR" value=""> | ||
| 11 | + <input type="hidden" name="NOTICE_XLNAME" id="NOTICE_XLNAME" value=""> | ||
| 12 | + | ||
| 13 | + <!-- 报备时间 --> | ||
| 14 | + <div class="uk-grid uk-width-2-3 uk-container-center"> | ||
| 15 | + <div class="uk-form-row"> | ||
| 16 | + <label class="uk-form-label"> | ||
| 17 | + 报备时间: | ||
| 18 | + </label> | ||
| 19 | + <div class="uk-form-controls"> | ||
| 20 | + <input type="text" class="form-control" name="NOTICE_DATE" id="NOTICE_DATE" readonly="readonly"> | ||
| 21 | + </div> | ||
| 22 | + </div> | ||
| 23 | + </div> | ||
| 24 | + <div class="uk-grid uk-width-2-3 uk-container-center"> | ||
| 25 | + <div class="uk-form-row"> | ||
| 26 | + <label class="uk-form-label"> | ||
| 27 | + 公告截止: | ||
| 28 | + </label> | ||
| 29 | + <div class="uk-form-controls"> | ||
| 30 | + <input class="form-control" type="text" name="NOTICE_TIME" id="NOTICE_TIME"> | ||
| 31 | + </div> | ||
| 32 | + </div> | ||
| 33 | + </div> | ||
| 34 | + <!-- 类型 --> | ||
| 35 | + <div class="uk-grid uk-width-2-3 uk-container-center" hidden> | ||
| 36 | + <div class="uk-form-row"> | ||
| 37 | + <label class="uk-form-label"> | ||
| 38 | + 类型: | ||
| 39 | + </label> | ||
| 40 | + <div class="uk-form-controls"> | ||
| 41 | + <select class="form-control typeSelect" name="NOTICE_TYPE" id="NOTICE_TYPE"> | ||
| 42 | + <option value="1">突发事件</option> | ||
| 43 | + <option value="2">区域公告</option> | ||
| 44 | + </select> | ||
| 45 | + </div> | ||
| 46 | + </div> | ||
| 47 | + </div> | ||
| 48 | + </form> | ||
| 49 | + <!-- 突发事件--> | ||
| 50 | + <form id="add_emergency_table" class="c_register_form" style="display:none; margin-top: 35px;"> | ||
| 51 | + <div class="uk-grid uk-width-2-3 uk-container-center"> | ||
| 52 | + <div class="uk-form-row"> | ||
| 53 | + <label class="uk-form-label"> | ||
| 54 | + 线路: | ||
| 55 | + </label> | ||
| 56 | + <div class="uk-form-controls"> | ||
| 57 | + <select class="form-control lineSelect" name="NOTICE_XL" id="NOTICE_XL"> | ||
| 58 | + </select> | ||
| 59 | + </div> | ||
| 60 | + </div> | ||
| 61 | + </div> | ||
| 62 | + <div class="uk-grid uk-width-2-3 uk-container-center"> | ||
| 63 | + <div class="uk-form-row"> | ||
| 64 | + <label class="uk-form-label"> | ||
| 65 | + 方向: | ||
| 66 | + </label> | ||
| 67 | + <div class="uk-form-controls"> | ||
| 68 | + <select class="form-control typeSelect" name="NOTICE_XSFX" id="NOTICE_XSFX" > | ||
| 69 | + <option value="0">上行</option> | ||
| 70 | + <option value="1">下行</option> | ||
| 71 | + </select> | ||
| 72 | + </div> | ||
| 73 | + </div> | ||
| 74 | + </div> | ||
| 75 | + <div class="uk-grid uk-width-2-3 uk-container-center"> | ||
| 76 | + <div class="uk-form-row"> | ||
| 77 | + <label class="uk-form-label"> | ||
| 78 | + 突发事件: | ||
| 79 | + </label> | ||
| 80 | + <div class="uk-form-controls"> | ||
| 81 | + <select class="form-control typeSelect" name="NOTICE_TFSJ" id="NOTICE_TFSJ" > | ||
| 82 | + <option value="1">重大活动</option> | ||
| 83 | + <option value="2">恶劣天气</option> | ||
| 84 | + <option value="3">交通事故</option> | ||
| 85 | + <option value="3">道路拥堵</option> | ||
| 86 | + </select> | ||
| 87 | + </div> | ||
| 88 | + </div> | ||
| 89 | + </div> | ||
| 90 | + <div class="uk-grid uk-width-2-3 uk-container-center"> | ||
| 91 | + <div class="uk-form-row"> | ||
| 92 | + <label class="uk-form-label"> | ||
| 93 | + 事件影响: | ||
| 94 | + </label> | ||
| 95 | + <div class="uk-form-controls"> | ||
| 96 | + <select class="form-control typeSelect" name="NOTICE_SJYX" id="NOTICE_SJYX" > | ||
| 97 | + <option value="1">临时改道</option> | ||
| 98 | + <option value="2">班次延误</option> | ||
| 99 | + </select> | ||
| 100 | + </div> | ||
| 101 | + </div> | ||
| 102 | + </div> | ||
| 103 | + <div class="uk-grid uk-width-2-3 uk-container-center"> | ||
| 104 | + <div class="uk-form-row"> | ||
| 105 | + <label class="uk-form-label"> | ||
| 106 | + 影响站点: | ||
| 107 | + </label> | ||
| 108 | + <div class="uk-form-controls"> | ||
| 109 | + <select class="form-control lineSelect" name="NOTICE_STATION" id="NOTICE_STATION" > | ||
| 110 | + </select> | ||
| 111 | + </div> | ||
| 112 | + </div> | ||
| 113 | + </div> | ||
| 114 | + <div class="uk-modal-footer uk-text-right"> | ||
| 115 | + <span class="bind_gas_station_panel" style="position: absolute;left: 30px;text-decoration: underline;"></span> | ||
| 116 | + <button type="button" class="uk-button uk-modal-close">取消</button> | ||
| 117 | + <button type="submit" class="uk-button uk-button-primary submitBtn"><i class="uk-icon-check"></i> 保存</button> | ||
| 118 | + </div> | ||
| 119 | + </form> | ||
| 120 | + <!-- 区域公告--> | ||
| 121 | + <form id="add_regional_table" class="c_register_form" style="display:none; margin-top: 35px;"> | ||
| 122 | + <div class="uk-grid uk-width-2-3 uk-container-center"> | ||
| 123 | + <div class="uk-form-row"> | ||
| 124 | + <label class="uk-form-label"> | ||
| 125 | + 区域: | ||
| 126 | + </label> | ||
| 127 | + <div class="uk-form-controls"> | ||
| 128 | + <select class="form-control lineSelect" name="NOTICE_QY" id="NOTICE_QY"> | ||
| 129 | + <option value='0'>全部</option> | ||
| 130 | + <option value='1'>区域1</option> | ||
| 131 | + <option value='2'>区域2</option> | ||
| 132 | + <option value='3'>区域3</option> | ||
| 133 | + </select> | ||
| 134 | + </div> | ||
| 135 | + </div> | ||
| 136 | + </div> | ||
| 137 | + <div class="uk-grid uk-width-2-3 uk-container-center"> | ||
| 138 | + <div class="uk-form-row"> | ||
| 139 | + <label class="uk-form-label"> | ||
| 140 | + 公告信息: | ||
| 141 | + </label> | ||
| 142 | + <div class="uk-form-controls"> | ||
| 143 | + <select class="form-control typeSelect" name="NOTICE_GG" id="NOTICE_GG" style="max-width: 220px"> | ||
| 144 | + <option value="0">雨天路滑,安全出行。</option> | ||
| 145 | + <option value="1">高峰时段,道路拥堵,请乘客合理安排出行。</option> | ||
| 146 | + <option value="2">请先下后上,注意乘车安全。</option> | ||
| 147 | + </select> | ||
| 148 | + </div> | ||
| 149 | + </div> | ||
| 150 | + </div> | ||
| 151 | + <div class="uk-modal-footer uk-text-right"> | ||
| 152 | + <span class="bind_gas_station_panel" style="position: absolute;left: 30px;text-decoration: underline;"></span> | ||
| 153 | + <button type="button" class="uk-button uk-modal-close">取消</button> | ||
| 154 | + <button type="submit" class="uk-button uk-button-primary submitBtn"><i class="uk-icon-check"></i> 保存</button> | ||
| 155 | + </div> | ||
| 156 | + </form> | ||
| 157 | + </div> | ||
| 158 | + </div> | ||
| 159 | + | ||
| 160 | + <script> | ||
| 161 | + (function () { | ||
| 162 | + var modal = '#notice_update_mobal'; | ||
| 163 | + var tableActive = '',formActive = ''; | ||
| 164 | + var NOTICE_TYPE, | ||
| 165 | + lineList = {}, | ||
| 166 | + user = {},rr={}; | ||
| 167 | + //加载站点 | ||
| 168 | + $("#NOTICE_XL").on("change", function(){ | ||
| 169 | + var lineCode = $(this).val(); | ||
| 170 | + var direction = $('#NOTICE_XSFX').val(); | ||
| 171 | + loadStation(lineCode,direction); | ||
| 172 | + | ||
| 173 | + }); | ||
| 174 | + $("#NOTICE_XSFX").on("change", function(){ | ||
| 175 | + var lineCode = $('#NOTICE_XL').val(); | ||
| 176 | + var direction = $(this).val(); | ||
| 177 | + loadStation(lineCode,direction); | ||
| 178 | + }); | ||
| 179 | + | ||
| 180 | + $(modal).on('init', function (e, data) { | ||
| 181 | + $('#NOTICE_DATE').datetimepicker({ | ||
| 182 | + format : 'YYYY-MM-DD HH:mm:ss', | ||
| 183 | + locale : 'zh-cn' | ||
| 184 | + }); | ||
| 185 | + $("#NOTICE_TIME").datetimepicker({ | ||
| 186 | + format : 'YYYY-MM-DD HH:mm:ss', | ||
| 187 | + locale : 'zh-cn' | ||
| 188 | + }); | ||
| 189 | + tableActive = "add_"+data.tableActive; | ||
| 190 | + rr = data.rr; | ||
| 191 | + var typeInt = 1; | ||
| 192 | + if (tableActive == 'add_emergency_table') { | ||
| 193 | + typeInt = 1; | ||
| 194 | + } else if (tableActive == 'add_regional_table') { | ||
| 195 | + typeInt = 2; | ||
| 196 | + } else { | ||
| 197 | + UIkit.modal(modal).hide(); | ||
| 198 | + notify_err('您所选的数据有问题,请重新选择!'); | ||
| 199 | + return; | ||
| 200 | + } | ||
| 201 | + $('#NOTICE_TYPE').val(typeInt); | ||
| 202 | + if(typeInt != rr.NOTICE_TYPE ) { | ||
| 203 | + UIkit.modal(modal).hide(); | ||
| 204 | + notify_err('您所选的数据有问题,请重新选择!'); | ||
| 205 | + return; | ||
| 206 | + } | ||
| 207 | + document.getElementById(tableActive).style.display = ""; | ||
| 208 | + | ||
| 209 | + // 先给input赋值 | ||
| 210 | + $('input,select', modal).each(function () { | ||
| 211 | + var domName = $(this).attr('name'); | ||
| 212 | + if(domName == 'NOTICE_DATE'){ | ||
| 213 | + $('#NOTICE_DATE').val(moment(new Date(rr[domName])).format('YYYY-MM-DD HH:mm:ss')); | ||
| 214 | + }else if(domName == 'NOTICE_TIME'){ | ||
| 215 | + $('#NOTICE_TIME').val(moment(new Date(rr[domName])).format('YYYY-MM-DD HH:mm:ss')); | ||
| 216 | + }else{ | ||
| 217 | + $(this).val(rr[domName]); | ||
| 218 | + } | ||
| 219 | + }); | ||
| 220 | + lineList = data.lineList; | ||
| 221 | + user = data.user; | ||
| 222 | + $('#NOTICE_BBR').val(user.userName+'/'+user.name); | ||
| 223 | + var options = ''; | ||
| 224 | + if(rr.NOTICE_XL!=undefined){ | ||
| 225 | + $.each(lineList, function (i,line) { | ||
| 226 | + if(line.lineCode == rr.NOTICE_XL) | ||
| 227 | + options += '<option value='+line.lineCode+' selected = "selected" >'+line.name+'</option>'; | ||
| 228 | + else | ||
| 229 | + options += '<option value='+line.lineCode+'>'+line.name+'</option>'; | ||
| 230 | + }); | ||
| 231 | + $('#NOTICE_XL').html(options); | ||
| 232 | + $('#NOTICE_XL').trigger("change"); | ||
| 233 | + } | ||
| 234 | + changeType(tableActive); | ||
| 235 | + $('#NOTICE_TYPE').on('change',function () { | ||
| 236 | + document.getElementById(tableActive).style.display = "none"; | ||
| 237 | + NOTICE_TYPE = this.value; | ||
| 238 | + if (NOTICE_TYPE == 1) { | ||
| 239 | + tableActive = 'add_emergency_table'; | ||
| 240 | + } else if (NOTICE_TYPE == 2) { | ||
| 241 | + tableActive = 'add_regional_table'; | ||
| 242 | + } | ||
| 243 | + document.getElementById(tableActive).style.display = ""; | ||
| 244 | + changeType(tableActive); | ||
| 245 | + }); | ||
| 246 | + }); | ||
| 247 | + function loadStation(lineCode,direction){ | ||
| 248 | + //站点路由 | ||
| 249 | + stationRoutes = gb_common.groupBy(gb_data_basic.stationRoutes(lineCode).sort(function (a, b) { | ||
| 250 | + return a.stationRouteCode - b.stationRouteCode; | ||
| 251 | + }), 'directions')[direction]; | ||
| 252 | + var options = ''; | ||
| 253 | + $.each(stationRoutes, function (i,station) { | ||
| 254 | + if(station.stationCode == rr.NOTICE_STATION) | ||
| 255 | + options += '<option value='+station.stationCode+' selected = "selected" >'+station.stationName+'</option>'; | ||
| 256 | + else | ||
| 257 | + options += '<option value='+station.stationCode+'>'+station.stationName+'</option>'; | ||
| 258 | + }); | ||
| 259 | + $('#NOTICE_STATION').html(options); | ||
| 260 | + // 模拟change给公司分公司赋值 | ||
| 261 | + $('#NOTICE_STATION').trigger("change"); | ||
| 262 | + } | ||
| 263 | + | ||
| 264 | + function changeType(tableActiveStr) { | ||
| 265 | + formActive = $('#'+tableActiveStr); | ||
| 266 | + //校验不过 | ||
| 267 | + formActive.on('err.field.fv', function () { | ||
| 268 | + $('#submitChildTaskBtn', modal).removeClass('disabled').removeAttr('disabled'); | ||
| 269 | + }); | ||
| 270 | + | ||
| 271 | + //校验 | ||
| 272 | + formActive.formValidation({framework: 'uikit', locale: 'zh_CN'}); | ||
| 273 | + //提交 | ||
| 274 | + formActive.on('success.form.fv', function (e) { | ||
| 275 | + e.preventDefault(); | ||
| 276 | + var headData = $('#add_head_table').serializeJSON(); | ||
| 277 | + var bodyData = $(formActive).serializeJSON(); | ||
| 278 | + var params = {}; | ||
| 279 | + Object.assign(params,headData,bodyData); | ||
| 280 | + params.STATUS = '1'; | ||
| 281 | + gb_common.$post('/notice/', params, function (rs) { | ||
| 282 | + if(rs.status == 'SUCCESS'){ | ||
| 283 | + // $('#history-sch-maintain-modal').trigger('refresh', {'tableActive' : tableActive,'companyMap':companyMap,'lineList':lineList,'user':user}); | ||
| 284 | + UIkit.modal(modal).hide(); | ||
| 285 | + notify_succ('修改成功!'); | ||
| 286 | + manageJs.refreshDate(); | ||
| 287 | + } else | ||
| 288 | + notify_err('修改失败!'); | ||
| 289 | + }); | ||
| 290 | + }); | ||
| 291 | + } | ||
| 292 | + | ||
| 293 | + //submit | ||
| 294 | + $('.submitBtn', modal).on('click', function () { | ||
| 295 | + $(this).addClass('disabled').attr('disabled', 'disabled'); | ||
| 296 | + formActive.data('valid', false); | ||
| 297 | + formActive.formValidation('validate'); | ||
| 298 | + }); | ||
| 299 | + })(); | ||
| 300 | + </script> | ||
| 301 | +</div> | ||
| 0 | \ No newline at end of file | 302 | \ No newline at end of file |
src/main/resources/static/real_control_v2/js/data/json/north_toolbar.json
| @@ -220,6 +220,12 @@ | @@ -220,6 +220,12 @@ | ||
| 220 | "event": "form_report_register", | 220 | "event": "form_report_register", |
| 221 | "icon": "uk-icon-table" | 221 | "icon": "uk-icon-table" |
| 222 | } | 222 | } |
| 223 | + , | ||
| 224 | + { | ||
| 225 | + "id": 5.3, | ||
| 226 | + "text": "站牌公告", | ||
| 227 | + "event": "station_notice" | ||
| 228 | + } | ||
| 223 | ] | 229 | ] |
| 224 | } | 230 | } |
| 225 | ] | 231 | ] |
| 226 | \ No newline at end of file | 232 | \ No newline at end of file |
src/main/resources/static/real_control_v2/js/line_schedule/sch_table.js
| @@ -28,6 +28,7 @@ var gb_schedule_table = (function () { | @@ -28,6 +28,7 @@ var gb_schedule_table = (function () { | ||
| 28 | }; | 28 | }; |
| 29 | 29 | ||
| 30 | var show = function (cb) { | 30 | var show = function (cb) { |
| 31 | + document.cookie = "checkedSch="; | ||
| 31 | //从服务器获取班次数据 | 32 | //从服务器获取班次数据 |
| 32 | $.get('/realSchedule/lines', { | 33 | $.get('/realSchedule/lines', { |
| 33 | lines: gb_data_basic.line_idx | 34 | lines: gb_data_basic.line_idx |
| @@ -499,6 +500,7 @@ var gb_schedule_table = (function () { | @@ -499,6 +500,7 @@ var gb_schedule_table = (function () { | ||
| 499 | nextSch, tempDL; | 500 | nextSch, tempDL; |
| 500 | 501 | ||
| 501 | getDl(sch).addClass('intimity'); | 502 | getDl(sch).addClass('intimity'); |
| 503 | + document.cookie = "checkedSch="+sch.id; | ||
| 502 | $.each(schArr, function (i) { | 504 | $.each(schArr, function (i) { |
| 503 | tempDL = $('dl[data-id=' + this.id + ']', contWrap); | 505 | tempDL = $('dl[data-id=' + this.id + ']', contWrap); |
| 504 | tempDL.addClass('relevance-active'); | 506 | tempDL.addClass('relevance-active'); |
src/main/resources/static/real_control_v2/js/north/toolbar.js
| @@ -260,6 +260,9 @@ var gb_northToolbar = (function () { | @@ -260,6 +260,9 @@ var gb_northToolbar = (function () { | ||
| 260 | sch_edit_qjgz: function () { | 260 | sch_edit_qjgz: function () { |
| 261 | open_modal('/real_control_v2/zndd/qjgz/list.html', {}, modal_opts); | 261 | open_modal('/real_control_v2/zndd/qjgz/list.html', {}, modal_opts); |
| 262 | }, | 262 | }, |
| 263 | + station_notice: function () { | ||
| 264 | + open_modal('/real_control_v2/fragments/north/nav/station_notice/manage.html', {}, modal_opts); | ||
| 265 | + }, | ||
| 263 | }; | 266 | }; |
| 264 | 267 | ||
| 265 | return { | 268 | return { |
src/main/resources/static/real_control_v2/js/stationcf/klyj.js
| @@ -2,18 +2,29 @@ | @@ -2,18 +2,29 @@ | ||
| 2 | * 站点催发 | 2 | * 站点催发 |
| 3 | */ | 3 | */ |
| 4 | var gb_klyj = (function () { | 4 | var gb_klyj = (function () { |
| 5 | - var $wrap = $('.multi_plat_msg_pop_cf'); | ||
| 6 | - var max = 5; | 5 | + var $wrap = $('.multi_plat_msg_pop_zndd'); |
| 6 | + var max = 3; | ||
| 7 | var dataMap = new Map(); | 7 | var dataMap = new Map(); |
| 8 | var popcf = function (data) { | 8 | var popcf = function (data) { |
| 9 | dataMap.set(data.uuid,data); | 9 | dataMap.set(data.uuid,data); |
| 10 | + gb_dataZndd.setDataMap(data.uuid,data); | ||
| 10 | //时间格式化 | 11 | //时间格式化 |
| 11 | var stm = moment(data.instructionsTime); | 12 | var stm = moment(data.instructionsTime); |
| 12 | data.timeStr = stm.format('HH时mm分ss秒'); | 13 | data.timeStr = stm.format('HH时mm分ss秒'); |
| 13 | var htmlStr = template('klyj_plat_msg_template', data); | 14 | var htmlStr = template('klyj_plat_msg_template', data); |
| 14 | - var items = $wrap.find('.multi_plat_msg_pops'), len = items.length; | ||
| 15 | - if (len >= max) | ||
| 16 | - $wrap.find('.multi_plat_msg_pops:lt(' + (len - max) + ')').remove(); | 15 | + var items = $wrap.find('.multi_plat_config'), len = items.length; |
| 16 | + if (len >= max){ | ||
| 17 | + $wrap.find('.multi_plat_config:lt(' + (len - max) + ')').remove(); | ||
| 18 | + } | ||
| 19 | + | ||
| 20 | + | ||
| 21 | + var $modal = $('#schedule-addsch-modal'); | ||
| 22 | + if (!$modal.hasClass('uk-open')) { | ||
| 23 | + if (!gb_dataZndd.interval){ | ||
| 24 | + gb_dataZndd.interval = gb_dataZndd.snt(data.ids); | ||
| 25 | + } | ||
| 26 | + gb_dataZndd.setTimelist(data.uuid) //自动调度定时器 | ||
| 27 | + } | ||
| 17 | $wrap.append(htmlStr); | 28 | $wrap.append(htmlStr); |
| 18 | }; | 29 | }; |
| 19 | 30 | ||
| @@ -24,14 +35,33 @@ var gb_klyj = (function () { | @@ -24,14 +35,33 @@ var gb_klyj = (function () { | ||
| 24 | open_modal("/real_control_v2/zndd/type/dkl.html", { | 35 | open_modal("/real_control_v2/zndd/type/dkl.html", { |
| 25 | data: data | 36 | data: data |
| 26 | }, {center: true, bgclose: false, modal: true}); | 37 | }, {center: true, bgclose: false, modal: true}); |
| 38 | + $(this).parent().remove(); | ||
| 27 | }); | 39 | }); |
| 28 | 40 | ||
| 29 | var close = true; //关闭弹出框的时候不弹出 | 41 | var close = true; //关闭弹出框的时候不弹出 |
| 30 | - $wrap.on('click', '.multi_plat_msg_pops .msg-times', function () { | 42 | + $wrap.on('click', '.multi_plat_config .msg-times', function () { |
| 31 | $(this).parent().parent().remove(); | 43 | $(this).parent().parent().remove(); |
| 32 | /*if (close) close = false*/ | 44 | /*if (close) close = false*/ |
| 33 | }); | 45 | }); |
| 34 | 46 | ||
| 47 | + $wrap.on('click', '.images', function () { | ||
| 48 | + var image = $(this).data('image'); | ||
| 49 | + var imgHtml = "<img src='" + image + "' style='width: " + 600 + "px;height:" + 300 + "px'/>"; | ||
| 50 | + layer.open({ | ||
| 51 | + type: 1, | ||
| 52 | + offset: 'auto', | ||
| 53 | + area: [600 + 'px', 300 + 'px'], | ||
| 54 | + shadeClose: true,//点击外围关闭弹窗 | ||
| 55 | + scrollbar: true,//不现实滚动条 | ||
| 56 | + title: false, //不显示标题 | ||
| 57 | + content: imgHtml, //捕获的元素,注意:最好该指定的元素要存放在body最外层,否则可能被其它的相对元素所影响 | ||
| 58 | + cancel: function () { | ||
| 59 | + | ||
| 60 | + } | ||
| 61 | + }) | ||
| 62 | + | ||
| 63 | + }); | ||
| 64 | + | ||
| 35 | return { | 65 | return { |
| 36 | popcf: popcf | 66 | popcf: popcf |
| 37 | } | 67 | } |
src/main/resources/static/real_control_v2/js/stationcf/stationcf.js
| @@ -2,8 +2,8 @@ | @@ -2,8 +2,8 @@ | ||
| 2 | * 站点催发 | 2 | * 站点催发 |
| 3 | */ | 3 | */ |
| 4 | var gb_stationcf = (function () { | 4 | var gb_stationcf = (function () { |
| 5 | - var $wrap = $('.multi_plat_msg_pop_cf'); | ||
| 6 | - var max = 5; | 5 | + var $wrap = $('.multi_plat_msg_pop_zndd'); |
| 6 | + var max = 3; | ||
| 7 | 7 | ||
| 8 | var popcf = function (data) { | 8 | var popcf = function (data) { |
| 9 | //时间格式化 | 9 | //时间格式化 |
| @@ -16,9 +16,9 @@ var gb_stationcf = (function () { | @@ -16,9 +16,9 @@ var gb_stationcf = (function () { | ||
| 16 | /* gb_svg_chart.people(data.lineCode,stopNo,data.num,data.image);*/ | 16 | /* gb_svg_chart.people(data.lineCode,stopNo,data.num,data.image);*/ |
| 17 | 17 | ||
| 18 | var htmlStr = template('cf_plat_msg_template', data); | 18 | var htmlStr = template('cf_plat_msg_template', data); |
| 19 | - var items = $wrap.find('.multi_plat_msg_pops'), len = items.length; | 19 | + var items = $wrap.find('.multi_plat_config'), len = items.length; |
| 20 | if (len >= max) | 20 | if (len >= max) |
| 21 | - $wrap.find('.multi_plat_msg_pops:lt(' + (len - max) + ')').remove(); | 21 | + $wrap.find('.multi_plat_config:lt(' + (len - max) + ')').remove(); |
| 22 | 22 | ||
| 23 | $wrap.append(htmlStr); | 23 | $wrap.append(htmlStr); |
| 24 | }; | 24 | }; |
| @@ -26,7 +26,8 @@ var gb_stationcf = (function () { | @@ -26,7 +26,8 @@ var gb_stationcf = (function () { | ||
| 26 | 26 | ||
| 27 | $wrap.on('click', '.all', function () { | 27 | $wrap.on('click', '.all', function () { |
| 28 | var type = $(this).data('ip'); | 28 | var type = $(this).data('ip'); |
| 29 | - let pageUrl ="/real_control_v2/call/index.html"; | 29 | + var calleeId = $(this).data('call') |
| 30 | + let pageUrl ="/real_control_v2/call/index.html?calleeId="+calleeId; | ||
| 30 | //将片段路径写入 localStorage | 31 | //将片段路径写入 localStorage |
| 31 | window.localStorage.setItem('real_control_form_embed_pageUrl', pageUrl); | 32 | window.localStorage.setItem('real_control_form_embed_pageUrl', pageUrl); |
| 32 | var index = layer.open({ | 33 | var index = layer.open({ |
| @@ -47,11 +48,11 @@ var gb_stationcf = (function () { | @@ -47,11 +48,11 @@ var gb_stationcf = (function () { | ||
| 47 | //layer.full(index);//全屏 | 48 | //layer.full(index);//全屏 |
| 48 | }); | 49 | }); |
| 49 | 50 | ||
| 50 | - /* var close = true; //关闭弹出框的时候不弹出 | ||
| 51 | - $wrap.on('click', '.multi_plat_msg_pops .msg-times', function () { | 51 | + var close = true; //关闭弹出框的时候不弹出 |
| 52 | + $wrap.on('click', '.multi_plat_config .msg-times', function () { | ||
| 52 | $(this).parent().parent().remove(); | 53 | $(this).parent().parent().remove(); |
| 53 | - /!*if (close) close = false*!/ | ||
| 54 | - });*/ | 54 | + /*if (close) close = false*/ |
| 55 | + }); | ||
| 55 | $wrap.on('click', '.images', function () { | 56 | $wrap.on('click', '.images', function () { |
| 56 | debugger | 57 | debugger |
| 57 | var image = $(this).data('image'); | 58 | var image = $(this).data('image'); |
src/main/resources/static/real_control_v2/js/zndd/data_zndd.js
| 1 | var gb_dataZndd = (function (){ | 1 | var gb_dataZndd = (function (){ |
| 2 | 2 | ||
| 3 | - var max = 1; | 3 | + var max = 3; |
| 4 | var $pop =$('.multi_plat_msg_pop_zndd'); | 4 | var $pop =$('.multi_plat_msg_pop_zndd'); |
| 5 | 5 | ||
| 6 | var codes = { | 6 | var codes = { |
| @@ -309,6 +309,7 @@ var gb_dataZndd = (function (){ | @@ -309,6 +309,7 @@ var gb_dataZndd = (function (){ | ||
| 309 | function TimeChick(ele){ | 309 | function TimeChick(ele){ |
| 310 | 310 | ||
| 311 | var thisall= $("#"+ele).parent(); | 311 | var thisall= $("#"+ele).parent(); |
| 312 | + var data=dataMap.get(ele); | ||
| 312 | var sch = dataMap.get(thisall.data('uuid')); | 313 | var sch = dataMap.get(thisall.data('uuid')); |
| 313 | if (thisall.length == 0) return; | 314 | if (thisall.length == 0) return; |
| 314 | var date = returnDate(thisall); | 315 | var date = returnDate(thisall); |
| @@ -354,6 +355,12 @@ var gb_dataZndd = (function (){ | @@ -354,6 +355,12 @@ var gb_dataZndd = (function (){ | ||
| 354 | UIkit.modal(modal).hide(); | 355 | UIkit.modal(modal).hide(); |
| 355 | } | 356 | } |
| 356 | });*/ | 357 | });*/ |
| 358 | + } else if (type == "KLYJ"){ | ||
| 359 | + if(!$('#schedule-addsch-modal').hasClass('uk-open')){ | ||
| 360 | + open_modal("/real_control_v2/zndd/type/dkl.html", { | ||
| 361 | + data: data | ||
| 362 | + }, {center: true, bgclose: false, modal: true}); | ||
| 363 | + } | ||
| 357 | } | 364 | } |
| 358 | } | 365 | } |
| 359 | function checkTime(i){ //将0-9的数字前面加上0,例1变为01 | 366 | function checkTime(i){ //将0-9的数字前面加上0,例1变为01 |
| @@ -366,8 +373,28 @@ var gb_dataZndd = (function (){ | @@ -366,8 +373,28 @@ var gb_dataZndd = (function (){ | ||
| 366 | 373 | ||
| 367 | } | 374 | } |
| 368 | 375 | ||
| 376 | + function setDataMap(uuid,data){ | ||
| 377 | + dataMap.set(uuid,data); | ||
| 378 | + } | ||
| 379 | + function setTimelist(uuid){ | ||
| 380 | + timelist.push({ele:uuid,time:leftTime}); | ||
| 381 | + } | ||
| 382 | + function removeTimelist(uuid){ | ||
| 383 | + for(var i = 0;i < timelist.length; i++) { | ||
| 384 | + if (timelist[i].ele == uuid){ | ||
| 385 | + console.log("delete"); | ||
| 386 | + timelist.splice(i--, 1); | ||
| 387 | + } | ||
| 388 | + }; | ||
| 389 | + } | ||
| 369 | return { | 390 | return { |
| 370 | sop : sop, | 391 | sop : sop, |
| 392 | + snt : snt, | ||
| 393 | + setTimelist:setTimelist, | ||
| 394 | + interval:interval, | ||
| 395 | + leftTime:leftTime, | ||
| 396 | + setDataMap:setDataMap, | ||
| 397 | + removeTimelist:removeTimelist | ||
| 371 | }; | 398 | }; |
| 372 | 399 | ||
| 373 | })(); | 400 | })(); |
| 374 | \ No newline at end of file | 401 | \ No newline at end of file |
src/main/resources/static/real_control_v2/js/zndd/recorder/recorder.js
| @@ -8,7 +8,7 @@ | @@ -8,7 +8,7 @@ | ||
| 8 | const zzdclone="已关闭无人调度"; | 8 | const zzdclone="已关闭无人调度"; |
| 9 | const error="'未匹配到对应操作,请重新下达指令!"; | 9 | const error="'未匹配到对应操作,请重新下达指令!"; |
| 10 | const nosche="当天没有排班"; | 10 | const nosche="当天没有排班"; |
| 11 | - | 11 | + |
| 12 | 12 | ||
| 13 | var HZRecorder = function (stream, config) { | 13 | var HZRecorder = function (stream, config) { |
| 14 | config = config || {}; | 14 | config = config || {}; |
| @@ -183,48 +183,178 @@ | @@ -183,48 +183,178 @@ | ||
| 183 | 183 | ||
| 184 | xhr.onreadystatechange = function() { | 184 | xhr.onreadystatechange = function() { |
| 185 | if (xhr.readyState == 3 && xhr.status == 200) { | 185 | if (xhr.readyState == 3 && xhr.status == 200) { |
| 186 | - var responseText = xhr.responseText.split(","); | ||
| 187 | - //notify_succ("您说的是:"+responseText[0]); | ||
| 188 | - | ||
| 189 | - console.log(responseText); // 这里会输出 "Hello, World!" | ||
| 190 | - | ||
| 191 | - debugger | ||
| 192 | let lineCode = gb_schedule_table.TablelineCode; | 186 | let lineCode = gb_schedule_table.TablelineCode; |
| 193 | - //打开临加班次 | ||
| 194 | - var folder = '/real_control_v2/fragments/line_schedule/context_menu'; | ||
| 195 | - var modal_opts = { | ||
| 196 | - center: false, | ||
| 197 | - bgclose: false | ||
| 198 | - }; | ||
| 199 | - /*var sch ={ | ||
| 200 | - xlBm : lineCode, | ||
| 201 | - qdzCode : responseText[1], | ||
| 202 | - zdzCode : responseText[2], | ||
| 203 | - dir : responseText[3], | ||
| 204 | - yuyin:111, | ||
| 205 | - };*/ | ||
| 206 | - let date = { | ||
| 207 | - lineCode :lineCode, | ||
| 208 | - dir:responseText[3], | 187 | + const schId = getCookie('checkedSch'); |
| 188 | + var responseText = xhr.responseText.split(","); | ||
| 189 | + if(responseText[1]=="1"){ | ||
| 190 | + //notify_succ("您说的是:"+responseText[0]); | ||
| 191 | + //console.log(responseText); // 这里会输出 "Hello, World!" | ||
| 192 | + //打开临加班次 | ||
| 193 | + var folder = '/real_control_v2/fragments/line_schedule/context_menu'; | ||
| 194 | + var modal_opts = { | ||
| 195 | + center: false, | ||
| 196 | + bgclose: false | ||
| 197 | + }; | ||
| 198 | + let date = { | ||
| 199 | + lineCode :lineCode, | ||
| 200 | + dir:responseText[4], | ||
| 201 | + } | ||
| 202 | + $.post('/logZndd/schlist',date,function(sch) { | ||
| 203 | + debugger | ||
| 204 | + sch.qdzCode = responseText[2]; | ||
| 205 | + sch.zdzCode = responseText[3]; | ||
| 206 | + sch.xlDir = responseText[4]; | ||
| 207 | + sch.zdsjActual = moment(new Date()).format("HH:mm") | ||
| 208 | + open_modal(folder + '/temp_sch/main.html', { | ||
| 209 | + sch: sch | ||
| 210 | + }, modal_opts); | ||
| 211 | + }); | ||
| 212 | + } | ||
| 213 | + else if(responseText[1]=="2"){//新增出场班次 | ||
| 214 | + if(schId==''){ | ||
| 215 | + notify_err("请选择班次"); | ||
| 216 | + return; | ||
| 217 | + } | ||
| 218 | + var sch = gb_schedule_table.findScheduleByLine(lineCode)[schId]; | ||
| 219 | + sch = Object.assign({}, sch); | ||
| 220 | + var confirmBtn = $(this).parent().find('.uk-button-primary'); | ||
| 221 | + var fun =gb_schedule_context_menu.add_temp_sch; | ||
| 222 | + sch.bcType='out'; | ||
| 223 | + sch.qdzCode=getCarPark(sch)[0].code; | ||
| 224 | + sch.qdzName=getCarPark(sch)[0].name; | ||
| 225 | + fun(sch, function () { | ||
| 226 | + confirmBtn.trigger('click'); | ||
| 227 | + }); | ||
| 228 | + return; | ||
| 229 | + } | ||
| 230 | + else if(responseText[1]=="3"){//新增班次 | ||
| 231 | + if(schId==''){ | ||
| 232 | + notify_err("请选择班次"); | ||
| 233 | + return; | ||
| 234 | + } | ||
| 235 | + var sch = gb_schedule_table.findScheduleByLine(lineCode)[schId]; | ||
| 236 | + var confirmBtn = $(this).parent().find('.uk-button-primary'); | ||
| 237 | + var fun =gb_schedule_context_menu.add_temp_sch; | ||
| 238 | + fun(sch, function () { | ||
| 239 | + confirmBtn.trigger('click'); | ||
| 240 | + }); | ||
| 241 | + return; | ||
| 242 | + } | ||
| 243 | + if(responseText[1]=="11"){//取消班次 | ||
| 244 | + if(schId==''){ | ||
| 245 | + notify_err("请选择班次"); | ||
| 246 | + return; | ||
| 247 | + } | ||
| 248 | + var sch = gb_schedule_table.findScheduleByLine(lineCode)[schId]; | ||
| 249 | + var confirmBtn = $(this).parent().find('.uk-button-primary'); | ||
| 250 | + var fun =gb_schedule_context_menu.jhlb; | ||
| 251 | + fun(sch, function () { | ||
| 252 | + confirmBtn.trigger('click'); | ||
| 253 | + }); | ||
| 254 | + return; | ||
| 255 | + } | ||
| 256 | + else if(responseText[1]=="12"){//取消实发 | ||
| 257 | + if(schId==''){ | ||
| 258 | + notify_err("请选择班次"); | ||
| 259 | + return; | ||
| 260 | + } | ||
| 261 | + var sch = gb_schedule_table.findScheduleByLine(lineCode)[schId]; | ||
| 262 | + var confirmBtn = $(this).parent().find('.uk-button-primary'); | ||
| 263 | + var fun =gb_schedule_context_menu.cxsf; | ||
| 264 | + fun(sch, function () { | ||
| 265 | + confirmBtn.trigger('click'); | ||
| 266 | + }); | ||
| 267 | + return; | ||
| 268 | + } | ||
| 269 | + else if(responseText[1]=="21"){//调整待发 | ||
| 270 | + if(schId==''){ | ||
| 271 | + notify_err("请选择班次"); | ||
| 272 | + return; | ||
| 273 | + } | ||
| 274 | + var sch = gb_schedule_table.findScheduleByLine(lineCode)[schId]; | ||
| 275 | + var confirmBtn = $(this).parent().find('.uk-button-primary'); | ||
| 276 | + var fun =gb_schedule_context_menu.dftz; | ||
| 277 | + fun(sch, function () { | ||
| 278 | + confirmBtn.trigger('click'); | ||
| 279 | + }); | ||
| 280 | + return; | ||
| 281 | + } | ||
| 282 | + else if(responseText[1]=="22"){//调整实发 | ||
| 283 | + if(schId==''){ | ||
| 284 | + notify_err("请选择班次"); | ||
| 285 | + return; | ||
| 286 | + } | ||
| 287 | + var sch = gb_schedule_table.findScheduleByLine(lineCode)[schId]; | ||
| 288 | + var confirmBtn = $(this).parent().find('.uk-button-primary'); | ||
| 289 | + var fun =gb_schedule_context_menu.sftz; | ||
| 290 | + fun(sch, function () { | ||
| 291 | + confirmBtn.trigger('click'); | ||
| 292 | + }); | ||
| 293 | + return; | ||
| 294 | + } | ||
| 295 | + else if(responseText[1]=="31"){ | ||
| 296 | + notify_succ("开启智能调度"); | ||
| 297 | + }else if(responseText[1]=="41"){ | ||
| 298 | + notify_succ("关闭智能调度"); | ||
| 299 | + }else if(responseText[1]=="999"){ | ||
| 300 | + console.log(responseText[0]); | ||
| 301 | + notify_err(error); | ||
| 209 | } | 302 | } |
| 210 | - $.post('/logZndd/schlist',date,function(sch) { | ||
| 211 | - debugger | ||
| 212 | - sch.qdzCode = responseText[1]; | ||
| 213 | - sch.zdzCode = responseText[2]; | ||
| 214 | - sch.xlDir = responseText[3]; | ||
| 215 | - sch.zdsjActual = moment(new Date()).format("HH:mm") | ||
| 216 | - | ||
| 217 | - open_modal(folder + '/temp_sch/main.html', { | ||
| 218 | - sch: sch | ||
| 219 | - }, modal_opts); | ||
| 220 | - }); | ||
| 221 | - | ||
| 222 | - | ||
| 223 | 303 | ||
| 224 | } | 304 | } |
| 225 | }; | 305 | }; |
| 226 | 306 | ||
| 307 | + function getCarPark(sch){ | ||
| 308 | + var st_park_data = gb_data_basic.get_stat_park_data()[sch.xlBm]; | ||
| 309 | + //停车场 | ||
| 310 | + var parks = gb_data_basic.simpleParksArray(); | ||
| 311 | + //线路标准 | ||
| 312 | + var information = gb_data_basic.getLineInformation(sch.xlBm); | ||
| 313 | + //停车场排序,常用的放前面 | ||
| 314 | + return sort_parks(parks, information, st_park_data); | ||
| 315 | + } | ||
| 316 | + /** | ||
| 317 | + * 停车场排序 | ||
| 318 | + * @param parks 停车场 code 2 name | ||
| 319 | + * @param information 线路标准 | ||
| 320 | + * @param st_park_data 站到场 | ||
| 321 | + */ | ||
| 322 | + function sort_parks(parks, information, st_park_data) { | ||
| 323 | + var array = [], names=[]; | ||
| 324 | + for(var code in parks){ | ||
| 325 | + array.push({code: code, name: parks[code]}); | ||
| 326 | + } | ||
| 327 | + | ||
| 328 | + if(st_park_data && st_park_data.length > 0){ | ||
| 329 | + $.each(st_park_data, function () { | ||
| 330 | + names.push(this.parkName); | ||
| 331 | + }); | ||
| 332 | + } | ||
| 227 | 333 | ||
| 334 | + //debugger | ||
| 335 | + array.sort(function (a, b) { | ||
| 336 | + if(a.code==information.carPark) | ||
| 337 | + return -1; | ||
| 338 | + if(b.code==information.carPark) | ||
| 339 | + return 1; | ||
| 340 | + | ||
| 341 | + var ai = names.indexOf(a.name), | ||
| 342 | + bi = names.indexOf(b.name); | ||
| 343 | + | ||
| 344 | + if(ai!=-1 && bi==-1) | ||
| 345 | + return -1; | ||
| 346 | + else if(ai==-1 && bi!=-1) | ||
| 347 | + return 1; | ||
| 348 | + else | ||
| 349 | + return $.trim(a.name).localeCompare($.trim(b.name), 'zh-CN'); | ||
| 350 | + }); | ||
| 351 | + return array; | ||
| 352 | + } | ||
| 353 | + const getCookie = (name) => { | ||
| 354 | + const value = `; ${document.cookie}`; | ||
| 355 | + const parts = value.split(`; ${name}=`); | ||
| 356 | + if (parts.length === 2) return parts.pop().split(';').shift(); | ||
| 357 | + } | ||
| 228 | /* ti = 0; | 358 | /* ti = 0; |
| 229 | timeInt =setInterval(function(){leftTimer(xhr);},1000); //开始倒计时*/ | 359 | timeInt =setInterval(function(){leftTimer(xhr);},1000); //开始倒计时*/ |
| 230 | } | 360 | } |
src/main/resources/static/real_control_v2/main.html
| @@ -236,7 +236,7 @@ | @@ -236,7 +236,7 @@ | ||
| 236 | <script src="/real_control_v2/js/forms/form_embed.js" merge="custom_js"></script> | 236 | <script src="/real_control_v2/js/forms/form_embed.js" merge="custom_js"></script> |
| 237 | <!-- 模态框扩展 --> | 237 | <!-- 模态框扩展 --> |
| 238 | <script src="/real_control_v2/js/modal_extend.js" merge="custom_js"></script> | 238 | <script src="/real_control_v2/js/modal_extend.js" merge="custom_js"></script> |
| 239 | - | 239 | +<script src="/real_control_v2/call/assets/js/index.js" merge="custom_js"></script> |
| 240 | <!-- #### 安全驾驶 start ### --> | 240 | <!-- #### 安全驾驶 start ### --> |
| 241 | <div class="multi_plat_msg_pop_wrap" ></div> | 241 | <div class="multi_plat_msg_pop_wrap" ></div> |
| 242 | <script id="sd_plat_msg_template" type="text/html"> | 242 | <script id="sd_plat_msg_template" type="text/html"> |
| @@ -260,18 +260,25 @@ | @@ -260,18 +260,25 @@ | ||
| 260 | </div> | 260 | </div> |
| 261 | </script> | 261 | </script> |
| 262 | <div class="multi_plat_msg_pop_cf" ></div> | 262 | <div class="multi_plat_msg_pop_cf" ></div> |
| 263 | -<script id="cf_plat_msg_template" type="text/html"> | ||
| 264 | - <div class="multi_plat_msg_pops uk-animation-slide-bottom" data-type="{{type}}" > | ||
| 265 | - <div> | ||
| 266 | - <div class="msg-times" style="cursor: pointer;" >x</div> | ||
| 267 | - <span class="reminder">催发</span> | ||
| 268 | - <span class="tests">{{lineName}}</span> | ||
| 269 | - <span class="tests">{{stationName}}——{{dir == 0 ? '上行':'下行'}}</span> | ||
| 270 | - <span class="tests">站点人数 {{num}}</span> | ||
| 271 | - <span class="time">催发时间:{{timeStr}}</span> | 263 | + |
| 264 | +<script id="cf_plat_msg_template" type="text/html"> | ||
| 265 | + <div class="multi_plat_config" data-type="{{type}}"> | ||
| 266 | + <div class="msg-popup warning-color"> | ||
| 267 | + <div class="msg-times" style="cursor: pointer;">×</div> | ||
| 268 | + <div class="centerSpace msg-title" style="color: red"> | ||
| 269 | + 催发 | ||
| 270 | + </div> | ||
| 271 | + <div class="popup-msg-content"> | ||
| 272 | + <span>{{lineName}} {{dir == 0 ? '上行':'下行'}} {{stationName}}</span> | ||
| 273 | + </div> | ||
| 274 | + <div class="popup-msg-content"> | ||
| 275 | + <span>站点人数 {{num}} 催发时间 {{timeStr}}</span> | ||
| 276 | + </div> | ||
| 277 | + <div class="popup-msg-contents" > | ||
| 278 | + <button class="uk-button uk-button-primary all" data-call="{{calleeId}}" data-ip="{{dir}}" value="{{dir}}">拨打站台电话</button> | ||
| 279 | + <button class="uk-button uk-button-primary images" data-image="{{image}}" value="{{dir}}">查看图片</button> | ||
| 280 | + </div> | ||
| 272 | </div> | 281 | </div> |
| 273 | - <button class="all uk-button uk-modal-close" class="title" data-ip="{{dir}}" value="{{dir}}">拨打站台电话</button> | ||
| 274 | - <button class="images uk-button uk-modal-close" data-image="{{image}}" value="{{dir}}">查看图片</button> | ||
| 275 | </div> | 282 | </div> |
| 276 | </script> | 283 | </script> |
| 277 | <!-- #### 智能调度 start ### --> | 284 | <!-- #### 智能调度 start ### --> |
| @@ -307,18 +314,27 @@ | @@ -307,18 +314,27 @@ | ||
| 307 | <div class="multi_plat_msg_pop_zndd"> | 314 | <div class="multi_plat_msg_pop_zndd"> |
| 308 | <!--<div id="timer"></div>--> | 315 | <!--<div id="timer"></div>--> |
| 309 | </div> | 316 | </div> |
| 310 | -<script id="klyj_plat_msg_template" type="text/html"> | ||
| 311 | - <div class="multi_plat_msg_pops uk-animation-slide-bottom " data-type="{{type}}" > | ||
| 312 | - <div> | ||
| 313 | - <div class="msg-times" style="cursor: pointer;" >x</div> | ||
| 314 | - <span class="reminder">大客流预警</span> | ||
| 315 | - <span class="tests">{{lineName}}</span> | ||
| 316 | - <span class="tests">{{stationName}}——{{dir == 0 ? '上行':'下行'}}</span> | ||
| 317 | - <span class="tests">站点人数 {{num}}</span> | ||
| 318 | - <span class="time">预警时间:{{timeStr}}</span> | 317 | + |
| 318 | +<div class="multi_plat_msg_pop_klyj" ></div> | ||
| 319 | +<script id="klyj_plat_msg_template" type="text/html"> | ||
| 320 | + <div class="multi_plat_config" data-type="{{type}}" data-uuid="{{uuid}}"> | ||
| 321 | + <div id ={{uuid}} class="timer"></div> | ||
| 322 | + <div class="msg-popup warning-color"> | ||
| 323 | + <div class="msg-times" style="cursor: pointer;">×</div> | ||
| 324 | + <div class="centerSpace msg-title" style="color: red"> | ||
| 325 | + 大客流预警 | ||
| 326 | + </div> | ||
| 327 | + <div class="popup-msg-content"> | ||
| 328 | + <span>{{lineName}} {{dir == 0 ? '上行':'下行'}} {{stationName}}</span> | ||
| 329 | + </div> | ||
| 330 | + <div class="popup-msg-content"> | ||
| 331 | + <span>站点人数 {{num}} 预警时间 {{timeStr}}</span> | ||
| 332 | + </div> | ||
| 333 | + <div class="popup-msg-contents" > | ||
| 334 | + <button class="uk-button uk-button-primary images" data-image="{{image}}" value="{{dir}}">查看图片</button> | ||
| 335 | + <button class="uk-button uk-button-primary ljbc" data-uuid="{{uuid}}" data-linecode="{{sch.xlBm}}" data-id="{{sch.id}}">临加班次</button> | ||
| 336 | + </div> | ||
| 319 | </div> | 337 | </div> |
| 320 | - <button class="images uk-button uk-modal-close" data-image="{{image}}" value="{{dir}}">查看图片</button> | ||
| 321 | - <button class="ljbc uk-button uk-modal-close" data-uuid="{{uuid}}" data-linecode="{{sch.xlBm}}" data-id="{{sch.id}}">临加班次</button> | ||
| 322 | </div> | 338 | </div> |
| 323 | </script> | 339 | </script> |
| 324 | 340 |
src/main/resources/static/real_control_v2/zndd/type/dkl.html
| @@ -118,6 +118,8 @@ | @@ -118,6 +118,8 @@ | ||
| 118 | 118 | ||
| 119 | $.post('/logZndd/thissch/'+sch.sch.id, function(res) { | 119 | $.post('/logZndd/thissch/'+sch.sch.id, function(res) { |
| 120 | //to and fro | 120 | //to and fro |
| 121 | + res.zdsjActual = moment(new Date().getTime() +(1000 * 60 *5)).format("HH:mm"); | ||
| 122 | + res.zdsj = moment(new Date().getTime() + (1000 * 60 * 5)).format("HH:mm"); | ||
| 121 | $('.toAndFroCont', modal).html(st_doms.two_way_dom) | 123 | $('.toAndFroCont', modal).html(st_doms.two_way_dom) |
| 122 | .trigger('init', {sch: res, submitFun: submit_temp_schedule_form, stationRoutes: stationRoutes}); | 124 | .trigger('init', {sch: res, submitFun: submit_temp_schedule_form, stationRoutes: stationRoutes}); |
| 123 | 125 | ||
| @@ -494,7 +496,6 @@ | @@ -494,7 +496,6 @@ | ||
| 494 | </div> | 496 | </div> |
| 495 | </div> | 497 | </div> |
| 496 | </div> | 498 | </div> |
| 497 | - | ||
| 498 | <div class="uk-grid"> | 499 | <div class="uk-grid"> |
| 499 | <div class="uk-width-2-2"> | 500 | <div class="uk-width-2-2"> |
| 500 | <div class="uk-form-row"> | 501 | <div class="uk-form-row"> |
| @@ -502,6 +503,13 @@ | @@ -502,6 +503,13 @@ | ||
| 502 | </div> | 503 | </div> |
| 503 | </div> | 504 | </div> |
| 504 | </div> | 505 | </div> |
| 506 | + <div class="uk-grid"> | ||
| 507 | + <div class="uk-width-4-2"> | ||
| 508 | + <div class="uk-form-row"> | ||
| 509 | + <label class="uk-form-labels" ><h3>{{msg}}</h3></label> | ||
| 510 | + </div> | ||
| 511 | + </div> | ||
| 512 | + </div> | ||
| 505 | </div> | 513 | </div> |
| 506 | </script> | 514 | </script> |
| 507 | 515 |