Commit 671ef14c2318c0e6fb63d2f9dee9a9b04c160c39

Authored by 王通
2 parents 3d7ead27 e2a60149

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 46 public static final String STATION_AND_SECTION_COUNT = "/station/updateStationAndSectionCode";
47 47  
48 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 11 import com.bsth.entity.zndd.StationSignsLogger;
12 12 import com.bsth.service.schedule.utils.Md5Util;
13 13 import com.bsth.util.HttpClientUtils;
  14 +import com.bsth.util.SignUtils;
14 15 import com.bsth.websocket.handler.SendUtils;
15 16 import com.fasterxml.jackson.databind.ObjectMapper;
16 17 import org.slf4j.Logger;
... ... @@ -20,12 +21,12 @@ import org.springframework.beans.factory.annotation.Value;
20 21 import org.springframework.web.bind.annotation.*;
21 22 import java.io.*;
22 23 import java.text.SimpleDateFormat;
  24 +import java.time.Duration;
23 25 import java.time.LocalTime;
24 26 import java.time.format.DateTimeFormatter;
25 27 import java.util.*;
26 28 import java.util.concurrent.ConcurrentHashMap;
27 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 57 @Autowired
57 58 carMonitor carMonitor;
58 59  
59   - private static final String PASSWORD="e126853c7f6f43b4857fa8dfe3b28b5d90be9e68";
60   -
61   -
62   -
63 60 //调度屏小程序接口。
64 61 @RequestMapping(value = "/OutCar", method = RequestMethod.POST)
65 62 public Map OutCarOutCar(@RequestParam Map m,@RequestBody StationSignsLogger ssLogger) {
66 63 Map rtn = new HashMap<>();
67 64 try {
68   - if(!validation(ssLogger.getTimestamp(),ssLogger.getSign())){
  65 + if(!SignUtils.validation(ssLogger.getTimestamp(),ssLogger.getSign())){
69 66 rtn.put("status", "验证失败");
70 67 return rtn;
71 68 }
... ... @@ -75,9 +72,12 @@ public class OutEntrance {
75 72 m.put("lineName",BasicData.lineCode2NameMap.get(ssLogger.getLineCode()));
76 73 m.put("num",ssLogger.getNum());
77 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 96 }else {
97 97 //筛选方向
98 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 119 rtn.put("status",ResponseCode.SUCCESS);
... ... @@ -121,12 +126,18 @@ public class OutEntrance {
121 126  
122 127  
123 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 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 136 String num=jsonObject.getString("num");
  137 + if(Integer.parseInt(num)<15){
  138 + rtn.put("status",ResponseCode.SUCCESS);
  139 + return rtn;
  140 + }
130 141 String image=jsonObject.getString("image");
131 142 String img=uploadBase64Img(image);
132 143 JSONArray jsonArray = jsonObject.getJSONArray("stations");
... ... @@ -136,16 +147,17 @@ public class OutEntrance {
136 147 JSONObject line=jsonArray.getJSONObject(i);
137 148 String lineCode = line.get("lineCode").toString();
138 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 152 Map m = new HashMap();
141 153 m.put("image", img);
142 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 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 161 List<ScheduleRealInfo> sl=new ArrayList<>();
150 162 for (ScheduleRealInfo scheduleRealInfo : srList) {//筛选出运营班次
151 163 if((scheduleRealInfo.getBcType().equals("normal")||scheduleRealInfo.getBcType().equals("region"))){
... ... @@ -159,11 +171,15 @@ public class OutEntrance {
159 171 }
160 172 });
161 173 ScheduleRealInfo schedule = null;
  174 + ScheduleRealInfo schedule2 = null;
162 175 for (int i1 = 0; i1 < sl.size(); i1++) {//最近的已发车班次
163 176 ScheduleRealInfo scheduleRealInfo=sl.get(i1);
164 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 183 break;
168 184 }
169 185 }
... ... @@ -172,13 +188,26 @@ public class OutEntrance {
172 188 m.put("sch",schedule);
173 189 m.put("uuid",AutomaticSch.UUID());
174 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 201 sendUtils.klyj(m);
176 202 }
177 203  
178 204 }
  205 + rtn.put("status",ResponseCode.SUCCESS);
179 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 262  
234 263 /**
235 264 * 保存base64图片
236   - * @param base64Str base64文件
237   - * @param 上传地址(示例:D:\\1.png)
  265 + * @param base base64文件
  266 + * @param (示例:D:\\1.png)
238 267 * @return
239 268 */
240 269 public String uploadBase64Img(String base) throws Exception {
... ... @@ -320,15 +349,5 @@ public class OutEntrance {
320 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 26 public List<Map> carMonitor(String lineCode,String directions,String station) {
27 27  
28 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 30 InputStream in = null;
31 31 OutputStream out = null;
32 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 121 //定义输出类型
122 122 response.setHeader("Content-type", "text/html;charset=UTF-8");
123 123 PrintWriter writer = response.getWriter();
124   - List<retun> list1 = new ArrayList<>();
125 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 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 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 204 } catch (Exception e) {
... ... @@ -232,30 +272,45 @@ public class UploadVideoServlet extends HttpServlet {
232 272 }
233 273  
234 274  
235   -
236 275 public static String getPinyin(String chinese) {
237 276 HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
238 277 format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
239 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 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 314 public static Double calculateSimilarity(String str1, String str2) {
260 315 String pinyinStr1 = getPinyin(str1);
261 316 String pinyinStr2 = getPinyin(str2);
... ... @@ -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 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 28  
29 29 private String sign;
30 30  
  31 + private String calleeId;
  32 +
31 33  
32 34  
33 35 public String getLineCode() {
... ... @@ -101,4 +103,12 @@ public class StationSignsLogger {
101 103 public void setSign(String sign) {
102 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 20 Constants.ASSETS_URL, Constants.FAVICON_URL, Constants.LOGIN, Constants.LOGIN_FAILURE,
21 21 Constants.UPSTREAM_URL, Constants.XD_CHILD_PAGES, Constants.XD_REAL_GPS, Constants.UP_RFID_URL,
22 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 25 @Override
26 26 public void destroy() {
... ...
src/main/java/com/bsth/security/WebSecurityConfig.java
... ... @@ -39,7 +39,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
39 39 // 白名单
40 40 web.ignoring().antMatchers(Constants.LOGIN_PAGE, Constants.LOGIN, Constants.ORIGINAL_LOGIN_PAGE, Constants.ASSETS_URL, Constants.FAVICON_URL, Constants.CAPTCHA,
41 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 45 @Override
... ...
src/main/java/com/bsth/security/filter/LoginInterceptor.java
... ... @@ -35,7 +35,7 @@ public class LoginInterceptor implements Filter {
35 35 private String[] whiteListURLs = { Constants.LOGIN_PAGE,Constants.CAPTCHA, Constants.ORIGINAL_LOGIN_PAGE, Constants.SERVICE_INTERFACE,
36 36 Constants.ASSETS_URL, Constants.FAVICON_URL, Constants.LOGIN,
37 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 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 88 <ul class="uk-list uk-list-large uk-list-divider">
89 89 <li><label><input class="uk-checkbox" type="checkbox" data-event="report_register"> 报备登记</label></li>
90 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 92 </ul>
92 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
1   -{
2   - "Logging": {
3   - "LogLevel": {
4   - "Default": "Information",
5   - "Microsoft.AspNetCore": "Warning"
6   - }
7   - }
8   -}
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/appsettings.json deleted 100644 → 0
1   -{
2   - "Logging": {
3   - "LogLevel": {
4   - "Default": "Information",
5   - "Microsoft.AspNetCore": "Warning"
6   - }
7   - },
8   - "AllowedHosts": "*"
9   -}
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 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 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 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
1   -{
2   - "Logging": {
3   - "LogLevel": {
4   - "Default": "Information",
5   - "Microsoft.AspNetCore": "Warning"
6   - }
7   - }
8   -}
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/bin/Debug/net8.0/appsettings.json deleted 100644 → 0
1   -{
2   - "Logging": {
3   - "LogLevel": {
4   - "Default": "Information",
5   - "Microsoft.AspNetCore": "Warning"
6   - }
7   - },
8   - "AllowedHosts": "*"
9   -}
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 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 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 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
1   -// <autogenerated />
2   -using System;
3   -using System.Reflection;
4   -[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.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 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
1   -{"documents":{"E:\\Code\\Blueprint\\*":"https://raw.githubusercontent.com/anan1213095357/Blueprint/b65316686ddc54c7cc975c98021932eb8cd587e0/*"}}
2 0 \ No newline at end of file
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 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 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 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 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
1   -<Project>
2   - <Import Project="Microsoft.AspNetCore.StaticWebAssets.props" />
3   -</Project>
4 0 \ No newline at end of file
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/staticwebassets/msbuild.buildMultiTargeting.Blueprint.Net.Server.props deleted 100644 → 0
1   -<Project>
2   - <Import Project="..\build\Blueprint.Net.Server.props" />
3   -</Project>
4 0 \ No newline at end of file
src/main/resources/static/pages/zndd_yuan/Blueprint.Net.Server/obj/Debug/net8.0/staticwebassets/msbuild.buildTransitive.Blueprint.Net.Server.props deleted 100644 → 0
1   -<Project>
2   - <Import Project="..\buildMultiTargeting\Blueprint.Net.Server.props" />
3   -</Project>
4 0 \ No newline at end of file
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 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 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   - &lt;!&ndash; 弹窗容器 &ndash;&gt;
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   - &lt;!&ndash; 搜索结果列表 &ndash;&gt;
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> &lt;!&ndash; 用于存放线条 &ndash;&gt;
125   - <g id="cardsContainer"></g> &lt;!&ndash; 用于存放卡片 &ndash;&gt;
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 133 } */
134 134  
135 135 .container-fluid {
136   - /* height: 52px; */
  136 + height: 52px;
  137 + width: 105px;
137 138 padding: 14px 0;
138 139 border-color: #40a3fc;
139 140 background: #40a3fc;
140   - /* border-radius: 26px; */
  141 + border-radius: 26px;
141 142 box-shadow: 0px 3px 3px 0px rgba(0, 0, 0, 0.17);
142 143 font-size: 1.2em;
143 144 display: flex;
144 145 justify-content: center;
145 146 align-items: center;
146   - margin: 0 10px;
147 147 color: #fff !important;
  148 + margin-top:400px;
148 149 }
149 150  
150 151 .login-form_ownid {
... ... @@ -429,7 +430,7 @@ p {
429 430 /* */
430 431 .invitation {
431 432 padding: 40px 15px;
432   - width: 420px;
  433 + width: 100%;
433 434 background-color: #169bd5;
434 435 }
435 436  
... ... @@ -442,7 +443,7 @@ p {
442 443 background: url(../images/call_bg.png) no-repeat;
443 444 background-position: center;
444 445 background-size: initial;
445   - border-radius: 20px;
  446 + /*border-radius: 20px;*/
446 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 1325 },
1326 1326 p2p: {
1327 1327 // 语音呼叫
1328   - makeVoiceCall: async function () {
  1328 + makeVoiceCall: async function (calleeId) {
1329 1329 // 关闭设置
1330 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 1336 if (Store.peerUserId) {
1336 1337 Store.repetitionClick = true;
1337 1338 Store.network = Object.assign(Store.network, {
... ... @@ -2783,9 +2784,10 @@ var OperationPackge = {
2783 2784 Utils.inputChangId("#userInputs > input");
2784 2785 // 语音呼叫
2785 2786 $("#p2pAudioMakeCall").click(function () {
  2787 + var calleeId=$(this).val();
2786 2788 if (navigator.onLine && Store.lineworkRTC && Store.lineworkRTM) {
2787 2789 if (!Store.repetitionClick) {
2788   - OperationPackge.p2p.makeVoiceCall();
  2790 + OperationPackge.p2p.makeVoiceCall(calleeId);
2789 2791 }
2790 2792 } else {
2791 2793 // 页面提示
... ...
src/main/resources/static/real_control_v2/call/index.html
... ... @@ -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 37 <div class="warning_box" id="warningBox"></div>
38 38 <!-- -->
... ... @@ -726,4 +726,11 @@
726 726 </div>
727 727 <script src="/real_control_v2/call/assets/js/index.js"></script>
728 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 736 </html>
... ...
src/main/resources/static/real_control_v2/css/main.css
... ... @@ -1006,6 +1006,72 @@ option.oil_station_opt {
1006 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 1075 /** 嵌入表单modal滚动条样式 */
1010 1076 #formFragmentModal::-webkit-scrollbar {
1011 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> &nbsp;保存</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> &nbsp;保存</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 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 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 + &nbsp;
  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 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?'&nbsp;<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 + <!--&lt;!&ndash; select2 下拉框 &ndash;&gt;-->
  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 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 + <!--&lt;!&ndash; select2 下拉框 &ndash;&gt;-->
  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 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> &nbsp;保存</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> &nbsp;保存</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 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 220 "event": "form_report_register",
221 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 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 28 };
29 29  
30 30 var show = function (cb) {
  31 + document.cookie = "checkedSch=";
31 32 //从服务器获取班次数据
32 33 $.get('/realSchedule/lines', {
33 34 lines: gb_data_basic.line_idx
... ... @@ -499,6 +500,7 @@ var gb_schedule_table = (function () {
499 500 nextSch, tempDL;
500 501  
501 502 getDl(sch).addClass('intimity');
  503 + document.cookie = "checkedSch="+sch.id;
502 504 $.each(schArr, function (i) {
503 505 tempDL = $('dl[data-id=' + this.id + ']', contWrap);
504 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 260 sch_edit_qjgz: function () {
261 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 268 return {
... ...
src/main/resources/static/real_control_v2/js/stationcf/klyj.js
... ... @@ -2,18 +2,29 @@
2 2 * 站点催发
3 3 */
4 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 7 var dataMap = new Map();
8 8 var popcf = function (data) {
9 9 dataMap.set(data.uuid,data);
  10 + gb_dataZndd.setDataMap(data.uuid,data);
10 11 //时间格式化
11 12 var stm = moment(data.instructionsTime);
12 13 data.timeStr = stm.format('HH时mm分ss秒');
13 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 28 $wrap.append(htmlStr);
18 29 };
19 30  
... ... @@ -24,14 +35,33 @@ var gb_klyj = (function () {
24 35 open_modal("/real_control_v2/zndd/type/dkl.html", {
25 36 data: data
26 37 }, {center: true, bgclose: false, modal: true});
  38 + $(this).parent().remove();
27 39 });
28 40  
29 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 43 $(this).parent().parent().remove();
32 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 65 return {
36 66 popcf: popcf
37 67 }
... ...
src/main/resources/static/real_control_v2/js/stationcf/stationcf.js
... ... @@ -2,8 +2,8 @@
2 2 * 站点催发
3 3 */
4 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 8 var popcf = function (data) {
9 9 //时间格式化
... ... @@ -16,9 +16,9 @@ var gb_stationcf = (function () {
16 16 /* gb_svg_chart.people(data.lineCode,stopNo,data.num,data.image);*/
17 17  
18 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 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 23 $wrap.append(htmlStr);
24 24 };
... ... @@ -26,7 +26,8 @@ var gb_stationcf = (function () {
26 26  
27 27 $wrap.on('click', '.all', function () {
28 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 31 //将片段路径写入 localStorage
31 32 window.localStorage.setItem('real_control_form_embed_pageUrl', pageUrl);
32 33 var index = layer.open({
... ... @@ -47,11 +48,11 @@ var gb_stationcf = (function () {
47 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 53 $(this).parent().parent().remove();
53   - /!*if (close) close = false*!/
54   - });*/
  54 + /*if (close) close = false*/
  55 + });
55 56 $wrap.on('click', '.images', function () {
56 57 debugger
57 58 var image = $(this).data('image');
... ...
src/main/resources/static/real_control_v2/js/zndd/data_zndd.js
1 1 var gb_dataZndd = (function (){
2 2  
3   - var max = 1;
  3 + var max = 3;
4 4 var $pop =$('.multi_plat_msg_pop_zndd');
5 5  
6 6 var codes = {
... ... @@ -309,6 +309,7 @@ var gb_dataZndd = (function (){
309 309 function TimeChick(ele){
310 310  
311 311 var thisall= $("#"+ele).parent();
  312 + var data=dataMap.get(ele);
312 313 var sch = dataMap.get(thisall.data('uuid'));
313 314 if (thisall.length == 0) return;
314 315 var date = returnDate(thisall);
... ... @@ -354,6 +355,12 @@ var gb_dataZndd = (function (){
354 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 366 function checkTime(i){ //将0-9的数字前面加上0,例1变为01
... ... @@ -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 390 return {
370 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 401 \ No newline at end of file
... ...
src/main/resources/static/real_control_v2/js/zndd/recorder/recorder.js
... ... @@ -8,7 +8,7 @@
8 8 const zzdclone="已关闭无人调度";
9 9 const error="'未匹配到对应操作,请重新下达指令!";
10 10 const nosche="当天没有排班";
11   -
  11 +
12 12  
13 13 var HZRecorder = function (stream, config) {
14 14 config = config || {};
... ... @@ -183,48 +183,178 @@
183 183  
184 184 xhr.onreadystatechange = function() {
185 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 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 358 /* ti = 0;
229 359 timeInt =setInterval(function(){leftTimer(xhr);},1000); //开始倒计时*/
230 360 }
... ...
src/main/resources/static/real_control_v2/main.html
... ... @@ -236,7 +236,7 @@
236 236 <script src="/real_control_v2/js/forms/form_embed.js" merge="custom_js"></script>
237 237 <!-- 模态框扩展 -->
238 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 240 <!-- #### 安全驾驶 start ### -->
241 241 <div class="multi_plat_msg_pop_wrap" ></div>
242 242 <script id="sd_plat_msg_template" type="text/html">
... ... @@ -260,18 +260,25 @@
260 260 </div>
261 261 </script>
262 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">站点人数&nbsp;&nbsp;&nbsp;{{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>站点人数&nbsp;{{num}} &nbsp;&nbsp;催发时间&nbsp;{{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 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 282 </div>
276 283 </script>
277 284 <!-- #### 智能调度 start ### -->
... ... @@ -307,18 +314,27 @@
307 314 <div class="multi_plat_msg_pop_zndd">
308 315 <!--<div id="timer"></div>-->
309 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">站点人数&nbsp;&nbsp;&nbsp;{{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>站点人数&nbsp;{{num}} &nbsp;&nbsp;预警时间&nbsp;{{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 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 338 </div>
323 339 </script>
324 340  
... ...
src/main/resources/static/real_control_v2/zndd/type/dkl.html
... ... @@ -118,6 +118,8 @@
118 118  
119 119 $.post('/logZndd/thissch/'+sch.sch.id, function(res) {
120 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 123 $('.toAndFroCont', modal).html(st_doms.two_way_dom)
122 124 .trigger('init', {sch: res, submitFun: submit_temp_schedule_form, stationRoutes: stationRoutes});
123 125  
... ... @@ -494,7 +496,6 @@
494 496 </div>
495 497 </div>
496 498 </div>
497   -
498 499 <div class="uk-grid">
499 500 <div class="uk-width-2-2">
500 501 <div class="uk-form-row">
... ... @@ -502,6 +503,13 @@
502 503 </div>
503 504 </div>
504 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 513 </div>
506 514 </script>
507 515  
... ...