Commit 676e47d53f1477799c7e6b5d47510f426105ee50
1 parent
40e09602
线调页面部分完善
Showing
20 changed files
with
1990 additions
and
190 deletions
src/main/java/com/bsth/controller/realcontrol/ChildTaskPlanController.java
0 → 100644
| 1 | +package com.bsth.controller.realcontrol; | ||
| 2 | + | ||
| 3 | +import org.springframework.web.bind.annotation.RequestMapping; | ||
| 4 | +import org.springframework.web.bind.annotation.RestController; | ||
| 5 | + | ||
| 6 | +import com.bsth.controller.BaseController; | ||
| 7 | +import com.bsth.entity.realcontrol.ChildTaskPlan; | ||
| 8 | + | ||
| 9 | +@RestController | ||
| 10 | +@RequestMapping("/childTask") | ||
| 11 | +public class ChildTaskPlanController extends BaseController<ChildTaskPlan, Long>{ | ||
| 12 | + | ||
| 13 | +} |
src/main/java/com/bsth/repository/realcontrol/ChildTaskPlanRepository.java
0 → 100644
| 1 | +package com.bsth.repository.realcontrol; | ||
| 2 | + | ||
| 3 | +import org.springframework.stereotype.Repository; | ||
| 4 | + | ||
| 5 | +import com.bsth.entity.realcontrol.ChildTaskPlan; | ||
| 6 | +import com.bsth.repository.BaseRepository; | ||
| 7 | + | ||
| 8 | +@Repository | ||
| 9 | +public interface ChildTaskPlanRepository extends BaseRepository<ChildTaskPlan, Long>{ | ||
| 10 | + | ||
| 11 | +} |
src/main/java/com/bsth/service/realcontrol/ChildTaskPlanService.java
0 → 100644
src/main/java/com/bsth/service/realcontrol/impl/ChildTaskPlanServiceImpl.java
0 → 100644
| 1 | +package com.bsth.service.realcontrol.impl; | ||
| 2 | + | ||
| 3 | +import org.springframework.stereotype.Service; | ||
| 4 | + | ||
| 5 | +import com.bsth.entity.realcontrol.ChildTaskPlan; | ||
| 6 | +import com.bsth.service.impl.BaseServiceImpl; | ||
| 7 | +import com.bsth.service.realcontrol.ChildTaskPlanService; | ||
| 8 | + | ||
| 9 | +@Service | ||
| 10 | +public class ChildTaskPlanServiceImpl extends BaseServiceImpl<ChildTaskPlan, Long> implements ChildTaskPlanService{ | ||
| 11 | + | ||
| 12 | +} |
src/main/java/com/bsth/util/db/BaseDao_MS.java
0 → 100644
| 1 | +package com.bsth.util.db; | ||
| 2 | + | ||
| 3 | + | ||
| 4 | +import org.apache.commons.lang3.CharUtils; | ||
| 5 | +import org.apache.commons.lang3.StringUtils; | ||
| 6 | +import org.slf4j.Logger; | ||
| 7 | +import org.slf4j.LoggerFactory; | ||
| 8 | + | ||
| 9 | + | ||
| 10 | +/** | ||
| 11 | + * | ||
| 12 | + * @ClassName: BaseDao | ||
| 13 | + * @author PanZhao | ||
| 14 | + * @param <T> | ||
| 15 | + * @date 2016年6月27日 上午10:33:12 | ||
| 16 | + * | ||
| 17 | + */ | ||
| 18 | +public class BaseDao_MS { | ||
| 19 | + | ||
| 20 | + static Logger logger = LoggerFactory.getLogger(BaseDao_MS.class); | ||
| 21 | + | ||
| 22 | + /** | ||
| 23 | + * | ||
| 24 | + * @Title: propertyToField | ||
| 25 | + * @Description: TODO(java转数据库字段名) | ||
| 26 | + * @param @param property | ||
| 27 | + * @throws | ||
| 28 | + */ | ||
| 29 | + public static String propertyToField(String property) { | ||
| 30 | + if (null == property) { | ||
| 31 | + return ""; | ||
| 32 | + } | ||
| 33 | + char[] chars = property.toCharArray(); | ||
| 34 | + StringBuffer sb = new StringBuffer(); | ||
| 35 | + for (char c : chars) { | ||
| 36 | + if (CharUtils.isAsciiAlphaUpper(c)) { | ||
| 37 | + sb.append("_" + StringUtils.lowerCase(CharUtils.toString(c))); | ||
| 38 | + } else { | ||
| 39 | + sb.append(c); | ||
| 40 | + } | ||
| 41 | + } | ||
| 42 | + return sb.toString(); | ||
| 43 | + } | ||
| 44 | +} |
src/main/java/com/bsth/util/db/DBUtils_MS.java
0 → 100644
| 1 | +package com.bsth.util.db; | ||
| 2 | + | ||
| 3 | +import java.io.FileNotFoundException; | ||
| 4 | +import java.io.IOException; | ||
| 5 | +import java.sql.Connection; | ||
| 6 | +import java.sql.ResultSet; | ||
| 7 | +import java.sql.SQLException; | ||
| 8 | +import java.sql.Statement; | ||
| 9 | +import java.util.HashMap; | ||
| 10 | +import java.util.Map; | ||
| 11 | +import java.util.Properties; | ||
| 12 | + | ||
| 13 | +import javax.sql.DataSource; | ||
| 14 | + | ||
| 15 | +import org.apache.log4j.Logger; | ||
| 16 | +import org.springframework.stereotype.Component; | ||
| 17 | + | ||
| 18 | +import com.mchange.v2.c3p0.DataSources; | ||
| 19 | + | ||
| 20 | +/** | ||
| 21 | + * 808GPS SQL Server数据库连接工具类 | ||
| 22 | + * @author PanZhao | ||
| 23 | + * | ||
| 24 | + */ | ||
| 25 | +@Component | ||
| 26 | +public class DBUtils_MS { | ||
| 27 | + | ||
| 28 | + private static String url = null; | ||
| 29 | + | ||
| 30 | + private static String username = null; | ||
| 31 | + | ||
| 32 | + private static String pwd = null; | ||
| 33 | + | ||
| 34 | + private static DataSource ds_pooled; | ||
| 35 | + | ||
| 36 | + static Logger logger = Logger.getLogger(DBUtils_MS.class); | ||
| 37 | + | ||
| 38 | + static { | ||
| 39 | + Properties env = new Properties(); | ||
| 40 | + | ||
| 41 | + try { | ||
| 42 | + env.load(DBUtils_MS.class.getClassLoader().getResourceAsStream("ms-jdbc.properties")); | ||
| 43 | + // 1. 加载驱动类 | ||
| 44 | + Class.forName(env.getProperty("ms.mysql.driver")); | ||
| 45 | + | ||
| 46 | + url = env.getProperty("ms.mysql.url"); | ||
| 47 | + username = env.getProperty("ms.mysql.username"); | ||
| 48 | + pwd = env.getProperty("ms.mysql.password"); | ||
| 49 | + | ||
| 50 | + // 设置连接数据库的配置信息 | ||
| 51 | + DataSource ds_unpooled = DataSources.unpooledDataSource(url, | ||
| 52 | + username, pwd); | ||
| 53 | + | ||
| 54 | + Map<String, Object> pool_conf = new HashMap<String, Object>(); | ||
| 55 | + // 设置最大连接数 | ||
| 56 | + pool_conf.put("maxPoolSize", 10); | ||
| 57 | + ds_pooled = DataSources.pooledDataSource(ds_unpooled, pool_conf); | ||
| 58 | + } catch (FileNotFoundException e) { | ||
| 59 | + logger.error(e.toString()); | ||
| 60 | + e.printStackTrace(); | ||
| 61 | + } catch (IOException e) { | ||
| 62 | + logger.error(e.toString()); | ||
| 63 | + e.printStackTrace(); | ||
| 64 | + } catch (ClassNotFoundException e) { | ||
| 65 | + logger.error(e.toString()); | ||
| 66 | + e.printStackTrace(); | ||
| 67 | + } catch (SQLException e) { | ||
| 68 | + logger.error(e.toString()); | ||
| 69 | + e.printStackTrace(); | ||
| 70 | + } | ||
| 71 | + } | ||
| 72 | + | ||
| 73 | + /** | ||
| 74 | + * 获取连接对象 | ||
| 75 | + */ | ||
| 76 | + public static Connection getConnection() throws SQLException { | ||
| 77 | + return ds_pooled.getConnection(); | ||
| 78 | + } | ||
| 79 | + | ||
| 80 | + /** | ||
| 81 | + * 释放连接池资源 | ||
| 82 | + */ | ||
| 83 | + public static void clearup() { | ||
| 84 | + if (ds_pooled != null) { | ||
| 85 | + try { | ||
| 86 | + DataSources.destroy(ds_pooled); | ||
| 87 | + } catch (SQLException e) { | ||
| 88 | + logger.error(e.toString()); | ||
| 89 | + e.printStackTrace(); | ||
| 90 | + } | ||
| 91 | + } | ||
| 92 | + } | ||
| 93 | + | ||
| 94 | + /** | ||
| 95 | + * 资源关闭 | ||
| 96 | + * | ||
| 97 | + * @param rs | ||
| 98 | + * @param stmt | ||
| 99 | + * @param conn | ||
| 100 | + */ | ||
| 101 | + public static void close(ResultSet rs, Statement stmt, Connection conn) { | ||
| 102 | + if (rs != null) { | ||
| 103 | + try { | ||
| 104 | + rs.close(); | ||
| 105 | + } catch (SQLException e) { | ||
| 106 | + logger.error(e.toString()); | ||
| 107 | + e.printStackTrace(); | ||
| 108 | + } | ||
| 109 | + } | ||
| 110 | + | ||
| 111 | + if (stmt != null) { | ||
| 112 | + try { | ||
| 113 | + stmt.close(); | ||
| 114 | + } catch (SQLException e) { | ||
| 115 | + logger.error(e.toString()); | ||
| 116 | + e.printStackTrace(); | ||
| 117 | + } | ||
| 118 | + } | ||
| 119 | + | ||
| 120 | + if (conn != null) { | ||
| 121 | + try { | ||
| 122 | + conn.close(); | ||
| 123 | + } catch (SQLException e) { | ||
| 124 | + logger.error(e.toString()); | ||
| 125 | + e.printStackTrace(); | ||
| 126 | + } | ||
| 127 | + } | ||
| 128 | + } | ||
| 129 | +} |
src/main/java/com/bsth/vehicle/gpsdata/GpsArrivalStationThread.java
0 → 100644
| 1 | +package com.bsth.vehicle.gpsdata; | ||
| 2 | + | ||
| 3 | +import java.sql.Connection; | ||
| 4 | +import java.sql.PreparedStatement; | ||
| 5 | +import java.sql.ResultSet; | ||
| 6 | +import java.text.ParseException; | ||
| 7 | +import java.text.SimpleDateFormat; | ||
| 8 | +import java.util.ArrayList; | ||
| 9 | +import java.util.Calendar; | ||
| 10 | +import java.util.Iterator; | ||
| 11 | +import java.util.LinkedList; | ||
| 12 | +import java.util.List; | ||
| 13 | +import java.util.Set; | ||
| 14 | + | ||
| 15 | +import org.slf4j.Logger; | ||
| 16 | +import org.slf4j.LoggerFactory; | ||
| 17 | +import org.springframework.stereotype.Component; | ||
| 18 | + | ||
| 19 | +import com.bsth.entity.realcontrol.ScheduleRealInfo; | ||
| 20 | +import com.bsth.service.realcontrol.buffer.ScheduleBuffer; | ||
| 21 | +import com.bsth.util.DateUtils; | ||
| 22 | +import com.bsth.util.db.DBUtils_MS; | ||
| 23 | +import com.bsth.vehicle.gpsdata.buffer.GpsArrivalDataBuffer; | ||
| 24 | +import com.bsth.vehicle.gpsdata.entity.ArrivalInfo; | ||
| 25 | + | ||
| 26 | +/** | ||
| 27 | + * | ||
| 28 | + * @ClassName: GpsArrivalStationThread | ||
| 29 | + * @Description: TODO(GPS到离站) | ||
| 30 | + * @author PanZhao | ||
| 31 | + * @date 2016年6月27日 上午10:58:13 | ||
| 32 | + * | ||
| 33 | + */ | ||
| 34 | +@Component | ||
| 35 | +public class GpsArrivalStationThread extends Thread{ | ||
| 36 | + | ||
| 37 | + Logger logger = LoggerFactory.getLogger(this.getClass()); | ||
| 38 | + SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); | ||
| 39 | + | ||
| 40 | + private static int diff = 1000 * 60 * 60; | ||
| 41 | + | ||
| 42 | + @Override | ||
| 43 | + public void run() { | ||
| 44 | + List<ArrivalInfo> list = null; | ||
| 45 | + try { | ||
| 46 | + list = loadData(); | ||
| 47 | + } catch (ParseException e) { | ||
| 48 | + e.printStackTrace(); | ||
| 49 | + } | ||
| 50 | + System.out.println("size: " + list.size()); | ||
| 51 | + GpsArrivalDataBuffer.putAll(list); | ||
| 52 | + //实际到离站和计划排班相匹配 | ||
| 53 | + | ||
| 54 | + Set<String> keySet = GpsArrivalDataBuffer.allMap.keySet(); | ||
| 55 | + System.out.println("开始..."); | ||
| 56 | + List<ScheduleRealInfo> schList; | ||
| 57 | + for(String key : keySet){ | ||
| 58 | + schList = ScheduleBuffer.vehLinkedMap.get(key); | ||
| 59 | + if(null != schList) | ||
| 60 | + match(GpsArrivalDataBuffer.allMap.get(key), schList); | ||
| 61 | + } | ||
| 62 | + System.out.println("结束..."); | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + | ||
| 66 | + /** | ||
| 67 | + * | ||
| 68 | + * @Title: match | ||
| 69 | + * @Description: TODO(实际和计划进行匹配) | ||
| 70 | + * @param @param arrList 实际GPS到离站链表 | ||
| 71 | + * @param @param schList 计划排班链表 | ||
| 72 | + * @throws | ||
| 73 | + */ | ||
| 74 | + public void match(List<ArrivalInfo> arrList, List<ScheduleRealInfo> schList){ | ||
| 75 | + Iterator<ScheduleRealInfo> schIterator = schList.iterator(); | ||
| 76 | + | ||
| 77 | + while(schIterator.hasNext()) | ||
| 78 | + match(schIterator.next(), arrList); | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | + | ||
| 82 | + public void match(ScheduleRealInfo scInfo, List<ArrivalInfo> arrList){ | ||
| 83 | + for(ArrivalInfo arr : arrList){ | ||
| 84 | + match(scInfo, arr); | ||
| 85 | + } | ||
| 86 | + } | ||
| 87 | + | ||
| 88 | + //单个匹配 | ||
| 89 | + public void match(ScheduleRealInfo scInfo, ArrivalInfo arr){ | ||
| 90 | + Long ts = arr.getTs(); | ||
| 91 | + //起点 | ||
| 92 | + if(scInfo.getFcsjActualTime() == null | ||
| 93 | + && scInfo.getQdzCode().equals(arr.getStopNo()) | ||
| 94 | + && Math.abs(scInfo.getFcsjT() - ts) < diff){ | ||
| 95 | + | ||
| 96 | + scInfo.setFcsjActualTime(ts); | ||
| 97 | + scInfo.setFcsjActual(sdf.format(ts)); | ||
| 98 | + System.out.println("成功匹配一个起点..."); | ||
| 99 | + } | ||
| 100 | + //终点 | ||
| 101 | + if(scInfo.getZdsjActualTime() == null | ||
| 102 | + && scInfo.getZdzCode().equals(arr.getStopNo()) | ||
| 103 | + && Math.abs(scInfo.getZdsjT() - ts) < diff){ | ||
| 104 | + | ||
| 105 | + scInfo.setZdsjActualTime(ts); | ||
| 106 | + scInfo.setZdsjActual(sdf.format(ts)); | ||
| 107 | + System.out.println("成功匹配一个终点..."); | ||
| 108 | + } | ||
| 109 | + } | ||
| 110 | + | ||
| 111 | + /** | ||
| 112 | + * @throws ParseException | ||
| 113 | + * | ||
| 114 | + * @Title: loadData | ||
| 115 | + * @Description: TODO(从数据库加载到离站信息) | ||
| 116 | + * @return List<ArrivalInfo> 返回类型 | ||
| 117 | + * @throws | ||
| 118 | + */ | ||
| 119 | + private List<ArrivalInfo> loadData() throws ParseException{ | ||
| 120 | + Calendar cal = Calendar.getInstance(); | ||
| 121 | + //周数,表分区字段 | ||
| 122 | + int weeks_year = cal.get(Calendar.WEEK_OF_YEAR); | ||
| 123 | + //按时间标记增量加载 | ||
| 124 | + if(null == GpsArrivalDataBuffer.markTime){ | ||
| 125 | + //第一次从当天0点开始 | ||
| 126 | + GpsArrivalDataBuffer.markTime = DateUtils.getTimesmorning() * 1000L; | ||
| 127 | + } | ||
| 128 | + | ||
| 129 | + String sql = "select * from bsth_c_arrival_info where weeks_year=? and create_date > ?"; | ||
| 130 | + | ||
| 131 | + List<ArrivalInfo> list = new ArrayList<>(); | ||
| 132 | + Connection conn = null; | ||
| 133 | + PreparedStatement ps = null; | ||
| 134 | + ResultSet rs = null; | ||
| 135 | + try { | ||
| 136 | + conn = DBUtils_MS.getConnection(); | ||
| 137 | + ps = conn.prepareStatement(sql); | ||
| 138 | + ps.setInt(1, weeks_year); | ||
| 139 | + ps.setLong(2, GpsArrivalDataBuffer.markTime); | ||
| 140 | + | ||
| 141 | + Long t = System.currentTimeMillis(); | ||
| 142 | + rs = ps.executeQuery(); | ||
| 143 | + | ||
| 144 | + while(rs.next()){ | ||
| 145 | + list.add(new ArrivalInfo(rs.getString("device_id"), rs.getLong("ts"), rs.getString("line_id") | ||
| 146 | + , rs.getInt("up_down"), rs.getString("stop_no"), rs.getInt("in_out"), rs.getDate("create_date"), rs.getInt("weeks_year"))); | ||
| 147 | + } | ||
| 148 | + | ||
| 149 | + //重新打时间标记 | ||
| 150 | + GpsArrivalDataBuffer.markTime = t; | ||
| 151 | + | ||
| 152 | + } catch (Exception e) { | ||
| 153 | + logger.error("", e); | ||
| 154 | + }finally { | ||
| 155 | + DBUtils_MS.close(rs, ps, conn); | ||
| 156 | + } | ||
| 157 | + return list; | ||
| 158 | + } | ||
| 159 | +} |
src/main/java/com/bsth/vehicle/gpsdata/buffer/GpsArrivalDataBuffer.java
0 → 100644
| 1 | +package com.bsth.vehicle.gpsdata.buffer; | ||
| 2 | + | ||
| 3 | +import java.util.Collections; | ||
| 4 | +import java.util.Comparator; | ||
| 5 | +import java.util.Date; | ||
| 6 | +import java.util.List; | ||
| 7 | + | ||
| 8 | +import com.bsth.vehicle.common.CommonMapped; | ||
| 9 | +import com.bsth.vehicle.gpsdata.entity.ArrivalInfo; | ||
| 10 | +import com.google.common.collect.LinkedListMultimap; | ||
| 11 | + | ||
| 12 | +/** | ||
| 13 | + * | ||
| 14 | + * @ClassName: GpsArrivalDataBuffer | ||
| 15 | + * @Description: TODO(GPS到离站数据缓存) | ||
| 16 | + * @author PanZhao | ||
| 17 | + * @date 2016年6月27日 下午1:08:35 | ||
| 18 | + * | ||
| 19 | + */ | ||
| 20 | +public class GpsArrivalDataBuffer { | ||
| 21 | + | ||
| 22 | + /** | ||
| 23 | + * 车辆 时间戳排序的进出站链表 | ||
| 24 | + */ | ||
| 25 | + public static LinkedListMultimap<String, ArrivalInfo> allMap; | ||
| 26 | + | ||
| 27 | + /** | ||
| 28 | + * 时间戳标记,从数据库增量查询时起始时间 | ||
| 29 | + */ | ||
| 30 | + public static Long markTime; | ||
| 31 | + | ||
| 32 | + | ||
| 33 | + static{ | ||
| 34 | + allMap = LinkedListMultimap.create(); | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + /** | ||
| 38 | + * | ||
| 39 | + * @Title: putAll | ||
| 40 | + * @Description: TODO(将增量数据添加到缓存) | ||
| 41 | + * @param @param list 设定文件 | ||
| 42 | + * @return void 返回类型 | ||
| 43 | + * @throws | ||
| 44 | + */ | ||
| 45 | + public static void putAll(List<ArrivalInfo> list){ | ||
| 46 | + //按时间戳排序 | ||
| 47 | + Collections.sort(list, new Comparator<ArrivalInfo>() { | ||
| 48 | + @Override | ||
| 49 | + public int compare(ArrivalInfo o1, ArrivalInfo o2) { | ||
| 50 | + return (int) (o1.getTs() - o2.getTs()); | ||
| 51 | + } | ||
| 52 | + }); | ||
| 53 | + | ||
| 54 | + int len = list.size(); | ||
| 55 | + ArrivalInfo arrival; | ||
| 56 | + String nbbm; | ||
| 57 | + for(int i = 0; i < len; i ++){ | ||
| 58 | + arrival = list.get(i); | ||
| 59 | + nbbm = CommonMapped.vehicDeviceBiMap.get(arrival.getDeviceId()); | ||
| 60 | + | ||
| 61 | + if(null != nbbm) | ||
| 62 | + allMap.put(nbbm, arrival); | ||
| 63 | + } | ||
| 64 | + } | ||
| 65 | +} |
src/main/java/com/bsth/vehicle/gpsdata/entity/ArrivalInfo.java
0 → 100644
| 1 | +package com.bsth.vehicle.gpsdata.entity; | ||
| 2 | + | ||
| 3 | +import java.text.ParseException; | ||
| 4 | +import java.text.SimpleDateFormat; | ||
| 5 | +import java.util.Date; | ||
| 6 | + | ||
| 7 | +import javax.persistence.Transient; | ||
| 8 | + | ||
| 9 | +/** | ||
| 10 | + * | ||
| 11 | + * @ClassName: ArrivalInfo | ||
| 12 | + * @Description: TODO(到离站信息) | ||
| 13 | + * @author PanZhao | ||
| 14 | + * @date 2016年6月27日 上午9:53:19 | ||
| 15 | + * | ||
| 16 | + */ | ||
| 17 | +public class ArrivalInfo { | ||
| 18 | + | ||
| 19 | + @Transient | ||
| 20 | + static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd") | ||
| 21 | + ,sdf2 = new SimpleDateFormat("HH:mm") | ||
| 22 | + ,sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm"); | ||
| 23 | + | ||
| 24 | + | ||
| 25 | + public ArrivalInfo(String deviceId, Long ts, String lineCode, Integer upDown, String stopNo, Integer inOut, | ||
| 26 | + Date createDate, Integer weeksYear) { | ||
| 27 | + this.deviceId = deviceId; | ||
| 28 | + | ||
| 29 | + //gps是2014年的数据,临时将ts拉到当天 | ||
| 30 | + try { | ||
| 31 | + this.ts = sdf3.parse(sdf.format(new Date()) +" " + sdf2.format(new Date(ts))).getTime(); | ||
| 32 | + } catch (ParseException e) { | ||
| 33 | + e.printStackTrace(); | ||
| 34 | + } | ||
| 35 | + //this.ts = ts; | ||
| 36 | + | ||
| 37 | + | ||
| 38 | + this.lineCode = lineCode; | ||
| 39 | + this.upDown = upDown; | ||
| 40 | + this.stopNo = stopNo; | ||
| 41 | + this.inOut = inOut; | ||
| 42 | + this.createDate = createDate; | ||
| 43 | + this.weeksYear = weeksYear; | ||
| 44 | + } | ||
| 45 | + | ||
| 46 | + /** | ||
| 47 | + * 设备号 | ||
| 48 | + */ | ||
| 49 | + private String deviceId; | ||
| 50 | + | ||
| 51 | + /** | ||
| 52 | + * 时间戳 | ||
| 53 | + */ | ||
| 54 | + private Long ts; | ||
| 55 | + | ||
| 56 | + /** | ||
| 57 | + * 线路编码 | ||
| 58 | + */ | ||
| 59 | + private String lineCode; | ||
| 60 | + | ||
| 61 | + /** | ||
| 62 | + * 上下行 | ||
| 63 | + */ | ||
| 64 | + private Integer upDown; | ||
| 65 | + | ||
| 66 | + /** | ||
| 67 | + * 站点 | ||
| 68 | + */ | ||
| 69 | + private String stopNo; | ||
| 70 | + | ||
| 71 | + /** | ||
| 72 | + * 0: 进 1:出 | ||
| 73 | + */ | ||
| 74 | + private Integer inOut; | ||
| 75 | + | ||
| 76 | + private Date createDate; | ||
| 77 | + | ||
| 78 | + /** | ||
| 79 | + * 分区字段,当年的第几周 | ||
| 80 | + */ | ||
| 81 | + private Integer weeksYear; | ||
| 82 | + | ||
| 83 | + public String getLineCode() { | ||
| 84 | + return lineCode; | ||
| 85 | + } | ||
| 86 | + | ||
| 87 | + public void setLineCode(String lineCode) { | ||
| 88 | + this.lineCode = lineCode; | ||
| 89 | + } | ||
| 90 | + | ||
| 91 | + public Integer getUpDown() { | ||
| 92 | + return upDown; | ||
| 93 | + } | ||
| 94 | + | ||
| 95 | + public void setUpDown(Integer upDown) { | ||
| 96 | + this.upDown = upDown; | ||
| 97 | + } | ||
| 98 | + | ||
| 99 | + public String getStopNo() { | ||
| 100 | + return stopNo; | ||
| 101 | + } | ||
| 102 | + | ||
| 103 | + public void setStopNo(String stopNo) { | ||
| 104 | + this.stopNo = stopNo; | ||
| 105 | + } | ||
| 106 | + | ||
| 107 | + public Integer getInOut() { | ||
| 108 | + return inOut; | ||
| 109 | + } | ||
| 110 | + | ||
| 111 | + public void setInOut(Integer inOut) { | ||
| 112 | + this.inOut = inOut; | ||
| 113 | + } | ||
| 114 | + | ||
| 115 | + public Date getCreateDate() { | ||
| 116 | + return createDate; | ||
| 117 | + } | ||
| 118 | + | ||
| 119 | + public void setCreateDate(Date createDate) { | ||
| 120 | + this.createDate = createDate; | ||
| 121 | + } | ||
| 122 | + | ||
| 123 | + public Integer getWeeksYear() { | ||
| 124 | + return weeksYear; | ||
| 125 | + } | ||
| 126 | + | ||
| 127 | + public void setWeeksYear(Integer weeksYear) { | ||
| 128 | + this.weeksYear = weeksYear; | ||
| 129 | + } | ||
| 130 | + | ||
| 131 | + public String getDeviceId() { | ||
| 132 | + return deviceId; | ||
| 133 | + } | ||
| 134 | + | ||
| 135 | + public void setDeviceId(String deviceId) { | ||
| 136 | + this.deviceId = deviceId; | ||
| 137 | + } | ||
| 138 | + | ||
| 139 | + public Long getTs() { | ||
| 140 | + return ts; | ||
| 141 | + } | ||
| 142 | + | ||
| 143 | + public void setTs(Long ts) { | ||
| 144 | + this.ts = ts; | ||
| 145 | + } | ||
| 146 | +} |
src/main/resources/ms-jdbc.properties
0 → 100644
src/main/resources/static/assets/js/common.js
src/main/resources/static/assets/js/dictionary.js
| @@ -16,8 +16,6 @@ var dictionaryUtils = (function(){ | @@ -16,8 +16,6 @@ var dictionaryUtils = (function(){ | ||
| 16 | dictionaryData[this.dGroup] = {}; | 16 | dictionaryData[this.dGroup] = {}; |
| 17 | dictionaryData[this.dGroup][this.dCode] = this.dName; | 17 | dictionaryData[this.dGroup][this.dCode] = this.dName; |
| 18 | }); | 18 | }); |
| 19 | - | ||
| 20 | - console.log(dictionaryData); | ||
| 21 | }); | 19 | }); |
| 22 | 20 | ||
| 23 | var dictObject = { | 21 | var dictObject = { |
| @@ -86,8 +84,12 @@ var dictionaryUtils = (function(){ | @@ -86,8 +84,12 @@ var dictionaryUtils = (function(){ | ||
| 86 | else | 84 | else |
| 87 | ops += '<option value="'+c+'">'+items[c]+'</option>'; | 85 | ops += '<option value="'+c+'">'+items[c]+'</option>'; |
| 88 | } | 86 | } |
| 89 | - $(e).removeClass('nt-dictionary'); | ||
| 90 | - $(e).replaceWith('<select class="'+$(e).attr('class')+'">'+ops+'</select>'); | 87 | + //如果没有默认选中值 |
| 88 | + if(!code) | ||
| 89 | + ops = '<option value="">请选择...</option>' + ops; | ||
| 90 | + | ||
| 91 | + var newE = $(e).clone().removeClass('nt-dictionary').html(ops); | ||
| 92 | + $(e).replaceWith(newE); | ||
| 91 | } | 93 | } |
| 92 | 94 | ||
| 93 | return dictObject; | 95 | return dictObject; |
src/main/resources/static/pages/control/line/child_pages/child_task.html
| @@ -64,14 +64,13 @@ | @@ -64,14 +64,13 @@ | ||
| 64 | <thead> | 64 | <thead> |
| 65 | <tr> | 65 | <tr> |
| 66 | <th width="6%">序号</th> | 66 | <th width="6%">序号</th> |
| 67 | - <th width="9%">开始时间</th> | ||
| 68 | - <th width="9%">结束时间</th> | ||
| 69 | - <th width="14%">起点</th> | ||
| 70 | - <th width="14%">终点</th> | ||
| 71 | - <th width="6%">里程</th> | ||
| 72 | - <th width="10%">车辆</th> | ||
| 73 | - <th width="9%">驾驶员</th> | ||
| 74 | - <th width="9%">售票员</th> | 67 | + <th width="11%">类型</th> |
| 68 | + <th width="16%">起点</th> | ||
| 69 | + <th width="16%">终点</th> | ||
| 70 | + <th width="10%">开始时间</th> | ||
| 71 | + <th width="10%">结束时间</th> | ||
| 72 | + <th width="7%">里程</th> | ||
| 73 | + <th width="11%">备注</th> | ||
| 75 | </tr> | 74 | </tr> |
| 76 | </thead> | 75 | </thead> |
| 77 | </table> | 76 | </table> |
| @@ -82,91 +81,73 @@ | @@ -82,91 +81,73 @@ | ||
| 82 | <tbody> | 81 | <tbody> |
| 83 | <tr> | 82 | <tr> |
| 84 | <td width="6%">1</td> | 83 | <td width="6%">1</td> |
| 85 | - <td width="9%"></td> | ||
| 86 | - <td width="9%"></td> | ||
| 87 | - <td width="14%"></td> | ||
| 88 | - <td width="14%"></td> | ||
| 89 | - <td width="6%"></td> | 84 | + <td width="11%"></td> |
| 85 | + <td width="16%"></td> | ||
| 86 | + <td width="16%"></td> | ||
| 90 | <td width="10%"></td> | 87 | <td width="10%"></td> |
| 91 | - <td width="9%"></td> | ||
| 92 | - <td width="9%"></td> | ||
| 93 | - </tr> | ||
| 94 | - <tr> | ||
| 95 | - <td>2</td> | ||
| 96 | - <td></td> | ||
| 97 | - <td></td> | ||
| 98 | - <td></td> | ||
| 99 | - <td></td> | ||
| 100 | - <td></td> | ||
| 101 | - <td></td> | ||
| 102 | - <td></td> | ||
| 103 | - <td></td> | 88 | + <td width="10%"></td> |
| 89 | + <td width="7%"></td> | ||
| 90 | + <td width="11%"></td> | ||
| 104 | </tr> | 91 | </tr> |
| 105 | <tr> | 92 | <tr> |
| 106 | - <td>3</td> | ||
| 107 | - <td></td> | ||
| 108 | - <td></td> | ||
| 109 | - <td></td> | ||
| 110 | - <td></td> | ||
| 111 | - <td></td> | ||
| 112 | - <td></td> | ||
| 113 | - <td></td> | ||
| 114 | - <td></td> | 93 | + <td width="6%">2</td> |
| 94 | + <td width="11%"></td> | ||
| 95 | + <td width="16%"></td> | ||
| 96 | + <td width="16%"></td> | ||
| 97 | + <td width="10%"></td> | ||
| 98 | + <td width="10%"></td> | ||
| 99 | + <td width="7%"></td> | ||
| 100 | + <td width="11%"></td> | ||
| 115 | </tr> | 101 | </tr> |
| 116 | <tr> | 102 | <tr> |
| 117 | - <td>4</td> | ||
| 118 | - <td></td> | ||
| 119 | - <td></td> | ||
| 120 | - <td></td> | ||
| 121 | - <td></td> | ||
| 122 | - <td></td> | ||
| 123 | - <td></td> | ||
| 124 | - <td></td> | ||
| 125 | - <td></td> | 103 | + <td width="6%">3</td> |
| 104 | + <td width="11%"></td> | ||
| 105 | + <td width="16%"></td> | ||
| 106 | + <td width="16%"></td> | ||
| 107 | + <td width="10%"></td> | ||
| 108 | + <td width="10%"></td> | ||
| 109 | + <td width="7%"></td> | ||
| 110 | + <td width="11%"></td> | ||
| 126 | </tr> | 111 | </tr> |
| 127 | <tr> | 112 | <tr> |
| 128 | - <td>5</td> | ||
| 129 | - <td></td> | ||
| 130 | - <td></td> | ||
| 131 | - <td></td> | ||
| 132 | - <td></td> | ||
| 133 | - <td></td> | ||
| 134 | - <td></td> | ||
| 135 | - <td></td> | ||
| 136 | - <td></td> | 113 | + <td width="6%">4</td> |
| 114 | + <td width="11%"></td> | ||
| 115 | + <td width="16%"></td> | ||
| 116 | + <td width="16%"></td> | ||
| 117 | + <td width="10%"></td> | ||
| 118 | + <td width="10%"></td> | ||
| 119 | + <td width="7%"></td> | ||
| 120 | + <td width="11%"></td> | ||
| 137 | </tr> | 121 | </tr> |
| 138 | <tr> | 122 | <tr> |
| 139 | - <td>6</td> | ||
| 140 | - <td></td> | ||
| 141 | - <td></td> | ||
| 142 | - <td></td> | ||
| 143 | - <td></td> | ||
| 144 | - <td></td> | ||
| 145 | - <td></td> | ||
| 146 | - <td></td> | ||
| 147 | - <td></td> | 123 | + <td width="6%">5</td> |
| 124 | + <td width="11%"></td> | ||
| 125 | + <td width="16%"></td> | ||
| 126 | + <td width="16%"></td> | ||
| 127 | + <td width="10%"></td> | ||
| 128 | + <td width="10%"></td> | ||
| 129 | + <td width="7%"></td> | ||
| 130 | + <td width="11%"></td> | ||
| 148 | </tr> | 131 | </tr> |
| 149 | <tr> | 132 | <tr> |
| 150 | - <td>7</td> | ||
| 151 | - <td></td> | ||
| 152 | - <td></td> | ||
| 153 | - <td></td> | ||
| 154 | - <td></td> | ||
| 155 | - <td></td> | ||
| 156 | - <td></td> | ||
| 157 | - <td></td> | ||
| 158 | - <td></td> | 133 | + <td width="6%">6</td> |
| 134 | + <td width="11%"></td> | ||
| 135 | + <td width="16%"></td> | ||
| 136 | + <td width="16%"></td> | ||
| 137 | + <td width="10%"></td> | ||
| 138 | + <td width="10%"></td> | ||
| 139 | + <td width="7%"></td> | ||
| 140 | + <td width="11%"></td> | ||
| 159 | </tr> | 141 | </tr> |
| 160 | <tr> | 142 | <tr> |
| 161 | - <td>8</td> | ||
| 162 | - <td></td> | ||
| 163 | - <td></td> | ||
| 164 | - <td></td> | ||
| 165 | - <td></td> | ||
| 166 | - <td></td> | ||
| 167 | - <td></td> | ||
| 168 | - <td></td> | ||
| 169 | - <td></td> | 143 | + <td width="6%">7</td> |
| 144 | + <td width="11%"></td> | ||
| 145 | + <td width="16%"></td> | ||
| 146 | + <td width="16%"></td> | ||
| 147 | + <td width="10%"></td> | ||
| 148 | + <td width="10%"></td> | ||
| 149 | + <td width="7%"></td> | ||
| 150 | + <td width="11%"></td> | ||
| 170 | </tr> | 151 | </tr> |
| 171 | </tbody> | 152 | </tbody> |
| 172 | </table> | 153 | </table> |
| @@ -223,96 +204,41 @@ | @@ -223,96 +204,41 @@ | ||
| 223 | </div> | 204 | </div> |
| 224 | </div> | 205 | </div> |
| 225 | </div> | 206 | </div> |
| 226 | - <!-- 子任务信息 --> | 207 | + <!-- 子任务信息 --> |
| 227 | <div class="custom-box" > | 208 | <div class="custom-box" > |
| 228 | - <div class="custom-box-body sub"> | ||
| 229 | - <div class="row"> | ||
| 230 | - <div class="col-md-4"> | ||
| 231 | - <span class="custom-label">序号: </span> | ||
| 232 | - <input class="form-control" disabled="disabled" value="1"> | ||
| 233 | - </div> | ||
| 234 | - <div class="col-md-4"> | ||
| 235 | - <span class="custom-label">开始时间: </span> | ||
| 236 | - <input class="form-control" value="" type="time" name=""> | ||
| 237 | - </div> | ||
| 238 | - <div class="col-md-4"> | ||
| 239 | - <span class="custom-label">结束时间:</span> | ||
| 240 | - <input class="form-control" value="" type="time"> | ||
| 241 | - </div> | 209 | + <div class="custom-box-body" style="border: none;"> |
| 210 | + <br> | ||
| 211 | + <div class="row childTaskBtns" style="text-align: center;margin: 0;"> | ||
| 212 | + <div class="custom-btn blue" data-method="inParkProcess"><i class="fa fa-reply-all"></i> 回场</div> | ||
| 213 | + <div class="custom-btn blue" data-method="outParkProcess"><i class="fa fa-share-square-o"></i> 出场</div> | ||
| 214 | + <div class="custom-btn red" data-method="tempAddProcess"><i class="fa fa-plus-square"></i> 自定义子任务</div> | ||
| 242 | </div> | 215 | </div> |
| 243 | - | ||
| 244 | - <div class="row"> | ||
| 245 | - <div class="col-md-4"> | ||
| 246 | - <span class="custom-label">任务类型: </span> | ||
| 247 | - <input class="form-control" disabled="disabled" > | ||
| 248 | - </div> | ||
| 249 | - <div class="col-md-4"> | ||
| 250 | - <span class="custom-label">起点: </span> | ||
| 251 | - <select class="form-control"></select> | ||
| 252 | - </div> | ||
| 253 | - <div class="col-md-4"> | ||
| 254 | - <span class="custom-label">终点:</span> | ||
| 255 | - <select class="form-control"></select> | ||
| 256 | - </div> | ||
| 257 | - </div> | ||
| 258 | - | ||
| 259 | - <div class="row"> | ||
| 260 | - <div class="col-md-4"> | ||
| 261 | - <span class="custom-label">里程类型: </span> | ||
| 262 | - <input class="form-control" disabled="disabled" value=""> | ||
| 263 | - </div> | ||
| 264 | - <div class="col-md-4"> | ||
| 265 | - <span class="custom-label">里程: </span> | ||
| 266 | - <input class="form-control" disabled="disabled" value=""> | ||
| 267 | - </div> | ||
| 268 | - <div class="col-md-4"> | ||
| 269 | - <span class="custom-label">是否烂班:</span> | ||
| 270 | - <input class="form-control" > | ||
| 271 | - </div> | ||
| 272 | - </div> | ||
| 273 | - | ||
| 274 | - <div class="row"> | ||
| 275 | - <span class="custom-label" style="margin-left: 10px">备注:</span> | ||
| 276 | - <textarea rows="3" placeholder="备注" class="form-control" style="width: calc(100% - 110px);"></textarea> | 216 | + <div class="row addTempBtns" style="text-align: center;margin: 0;display: none;"> |
| 217 | + <div class="custom-btn blue" id="addTempSchedulBtn"><i class="fa fa-plus-square"></i> 临加班次</div> | ||
| 277 | </div> | 218 | </div> |
| 278 | </div> | 219 | </div> |
| 279 | </div> | 220 | </div> |
| 280 | - | ||
| 281 | - <div class="form-custom-footer" style="margin-top: 15px;"> | ||
| 282 | - <button type="button" class="btn blue-madison confirm"> <i class="fa fa-check"></i> 确 定 </button> | ||
| 283 | - <button type="button" class="btn layui-layer-close"> 取消 </button> | ||
| 284 | - </div> | ||
| 285 | -</div> | ||
| 286 | - | ||
| 287 | - | ||
| 288 | -<script id="child_task_main_table_temp" type="text/html"> | ||
| 289 | -{{each list as item i}} | ||
| 290 | -<tr data-id="{{item.id}}"> | ||
| 291 | - <td width="6%">{{i + 1}}</td> | ||
| 292 | - <td width="9%">{{item.fcsj}}</td> | ||
| 293 | - <td width="9%">{{item.zdsj}}</td> | ||
| 294 | - <td width="14%">{{item.qdzName}}</td> | ||
| 295 | - <td width="14%">{{item.zdzName}}</td> | ||
| 296 | - <td width="6%">{{item.jhlc}}</td> | ||
| 297 | - <td width="10%">{{item.clZbh}}</td> | ||
| 298 | - <td width="9%">{{item.jName}}</td> | ||
| 299 | - <td width="9%">{{item.sName}}</td> | ||
| 300 | -</tr> | ||
| 301 | -{{/each}} | ||
| 302 | -</script> | ||
| 303 | - | ||
| 304 | 221 | ||
| 222 | +</div> | ||
| 223 | +<script src="/pages/control/line/child_pages/js/child_task.js"></script> | ||
| 305 | <script> | 224 | <script> |
| 225 | + | ||
| 226 | +//停车场下拉框数据 | ||
| 227 | +var parkSelect2Data = createParkSelect2Data(), | ||
| 228 | + parkSelectOps = createParkSelectOps(parkSelect2Data); | ||
| 229 | + | ||
| 306 | $(function(){ | 230 | $(function(){ |
| 307 | - //线路编码和名称对照 | ||
| 308 | - var storage = window.localStorage; | ||
| 309 | - var lineMap = JSON.parse(storage.getItem('lineIds')); | 231 | + //var storage = window.localStorage; |
| 232 | + var lineCodeMaps; | ||
| 310 | //线路 ——> 路牌 ——> 班次 3层映射 | 233 | //线路 ——> 路牌 ——> 班次 3层映射 |
| 311 | var scheduleLineMap; | 234 | var scheduleLineMap; |
| 312 | //初始选中班次 | 235 | //初始选中班次 |
| 313 | var initSelected; | 236 | var initSelected; |
| 314 | - //线路站点路由 | ||
| 315 | - var stationRoute; | 237 | + |
| 238 | + //班次ID和班次映射 | ||
| 239 | + var scheduleIdMap; | ||
| 240 | + | ||
| 241 | + var _data; //data.js引用 | ||
| 316 | 242 | ||
| 317 | //滚动时固定表头 | 243 | //滚动时固定表头 |
| 318 | $('.custom-table-panel').on('scroll', function(){ | 244 | $('.custom-table-panel').on('scroll', function(){ |
| @@ -322,48 +248,85 @@ $(function(){ | @@ -322,48 +248,85 @@ $(function(){ | ||
| 322 | }); | 248 | }); |
| 323 | 249 | ||
| 324 | var $table = $('.custom-table-body table'); | 250 | var $table = $('.custom-table-body table'); |
| 251 | + | ||
| 325 | //主任务点击事件 | 252 | //主任务点击事件 |
| 326 | $('#childTaskDiv').on('click', '.mainTable tr', function(){ | 253 | $('#childTaskDiv').on('click', '.mainTable tr', function(){ |
| 327 | $table.find('tr._active').removeClass('_active'); | 254 | $table.find('tr._active').removeClass('_active'); |
| 328 | $(this).addClass('_active'); | 255 | $(this).addClass('_active'); |
| 256 | + | ||
| 329 | //显示班次详细 | 257 | //显示班次详细 |
| 330 | $.each(this.cells, function(i,cell){ | 258 | $.each(this.cells, function(i,cell){ |
| 331 | $('#mainDetailPabel input[data-cell='+i+']').val($(cell).text()); | 259 | $('#mainDetailPabel input[data-cell='+i+']').val($(cell).text()); |
| 332 | }); | 260 | }); |
| 333 | - //子任务初始值 | ||
| 334 | - | 261 | + if(!changeHandlerPanel(this)) |
| 262 | + return; | ||
| 335 | 263 | ||
| 264 | + var id = $(this).data('id'); | ||
| 265 | + childTaskBtn(scheduleIdMap[id].bcType); | ||
| 336 | }); | 266 | }); |
| 337 | 267 | ||
| 268 | + //子任务按钮 | ||
| 269 | + function childTaskBtn(bcType){ | ||
| 270 | + switch (bcType) { | ||
| 271 | + case 'normal': | ||
| 272 | + $('.childTaskBtns .custom-btn').show(); | ||
| 273 | + break; | ||
| 274 | + case 'in': | ||
| 275 | + case 'out': | ||
| 276 | + hide(); | ||
| 277 | + break; | ||
| 278 | + } | ||
| 279 | + function hide(){ | ||
| 280 | + $('.custom-btn[data-method=outParkProcess]').hide(); | ||
| 281 | + $('.custom-btn[data-method=inParkProcess]').hide(); | ||
| 282 | + } | ||
| 283 | + } | ||
| 284 | + | ||
| 285 | + function changeHandlerPanel(tr){ | ||
| 286 | + if($(tr).hasClass('empty')){ | ||
| 287 | + $('.childTaskBtns').hide(); | ||
| 288 | + $('.addTempBtns').show(); | ||
| 289 | + return false; | ||
| 290 | + } | ||
| 291 | + else{ | ||
| 292 | + $('.childTaskBtns').show(); | ||
| 293 | + $('.addTempBtns').hide(); | ||
| 294 | + return true; | ||
| 295 | + } | ||
| 296 | + } | ||
| 297 | + | ||
| 338 | var lineSelect = $('#childTaskDiv .lineSelect'); | 298 | var lineSelect = $('#childTaskDiv .lineSelect'); |
| 339 | var lpSelect = $('#childTaskDiv .LPSelect'); | 299 | var lpSelect = $('#childTaskDiv .LPSelect'); |
| 340 | //线路下拉框 | 300 | //线路下拉框 |
| 341 | $('#childTaskDiv').on('init', function(e, ops ){ | 301 | $('#childTaskDiv').on('init', function(e, ops ){ |
| 342 | - var data = ops.data | ||
| 343 | - , stationRoute = ops.stationRoute | ||
| 344 | - , lineData = [], lineName; | 302 | + _data = ops._data; |
| 303 | + //要选中的班次 | ||
| 304 | + var schedul = ops.selected; | ||
| 305 | + var lineData = [], lineName; | ||
| 306 | + //站点路由 | ||
| 307 | + stationRoute = _data.getStationRouteByLine(schedul.xlBm); | ||
| 308 | + //线路 ——> 路牌 ——> 班次映射 | ||
| 309 | + scheduleLineMap = _data.getLineLpMap(); | ||
| 345 | 310 | ||
| 346 | - console.log('路由', stationRoute); | ||
| 347 | - for(var lineCode in data ){ | ||
| 348 | - lineName = lineMap[lineCode]; | 311 | + //线路下拉框数据 |
| 312 | + lineCodeMaps = _data.getLineIds(); | ||
| 313 | + for(var lineCode in scheduleLineMap){ | ||
| 314 | + lineName = lineCodeMaps[lineCode]; | ||
| 349 | lineData.push({id: lineCode, text: lineName}); | 315 | lineData.push({id: lineCode, text: lineName}); |
| 350 | } | 316 | } |
| 351 | 317 | ||
| 352 | - scheduleLineMap = data; | ||
| 353 | - initSelected = ops.selected; | ||
| 354 | - | ||
| 355 | initPinYinSelect2(lineSelect, lineData, function(){ | 318 | initPinYinSelect2(lineSelect, lineData, function(){ |
| 356 | //绑定change事件 | 319 | //绑定change事件 |
| 357 | lineSelect.on('change', changeLine); | 320 | lineSelect.on('change', changeLine); |
| 358 | //初始选中的线路 | 321 | //初始选中的线路 |
| 359 | - lineSelect.val(initSelected.xlBm).trigger("change"); | 322 | + lineSelect.val(schedul.xlBm).trigger("change"); |
| 360 | 323 | ||
| 361 | setTimeout(function(){ | 324 | setTimeout(function(){ |
| 362 | //选中路牌 | 325 | //选中路牌 |
| 363 | - lpSelect.val(initSelected.lpName).trigger("change"); | 326 | + lpSelect.val(schedul.lpName).trigger("change"); |
| 364 | 327 | ||
| 365 | //选中班次 | 328 | //选中班次 |
| 366 | - var $tr = $('.mainTable tr[data-id='+initSelected.id+']'); | 329 | + var $tr = $('.mainTable tr[data-id='+schedul.id+']'); |
| 367 | $tr.trigger('click'); | 330 | $tr.trigger('click'); |
| 368 | //滚动条 | 331 | //滚动条 |
| 369 | var cont = $('.custom-table-panel'); | 332 | var cont = $('.custom-table-panel'); |
| @@ -394,11 +357,38 @@ $(function(){ | @@ -394,11 +357,38 @@ $(function(){ | ||
| 394 | * 刷新主任务列表 | 357 | * 刷新主任务列表 |
| 395 | */ | 358 | */ |
| 396 | function refreshMainList(){ | 359 | function refreshMainList(){ |
| 397 | - var lineCode = lineSelect.val(); | ||
| 398 | - var lp = lpSelect.val(); | 360 | + var lineCode = lineSelect.val() |
| 361 | + ,lp = lpSelect.val() | ||
| 362 | + ,scheduls = scheduleLineMap[lineCode][lp]; | ||
| 363 | + //保留当前列表班次的映射 | ||
| 364 | + scheduleIdMap = {}; | ||
| 365 | + $.each(scheduls, function(){ | ||
| 366 | + scheduleIdMap[this.id] = this; | ||
| 367 | + }); | ||
| 368 | + | ||
| 369 | + var schArray = []; | ||
| 370 | + $.each(scheduls, function(){ | ||
| 371 | + schArray[this.fcno] = this; | ||
| 372 | + }); | ||
| 399 | 373 | ||
| 400 | - var htmlStr = template('child_task_main_table_temp', {list: scheduleLineMap[lineCode][lp]}); | 374 | + var htmlStr = template('child_task_main_table_temp', {list: schArray}); |
| 401 | $('#childTaskDiv .mainTable tbody').html(htmlStr); | 375 | $('#childTaskDiv .mainTable tbody').html(htmlStr); |
| 402 | } | 376 | } |
| 377 | + | ||
| 378 | + | ||
| 379 | + $('.childTaskBtns .custom-btn').on('click', function(){ | ||
| 380 | + var schedul = scheduleIdMap[$('.mainTable tr._active').data('id')]; | ||
| 381 | + var method = $(this).data('method'); | ||
| 382 | + if(method) | ||
| 383 | + childTaskCase[method](schedul); | ||
| 384 | + }); | ||
| 385 | + | ||
| 386 | + //临加班次 | ||
| 387 | + $('#addTempSchedulBtn').on('click', function(){ | ||
| 388 | + showChildTaskModal('schedul_tempAdd_item_temp', {}, | ||
| 389 | + function(layer, index){ | ||
| 390 | + | ||
| 391 | + }); | ||
| 392 | + }); | ||
| 403 | }); | 393 | }); |
| 404 | </script> | 394 | </script> |
src/main/resources/static/pages/control/line/child_pages/js/child_task.js
0 → 100644
| 1 | +var childTaskCase = { | ||
| 2 | + //回场 | ||
| 3 | + inParkProcess : function(schedul) { | ||
| 4 | + var currRoutes = stationRoute[schedul.xlDir]//当前走向的站点路由 | ||
| 5 | + ,selData = createRouteSelectData(currRoutes), layerIndex; | ||
| 6 | + | ||
| 7 | + template.config('escape', false);//不编码html | ||
| 8 | + showChildTaskModal('child_task_inpark_process_temp', | ||
| 9 | + {schedul: schedul, route: selData.ops} | ||
| 10 | + ,function(layero, index){ | ||
| 11 | + layerIndex = index; | ||
| 12 | + // 停车场下拉框 | ||
| 13 | + initPinYinSelect2('#kongshiEndStation', parkSelect2Data , function() { | ||
| 14 | + var carPark = _data.getLineInformation(schedul.xlBm).carPark; | ||
| 15 | + $('#kongshiEndStation').val(carPark).change(); | ||
| 16 | + }); | ||
| 17 | + var inParkWrap = '#inParkProcess' | ||
| 18 | + ,yinyun = inParkWrap + ' .yinyun' | ||
| 19 | + ,kongshi = inParkWrap + ' .kongshi' | ||
| 20 | + ,destroy = inParkWrap + ' .destroy'; | ||
| 21 | + | ||
| 22 | + //烂班原因写入备注 | ||
| 23 | + var globalRem = $('#inParkProcess textarea[name=remarks]'); | ||
| 24 | + $('select[name=destroyReason]', destroy).on('change', function(){ | ||
| 25 | + globalRem.val(globalRem.val() + $(this).val() + ','); | ||
| 26 | + }); | ||
| 27 | + | ||
| 28 | + //营运终点 select2 | ||
| 29 | + var $yyunEndSelect = $('select[name="endStation"]', yinyun); | ||
| 30 | + initPinYinSelect2($yyunEndSelect, selData.select2Data, | ||
| 31 | + function(){ | ||
| 32 | + $yyunEndSelect.val(schedul.zdzCode).trigger('change'); | ||
| 33 | + }) | ||
| 34 | + //切换营运终点事件 | ||
| 35 | + .on('select2:select', function(e){ | ||
| 36 | + var item = e.params.data; | ||
| 37 | + var val = $(this).val(); | ||
| 38 | + | ||
| 39 | + //空驶起点 为营运终点 | ||
| 40 | + $('select[name="startStation"]', kongshi).val(val); | ||
| 41 | + | ||
| 42 | + //中途回场 | ||
| 43 | + if(item.flag === 'Z'){ | ||
| 44 | + //显示烂班panel | ||
| 45 | + $(destroy).show(); | ||
| 46 | + $('select[name="startStation"]', destroy).val(val); | ||
| 47 | + toCenter(layero);//居中 | ||
| 48 | + } | ||
| 49 | + else if(item.flag === 'E'){ | ||
| 50 | + $(destroy).hide(); | ||
| 51 | + toCenter(layero); //居中 | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + //重新计算里程 | ||
| 55 | + //营运里程 | ||
| 56 | + $('input[name="mileage"]', yinyun) | ||
| 57 | + .val(calcDistance(schedul.xlDir, schedul.qdzCode, $yyunEndSelect.val())); | ||
| 58 | + if(!$(destroy).is(":hidden")){ | ||
| 59 | + //烂班里程 | ||
| 60 | + $('input[name="mileage"]', destroy) | ||
| 61 | + .val(calcDistance(schedul.xlDir, $yyunEndSelect.val(), schedul.zdzCode)); | ||
| 62 | + } | ||
| 63 | + //空驶里程 等有停车场坐标了再计算 | ||
| 64 | + }); | ||
| 65 | + //营运结束时间 | ||
| 66 | + $('input[name="endDate"]', yinyun).on('blur', function(){ | ||
| 67 | + var t = $(this).val(); | ||
| 68 | + $('input[name="startDate"]', kongshi).val(t); | ||
| 69 | + $('input[name="startDate"]', destroy).val(t); | ||
| 70 | + }); | ||
| 71 | + //默认烂班终点为班次终点 | ||
| 72 | + $('select[name="endStation"]', destroy).val(schedul.zdzCode); | ||
| 73 | + | ||
| 74 | + setTimeout(function(){ | ||
| 75 | + //为当前layer设置变换动画; | ||
| 76 | + layero.css('transition', 'all .5s ease'); | ||
| 77 | + }, 500); | ||
| 78 | + | ||
| 79 | + //提交 | ||
| 80 | + var error = '#inParkProcess .alert-danger'; | ||
| 81 | + $('.confirm', '#inParkProcess').on('click', function(){ | ||
| 82 | + var fs = $('.child-task-item form:visible'), flag = true; | ||
| 83 | + $.each(fs, function(i, f){ | ||
| 84 | + if(!customFormValidate(f)) | ||
| 85 | + flag = false; | ||
| 86 | + }); | ||
| 87 | + | ||
| 88 | + if(flag){ | ||
| 89 | + $(error).hide(); | ||
| 90 | + //开始提交 | ||
| 91 | + childTaskSubmit(fs, layerIndex); | ||
| 92 | + } | ||
| 93 | + else | ||
| 94 | + $(error).show(); | ||
| 95 | + }); | ||
| 96 | + }) | ||
| 97 | + }, | ||
| 98 | + //出场 | ||
| 99 | + outParkProcess: function(schedul){ | ||
| 100 | + var currRoutes = stationRoute[schedul.xlDir]//当前走向的站点路由 | ||
| 101 | + ,selData = createRouteSelectData(currRoutes); | ||
| 102 | + | ||
| 103 | + template.config('escape', false);//不编码html | ||
| 104 | + | ||
| 105 | + showChildTaskModal('child_task_outpark_process_temp', | ||
| 106 | + {schedul: schedul, route: selData.ops} | ||
| 107 | + ,function(layero, index){ | ||
| 108 | + layerIndex = index; | ||
| 109 | + // 停车场下拉框 | ||
| 110 | + initPinYinSelect2('#kongshiStartStation', parkSelect2Data , function() { | ||
| 111 | + var carPark = _data.getLineInformation(schedul.xlBm).carPark; | ||
| 112 | + $('#kongshiStartStation').val(carPark).change(); | ||
| 113 | + }); | ||
| 114 | + | ||
| 115 | + var outParkWrap = '#outParkProcess' | ||
| 116 | + ,yinyun = outParkWrap + ' .yinyun' | ||
| 117 | + ,kongshi = outParkWrap + ' .kongshi'; | ||
| 118 | + //空驶终点 | ||
| 119 | + $('select[name="endStation"]', kongshi).val(schedul.qdzCode); | ||
| 120 | + | ||
| 121 | + //提交 | ||
| 122 | + var error = outParkWrap + ' .alert-danger'; | ||
| 123 | + $('.confirm', outParkWrap).on('click', function(){ | ||
| 124 | + var fs = $('.child-task-item form:visible'), flag = true; | ||
| 125 | + $.each(fs, function(i, f){ | ||
| 126 | + if(!customFormValidate(f)) | ||
| 127 | + flag = false; | ||
| 128 | + }); | ||
| 129 | + | ||
| 130 | + if(flag){ | ||
| 131 | + $(error).hide(); | ||
| 132 | + childTaskSubmit(fs, layerIndex); | ||
| 133 | + //开始提交 | ||
| 134 | + } | ||
| 135 | + else | ||
| 136 | + $(error).show(); | ||
| 137 | + }); | ||
| 138 | + }) | ||
| 139 | + }, | ||
| 140 | + //自定义 | ||
| 141 | + tempAddProcess: function(schedul){ | ||
| 142 | + var itemIndex = 0, currLayero, layerIndex; | ||
| 143 | + var currRoutes = stationRoute[schedul.xlDir]//当前走向的站点路由 | ||
| 144 | + ,selData = createRouteSelectData(currRoutes) | ||
| 145 | + ,ops = selData.ops; | ||
| 146 | + | ||
| 147 | + var tData = {schedul: schedul, route: selData.ops}; | ||
| 148 | + template.config('escape', false);//不编码html | ||
| 149 | + | ||
| 150 | + var carPark = _data.getLineInformation(schedul.xlBm).carPark; | ||
| 151 | + showChildTaskModal('child_task_tempAdd_process_temp', {} | ||
| 152 | + ,function(layero, index){ | ||
| 153 | + currLayero = layero; | ||
| 154 | + layerIndex = index; | ||
| 155 | + var tempAddWrap = '#tempAddProcess'; | ||
| 156 | + //默认一个子任务 | ||
| 157 | + addItem(); | ||
| 158 | + $('.add-child-task-item', tempAddWrap).on('click', addItem); | ||
| 159 | + | ||
| 160 | + setTimeout(function(){ | ||
| 161 | + //为当前layer设置变换动画; | ||
| 162 | + layero.css('transition', 'all .5s ease'); | ||
| 163 | + }, 500); | ||
| 164 | + }) | ||
| 165 | + | ||
| 166 | + function enable(e, ops, val){ | ||
| 167 | + e.html(ops).removeAttr('disabled').val(val); | ||
| 168 | + } | ||
| 169 | + | ||
| 170 | + function disable(es){ | ||
| 171 | + $.each(es, function(){ | ||
| 172 | + $(this).html('').attr('disabled', 'disabled'); | ||
| 173 | + }) | ||
| 174 | + } | ||
| 175 | + | ||
| 176 | + function addItem(){ | ||
| 177 | + tData.index = ++ itemIndex; | ||
| 178 | + var htmlStr = template('child_task_tempAdd_item_temp', tData); | ||
| 179 | + $('#tempAddProcess .item-list').append(htmlStr); | ||
| 180 | + toCenter(currLayero); | ||
| 181 | + //绑定事件 | ||
| 182 | + bindEvent($('#tempAddItem' + itemIndex)); | ||
| 183 | + calcNumber(); | ||
| 184 | + } | ||
| 185 | + //相关选项事件绑定 | ||
| 186 | + function bindEvent(taskItem){ | ||
| 187 | + var $reason = taskItem.find('.destroy-reason-wrap'); | ||
| 188 | + //里程类型下拉框 | ||
| 189 | + var mileageTypeSel = $('select[name=mileageType]', taskItem); | ||
| 190 | + //烂班icheck | ||
| 191 | + $('.icheck', taskItem).iCheck({ | ||
| 192 | + checkboxClass: 'icheckbox_square-red', | ||
| 193 | + increaseArea: '20%' | ||
| 194 | + }).on('ifChanged', function(){ | ||
| 195 | + if(this.checked){ | ||
| 196 | + $reason.show(); | ||
| 197 | + mileageTypeSel.val('营运').attr('readonly', 'readonly'); | ||
| 198 | + //隐藏结束时间 | ||
| 199 | + hideInput($('input[name=endDate]', taskItem)); | ||
| 200 | + changeBadge('烂班', taskItem); | ||
| 201 | + } | ||
| 202 | + else{ | ||
| 203 | + mileageTypeSel.removeAttr('readonly').change(); | ||
| 204 | + //显示结束时间 | ||
| 205 | + showInput($('input[name=endDate]', taskItem)); | ||
| 206 | + $reason.val('').hide(); | ||
| 207 | + } | ||
| 208 | + }); | ||
| 209 | + //烂班原因 | ||
| 210 | + var globalRem = $('#tempAddProcess textarea[name=remarks]'); | ||
| 211 | + $reason.find('select').on('change', function(){ | ||
| 212 | + globalRem.val(globalRem.val() + $(this).val() + ','); | ||
| 213 | + }); | ||
| 214 | + //里程类型 | ||
| 215 | + mileageTypeSel.on('change', function(){ | ||
| 216 | + //如果已烂班 | ||
| 217 | + if($('.icheck', taskItem)[0].checked) | ||
| 218 | + return; | ||
| 219 | + changeBadge($(this).val(), taskItem); | ||
| 220 | + }); | ||
| 221 | + | ||
| 222 | + //任务类型字典下拉框 | ||
| 223 | + dictionaryUtils.transformDom($('.nt-dictionary', taskItem)); | ||
| 224 | + | ||
| 225 | + $('select[name=type2]', taskItem).on('change', function(){ | ||
| 226 | + var t = $(this).val(); | ||
| 227 | + | ||
| 228 | + var taskItem = $(this).parents('.child-task-item') | ||
| 229 | + ,startSelect = taskItem.find('select[name=startStation]') | ||
| 230 | + ,endSelect = taskItem.find('select[name=endStation]'); | ||
| 231 | + | ||
| 232 | + switch (t) { | ||
| 233 | + case '': | ||
| 234 | + disable([startSelect, endSelect]); | ||
| 235 | + break; | ||
| 236 | + case '1': | ||
| 237 | + //线路上站点间 | ||
| 238 | + enable(startSelect, ops, schedul.qdzCode); | ||
| 239 | + enable(endSelect, ops, schedul.zdzCode); | ||
| 240 | + break; | ||
| 241 | + case '2': | ||
| 242 | + //进场 | ||
| 243 | + enable(startSelect, ops, schedul.qdzCode); | ||
| 244 | + enable(endSelect, parkSelectOps, carPark); | ||
| 245 | + break; | ||
| 246 | + case '3': | ||
| 247 | + //出场 | ||
| 248 | + enable(startSelect, parkSelectOps, carPark); | ||
| 249 | + if(schedul.bcType == 'out') | ||
| 250 | + enable(endSelect, ops, schedul.zdzCode);//如果主任务是出场任务 | ||
| 251 | + else | ||
| 252 | + enable(endSelect, ops, schedul.qdzCode); | ||
| 253 | + break; | ||
| 254 | + case '4': | ||
| 255 | + //区间掉头 | ||
| 256 | + enable(startSelect, ops, schedul.qdzCode); | ||
| 257 | + enable(endSelect, ops, schedul.zdzCode); | ||
| 258 | + break; | ||
| 259 | + } | ||
| 260 | + }); | ||
| 261 | + | ||
| 262 | + $('.task-item-close', taskItem).on('click', function(){ | ||
| 263 | + $(this).parents('.child-task-item').remove(); | ||
| 264 | + toCenter(currLayero); | ||
| 265 | + calcNumber(); | ||
| 266 | + }); | ||
| 267 | + } | ||
| 268 | + | ||
| 269 | + function hideInput($input){ | ||
| 270 | + $input.val('').attr('disabled', 'disabled').removeAttr('required'); | ||
| 271 | + } | ||
| 272 | + | ||
| 273 | + function showInput($input){ | ||
| 274 | + $input.removeAttr('disabled').attr('required', 1); | ||
| 275 | + } | ||
| 276 | + | ||
| 277 | + function changeBadge(t, itemWrap){ | ||
| 278 | + | ||
| 279 | + var badge = $('.child-task-title', itemWrap) | ||
| 280 | + ,no = $('.no', badge) | ||
| 281 | + ,remClaszz = 'yinyun kongshi destroy', clazz; | ||
| 282 | + | ||
| 283 | + if(t == '营运') | ||
| 284 | + clazz = 'yinyun'; | ||
| 285 | + else if(t == '空驶') | ||
| 286 | + clazz = 'kongshi'; | ||
| 287 | + else if(t == '烂班') | ||
| 288 | + clazz = 'destroy'; | ||
| 289 | + | ||
| 290 | + $(badge).find('.text').remove(); | ||
| 291 | + if(!t){ | ||
| 292 | + clazz = 'yinyun'; | ||
| 293 | + $(badge).removeClass('show-text'); | ||
| 294 | + } | ||
| 295 | + else{ | ||
| 296 | + t = '<span class="text">、' + t + '公里</span>'; | ||
| 297 | + $(badge).addClass('show-text'); | ||
| 298 | + } | ||
| 299 | + $(badge).parents('.child-task-item').removeClass(remClaszz).addClass(clazz); | ||
| 300 | + $(badge).append(t); | ||
| 301 | + } | ||
| 302 | + | ||
| 303 | + function calcNumber(){ | ||
| 304 | + var es = $('.child-task-item'); | ||
| 305 | + $.each(es, function(i, e){ | ||
| 306 | + $(e).find('.child-task-title .no').text(i + 1); | ||
| 307 | + }); | ||
| 308 | + } | ||
| 309 | + | ||
| 310 | + //确定 | ||
| 311 | + var error = '#tempAddProcess .alert-danger'; | ||
| 312 | + $('.confirm', '#tempAddProcess').on('click', function(){ | ||
| 313 | + var fs = $('.child-task-item form'), flag = true; | ||
| 314 | + $.each(fs, function(i, f){ | ||
| 315 | + if(!customFormValidate(f)) | ||
| 316 | + flag = false; | ||
| 317 | + }); | ||
| 318 | + | ||
| 319 | + if(flag){ | ||
| 320 | + $(error).hide(); | ||
| 321 | + //开始提交 | ||
| 322 | + childTaskSubmit(fs, layerIndex); | ||
| 323 | + } | ||
| 324 | + else | ||
| 325 | + $(error).show(); | ||
| 326 | + }); | ||
| 327 | + } | ||
| 328 | +}; | ||
| 329 | + | ||
| 330 | +function childTaskSubmit(fs, layerIndex){ | ||
| 331 | + syncSubmit(fs, function(){ | ||
| 332 | + layer.msg('子任务添加成功'); | ||
| 333 | + setTimeout(function(){ | ||
| 334 | + layer.close(layerIndex); | ||
| 335 | + }, 700); | ||
| 336 | + }); | ||
| 337 | +} | ||
| 338 | + | ||
| 339 | +/** | ||
| 340 | + * 自定义子任务 | ||
| 341 | + * 同步提交多个表单,无事物,允许中途失败 | ||
| 342 | + */ | ||
| 343 | +function syncSubmit(fs, cb){ | ||
| 344 | + if(fs.length == 0) return; | ||
| 345 | + //备注 | ||
| 346 | + var remarks = $(fs[0]).parents('.custom-anim-modal').find('textarea[name=remarks]').val(); | ||
| 347 | + var i = 0, len = fs.length; | ||
| 348 | + (function(){ | ||
| 349 | + if(i == len){ | ||
| 350 | + cb && cb(); | ||
| 351 | + return; | ||
| 352 | + } | ||
| 353 | + | ||
| 354 | + var f = arguments.callee | ||
| 355 | + ,form = fs[i] | ||
| 356 | + ,params = $(form).serializeJSON(); | ||
| 357 | + | ||
| 358 | + params.remarks = remarks; | ||
| 359 | + $post('/childTask', params, function(){ | ||
| 360 | + $(form).parent().find('.task-item-close').replaceWith('<a class="task-item-success"><i class="fa fa-check-circle" ></i></a>'); | ||
| 361 | + i ++; | ||
| 362 | + //做一层防护,防止缺心眼出现无限循环提交 | ||
| 363 | + if(i == 0) | ||
| 364 | + return; | ||
| 365 | + f(); | ||
| 366 | + }); | ||
| 367 | + })(); | ||
| 368 | +} | ||
| 369 | + | ||
| 370 | +/** | ||
| 371 | + * 自定义表单校验 | ||
| 372 | + */ | ||
| 373 | +function customFormValidate(f){ | ||
| 374 | + var rs = true; | ||
| 375 | + //所有可见的项 | ||
| 376 | + var es = $('input:visible,select:visible', f); | ||
| 377 | + | ||
| 378 | + for(var i = 0, e; e = es[i++];){ | ||
| 379 | + if($(e).attr('required') && $(e).val() == ''){ | ||
| 380 | + $(e).addClass('custom-val-error'); | ||
| 381 | + rs = false; | ||
| 382 | + } | ||
| 383 | + else | ||
| 384 | + $(e).removeClass('custom-val-error'); | ||
| 385 | + } | ||
| 386 | + return rs; | ||
| 387 | +} | ||
| 388 | + | ||
| 389 | +/** | ||
| 390 | + * 站点下拉框数据,包括原生select和select2 | ||
| 391 | + */ | ||
| 392 | +function createRouteSelectData(routes){ | ||
| 393 | + var ops = '', select2Data = [], temp, op; | ||
| 394 | + $.each(routes, function(){ | ||
| 395 | + ops += '<option value="'+this.stationCode+'" data-flag="'+this.stationMark+'">'+this.stationName+'</option>'; | ||
| 396 | + | ||
| 397 | + temp = {id: this.stationCode, text: this.stationName, flag: this.stationMark }; | ||
| 398 | + if(this.stationMark === 'B') | ||
| 399 | + temp.disabled = 'disabled'; | ||
| 400 | + select2Data.push(temp); | ||
| 401 | + }); | ||
| 402 | + | ||
| 403 | + return {ops: ops, select2Data: select2Data}; | ||
| 404 | +} | ||
| 405 | + | ||
| 406 | +function createParkSelect2Data(){ | ||
| 407 | + var parkData = [], | ||
| 408 | + items = dictionaryUtils.getByGroup('CarPark'); | ||
| 409 | + for ( var code in items) | ||
| 410 | + parkData.push({id : code,text : items[code]}); | ||
| 411 | + | ||
| 412 | + return parkData; | ||
| 413 | +} | ||
| 414 | + | ||
| 415 | +function createParkSelectOps(select2Data){ | ||
| 416 | + var ops = ''; | ||
| 417 | + $.each(select2Data, function(){ | ||
| 418 | + ops += '<option value="'+this.id+'">'+this.text+'</option>'; | ||
| 419 | + }); | ||
| 420 | + return ops; | ||
| 421 | +} | ||
| 422 | + | ||
| 423 | +//将元素垂直居中,无视padding, margin等 | ||
| 424 | +function toCenter($e){ | ||
| 425 | + var h = $(document.body).height(); | ||
| 426 | + var eh = $e.height(); | ||
| 427 | + if(eh < h){ | ||
| 428 | + $e.css('top', (h - eh) /2); | ||
| 429 | + } | ||
| 430 | + else{ | ||
| 431 | + $e.css('top', h - eh); | ||
| 432 | + layer.msg('页面高度不够了,但是并没有出现滚动条!'); | ||
| 433 | + } | ||
| 434 | +} | ||
| 435 | + | ||
| 436 | +/** | ||
| 437 | + * 计算站距 | ||
| 438 | + */ | ||
| 439 | +function calcDistance(upDown ,sCode, eCode){ | ||
| 440 | + var routes = stationRoute[upDown].slice(0) | ||
| 441 | + ,num = -1; | ||
| 442 | + | ||
| 443 | + //下行重排路由 | ||
| 444 | + if(upDown == 1) | ||
| 445 | + routes.sort(downSort); | ||
| 446 | + | ||
| 447 | + for(var i = 0, route; route=routes[i++];){ | ||
| 448 | + if(route.stationCode == sCode){ | ||
| 449 | + num = 0; | ||
| 450 | + continue; | ||
| 451 | + } | ||
| 452 | + | ||
| 453 | + if(num > -1) | ||
| 454 | + num += (route.distances * 100); | ||
| 455 | + | ||
| 456 | + if(route.stationCode == eCode) | ||
| 457 | + break; | ||
| 458 | + } | ||
| 459 | + return num / 100; | ||
| 460 | +} | ||
| 461 | + | ||
| 462 | +function downSort(a , b){ | ||
| 463 | + return a.stationRouteCode - b.stationRouteCode; | ||
| 464 | +} | ||
| 465 | + | ||
| 466 | +function showChildTaskModal(temp, data, cb){ | ||
| 467 | + layer.open({ | ||
| 468 | + type : 1, | ||
| 469 | + title : false, | ||
| 470 | + area : '870px', | ||
| 471 | + closeBtn : 0, | ||
| 472 | + shift : 5, | ||
| 473 | + fix: false, | ||
| 474 | + content : template(temp , data), | ||
| 475 | + success : function(layero, index) { | ||
| 476 | + cb && cb(layero, index); | ||
| 477 | + } | ||
| 478 | + }); | ||
| 479 | +} | ||
| 0 | \ No newline at end of file | 480 | \ No newline at end of file |
src/main/resources/static/pages/control/line/css/lineControl.css
| @@ -1373,7 +1373,7 @@ height: 400px; | @@ -1373,7 +1373,7 @@ height: 400px; | ||
| 1373 | } | 1373 | } |
| 1374 | 1374 | ||
| 1375 | .custom-table-body table tr._active{ | 1375 | .custom-table-body table tr._active{ |
| 1376 | - background: #6db5e6; | 1376 | + background: #7cccaa; |
| 1377 | color: white; | 1377 | color: white; |
| 1378 | } | 1378 | } |
| 1379 | 1379 | ||
| @@ -1405,7 +1405,7 @@ height: 400px; | @@ -1405,7 +1405,7 @@ height: 400px; | ||
| 1405 | } | 1405 | } |
| 1406 | 1406 | ||
| 1407 | .custom-box-body.sub:BEFORE{ | 1407 | .custom-box-body.sub:BEFORE{ |
| 1408 | - content: "子任务信息"; | 1408 | + content: "新增子任务"; |
| 1409 | } | 1409 | } |
| 1410 | 1410 | ||
| 1411 | .custom-box-body .row{ | 1411 | .custom-box-body .row{ |
| @@ -1526,4 +1526,208 @@ label.error{ | @@ -1526,4 +1526,208 @@ label.error{ | ||
| 1526 | text-align: center; | 1526 | text-align: center; |
| 1527 | font-family: arial; | 1527 | font-family: arial; |
| 1528 | color: #433833; | 1528 | color: #433833; |
| 1529 | -} | ||
| 1530 | \ No newline at end of file | 1529 | \ No newline at end of file |
| 1530 | +} | ||
| 1531 | + | ||
| 1532 | +.custom-btn{ | ||
| 1533 | + display: inline-block; | ||
| 1534 | + padding: 10px 26px; | ||
| 1535 | + margin: 5px; | ||
| 1536 | + color: white; | ||
| 1537 | + font-size: 16px; | ||
| 1538 | + cursor: pointer; | ||
| 1539 | + box-shadow: 0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12); | ||
| 1540 | + border: 1px solid; | ||
| 1541 | + | ||
| 1542 | +} | ||
| 1543 | + | ||
| 1544 | +.custom-btn.blue{ | ||
| 1545 | + background: #3598dc; | ||
| 1546 | + border-color: #3598dc; | ||
| 1547 | +} | ||
| 1548 | + | ||
| 1549 | +.custom-btn.blue:hover{ | ||
| 1550 | + background: #217ebd; | ||
| 1551 | + border-color: #1f78b5; | ||
| 1552 | +} | ||
| 1553 | + | ||
| 1554 | + | ||
| 1555 | +.custom-btn.red{ | ||
| 1556 | + background: #F24100; | ||
| 1557 | + border-color: #F24100; | ||
| 1558 | + opacity: 0.8; | ||
| 1559 | +} | ||
| 1560 | + | ||
| 1561 | +.custom-btn.red:hover{ | ||
| 1562 | + opacity: 0.7; | ||
| 1563 | +} | ||
| 1564 | +.custom-btn i{ | ||
| 1565 | + margin-right: 5px; | ||
| 1566 | +} | ||
| 1567 | + | ||
| 1568 | +.custom-anim-modal.wrap{ | ||
| 1569 | + width: 100%; | ||
| 1570 | + height: 100%; | ||
| 1571 | +} | ||
| 1572 | + | ||
| 1573 | +.custom-anim-modal.wrap .custom-box-body{ | ||
| 1574 | + border: 0; | ||
| 1575 | + padding: 0; | ||
| 1576 | +} | ||
| 1577 | + | ||
| 1578 | +.child-task-item{ | ||
| 1579 | + background: white; | ||
| 1580 | + padding: 0 0 18px 0; | ||
| 1581 | + width: 100%; | ||
| 1582 | + margin: 0; | ||
| 1583 | + border-top: 1px solid #f7f7f7; | ||
| 1584 | + padding-top: 0px; | ||
| 1585 | +} | ||
| 1586 | + | ||
| 1587 | +.custom-box-body .child-task-item input.form-control, | ||
| 1588 | +.custom-box-body .child-task-item select.form-control{ | ||
| 1589 | + width: 180px; | ||
| 1590 | +} | ||
| 1591 | + | ||
| 1592 | +.child-task-item span.custom-label { | ||
| 1593 | + color: gray; | ||
| 1594 | +} | ||
| 1595 | + | ||
| 1596 | +.child-task-item.yinyun .child-task-title{ | ||
| 1597 | + background: #32c5d2; | ||
| 1598 | +} | ||
| 1599 | + | ||
| 1600 | +.child-task-item.kongshi .child-task-title{ | ||
| 1601 | + background: #999; | ||
| 1602 | +} | ||
| 1603 | + | ||
| 1604 | +.child-task-item.destroy .child-task-title{ | ||
| 1605 | + background: red; | ||
| 1606 | +} | ||
| 1607 | + | ||
| 1608 | +.child-task-title{ | ||
| 1609 | + color: white; | ||
| 1610 | + margin: 0; | ||
| 1611 | + padding: 5px 12px; | ||
| 1612 | + display: inline-block; | ||
| 1613 | + margin-bottom: 10px; | ||
| 1614 | + font-family: 微软雅黑; | ||
| 1615 | + box-shadow: 0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12); | ||
| 1616 | + | ||
| 1617 | + transition: all .5s ease; | ||
| 1618 | + overflow: hidden; | ||
| 1619 | + height: 28px; | ||
| 1620 | +} | ||
| 1621 | + | ||
| 1622 | +#tempAddProcess .child-task-title{ | ||
| 1623 | + width: 33px; | ||
| 1624 | +} | ||
| 1625 | + | ||
| 1626 | +#tempAddProcess .child-task-title.show-text{ | ||
| 1627 | + width: 105px; | ||
| 1628 | +} | ||
| 1629 | + | ||
| 1630 | +.child-task-item .row{ | ||
| 1631 | + margin-left: 8px; | ||
| 1632 | + margin-right: 8px; | ||
| 1633 | +} | ||
| 1634 | + | ||
| 1635 | +/* .child-task-item .yy-title{ | ||
| 1636 | + color: white; | ||
| 1637 | + margin: 0; | ||
| 1638 | + background: #32c5d2; | ||
| 1639 | + padding: 5px 3px 5px 12px; | ||
| 1640 | + display: inline-block; | ||
| 1641 | +} | ||
| 1642 | +.child-task-item .ks-title{ | ||
| 1643 | + color: white; | ||
| 1644 | + margin: 0; | ||
| 1645 | + background: #d4c68c; | ||
| 1646 | + padding: 5px 3px 5px 12px; | ||
| 1647 | + display: inline-block; | ||
| 1648 | +} | ||
| 1649 | + */ | ||
| 1650 | + | ||
| 1651 | +/* .custom-anim-modal .child-task-item:nth-of-type(1){ | ||
| 1652 | +} | ||
| 1653 | +.custom-anim-modal .child-task-item:nth-of-type(2){ | ||
| 1654 | + animation-delay: .2s; | ||
| 1655 | +} | ||
| 1656 | +.custom-anim-modal .child-task-item:nth-of-type(3){ | ||
| 1657 | + animation-delay: .4s; | ||
| 1658 | +} */ | ||
| 1659 | + | ||
| 1660 | +#inParkProcess .select2-container--bootstrap, | ||
| 1661 | +#outParkProcess .select2-container--bootstrap{ | ||
| 1662 | + display: inline-block; | ||
| 1663 | +} | ||
| 1664 | +/* | ||
| 1665 | +i.child_task_gps{ | ||
| 1666 | + color: #918d8d; | ||
| 1667 | + cursor: pointer; | ||
| 1668 | +} | ||
| 1669 | + */ | ||
| 1670 | + | ||
| 1671 | + .add-child-task-item{ | ||
| 1672 | + display: inline-block; | ||
| 1673 | + width: 44px; | ||
| 1674 | + height: 30px; | ||
| 1675 | + background: #979191; | ||
| 1676 | + background: linear-gradient(to right,#dadada, #f5f5f5); | ||
| 1677 | + color: #868686; | ||
| 1678 | + font-size: 18px; | ||
| 1679 | + padding: 3px 0 5px 14px; | ||
| 1680 | + border-radius: 0 2px 2px 0 !important; | ||
| 1681 | + margin-bottom: 7px; | ||
| 1682 | + box-shadow: 0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12); | ||
| 1683 | + cursor: pointer; | ||
| 1684 | + transition: all .5s ease; | ||
| 1685 | +} | ||
| 1686 | + | ||
| 1687 | +.child-task-item{ | ||
| 1688 | + position: relative; | ||
| 1689 | +} | ||
| 1690 | + | ||
| 1691 | +.add-child-task-item:hover{ | ||
| 1692 | + box-shadow: 0 8px 17px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19); | ||
| 1693 | +} | ||
| 1694 | + | ||
| 1695 | +.task-item-close{ | ||
| 1696 | + position: absolute; | ||
| 1697 | + right: 15px; | ||
| 1698 | + top: 5px; | ||
| 1699 | + color: red; | ||
| 1700 | + font-size: 24px; | ||
| 1701 | +} | ||
| 1702 | + | ||
| 1703 | +a.task-item-success{ | ||
| 1704 | + position: absolute; | ||
| 1705 | + right: 15px; | ||
| 1706 | + top: 5px; | ||
| 1707 | + font-size: 18px; | ||
| 1708 | + color: #128f12; | ||
| 1709 | +} | ||
| 1710 | + | ||
| 1711 | +.task-item-close:hover{ | ||
| 1712 | + color: #e34545; | ||
| 1713 | +} | ||
| 1714 | + | ||
| 1715 | +select.form-control.custom-val-error, | ||
| 1716 | +input.form-control.custom-val-error{ | ||
| 1717 | + border: 1px solid #e75555; | ||
| 1718 | + color: #e75555; | ||
| 1719 | +} | ||
| 1720 | + | ||
| 1721 | +.custom-anim-modal .alert-danger{ | ||
| 1722 | + margin: 10px 15px 15px; | ||
| 1723 | + border-radius: 5px !important; | ||
| 1724 | + padding: 10px; | ||
| 1725 | + display: none; | ||
| 1726 | +} | ||
| 1727 | + | ||
| 1728 | +tr.empty { | ||
| 1729 | + background-color: #fafcfb !important; | ||
| 1730 | +} | ||
| 1731 | + | ||
| 1732 | +tr.empty._active { | ||
| 1733 | + background: #7cccaa !important; | ||
| 1734 | +} |
src/main/resources/static/pages/control/line/index.html
| 1 | <link href="css/lineControl.css" rel="stylesheet" type="text/css" /> | 1 | <link href="css/lineControl.css" rel="stylesheet" type="text/css" /> |
| 2 | +<link href="/metronic_v4.5.4/css/animate.min.css" rel="stylesheet" type="text/css" /> | ||
| 2 | 3 | ||
| 3 | <div class="portlet light portlet-fullscreen" style="transition: all .5s ease;padding: 0;" oncontextmenu=self.event.returnValue=false> | 4 | <div class="portlet light portlet-fullscreen" style="transition: all .5s ease;padding: 0;" oncontextmenu=self.event.returnValue=false> |
| 4 | <div class="portlet-title" style="padding: 17px 20px 0px 20px;border-bottom: none;margin-bottom: 0;background: linear-gradient(to right ,#082F4A, #125688,#0a3f64);padding-bottom: 5px;"> | 5 | <div class="portlet-title" style="padding: 17px 20px 0px 20px;border-bottom: none;margin-bottom: 0;background: linear-gradient(to right ,#082F4A, #125688,#0a3f64);padding-bottom: 5px;"> |
| @@ -182,6 +183,7 @@ $(function() { | @@ -182,6 +183,7 @@ $(function() { | ||
| 182 | getTemp('temps/home_table_tp.html'); | 183 | getTemp('temps/home_table_tp.html'); |
| 183 | getTemp('temps/tooltip_tp.html'); | 184 | getTemp('temps/tooltip_tp.html'); |
| 184 | getTemp('temps/alone_tp.html'); | 185 | getTemp('temps/alone_tp.html'); |
| 186 | + getTemp('temps/child_task_case_tp.html'); | ||
| 185 | 187 | ||
| 186 | function getTemp(url){ | 188 | function getTemp(url){ |
| 187 | $.get(url, function(template){ | 189 | $.get(url, function(template){ |
src/main/resources/static/pages/control/line/js/data.js
| @@ -2,7 +2,6 @@ | @@ -2,7 +2,6 @@ | ||
| 2 | * 数据处理模块 | 2 | * 数据处理模块 |
| 3 | */ | 3 | */ |
| 4 | var _data = (function(){ | 4 | var _data = (function(){ |
| 5 | - | ||
| 6 | var storage = window.localStorage; | 5 | var storage = window.localStorage; |
| 7 | 6 | ||
| 8 | var gpsTimer; | 7 | var gpsTimer; |
| @@ -22,11 +21,23 @@ var _data = (function(){ | @@ -22,11 +21,23 @@ var _data = (function(){ | ||
| 22 | 21 | ||
| 23 | //线路 ——> 路牌 ——> 班次 3层映射 | 22 | //线路 ——> 路牌 ——> 班次 3层映射 |
| 24 | var lineLpMap = {}; | 23 | var lineLpMap = {}; |
| 24 | + //线路标准信息 | ||
| 25 | + var lineInformations = {}; | ||
| 26 | + | ||
| 27 | + //车辆自编号和设备号对照 | ||
| 28 | + var carDeviceIdMapp = {}; | ||
| 25 | 29 | ||
| 26 | var dataObject = { | 30 | var dataObject = { |
| 27 | getLines: function(){ | 31 | getLines: function(){ |
| 28 | return JSON.parse(storage.getItem('lineControlItems')); | 32 | return JSON.parse(storage.getItem('lineControlItems')); |
| 29 | }, | 33 | }, |
| 34 | + getDeviceIdByCar: function(car){ | ||
| 35 | + return carDeviceIdMapp[car]; | ||
| 36 | + }, | ||
| 37 | + //获取线路标准信息 | ||
| 38 | + getLineInformation: function(lineCode){ | ||
| 39 | + return lineInformations[lineCode]; | ||
| 40 | + }, | ||
| 30 | getLineIds: function(){ | 41 | getLineIds: function(){ |
| 31 | return JSON.parse(storage.getItem('lineIds')); | 42 | return JSON.parse(storage.getItem('lineIds')); |
| 32 | }, | 43 | }, |
| @@ -114,9 +125,18 @@ var _data = (function(){ | @@ -114,9 +125,18 @@ var _data = (function(){ | ||
| 114 | array.push(this); | 125 | array.push(this); |
| 115 | }); | 126 | }); |
| 116 | return array; | 127 | return array; |
| 128 | + }, | ||
| 129 | + //根据设备号获取GPS | ||
| 130 | + getGpsByDeviceId: function(deviceId){ | ||
| 131 | + return allGps[deviceId]; | ||
| 117 | } | 132 | } |
| 118 | }; | 133 | }; |
| 119 | 134 | ||
| 135 | + //初始化carDeviceIdMapp | ||
| 136 | + $.get('/realSchedule/carDeviceMapp', function(rs){ | ||
| 137 | + carDeviceIdMapp = rs; | ||
| 138 | + }); | ||
| 139 | + | ||
| 120 | //初始化lineCodes | 140 | //初始化lineCodes |
| 121 | $.each(dataObject.getLines(), function(i, obj){ | 141 | $.each(dataObject.getLines(), function(i, obj){ |
| 122 | lineCodes += (obj.lineCode + ','); | 142 | lineCodes += (obj.lineCode + ','); |
| @@ -129,6 +149,15 @@ var _data = (function(){ | @@ -129,6 +149,15 @@ var _data = (function(){ | ||
| 129 | $('#tab_map #mapContainer').trigger('gps_refresh', [allGps]); | 149 | $('#tab_map #mapContainer').trigger('gps_refresh', [allGps]); |
| 130 | }); | 150 | }); |
| 131 | 151 | ||
| 152 | + //获取线路标准信息 | ||
| 153 | + $.get('/lineInformation/line/multi', {lineCodes: lineCodes} | ||
| 154 | + ,function(rs){ | ||
| 155 | + $.each(rs, function(){ | ||
| 156 | + lineInformations[this.line.lineCode] = this; | ||
| 157 | + delete this['line']; | ||
| 158 | + }); | ||
| 159 | + }); | ||
| 160 | + | ||
| 132 | function refreshGpsProxy(){ | 161 | function refreshGpsProxy(){ |
| 133 | refreshGps(function(add, up){ | 162 | refreshGps(function(add, up){ |
| 134 | $('#tab_home,#tab_map #mapContainer').trigger('gps_refresh', [add, up]); | 163 | $('#tab_home,#tab_map #mapContainer').trigger('gps_refresh', [add, up]); |
| @@ -220,7 +249,7 @@ var _data = (function(){ | @@ -220,7 +249,7 @@ var _data = (function(){ | ||
| 220 | down.sort(downSort); | 249 | down.sort(downSort); |
| 221 | //缓存路由 | 250 | //缓存路由 |
| 222 | if(routes.length > 0){ | 251 | if(routes.length > 0){ |
| 223 | - stationRoute[routes[0].lineCode] = [up, down]; | 252 | + stationRoute[routes[0].lineCode] = [up.slice(0), down.slice(0)]; |
| 224 | } | 253 | } |
| 225 | 254 | ||
| 226 | //合并 | 255 | //合并 |
src/main/resources/static/pages/control/line/js/rightMenu.js
| @@ -15,6 +15,7 @@ var _menu = (function() { | @@ -15,6 +15,7 @@ var _menu = (function() { | ||
| 15 | layer.alert('无法找到当前项对应的班次信息,请尝试刷新页面!', {icon: 2, title: '异常'}); | 15 | layer.alert('无法找到当前项对应的班次信息,请尝试刷新页面!', {icon: 2, title: '异常'}); |
| 16 | return; | 16 | return; |
| 17 | } | 17 | } |
| 18 | + | ||
| 18 | menuObject[method](schedul); | 19 | menuObject[method](schedul); |
| 19 | }); | 20 | }); |
| 20 | 21 | ||
| @@ -138,7 +139,6 @@ var _menu = (function() { | @@ -138,7 +139,6 @@ var _menu = (function() { | ||
| 138 | _alone.refreshSchedule(old); | 139 | _alone.refreshSchedule(old); |
| 139 | }); | 140 | }); |
| 140 | layer.msg('调整间隔成功!'); | 141 | layer.msg('调整间隔成功!'); |
| 141 | - console.log($('tr[data-id='+schedul.id+']').parents('table')[0]); | ||
| 142 | _alone.calculateLineNo($('tr[data-id='+schedul.id+']').parents('table')[0]); | 142 | _alone.calculateLineNo($('tr[data-id='+schedul.id+']').parents('table')[0]); |
| 143 | }); | 143 | }); |
| 144 | }); | 144 | }); |
| @@ -164,20 +164,24 @@ var _menu = (function() { | @@ -164,20 +164,24 @@ var _menu = (function() { | ||
| 164 | }, | 164 | }, |
| 165 | //子任务 | 165 | //子任务 |
| 166 | childTask: function(schedul){ | 166 | childTask: function(schedul){ |
| 167 | + var layIndex = layer.msg('加载中...', {icon: 16}); | ||
| 167 | $.get('/pages/control/line/child_pages/child_task.html', function(content){ | 168 | $.get('/pages/control/line/child_pages/child_task.html', function(content){ |
| 169 | + layer.close(layIndex); | ||
| 168 | layer.open({ | 170 | layer.open({ |
| 169 | type: 1, | 171 | type: 1, |
| 170 | - area: ['930px', '885px'], | 172 | + area: ['930px', '698px'], |
| 171 | maxmin: true, | 173 | maxmin: true, |
| 172 | - skin:'layui-layer-molv', | ||
| 173 | content: content, | 174 | content: content, |
| 174 | shift: 5, | 175 | shift: 5, |
| 175 | title: '子任务编辑', | 176 | title: '子任务编辑', |
| 176 | success: function(){ | 177 | success: function(){ |
| 178 | + dictionaryUtils.transformDom($('#childTaskDiv .nt-dictionary')); | ||
| 177 | $('#childTaskDiv').trigger('init', { | 179 | $('#childTaskDiv').trigger('init', { |
| 178 | - data: _data.getLineLpMap(), | 180 | + //data: _data.getLineLpMap(), |
| 179 | selected: schedul, | 181 | selected: schedul, |
| 180 | - stationRoute: _data.getStationRouteByLine(schedul.xlBm) | 182 | + _data: _data |
| 183 | + //stationRoute: _data.getStationRouteByLine(schedul.xlBm), | ||
| 184 | + // lineInformation: _data.getLineInformation(schedul.xlBm) | ||
| 181 | }); | 185 | }); |
| 182 | } | 186 | } |
| 183 | }); | 187 | }); |
src/main/resources/static/pages/control/line/temps/child_task_case_tp.html
0 → 100644
| 1 | +<!-- 子任务,临加班次模板文件 --> | ||
| 2 | +<script id="child_task_main_table_temp" type="text/html"> | ||
| 3 | +{{each list as item i}} | ||
| 4 | +{{if item == null}} | ||
| 5 | + <tr class="empty"> | ||
| 6 | + <td width="6%" >{{i + 1}}</td> | ||
| 7 | + <td width="9%" ></td> | ||
| 8 | + <td width="9%" ></td> | ||
| 9 | + <td width="14%" ></td> | ||
| 10 | + <td width="14%" ></td> | ||
| 11 | + <td width="6%" ></td> | ||
| 12 | + <td width="10%" ></td> | ||
| 13 | + <td width="9%" ></td> | ||
| 14 | + <td width="9%" ></td> | ||
| 15 | + </tr> | ||
| 16 | +{{else}} | ||
| 17 | +<tr data-id="{{item.id}}" > | ||
| 18 | + <td width="6%" >{{i + 1}}</td> | ||
| 19 | + <td width="9%" >{{item.fcsj}}</td> | ||
| 20 | + <td width="9%" >{{item.zdsj}}</td> | ||
| 21 | + <td width="14%" >{{item.qdzName}}</td> | ||
| 22 | + <td width="14%" >{{item.zdzName}}</td> | ||
| 23 | + <td width="6%" >{{item.jhlc}}</td> | ||
| 24 | + <td width="10%" >{{item.clZbh}}</td> | ||
| 25 | + <td width="9%" >{{item.jName}}</td> | ||
| 26 | + <td width="9%" >{{item.sName}}</td> | ||
| 27 | +</tr> | ||
| 28 | +{{/if}} | ||
| 29 | +{{/each}} | ||
| 30 | +</script> | ||
| 31 | + | ||
| 32 | +<!-- 进场子任务 --> | ||
| 33 | +<script id="child_task_inpark_process_temp" type="text/html"> | ||
| 34 | +<div class="custom-anim-modal wrap" id="inParkProcess"> | ||
| 35 | +<h2 style="text-align: center;"><a href="javascript:;">{{schedul.clZbh}}</a> 回场 </h2> | ||
| 36 | +<div class="alert alert-danger"> | ||
| 37 | + 数据校验失败,请自行检查异常输入. </div> | ||
| 38 | +<div class="custom-box-body" > | ||
| 39 | + <div class="child-task-item yinyun"> | ||
| 40 | + <form> | ||
| 41 | + <input type="hidden" value="{{schedul.id}}" name="schedule.id"> | ||
| 42 | + <input type="hidden" value="正常" name="type1"> | ||
| 43 | + <a class="task-item-close"></a> | ||
| 44 | + <div class="child-task-title">正常营运</div> | ||
| 45 | + <div class="row"> | ||
| 46 | + <div class="col-md-4"> | ||
| 47 | + <span class="custom-label">任务类型: </span> | ||
| 48 | + <select class="form-control" readonly name="type2"> | ||
| 49 | + <option value="1">线路上站点间</option> | ||
| 50 | + </select> | ||
| 51 | + </div> | ||
| 52 | + <div class="col-md-4"> | ||
| 53 | + <span class="custom-label">营运起点: </span> | ||
| 54 | + <select class="form-control" readonly name="startStation"> | ||
| 55 | + <option value="{{schedul.qdzCode}}">{{schedul.qdzName}}</option> | ||
| 56 | + </select> | ||
| 57 | + </div> | ||
| 58 | + <div class="col-md-4"> | ||
| 59 | + <span class="custom-label">营运终点: </span> | ||
| 60 | + <select class="form-control" name="endStation"></select> | ||
| 61 | + </div> | ||
| 62 | + </div> | ||
| 63 | + <div class="row"> | ||
| 64 | + <div class="col-md-4"> | ||
| 65 | + <span class="custom-label">营运里程:</span> | ||
| 66 | + <input class="form-control" name="mileage" value="{{schedul.jhlc}}" readonly> | ||
| 67 | + </div> | ||
| 68 | + <div class="col-md-4"> | ||
| 69 | + <span class="custom-label">开始时间: </span> | ||
| 70 | + <input class="form-control" value="{{schedul.fcsj}}" type="time" name="startDate" readonly> | ||
| 71 | + </div> | ||
| 72 | + <div class="col-md-4"> | ||
| 73 | + <span class="custom-label">结束时间: </span> | ||
| 74 | + <input class="form-control" name="endDate" value="{{schedul.zdsj}}" type="time" required=1> | ||
| 75 | + </div> | ||
| 76 | + </div> | ||
| 77 | + </form> | ||
| 78 | + </div> | ||
| 79 | + | ||
| 80 | + <div class="child-task-item kongshi"> | ||
| 81 | + <form> | ||
| 82 | + <input type="hidden" value="{{schedul.id}}" name="schedule.id"> | ||
| 83 | + <input type="hidden" value="正常" name="type1"> | ||
| 84 | + <a class="task-item-close"></a> | ||
| 85 | + | ||
| 86 | + <div class="child-task-title">空驶进场</div> | ||
| 87 | + <div class="row"> | ||
| 88 | + <div class="col-md-4"> | ||
| 89 | + <span class="custom-label">任务类型: </span> | ||
| 90 | + <select class="form-control" readonly name="type2"> | ||
| 91 | + <option value="2">进场</option> | ||
| 92 | + </select> | ||
| 93 | + </div> | ||
| 94 | + <div class="col-md-4"> | ||
| 95 | + <span class="custom-label">空驶起点: </span> | ||
| 96 | + <select class="form-control" name="startStation" readonly>{{route}}</select> | ||
| 97 | + </div> | ||
| 98 | + <div class="col-md-4"> | ||
| 99 | + <span class="custom-label">停车场: </span> | ||
| 100 | + <select class="form-control" name="endStation" id="kongshiEndStation"></select> | ||
| 101 | + </div> | ||
| 102 | + </div> | ||
| 103 | + <div class="row"> | ||
| 104 | + <div class="col-md-4"> | ||
| 105 | + <span class="custom-label">空驶里程:</span> | ||
| 106 | + <input class="form-control" name="mileage" value="" type="number" required=1> | ||
| 107 | + </div> | ||
| 108 | + <div class="col-md-4"> | ||
| 109 | + <span class="custom-label">开始时间: </span> | ||
| 110 | + <input class="form-control" name="startDate" value="{{schedul.zdsj}}" type="time" required=1> | ||
| 111 | + </div> | ||
| 112 | + <div class="col-md-4"> | ||
| 113 | + <span class="custom-label">结束时间: </span> | ||
| 114 | + <input class="form-control" value="" name="endDate" type="time" required=1> | ||
| 115 | + </div> | ||
| 116 | + </div> | ||
| 117 | + </form> | ||
| 118 | + </div> | ||
| 119 | + | ||
| 120 | + <div class="child-task-item destroy animated flipInX" style="display: none;"> | ||
| 121 | + <form> | ||
| 122 | + <input type="hidden" value="{{schedul.id}}" name="schedule.id"> | ||
| 123 | + <input type="hidden" value="正常" name="type1"> | ||
| 124 | + <input type="hidden" value="1" name="destroy"> | ||
| 125 | + | ||
| 126 | + <a class="task-item-close"></a> | ||
| 127 | + <div class="child-task-title">烂班公里</div> | ||
| 128 | + <div class="row"> | ||
| 129 | + <div class="col-md-4"> | ||
| 130 | + <span class="custom-label">任务类型: </span> | ||
| 131 | + <select class="form-control" readonly name="type2"> | ||
| 132 | + <option value="1">线路上站点间(烂班)</option> | ||
| 133 | + </select> | ||
| 134 | + </div> | ||
| 135 | + <div class="col-md-4"> | ||
| 136 | + <span class="custom-label">烂班起点: </span> | ||
| 137 | + <select class="form-control" name="startStation" readonly>{{route}}</select> | ||
| 138 | + </div> | ||
| 139 | + <div class="col-md-4"> | ||
| 140 | + <span class="custom-label">烂班终点: </span> | ||
| 141 | + <select class="form-control" name="endStation" readonly>{{route}}</select> | ||
| 142 | + </div> | ||
| 143 | + </div> | ||
| 144 | + <div class="row"> | ||
| 145 | + <div class="col-md-4"> | ||
| 146 | + <span class="custom-label">烂班里程:</span> | ||
| 147 | + <input class="form-control" name="mileage" value="" type="number" disabled> | ||
| 148 | + </div> | ||
| 149 | + <div class="col-md-4"> | ||
| 150 | + <span class="custom-label">开始时间: </span> | ||
| 151 | + <input class="form-control" name="startDate" value="{{schedul.zdsj}}" type="time" readonly> | ||
| 152 | + </div> | ||
| 153 | + <div class="col-md-4"> | ||
| 154 | + <span class="custom-label">烂班原因: </span> | ||
| 155 | + <select class="form-control" name="destroyReason" required=1> | ||
| 156 | + <option value="">请选择...</option> | ||
| 157 | + <option value="配车">配车</option> | ||
| 158 | + <option value="保养">保养</option> | ||
| 159 | + <option value="故障">故障</option> | ||
| 160 | + <option value="肇事">肇事</option> | ||
| 161 | + <option value="路阻">路阻</option> | ||
| 162 | + <option value="纠纷">纠纷</option> | ||
| 163 | + <option value="缺人">缺人</option> | ||
| 164 | + <option value="客稀">客稀</option> | ||
| 165 | + <option value="缺车">缺车</option> | ||
| 166 | + <option value="气候">气候</option> | ||
| 167 | + <option value="援外">援外</option> | ||
| 168 | + <option value="吊慢">吊慢</option> | ||
| 169 | + <option value="抽减">抽减</option> | ||
| 170 | + <option value="其他">其他</option> | ||
| 171 | + </select> | ||
| 172 | + </div> | ||
| 173 | + </div> | ||
| 174 | + </form> | ||
| 175 | + </div> | ||
| 176 | + | ||
| 177 | + <div class="child-task-item"> | ||
| 178 | + <div class="row"> | ||
| 179 | + <span class="custom-label" style="margin-left: 13px">备注:</span> | ||
| 180 | + <textarea rows="3" placeholder="备注" name="remarks" class="form-control" style="width: calc(100% - 110px);"></textarea> | ||
| 181 | + </div> | ||
| 182 | + </div> | ||
| 183 | + | ||
| 184 | + <div class="child-task-item" style="padding: 15px;"> | ||
| 185 | + <div class="form-custom-footer" > | ||
| 186 | + <button type="button" class="btn blue-madison confirm"> | ||
| 187 | + <i class="fa fa-check"></i> 确 定 | ||
| 188 | + </button> | ||
| 189 | + <button type="button" class="btn layui-layer-close">取消</button> | ||
| 190 | + </div> | ||
| 191 | + </div> | ||
| 192 | +</div> | ||
| 193 | +</div> | ||
| 194 | +</script> | ||
| 195 | + | ||
| 196 | +<!-- 出场子任务 --> | ||
| 197 | +<script id="child_task_outpark_process_temp" type="text/html"> | ||
| 198 | +<div class="custom-anim-modal wrap" id="outParkProcess"> | ||
| 199 | +<h2 style="text-align: center;"><a href="javascript:;">{{schedul.clZbh}}</a> 出场 </h2> | ||
| 200 | +<div class="alert alert-danger"> | ||
| 201 | + 数据校验失败,请自行检查异常输入. </div> | ||
| 202 | +<div class="custom-box-body" > | ||
| 203 | + <div class="child-task-item yinyun"> | ||
| 204 | + <form> | ||
| 205 | + <input type="hidden" value="{{schedul.id}}" name="schedule.id"> | ||
| 206 | + <input type="hidden" value="正常" name="type1"> | ||
| 207 | + | ||
| 208 | + <a class="task-item-close"></a> | ||
| 209 | + <div class="child-task-title">正常营运</div> | ||
| 210 | + <div class="row"> | ||
| 211 | + <div class="col-md-4"> | ||
| 212 | + <span class="custom-label">任务类型: </span> | ||
| 213 | + <select class="form-control" readonly name="type2"> | ||
| 214 | + <option value="1">线路上站点间</option> | ||
| 215 | + </select> | ||
| 216 | + </div> | ||
| 217 | + <div class="col-md-4"> | ||
| 218 | + <span class="custom-label">营运起点: </span> | ||
| 219 | + <select class="form-control" name="startStation" readonly> | ||
| 220 | + <option value="{{schedul.qdzCode}}">{{schedul.qdzName}}</option> | ||
| 221 | + </select> | ||
| 222 | + </div> | ||
| 223 | + <div class="col-md-4"> | ||
| 224 | + <span class="custom-label">营运终点: </span> | ||
| 225 | + <select class="form-control" name="endStation" readonly> | ||
| 226 | + <option value="{{schedul.zdzCode}}">{{schedul.zdzName}}</option> | ||
| 227 | + </select> | ||
| 228 | + </div> | ||
| 229 | + </div> | ||
| 230 | + <div class="row"> | ||
| 231 | + <div class="col-md-4"> | ||
| 232 | + <span class="custom-label">营运里程:</span> | ||
| 233 | + <input class="form-control" name="mileage" value="{{schedul.jhlc}}" disabled> | ||
| 234 | + </div> | ||
| 235 | + <div class="col-md-4"> | ||
| 236 | + <span class="custom-label">开始时间: </span> | ||
| 237 | + <input class="form-control" value="{{schedul.fcsj}}" name="startDate" type="time" disabled> | ||
| 238 | + </div> | ||
| 239 | + <div class="col-md-4"> | ||
| 240 | + <span class="custom-label">结束时间: </span> | ||
| 241 | + <input class="form-control" name="endDate" value="{{schedul.zdsj}}" type="time" required=1> | ||
| 242 | + </div> | ||
| 243 | + </div> | ||
| 244 | + </form> | ||
| 245 | + </div> | ||
| 246 | + | ||
| 247 | + <div class="child-task-item kongshi"> | ||
| 248 | + <form> | ||
| 249 | + <input type="hidden" value="{{schedul.id}}" name="schedule.id"> | ||
| 250 | + <input type="hidden" value="正常" name="type1"> | ||
| 251 | + | ||
| 252 | + <a class="task-item-close"></a> | ||
| 253 | + <div class="child-task-title">空驶出场</div> | ||
| 254 | + <div class="row"> | ||
| 255 | + <div class="col-md-4"> | ||
| 256 | + <span class="custom-label">任务类型: </span> | ||
| 257 | + <select class="form-control" readonly name="type2"> | ||
| 258 | + <option value="3">出场</option> | ||
| 259 | + </select> | ||
| 260 | + </div> | ||
| 261 | + <div class="col-md-4"> | ||
| 262 | + <span class="custom-label">停车场: </span> | ||
| 263 | + <select class="form-control" name="startStation" id="kongshiStartStation"></select> | ||
| 264 | + </div> | ||
| 265 | + <div class="col-md-4"> | ||
| 266 | + <span class="custom-label">空驶终点: </span> | ||
| 267 | + <select class="form-control" name="endStation" readonly>{{route}}</select> | ||
| 268 | + </div> | ||
| 269 | + </div> | ||
| 270 | + <div class="row"> | ||
| 271 | + <div class="col-md-4"> | ||
| 272 | + <span class="custom-label">空驶里程:</span> | ||
| 273 | + <input class="form-control" name="mileage" value="" type="number" required=1> | ||
| 274 | + </div> | ||
| 275 | + <div class="col-md-4"> | ||
| 276 | + <span class="custom-label">开始时间: </span> | ||
| 277 | + <input class="form-control" name="startDate" value="" type="time" required=1> | ||
| 278 | + </div> | ||
| 279 | + <div class="col-md-4"> | ||
| 280 | + <span class="custom-label">结束时间: </span> | ||
| 281 | + <input class="form-control" value="{{schedul.fcsj}}" name="endDate" type="time" required=1> | ||
| 282 | + </div> | ||
| 283 | + </div> | ||
| 284 | + </form> | ||
| 285 | + </div> | ||
| 286 | + | ||
| 287 | + <div class="child-task-item"> | ||
| 288 | + <div class="row"> | ||
| 289 | + <span class="custom-label" style="margin-left: 13px">备注:</span> | ||
| 290 | + <textarea rows="3" placeholder="备注" name="remarks" class="form-control" style="width: calc(100% - 110px);"></textarea> | ||
| 291 | + </div> | ||
| 292 | + </div> | ||
| 293 | + | ||
| 294 | + <div class="child-task-item" style="padding: 15px;"> | ||
| 295 | + <div class="form-custom-footer" > | ||
| 296 | + <button type="button" class="btn blue-madison confirm"> | ||
| 297 | + <i class="fa fa-check"></i> 确 定 | ||
| 298 | + </button> | ||
| 299 | + <button type="button" class="btn layui-layer-close">取消</button> | ||
| 300 | + </div> | ||
| 301 | + </div> | ||
| 302 | +</div> | ||
| 303 | +</div> | ||
| 304 | +</script> | ||
| 305 | + | ||
| 306 | +<!-- 自定义子任务 --> | ||
| 307 | +<script id="child_task_tempAdd_process_temp" type="text/html"> | ||
| 308 | +<div class="custom-anim-modal wrap" id="tempAddProcess"> | ||
| 309 | +<h2 style="text-align: center;">自定义子任务 </h2> | ||
| 310 | +<div class="alert alert-danger"> | ||
| 311 | + 数据校验失败,请自行检查异常输入. </div> | ||
| 312 | +<div class="custom-box-body" > | ||
| 313 | + <div class="item-list"> | ||
| 314 | + </div> | ||
| 315 | + <div class="add-child-task-item"><i class="fa fa-plus"></i></div> | ||
| 316 | + <div class="child-task-item"> | ||
| 317 | + <div class="row"> | ||
| 318 | + <span class="custom-label" style="margin-left: 13px">备注:</span> | ||
| 319 | + <textarea rows="3" placeholder="备注" name="remarks" class="form-control" style="width: calc(100% - 110px);"></textarea> | ||
| 320 | + </div> | ||
| 321 | + </div> | ||
| 322 | + | ||
| 323 | + <div class="child-task-item" style="padding: 15px;"> | ||
| 324 | + <div class="form-custom-footer" > | ||
| 325 | + <button type="button" class="btn blue-madison confirm"> | ||
| 326 | + <i class="fa fa-check"></i> 确 定 | ||
| 327 | + </button> | ||
| 328 | + <button type="button" class="btn layui-layer-close">取消</button> | ||
| 329 | + </div> | ||
| 330 | + </div> | ||
| 331 | +</div> | ||
| 332 | +</div> | ||
| 333 | +</script> | ||
| 334 | + | ||
| 335 | +<script id="child_task_tempAdd_item_temp" type="text/html"> | ||
| 336 | +<div class="child-task-item yinyun animated fadeIn" id="tempAddItem{{index}}"> | ||
| 337 | +<a class="task-item-close">×</a> | ||
| 338 | +<div class="child-task-title"><span class="no">{{index}}</span></div> | ||
| 339 | +<form> | ||
| 340 | +<input type="hidden" value="{{schedul.id}}" name="schedule.id"> | ||
| 341 | +<div class="row"> | ||
| 342 | + <div class="col-md-4"> | ||
| 343 | + <span class="custom-label">任务类型: </span> | ||
| 344 | + <select class="form-control" style="width: 60px;padding: 6px 2px;" name="type1"> | ||
| 345 | + <option value="正常">正常</option> | ||
| 346 | + <option value="临加">临加</option> | ||
| 347 | + </select> | ||
| 348 | + <select class="form-control nt-dictionary" required=1 name="type2" data-group="ChildTaskType" style="width: 115px;padding: 6px 2px;"></select> | ||
| 349 | + </div> | ||
| 350 | + <div class="col-md-4"> | ||
| 351 | + <span class="custom-label">起点: </span> | ||
| 352 | + <select class="form-control" name="startStation" required=1 disabled></select> | ||
| 353 | + </div> | ||
| 354 | + <div class="col-md-4"> | ||
| 355 | + <span class="custom-label">终点: </span> | ||
| 356 | + <select class="form-control" name="endStation" required=1 disabled></select> | ||
| 357 | + </div> | ||
| 358 | +</div> | ||
| 359 | +<div class="row"> | ||
| 360 | + <div class="col-md-4"> | ||
| 361 | + <span class="custom-label">里程类型:</span> | ||
| 362 | + <select class="form-control" name="mileageType" required=1> | ||
| 363 | + <option value="">请选择...</option> | ||
| 364 | + <option value="营运">营运</option> | ||
| 365 | + <option value="空驶">空驶</option> | ||
| 366 | + </select> | ||
| 367 | + </div> | ||
| 368 | + <div class="col-md-4"> | ||
| 369 | + <span class="custom-label">里程:</span> | ||
| 370 | + <input class="form-control" name="mileage" value="{{schedul.jhlc}}" type="number" required=1> | ||
| 371 | + </div> | ||
| 372 | + <div class="col-md-4"> | ||
| 373 | + <span class="custom-label"></span> | ||
| 374 | + <label style="height: 34px;padding-top: 10px;font-size: 13px;color: gray;font-weight: 600;"> | ||
| 375 | + | ||
| 376 | + <div class="checker" style="display: inline-block;vertical-align: middle;"> | ||
| 377 | + <span><input type="checkbox" value=1 name="destroy" class="icheck" ></span> | ||
| 378 | + </div> | ||
| 379 | + 是否烂班 | ||
| 380 | + </label> | ||
| 381 | + </div> | ||
| 382 | +</div> | ||
| 383 | +<div class="row"> | ||
| 384 | + <div class="col-md-4"> | ||
| 385 | + <span class="custom-label">开始时间: </span> | ||
| 386 | + <input class="form-control" name="startDate" value="{{schedul.fcsj}}" type="time" required=1> | ||
| 387 | + </div> | ||
| 388 | + <div class="col-md-4"> | ||
| 389 | + <span class="custom-label">结束时间: </span> | ||
| 390 | + <input class="form-control" name="endDate" value="{{schedul.zdsj}}" type="time" required=1> | ||
| 391 | + </div> | ||
| 392 | + <div class="col-md-4 destroy-reason-wrap animated flipInX" style="display:none;"> | ||
| 393 | + <span class="custom-label">烂班原因: </span> | ||
| 394 | + <select class="form-control" name="destroyReason" required=1> | ||
| 395 | + <option value="">请选择...</option> | ||
| 396 | + <option value="配车">配车</option> | ||
| 397 | + <option value="保养">保养</option> | ||
| 398 | + <option value="故障">故障</option> | ||
| 399 | + <option value="肇事">肇事</option> | ||
| 400 | + <option value="路阻">路阻</option> | ||
| 401 | + <option value="纠纷">纠纷</option> | ||
| 402 | + <option value="缺人">缺人</option> | ||
| 403 | + <option value="客稀">客稀</option> | ||
| 404 | + <option value="缺车">缺车</option> | ||
| 405 | + <option value="气候">气候</option> | ||
| 406 | + <option value="援外">援外</option> | ||
| 407 | + <option value="吊慢">吊慢</option> | ||
| 408 | + <option value="抽减">抽减</option> | ||
| 409 | + <option value="其他">其他</option> | ||
| 410 | + </select> | ||
| 411 | + </div> | ||
| 412 | +</div> | ||
| 413 | +</form> | ||
| 414 | +</div> | ||
| 415 | +</script> | ||
| 416 | + | ||
| 417 | + | ||
| 418 | +<!-- 临加班次 --> | ||
| 419 | +<script id="schedul_tempAdd_item_temp" type="text/html"> | ||
| 420 | +<div class="custom-anim-modal wrap" id="schTempAddModal"> | ||
| 421 | +<h2 style="text-align: center;">临加班次 </h2> | ||
| 422 | +<div class="alert alert-danger"> | ||
| 423 | + 数据校验失败,请自行检查异常输入. </div> | ||
| 424 | +<div class="custom-box-body" > | ||
| 425 | + <div class="child-task-item yinyun"> | ||
| 426 | + <form> | ||
| 427 | + <div class="row"> | ||
| 428 | + <div class="col-md-4"> | ||
| 429 | + <span class="custom-label">班次类型: </span> | ||
| 430 | + <select class="form-control nt-dictionary" data-group="ScheduleType" name="bcType"></select> | ||
| 431 | + </div> | ||
| 432 | + <div class="col-md-4"> | ||
| 433 | + </div> | ||
| 434 | + <div class="col-md-4"> | ||
| 435 | + <span class="custom-label">上下行: </span> | ||
| 436 | + <select class="form-control nt-dictionary" data-group="LineTrend" name="xlDir" required=1 ></select> | ||
| 437 | + </div> | ||
| 438 | + </div> | ||
| 439 | + | ||
| 440 | + <div class="row"> | ||
| 441 | + <div class="col-md-4"> | ||
| 442 | + <span class="custom-label">序号: </span> | ||
| 443 | + <input class="form-control" value=""> | ||
| 444 | + </div> | ||
| 445 | + <div class="col-md-4"> | ||
| 446 | + <span class="custom-label">开始时间: </span> | ||
| 447 | + <input class="form-control" value="" type="time" name="fcsj" required=1> | ||
| 448 | + </div> | ||
| 449 | + <div class="col-md-4"> | ||
| 450 | + <span class="custom-label">结束时间: </span> | ||
| 451 | + <input class="form-control" value="" type="time" name="zdsj" required=1> | ||
| 452 | + </div> | ||
| 453 | + </div> | ||
| 454 | + | ||
| 455 | + <div class="row"> | ||
| 456 | + <div class="col-md-4"> | ||
| 457 | + <span class="custom-label">起点: </span> | ||
| 458 | + <select class="form-control" name="qdzCode" required=1 ></select> | ||
| 459 | + </div> | ||
| 460 | + <div class="col-md-4"> | ||
| 461 | + <span class="custom-label">终点: </span> | ||
| 462 | + <select class="form-control" name="zdzCode" required=1 ></select> | ||
| 463 | + </div> | ||
| 464 | + <div class="col-md-4"> | ||
| 465 | + <span class="custom-label">里程: </span> | ||
| 466 | + <input class="form-control" value="" type="number" name="jhlc" required=1> | ||
| 467 | + </div> | ||
| 468 | + </div> | ||
| 469 | + | ||
| 470 | + <div class="row"> | ||
| 471 | + <div class="col-md-4"> | ||
| 472 | + <span class="custom-label">车辆: </span> | ||
| 473 | + <select class="form-control" name="clZbh" required=1 ></select> | ||
| 474 | + </div> | ||
| 475 | + <div class="col-md-4"> | ||
| 476 | + <span class="custom-label">驾驶员: </span> | ||
| 477 | + <select class="form-control" name="jGh" required=1 ></select> | ||
| 478 | + </div> | ||
| 479 | + <div class="col-md-4"> | ||
| 480 | + <span class="custom-label">售票员: </span> | ||
| 481 | + <select class="form-control" name="sGh" required=1 ></select> | ||
| 482 | + </div> | ||
| 483 | + </div> | ||
| 484 | + </form> | ||
| 485 | + </div> | ||
| 486 | + | ||
| 487 | + <div class="child-task-item" style="padding: 15px;"> | ||
| 488 | + <div class="form-custom-footer" > | ||
| 489 | + <button type="button" class="btn blue-madison confirm"> | ||
| 490 | + <i class="fa fa-check"></i> 确 定 | ||
| 491 | + </button> | ||
| 492 | + <button type="button" class="btn layui-layer-close">取消</button> | ||
| 493 | + </div> | ||
| 494 | + </div> | ||
| 495 | +</div> | ||
| 496 | +</div> | ||
| 497 | +</script> | ||
| 0 | \ No newline at end of file | 498 | \ No newline at end of file |
src/main/resources/static/pages/permission/dictionary/add.html
| @@ -141,7 +141,7 @@ $(function(){ | @@ -141,7 +141,7 @@ $(function(){ | ||
| 141 | function submit(){ | 141 | function submit(){ |
| 142 | $post('/dictionary', params, function() { | 142 | $post('/dictionary', params, function() { |
| 143 | layer.msg('添加成功...'); | 143 | layer.msg('添加成功...'); |
| 144 | - //loadPage('list.html'); | 144 | + //刷新页面 |
| 145 | loadPage('add.html'); | 145 | loadPage('add.html'); |
| 146 | }); | 146 | }); |
| 147 | } | 147 | } |