Merge remote-tracking branch 'origin/deng' into deng
This commit is contained in:
@ -0,0 +1,194 @@
|
||||
package com.sipai.controller.administration;
|
||||
|
||||
import net.sf.json.JSONArray;
|
||||
import net.sf.json.JSONObject;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Controller
|
||||
@RequestMapping("/administration/attendance")
|
||||
public class AttendanceController {
|
||||
private static final DateTimeFormatter DAY_FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||
|
||||
@RequestMapping("/showList.do")
|
||||
public String showList(HttpServletRequest request, Model model) {
|
||||
return "/administration/attendanceRecordList";
|
||||
}
|
||||
|
||||
@RequestMapping("/getList.do")
|
||||
public ModelAndView getList(HttpServletRequest request, Model model,
|
||||
@RequestParam(value = "page") Integer page,
|
||||
@RequestParam(value = "rows") Integer rows,
|
||||
@RequestParam(value = "sort", required = false) String sort,
|
||||
@RequestParam(value = "order", required = false) String order) {
|
||||
String name = safe(request.getParameter("search_name"));
|
||||
String dept = safe(request.getParameter("search_dept"));
|
||||
String status = safe(request.getParameter("search_status"));
|
||||
String start = safe(request.getParameter("search_start"));
|
||||
String end = safe(request.getParameter("search_end"));
|
||||
|
||||
LocalDate startDate = parseDay(start);
|
||||
LocalDate endDate = parseDay(end);
|
||||
List<Map<String, Object>> allRows = buildMockRows();
|
||||
List<Map<String, Object>> filtered = new ArrayList<Map<String, Object>>();
|
||||
|
||||
for (Map<String, Object> item : allRows) {
|
||||
String employeeNo = str(item.get("employeeNo"));
|
||||
String employeeName = str(item.get("employeeName"));
|
||||
String deptName = str(item.get("deptName"));
|
||||
String st = str(item.get("status"));
|
||||
LocalDate day = parseDay(str(item.get("attendanceDate")));
|
||||
|
||||
if (!name.isEmpty()) {
|
||||
String q = name.toLowerCase();
|
||||
if (!employeeNo.toLowerCase().contains(q) && !employeeName.toLowerCase().contains(q)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (!dept.isEmpty() && !dept.equals(deptName)) {
|
||||
continue;
|
||||
}
|
||||
if (!status.isEmpty() && !status.equals(st)) {
|
||||
continue;
|
||||
}
|
||||
if (startDate != null && day != null && day.isBefore(startDate)) {
|
||||
continue;
|
||||
}
|
||||
if (endDate != null && day != null && day.isAfter(endDate)) {
|
||||
continue;
|
||||
}
|
||||
filtered.add(item);
|
||||
}
|
||||
|
||||
sortRows(filtered, sort, order);
|
||||
int total = filtered.size();
|
||||
int from = Math.max(0, (page - 1) * rows);
|
||||
int to = Math.min(total, from + rows);
|
||||
List<Map<String, Object>> pageRows = from >= to ? Collections.<Map<String, Object>>emptyList() : filtered.subList(from, to);
|
||||
|
||||
JSONObject result = new JSONObject();
|
||||
result.put("total", total);
|
||||
result.put("rows", JSONArray.fromObject(pageRows));
|
||||
model.addAttribute("result", result.toString());
|
||||
return new ModelAndView("result");
|
||||
}
|
||||
|
||||
private static void sortRows(List<Map<String, Object>> rows, String sort, String order) {
|
||||
final boolean asc = "asc".equalsIgnoreCase(order);
|
||||
final String sortField = (sort == null || sort.trim().isEmpty() || "id".equals(sort)) ? "attendanceDate" : sort;
|
||||
Collections.sort(rows, new Comparator<Map<String, Object>>() {
|
||||
@Override
|
||||
public int compare(Map<String, Object> a, Map<String, Object> b) {
|
||||
int cmp;
|
||||
if ("employeeNo".equals(sortField)) {
|
||||
cmp = str(a.get("employeeNo")).compareTo(str(b.get("employeeNo")));
|
||||
} else if ("employeeName".equals(sortField)) {
|
||||
cmp = str(a.get("employeeName")).compareTo(str(b.get("employeeName")));
|
||||
} else if ("deptName".equals(sortField)) {
|
||||
cmp = str(a.get("deptName")).compareTo(str(b.get("deptName")));
|
||||
} else if ("status".equals(sortField)) {
|
||||
cmp = str(a.get("status")).compareTo(str(b.get("status")));
|
||||
} else if ("checkInTime".equals(sortField)) {
|
||||
cmp = str(a.get("checkInTime")).compareTo(str(b.get("checkInTime")));
|
||||
} else {
|
||||
cmp = str(a.get("attendanceDate")).compareTo(str(b.get("attendanceDate")));
|
||||
}
|
||||
if (!asc) {
|
||||
cmp = -cmp;
|
||||
}
|
||||
if (cmp == 0) {
|
||||
return str(a.get("employeeNo")).compareTo(str(b.get("employeeNo")));
|
||||
}
|
||||
return cmp;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static List<Map<String, Object>> buildMockRows() {
|
||||
String[][] employees = {
|
||||
{"E0001", "张三", "生产部"},
|
||||
{"E0002", "李四", "设备部"},
|
||||
{"E0003", "王五", "品控部"},
|
||||
{"E0004", "赵六", "仓储部"},
|
||||
{"E0005", "钱七", "行政部"}
|
||||
};
|
||||
|
||||
List<Map<String, Object>> rows = new ArrayList<Map<String, Object>>();
|
||||
LocalDate today = LocalDate.now();
|
||||
int idSeq = 1;
|
||||
|
||||
for (int d = 0; d < 45; d++) {
|
||||
LocalDate day = today.minusDays(d);
|
||||
String dayStr = DAY_FMT.format(day);
|
||||
for (int i = 0; i < employees.length; i++) {
|
||||
String[] emp = employees[i];
|
||||
int flag = d + i;
|
||||
|
||||
String status = "正常";
|
||||
String checkIn = "08:55";
|
||||
String checkOut = "18:05";
|
||||
String workHours = "8.5";
|
||||
|
||||
if (flag % 19 == 0) {
|
||||
status = "缺卡";
|
||||
checkOut = "--";
|
||||
workHours = "4.2";
|
||||
} else if (flag % 11 == 0) {
|
||||
status = "迟到";
|
||||
checkIn = "09:" + (10 + (flag % 20));
|
||||
workHours = "7.8";
|
||||
} else if (flag % 13 == 0) {
|
||||
status = "早退";
|
||||
checkOut = "17:" + (20 + (flag % 30));
|
||||
workHours = "7.1";
|
||||
}
|
||||
|
||||
Map<String, Object> row = new LinkedHashMap<String, Object>();
|
||||
row.put("id", "mock-" + idSeq++);
|
||||
row.put("employeeNo", emp[0]);
|
||||
row.put("employeeName", emp[1]);
|
||||
row.put("deptName", emp[2]);
|
||||
row.put("attendanceDate", dayStr);
|
||||
row.put("checkInTime", checkIn);
|
||||
row.put("checkOutTime", checkOut);
|
||||
row.put("workHours", workHours);
|
||||
row.put("status", status);
|
||||
row.put("source", "第三方接口(MOCK)");
|
||||
rows.add(row);
|
||||
}
|
||||
}
|
||||
return rows;
|
||||
}
|
||||
|
||||
private static String safe(String s) {
|
||||
return s == null ? "" : s.trim();
|
||||
}
|
||||
|
||||
private static String str(Object o) {
|
||||
return o == null ? "" : String.valueOf(o);
|
||||
}
|
||||
|
||||
private static LocalDate parseDay(String day) {
|
||||
if (day == null || day.trim().isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
return LocalDate.parse(day.trim(), DAY_FMT);
|
||||
} catch (Exception ex) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,114 @@
|
||||
package com.sipai.controller.jsyw;
|
||||
|
||||
import net.sf.json.JSONArray;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
@Controller
|
||||
@RequestMapping("/jsyw/vehicleGate")
|
||||
public class VehicleGateController {
|
||||
|
||||
@RequestMapping("/showList.do")
|
||||
public String showList(HttpServletRequest request, Model model) {
|
||||
return "/jsyw/vehicleGateList";
|
||||
}
|
||||
|
||||
@RequestMapping("/getList.do")
|
||||
public ModelAndView getList(HttpServletRequest request, Model model,
|
||||
@RequestParam(value = "page", required = false, defaultValue = "1") Integer page,
|
||||
@RequestParam(value = "rows", required = false, defaultValue = "10") Integer rows) {
|
||||
String plateNo = safeStr(request.getParameter("plateNo")).toUpperCase(Locale.ROOT);
|
||||
String passDate = safeStr(request.getParameter("passDate"));
|
||||
String direction = safeStr(request.getParameter("direction"));
|
||||
String status = safeStr(request.getParameter("status"));
|
||||
|
||||
List<Map<String, Object>> mockRows = buildMockRows();
|
||||
List<Map<String, Object>> filteredRows = new ArrayList<Map<String, Object>>();
|
||||
int inCount = 0;
|
||||
int outCount = 0;
|
||||
int abnormalCount = 0;
|
||||
|
||||
for (Map<String, Object> item : mockRows) {
|
||||
String itemPlateNo = safeStr(item.get("plateNo")).toUpperCase(Locale.ROOT);
|
||||
String itemPassTime = safeStr(item.get("passTime"));
|
||||
String itemDirection = safeStr(item.get("direction"));
|
||||
String itemStatus = safeStr(item.get("status"));
|
||||
|
||||
boolean matchPlate = plateNo.isEmpty() || itemPlateNo.contains(plateNo);
|
||||
boolean matchDate = passDate.isEmpty() || itemPassTime.startsWith(passDate);
|
||||
boolean matchDirection = direction.isEmpty() || direction.equals(itemDirection);
|
||||
boolean matchStatus = status.isEmpty() || status.equals(itemStatus);
|
||||
if (matchPlate && matchDate && matchDirection && matchStatus) {
|
||||
filteredRows.add(item);
|
||||
if ("IN".equals(itemDirection)) {
|
||||
inCount++;
|
||||
} else if ("OUT".equals(itemDirection)) {
|
||||
outCount++;
|
||||
}
|
||||
if ("ABNORMAL".equals(itemStatus)) {
|
||||
abnormalCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int total = filteredRows.size();
|
||||
int pageStart = Math.max((page - 1) * rows, 0);
|
||||
int pageEnd = Math.min(pageStart + rows, total);
|
||||
List<Map<String, Object>> pageRows = new ArrayList<Map<String, Object>>();
|
||||
if (pageStart < pageEnd) {
|
||||
pageRows = filteredRows.subList(pageStart, pageEnd);
|
||||
}
|
||||
|
||||
JSONArray rowsJson = JSONArray.fromObject(pageRows);
|
||||
String result = "{"
|
||||
+ "\"total\":" + total + ","
|
||||
+ "\"rows\":" + rowsJson + ","
|
||||
+ "\"summaryInCount\":" + inCount + ","
|
||||
+ "\"summaryOutCount\":" + outCount + ","
|
||||
+ "\"summaryInsideCount\":" + (inCount - outCount) + ","
|
||||
+ "\"summaryAbnormalCount\":" + abnormalCount
|
||||
+ "}";
|
||||
model.addAttribute("result", result);
|
||||
return new ModelAndView("result");
|
||||
}
|
||||
|
||||
private String safeStr(Object value) {
|
||||
return value == null ? "" : String.valueOf(value).trim();
|
||||
}
|
||||
|
||||
private List<Map<String, Object>> buildMockRows() {
|
||||
List<Map<String, Object>> rows = new ArrayList<Map<String, Object>>();
|
||||
rows.add(buildRow("鲁A12345", "IN", "2026-03-03 08:12:21", "东门1号闸", "张三", "NORMAL", "自动识别放行"));
|
||||
rows.add(buildRow("鲁B66K88", "OUT", "2026-03-03 08:18:46", "东门1号闸", "李四", "NORMAL", "自动识别放行"));
|
||||
rows.add(buildRow("鲁C99871", "IN", "2026-03-03 08:27:19", "南门2号闸", "王五", "ABNORMAL", "车牌识别异常,人工放行"));
|
||||
rows.add(buildRow("鲁A77889", "IN", "2026-03-03 09:04:52", "北门1号闸", "赵六", "NORMAL", "自动识别放行"));
|
||||
rows.add(buildRow("鲁D22319", "OUT", "2026-03-03 09:19:11", "南门2号闸", "钱七", "NORMAL", "自动识别放行"));
|
||||
rows.add(buildRow("鲁E55120", "IN", "2026-03-03 10:03:35", "西门1号闸", "孙八", "NORMAL", "访客车辆"));
|
||||
rows.add(buildRow("鲁F90111", "OUT", "2026-03-03 10:16:05", "北门1号闸", "周九", "ABNORMAL", "未登记离场,值班确认"));
|
||||
rows.add(buildRow("鲁A0P365", "IN", "2026-03-03 10:42:30", "东门1号闸", "吴十", "NORMAL", "自动识别放行"));
|
||||
return rows;
|
||||
}
|
||||
|
||||
private Map<String, Object> buildRow(String plateNo, String direction, String passTime, String gateName,
|
||||
String driverName, String status, String note) {
|
||||
Map<String, Object> row = new HashMap<String, Object>();
|
||||
row.put("plateNo", plateNo);
|
||||
row.put("direction", direction);
|
||||
row.put("passTime", passTime);
|
||||
row.put("gateName", gateName);
|
||||
row.put("driverName", driverName);
|
||||
row.put("status", status);
|
||||
row.put("note", note);
|
||||
return row;
|
||||
}
|
||||
}
|
||||
@ -74,7 +74,7 @@ public class PipelineDataController {
|
||||
|
||||
@RequestMapping("/delete.do")
|
||||
public String dodelete(HttpServletRequest request, Model model,
|
||||
@RequestParam(value = "id") String id) {
|
||||
@RequestParam(value = "id") Long id) {
|
||||
int result = this.pipelineDataService.deleteById(id);
|
||||
model.addAttribute("result", result);
|
||||
return "result";
|
||||
@ -83,15 +83,14 @@ public class PipelineDataController {
|
||||
@RequestMapping("/deletes.do")
|
||||
public String dodeletes(HttpServletRequest request, Model model,
|
||||
@RequestParam(value = "ids") String ids) {
|
||||
ids = ids.replace(",", "','");
|
||||
int result = this.pipelineDataService.deleteByWhere("where id in ('" + ids + "')");
|
||||
int result = this.pipelineDataService.deleteByWhere("where id in (" + ids + ")");
|
||||
model.addAttribute("result", result);
|
||||
return "result";
|
||||
}
|
||||
|
||||
@RequestMapping("/edit.do")
|
||||
public String doedit(HttpServletRequest request, Model model,
|
||||
@RequestParam(value = "id") String id) {
|
||||
@RequestParam(value = "id") Long id) {
|
||||
PipelineData pipelineData = this.pipelineDataService.selectById(id);
|
||||
model.addAttribute("pipelineData", pipelineData);
|
||||
return "/pipeline/pipelineDataEdit";
|
||||
@ -109,7 +108,7 @@ public class PipelineDataController {
|
||||
|
||||
@RequestMapping("/view.do")
|
||||
public String doview(HttpServletRequest request, Model model,
|
||||
@RequestParam(value = "id") String id) {
|
||||
@RequestParam(value = "id") Long id) {
|
||||
PipelineData pipelineData = this.pipelineDataService.selectById(id);
|
||||
model.addAttribute("pipelineData", pipelineData);
|
||||
return "/pipeline/pipelineDataView";
|
||||
|
||||
@ -49,6 +49,14 @@ public class CommDaoImpl<T> implements CommDao<T> {
|
||||
T o = getSqlSession().selectOne(mappernamespace+"."+Thread.currentThread().getStackTrace()[1].getMethodName(), t);
|
||||
return o;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据ID查询(Long类型)
|
||||
*/
|
||||
public T selectByPrimaryKey(Long t){
|
||||
T o = getSqlSession().selectOne(mappernamespace+"."+Thread.currentThread().getStackTrace()[1].getMethodName(), t);
|
||||
return o;
|
||||
}
|
||||
/**
|
||||
* wxp为activiti测试修改
|
||||
* @param t
|
||||
@ -62,6 +70,13 @@ public class CommDaoImpl<T> implements CommDao<T> {
|
||||
return getSqlSession().delete(mappernamespace+"."+Thread.currentThread().getStackTrace()[1].getMethodName(), t);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据ID删除(Long类型)
|
||||
*/
|
||||
public int deleteByPrimaryKey(Long t) {
|
||||
return getSqlSession().delete(mappernamespace+"."+Thread.currentThread().getStackTrace()[1].getMethodName(), t);
|
||||
}
|
||||
|
||||
public int insert(T t){
|
||||
return getSqlSession().insert(mappernamespace+"."+Thread.currentThread().getStackTrace()[1].getMethodName(), t);
|
||||
}
|
||||
|
||||
@ -16,32 +16,30 @@
|
||||
id, pipeline_name, diameter_mm, length_m, start_burial_depth_m, end_burial_depth_m,
|
||||
start_ground_elevation_m, end_ground_elevation_m, pipeline_invert_elevation_m
|
||||
</sql>
|
||||
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >
|
||||
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from pipeline_data
|
||||
where id = #{id,jdbcType=VARCHAR}
|
||||
from tb_pipeline_data
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</select>
|
||||
<delete id="deleteByPrimaryKey" parameterType="java.lang.String" >
|
||||
delete from pipeline_data
|
||||
where id = #{id,jdbcType=VARCHAR}
|
||||
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
|
||||
delete from tb_pipeline_data
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</delete>
|
||||
<insert id="insert" parameterType="com.sipai.entity.pipeline.PipelineData" >
|
||||
insert into pipeline_data (id, pipeline_name, diameter_mm,
|
||||
<insert id="insert" parameterType="com.sipai.entity.pipeline.PipelineData" useGeneratedKeys="true" keyProperty="id" >
|
||||
insert into tb_pipeline_data (pipeline_name, diameter_mm,
|
||||
length_m, start_burial_depth_m, end_burial_depth_m,
|
||||
start_ground_elevation_m, end_ground_elevation_m,
|
||||
pipeline_invert_elevation_m)
|
||||
values (#{id,jdbcType=VARCHAR}, #{pipelineName,jdbcType=VARCHAR}, #{diameterMm,jdbcType=DECIMAL},
|
||||
values (#{pipelineName,jdbcType=VARCHAR}, #{diameterMm,jdbcType=DECIMAL},
|
||||
#{lengthM,jdbcType=DECIMAL}, #{startBurialDepthM,jdbcType=DECIMAL}, #{endBurialDepthM,jdbcType=DECIMAL},
|
||||
#{startGroundElevationM,jdbcType=DECIMAL}, #{endGroundElevationM,jdbcType=DECIMAL},
|
||||
#{pipelineInvertElevationM,jdbcType=DECIMAL})
|
||||
</insert>
|
||||
<insert id="insertSelective" parameterType="com.sipai.entity.pipeline.PipelineData" >
|
||||
insert into pipeline_data
|
||||
<insert id="insertSelective" parameterType="com.sipai.entity.pipeline.PipelineData" useGeneratedKeys="true" keyProperty="id" >
|
||||
insert into tb_pipeline_data
|
||||
<trim prefix="(" suffix=")" suffixOverrides="," >
|
||||
<if test="id != null" >
|
||||
id,
|
||||
</if>
|
||||
|
||||
<if test="pipelineName != null" >
|
||||
pipeline_name,
|
||||
</if>
|
||||
@ -68,9 +66,7 @@
|
||||
</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides="," >
|
||||
<if test="id != null" >
|
||||
#{id,jdbcType=VARCHAR},
|
||||
</if>
|
||||
|
||||
<if test="pipelineName != null" >
|
||||
#{pipelineName,jdbcType=VARCHAR},
|
||||
</if>
|
||||
@ -98,7 +94,7 @@
|
||||
</trim>
|
||||
</insert>
|
||||
<update id="updateByPrimaryKeySelective" parameterType="com.sipai.entity.pipeline.PipelineData" >
|
||||
update pipeline_data
|
||||
update tb_pipeline_data
|
||||
<set >
|
||||
<if test="pipelineName != null" >
|
||||
pipeline_name = #{pipelineName,jdbcType=VARCHAR},
|
||||
@ -125,10 +121,10 @@
|
||||
pipeline_invert_elevation_m = #{pipelineInvertElevationM,jdbcType=DECIMAL},
|
||||
</if>
|
||||
</set>
|
||||
where id = #{id,jdbcType=VARCHAR}
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</update>
|
||||
<update id="updateByPrimaryKey" parameterType="com.sipai.entity.pipeline.PipelineData" >
|
||||
update pipeline_data
|
||||
update tb_pipeline_data
|
||||
set pipeline_name = #{pipelineName,jdbcType=VARCHAR},
|
||||
diameter_mm = #{diameterMm,jdbcType=DECIMAL},
|
||||
length_m = #{lengthM,jdbcType=DECIMAL},
|
||||
@ -137,17 +133,17 @@
|
||||
start_ground_elevation_m = #{startGroundElevationM,jdbcType=DECIMAL},
|
||||
end_ground_elevation_m = #{endGroundElevationM,jdbcType=DECIMAL},
|
||||
pipeline_invert_elevation_m = #{pipelineInvertElevationM,jdbcType=DECIMAL}
|
||||
where id = #{id,jdbcType=VARCHAR}
|
||||
where id = #{id,jdbcType=BIGINT}
|
||||
</update>
|
||||
<select id="selectListByWhere" parameterType="java.lang.String" resultMap="BaseResultMap">
|
||||
select
|
||||
<include refid="Base_Column_List" />
|
||||
from pipeline_data
|
||||
from tb_pipeline_data
|
||||
${where}
|
||||
</select>
|
||||
<delete id="deleteByWhere" parameterType="java.lang.String">
|
||||
delete from
|
||||
pipeline_data
|
||||
tb_pipeline_data
|
||||
${where}
|
||||
</delete>
|
||||
</mapper>
|
||||
|
||||
@ -19,11 +19,25 @@ public class PipelineDataService implements CommService<PipelineData> {
|
||||
return pipelineData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据ID查询(Long类型)
|
||||
*/
|
||||
public PipelineData selectById(Long id) {
|
||||
return pipelineDataDao.selectByPrimaryKey(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int deleteById(String id) {
|
||||
return pipelineDataDao.deleteByPrimaryKey(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据ID删除(Long类型)
|
||||
*/
|
||||
public int deleteById(Long id) {
|
||||
return pipelineDataDao.deleteByPrimaryKey(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int save(PipelineData pipelineData) {
|
||||
return pipelineDataDao.insert(pipelineData);
|
||||
|
||||
@ -2,8 +2,8 @@ es.nodes=127.0.0.1
|
||||
#es.nodes=122.51.194.184
|
||||
es.host=9300
|
||||
#es.name=elastic
|
||||
es.name=my-application
|
||||
#es.name=elasticsearch
|
||||
#es.name=elasticsearch-sipaiis
|
||||
|
||||
es.name=my-application
|
||||
|
||||
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
#redis<69><73><EFBFBD><EFBFBD>
|
||||
#redis.host=122.51.194.184
|
||||
redis.host=127.0.0.1
|
||||
redis.host=122.51.194.184
|
||||
# redis.host=127.0.0.1
|
||||
#<23><><EFBFBD><EFBFBD>single <20><>Ⱥcluster
|
||||
redis.mode=single
|
||||
#redis.port=26739
|
||||
redis.port=6379
|
||||
redis.port=26739
|
||||
# redis.port=6379
|
||||
redis.password=Aa112211
|
||||
redis.maxIdle=100
|
||||
redis.maxActive=300
|
||||
|
||||
39
src/main/webapp/CSS/module/jsyw-vehicle-gate.css
Normal file
39
src/main/webapp/CSS/module/jsyw-vehicle-gate.css
Normal file
@ -0,0 +1,39 @@
|
||||
.gate-summary-row .small-box {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.gate-summary-row .small-box .icon {
|
||||
top: 4px;
|
||||
}
|
||||
|
||||
.gate-search-line {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.gate-input {
|
||||
width: 170px;
|
||||
margin-right: 8px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.gate-detail-line {
|
||||
line-height: 28px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.gate-detail-line span:first-child {
|
||||
color: #666;
|
||||
display: inline-block;
|
||||
width: 72px;
|
||||
}
|
||||
|
||||
.gate-photo-placeholder {
|
||||
margin-top: 12px;
|
||||
border: 1px dashed #d2d6de;
|
||||
background: #fafafa;
|
||||
color: #999;
|
||||
text-align: center;
|
||||
line-height: 120px;
|
||||
height: 120px;
|
||||
}
|
||||
|
||||
@ -532,9 +532,9 @@ function initMenu() {
|
||||
// 注意:新菜单项可能直接是文本,也可能包含 i 标签
|
||||
var exists = false;
|
||||
$treeviewMenu.find('li').each(function() {
|
||||
if ($(this).text().indexOf('新源头GIS管理') > -1) {
|
||||
exists = true;
|
||||
}
|
||||
// if ($(this).text().indexOf('管道管理') > -1) {
|
||||
// exists = true;
|
||||
// }
|
||||
});
|
||||
|
||||
if (!exists) {
|
||||
@ -545,9 +545,6 @@ function initMenu() {
|
||||
var newMenuHtml = '';
|
||||
if (typeof addTab === 'function') {
|
||||
// 假设 addTab(id, name, url)
|
||||
// /jsp/pipeline/pipelineDataList.jsp
|
||||
// newMenuHtml = '<li><a href="javascript:void(0);" onclick="addTab(\'newSourceGIS\', \'新源头GIS管理\', \'/jsp/visual/newSourceGISPage.jsp\')"><i class="fa fa-map-marker"></i> 新源头GIS管理</a></li>';
|
||||
newMenuHtml = '<li><a href="javascript:void(0);" onclick="addTab(\'pipelineDataList\', \'管道管理\', \'/jsp/pipeline/pipelineDataList.jsp\')"><i class="fa fa-map-marker"></i> 管道管理</a></li>';
|
||||
} else {
|
||||
// 如果没有 addTab,尝试使用 iframe 加载或者直接跳转(但在框架内)
|
||||
// refreshPage 通常是 location.replace,这会刷新整个页面。
|
||||
@ -565,8 +562,6 @@ function initMenu() {
|
||||
// 所以我们应该优先使用 addTab。
|
||||
// 如果 addTab 未定义(可能在 index.jsp 中定义),我们尝试模拟它。
|
||||
// 由于 comm.js 被 index.jsp 引用,addTab 应该可用。
|
||||
// newMenuHtml = '<li><a href="javascript:void(0);" onclick="if(typeof addTab === \'function\'){addTab(\'newSourceGIS\', \'新源头GIS管理\', \'/jsp/visual/newSourceGISPage.jsp\');}else{refreshPage(\'' + ext.contextPath + '/jsp/visual/newSourceGISPage.jsp\');}"><i class="fa fa-map-marker"></i> 新源头GIS管理</a></li>';
|
||||
newMenuHtml = '<li><a href="javascript:void(0);" onclick="if(typeof addTab === \'function\'){addTab(\'pipelineDataList\', \'管道管理\', \'/jsp/pipeline/pipelineDataList.jsp\');}else{refreshPage(\'' + ext.contextPath + '/jsp/pipeline/pipelineDataList.jsp\');}"><i class="fa fa-map-marker"></i> 管道管理</a></li>';
|
||||
}
|
||||
$treeviewMenu.append(newMenuHtml);
|
||||
|
||||
|
||||
161
src/main/webapp/JS/jsyw/vehicleGateList.js
Normal file
161
src/main/webapp/JS/jsyw/vehicleGateList.js
Normal file
@ -0,0 +1,161 @@
|
||||
function getDirectionText(direction) {
|
||||
return direction === "IN" ? "进闸" : "出闸";
|
||||
}
|
||||
|
||||
function getStatusText(status) {
|
||||
return status === "ABNORMAL" ? "异常" : "正常";
|
||||
}
|
||||
|
||||
function getDirectionLabel(direction) {
|
||||
if (direction === "IN") {
|
||||
return "<span class='label label-success'>进闸</span>";
|
||||
}
|
||||
return "<span class='label label-info'>出闸</span>";
|
||||
}
|
||||
|
||||
function getStatusLabel(status) {
|
||||
if (status === "ABNORMAL") {
|
||||
return "<span class='label label-danger'>异常</span>";
|
||||
}
|
||||
return "<span class='label label-primary'>正常</span>";
|
||||
}
|
||||
|
||||
function renderSummaryByResponse(res) {
|
||||
$("#summaryInCount").text(res.summaryInCount || 0);
|
||||
$("#summaryOutCount").text(res.summaryOutCount || 0);
|
||||
$("#summaryInsideCount").text(res.summaryInsideCount || 0);
|
||||
$("#summaryAbnormalCount").text(res.summaryAbnormalCount || 0);
|
||||
}
|
||||
|
||||
function initGateTable() {
|
||||
$("#gateTable").bootstrapTable({
|
||||
url: ext.contextPath + "/jsyw/vehicleGate/getList.do",
|
||||
method: "post",
|
||||
cache: false,
|
||||
striped: true,
|
||||
pagination: true,
|
||||
pageList: [10, 20, 50],
|
||||
pageSize: 10,
|
||||
pageNumber: 1,
|
||||
sidePagination: "server",
|
||||
queryParams: function (params) {
|
||||
return {
|
||||
rows: params.limit,
|
||||
page: params.offset / params.limit + 1,
|
||||
sort: params.sort,
|
||||
order: params.order,
|
||||
plateNo: $.trim($("#search_plateNo").val()),
|
||||
passDate: $.trim($("#search_passDate").val()),
|
||||
direction: $("#search_direction").val(),
|
||||
status: $("#search_status").val()
|
||||
};
|
||||
},
|
||||
responseHandler: function (res) {
|
||||
renderSummaryByResponse(res || {});
|
||||
return {
|
||||
total: (res && res.total) ? res.total : 0,
|
||||
rows: (res && res.rows) ? res.rows : []
|
||||
};
|
||||
},
|
||||
columns: [
|
||||
{
|
||||
field: "plateNo",
|
||||
title: "车牌号",
|
||||
align: "center",
|
||||
valign: "middle"
|
||||
},
|
||||
{
|
||||
field: "direction",
|
||||
title: "通行方向",
|
||||
align: "center",
|
||||
valign: "middle",
|
||||
formatter: function (value) {
|
||||
return getDirectionLabel(value);
|
||||
}
|
||||
},
|
||||
{
|
||||
field: "passTime",
|
||||
title: "通行时间",
|
||||
align: "center",
|
||||
valign: "middle"
|
||||
},
|
||||
{
|
||||
field: "gateName",
|
||||
title: "闸机",
|
||||
align: "center",
|
||||
valign: "middle"
|
||||
},
|
||||
{
|
||||
field: "driverName",
|
||||
title: "司机",
|
||||
align: "center",
|
||||
valign: "middle"
|
||||
},
|
||||
{
|
||||
field: "status",
|
||||
title: "状态",
|
||||
align: "center",
|
||||
valign: "middle",
|
||||
formatter: function (value) {
|
||||
return getStatusLabel(value);
|
||||
}
|
||||
},
|
||||
{
|
||||
field: "note",
|
||||
title: "备注",
|
||||
align: "center",
|
||||
valign: "middle"
|
||||
},
|
||||
{
|
||||
title: "操作",
|
||||
align: "center",
|
||||
valign: "middle",
|
||||
width: 100,
|
||||
formatter: function (value, row, index) {
|
||||
return "<button class='btn btn-default btn-sm' onclick='showGateDetail(" + index + ")'><i class='fa fa-eye'></i> 查看</button>";
|
||||
}
|
||||
}
|
||||
],
|
||||
onLoadSuccess: function () {
|
||||
adjustBootstrapTableView("gateTable");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function searchGateRecords() {
|
||||
$("#gateTable").bootstrapTable("refresh", {pageNumber: 1});
|
||||
}
|
||||
|
||||
function resetGateSearch() {
|
||||
$("#search_plateNo").val("");
|
||||
$("#search_passDate").val("");
|
||||
$("#search_direction").val("");
|
||||
$("#search_status").val("");
|
||||
$("#gateTable").bootstrapTable("refresh", {pageNumber: 1});
|
||||
}
|
||||
|
||||
function showGateDetail(index) {
|
||||
var pageRows = $("#gateTable").bootstrapTable("getData") || [];
|
||||
var row = pageRows[index];
|
||||
if (!row) {
|
||||
return;
|
||||
}
|
||||
$("#detail_plateNo").text(row.plateNo || "");
|
||||
$("#detail_direction").text(getDirectionText(row.direction || ""));
|
||||
$("#detail_passTime").text(row.passTime || "");
|
||||
$("#detail_gateName").text(row.gateName || "");
|
||||
$("#detail_driverName").text(row.driverName || "");
|
||||
$("#detail_status").text(getStatusText(row.status || ""));
|
||||
$("#detail_note").text(row.note || "");
|
||||
$("#gateDetailModal").modal("show");
|
||||
}
|
||||
|
||||
$(function () {
|
||||
$("#search_passDate").datepicker({
|
||||
autoclose: true,
|
||||
language: "zh-CN",
|
||||
format: "yyyy-mm-dd"
|
||||
});
|
||||
initGateTable();
|
||||
});
|
||||
|
||||
BIN
src/main/webapp/WEB-INF/lib/sqljdbc4-4.0.jar
Normal file
BIN
src/main/webapp/WEB-INF/lib/sqljdbc4-4.0.jar
Normal file
Binary file not shown.
201
src/main/webapp/jsp/administration/attendanceRecordList.jsp
Normal file
201
src/main/webapp/jsp/administration/attendanceRecordList.jsp
Normal file
@ -0,0 +1,201 @@
|
||||
<%@ page language="java" pageEncoding="UTF-8"%>
|
||||
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
|
||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
|
||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
|
||||
<%@ page import="com.sipai.entity.base.ServerObject"%>
|
||||
<%@ taglib uri="http://www.springsecurity.org/jsp" prefix="security"%>
|
||||
<!DOCTYPE html>
|
||||
<head>
|
||||
<title><%= ServerObject.atttable.get("TOPTITLE")%></title>
|
||||
<jsp:include page="/jsp/inc.jsp"></jsp:include>
|
||||
|
||||
<script type="text/javascript">
|
||||
var dosearch = function () {
|
||||
$("#table").bootstrapTable('refresh', {pageNumber: 1});
|
||||
};
|
||||
|
||||
var resetSearch = function () {
|
||||
$('#search_name').val('');
|
||||
$('#search_dept').val('');
|
||||
$('#search_status').val('');
|
||||
$('#search_start').val('');
|
||||
$('#search_end').val('');
|
||||
dosearch();
|
||||
};
|
||||
|
||||
var statusFormatter = function (value) {
|
||||
if (value === '正常') {
|
||||
return '<span class="label label-success">正常</span>';
|
||||
}
|
||||
if (value === '迟到') {
|
||||
return '<span class="label label-warning">迟到</span>';
|
||||
}
|
||||
if (value === '早退') {
|
||||
return '<span class="label label-primary">早退</span>';
|
||||
}
|
||||
return '<span class="label label-danger">' + value + '</span>';
|
||||
};
|
||||
|
||||
$(function () {
|
||||
$('#search_start,#search_end').datepicker({
|
||||
format: 'yyyy-mm-dd',
|
||||
autoclose: true,
|
||||
language: 'zh-CN',
|
||||
clearBtn: true
|
||||
});
|
||||
|
||||
$('#table').bootstrapTable({
|
||||
url: ext.contextPath + '/administration/attendance/getList.do',
|
||||
cache: false,
|
||||
striped: true,
|
||||
pagination: true,
|
||||
pageList: [10, 20, 50],
|
||||
pageSize: 20,
|
||||
pageNumber: 1,
|
||||
sidePagination: 'server',
|
||||
sortName: 'attendanceDate',
|
||||
sortOrder: 'desc',
|
||||
queryParams: function (params) {
|
||||
return {
|
||||
rows: params.limit,
|
||||
page: params.offset / params.limit + 1,
|
||||
sort: params.sort,
|
||||
order: params.order,
|
||||
search_name: $('#search_name').val(),
|
||||
search_dept: $('#search_dept').val(),
|
||||
search_status: $('#search_status').val(),
|
||||
search_start: $('#search_start').val(),
|
||||
search_end: $('#search_end').val()
|
||||
};
|
||||
},
|
||||
columns: [{
|
||||
field: 'employeeNo',
|
||||
title: '工号',
|
||||
sortable: true,
|
||||
align: 'center',
|
||||
valign: 'middle'
|
||||
}, {
|
||||
field: 'employeeName',
|
||||
title: '姓名',
|
||||
sortable: true,
|
||||
align: 'center',
|
||||
valign: 'middle'
|
||||
}, {
|
||||
field: 'deptName',
|
||||
title: '部门',
|
||||
sortable: true,
|
||||
align: 'center',
|
||||
valign: 'middle'
|
||||
}, {
|
||||
field: 'attendanceDate',
|
||||
title: '日期',
|
||||
sortable: true,
|
||||
align: 'center',
|
||||
valign: 'middle'
|
||||
}, {
|
||||
field: 'checkInTime',
|
||||
title: '上班打卡',
|
||||
sortable: true,
|
||||
align: 'center',
|
||||
valign: 'middle'
|
||||
}, {
|
||||
field: 'checkOutTime',
|
||||
title: '下班打卡',
|
||||
align: 'center',
|
||||
valign: 'middle'
|
||||
}, {
|
||||
field: 'workHours',
|
||||
title: '工时(小时)',
|
||||
align: 'center',
|
||||
valign: 'middle'
|
||||
}, {
|
||||
field: 'status',
|
||||
title: '状态',
|
||||
sortable: true,
|
||||
align: 'center',
|
||||
valign: 'middle',
|
||||
formatter: statusFormatter
|
||||
}, {
|
||||
field: 'source',
|
||||
title: '数据来源',
|
||||
align: 'center',
|
||||
valign: 'middle'
|
||||
}],
|
||||
onLoadSuccess: function () {
|
||||
adjustBootstrapTableView("table");
|
||||
},
|
||||
onLoadError: function () {
|
||||
console.info("加载考勤数据失败");
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body onload="initMenu()" class="hold-transition ${cu.themeclass} sidebar-mini">
|
||||
<div class="wrapper">
|
||||
<div class="content-wrapper">
|
||||
<section class="content-header">
|
||||
<h1 id="head_title"></h1>
|
||||
<ol class="breadcrumb">
|
||||
<li><a id='head_firstlevel' href="#"><i class="fa fa-dashboard"></i> </a></li>
|
||||
</ol>
|
||||
</section>
|
||||
<section class="content container-fluid">
|
||||
<div id="mainAlertdiv"></div>
|
||||
<div id="subDiv"></div>
|
||||
|
||||
<div class="box box-primary">
|
||||
<div class="box-header with-border">
|
||||
<h3 class="box-title">员工考勤记录</h3>
|
||||
<span class="text-muted" style="margin-left: 10px;">当前为第三方考勤接口模拟数据(MOCK)</span>
|
||||
</div>
|
||||
<div class="box-body">
|
||||
<div class="form-inline" style="margin-bottom: 10px;">
|
||||
<div class="form-group" style="margin-right: 8px;">
|
||||
<input type="text" id="search_name" class="form-control input-sm" style="width: 180px;"
|
||||
placeholder="姓名/工号">
|
||||
</div>
|
||||
<div class="form-group" style="margin-right: 8px;">
|
||||
<select id="search_dept" class="form-control input-sm" style="width: 120px;">
|
||||
<option value="">全部部门</option>
|
||||
<option value="生产部">生产部</option>
|
||||
<option value="设备部">设备部</option>
|
||||
<option value="品控部">品控部</option>
|
||||
<option value="仓储部">仓储部</option>
|
||||
<option value="行政部">行政部</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group" style="margin-right: 8px;">
|
||||
<select id="search_status" class="form-control input-sm" style="width: 100px;">
|
||||
<option value="">全部状态</option>
|
||||
<option value="正常">正常</option>
|
||||
<option value="迟到">迟到</option>
|
||||
<option value="早退">早退</option>
|
||||
<option value="缺卡">缺卡</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group" style="margin-right: 8px;">
|
||||
<input type="text" id="search_start" class="form-control input-sm" style="width: 120px;"
|
||||
placeholder="开始日期">
|
||||
</div>
|
||||
<div class="form-group" style="margin-right: 8px;">
|
||||
<input type="text" id="search_end" class="form-control input-sm" style="width: 120px;"
|
||||
placeholder="结束日期">
|
||||
</div>
|
||||
<div class="btn-group btn-group-sm">
|
||||
<button type="button" class="btn btn-default" onclick="dosearch();"><i
|
||||
class="fa fa-search"></i> 查询
|
||||
</button>
|
||||
<button type="button" class="btn btn-default" onclick="resetSearch();"><i
|
||||
class="fa fa-undo"></i> 重置
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<table id="table"></table>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,70 +1,619 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<!DOCTYPE html>
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<title>水厂大屏展示</title>
|
||||
<script type="text/javascript" src="<%=request.getContextPath()%>/node_modules/jquery/dist/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="<%=request.getContextPath()%>/JS/echarts3.0.js"></script>
|
||||
<!-- <script
|
||||
type="text/javascript"
|
||||
src="../../node_modules/jquery/dist/jquery.min.js"
|
||||
></script>
|
||||
<script type="text/javascript" src="../../JS/echarts3.0.js"></script> -->
|
||||
<style>
|
||||
body, html {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: auto; /* Allow scrolling if window is smaller */
|
||||
background-color: #030829;
|
||||
}
|
||||
.screen-container {
|
||||
width: 6500px;
|
||||
height: 1800px;
|
||||
background-image: url('<%=request.getContextPath()%>/IMG/screen1-1.png');
|
||||
/* background-image: url('../../IMG/screen1-1.png'); */
|
||||
background-size: 100% 100%;
|
||||
background-repeat: no-repeat;
|
||||
position: relative;
|
||||
}
|
||||
/* Specific Position for Data 6040 */
|
||||
.val-6040 {
|
||||
position: absolute;
|
||||
top: 335px;
|
||||
left: 209px;
|
||||
width: 121px;
|
||||
height: 62px;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
font-family: 'Gilroy', 'DIN Alternate', 'Arial Narrow', sans-serif;
|
||||
font-weight: 900;
|
||||
font-size: 50px;
|
||||
z-index: 10;
|
||||
text-align: center;
|
||||
line-height: 62px;
|
||||
}
|
||||
.val-4197 {
|
||||
top: 335px;
|
||||
left: 592px;
|
||||
width: fit-content;
|
||||
height: fit-content;
|
||||
display: inline-flex;
|
||||
place-content: flex-start;
|
||||
place-items: flex-end;
|
||||
gap: 8px;
|
||||
}
|
||||
.val-12356 {
|
||||
top: 335px;
|
||||
left: 975px;
|
||||
width: fit-content;
|
||||
height: fit-content;
|
||||
display: inline-flex;
|
||||
place-content: flex-start;
|
||||
place-items: flex-end;
|
||||
gap: 8px;
|
||||
}
|
||||
body,
|
||||
html {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: auto; /* Allow scrolling if window is smaller */
|
||||
background-color: #030829;
|
||||
}
|
||||
.screen-container {
|
||||
width: 6500px;
|
||||
height: 1800px;
|
||||
background-image: url('<%=request.getContextPath()%>/IMG/screen1-1.png');
|
||||
/* background-image: url("../../IMG/screen1.png"); */
|
||||
background-size: 100% 100%;
|
||||
background-repeat: no-repeat;
|
||||
position: relative;
|
||||
}
|
||||
/* Specific Position for Data 6040 */
|
||||
.slqs {
|
||||
position: absolute;
|
||||
width: 121px;
|
||||
height: 62px;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
font-family: "Gilroy", "DIN Alternate", "Arial Narrow", sans-serif;
|
||||
font-weight: 900;
|
||||
font-size: 50px;
|
||||
z-index: 10;
|
||||
text-align: center;
|
||||
line-height: 62px;
|
||||
}
|
||||
.slqs-jinri {
|
||||
top: 335px;
|
||||
left: 209px;
|
||||
}
|
||||
.slqs-zuori {
|
||||
top: 335px;
|
||||
left: 592px;
|
||||
}
|
||||
.slqs-benyue {
|
||||
top: 335px;
|
||||
left: 975px;
|
||||
}
|
||||
|
||||
.ncl-val {
|
||||
position: absolute;
|
||||
width: 76px;
|
||||
height: 36px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
text-align: right;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
font-family: Gilroy;
|
||||
font-weight: 500;
|
||||
font-size: 36px;
|
||||
line-height: 36px;
|
||||
}
|
||||
.ncl-val1 {
|
||||
top: 1168px;
|
||||
left: 318px;
|
||||
}
|
||||
.ncl-val2 {
|
||||
top: 1168px;
|
||||
left: 653px;
|
||||
}
|
||||
.ncl-val3 {
|
||||
top: 1168px;
|
||||
left: 1023px;
|
||||
}
|
||||
.ncl2 {
|
||||
position: absolute;
|
||||
top: 1310px;
|
||||
left: 66px;
|
||||
width: 1077px;
|
||||
height: 440px;
|
||||
}
|
||||
#ncl-chart {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.seven-days-sl {
|
||||
position: absolute;
|
||||
top: 591px;
|
||||
left: 66px;
|
||||
width: 1077px;
|
||||
height: 400px;
|
||||
}
|
||||
#seven-days-chart {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.quality-table {
|
||||
position: absolute;
|
||||
top: 630px;
|
||||
left: 1183px;
|
||||
width: 975px;
|
||||
}
|
||||
.quality-table table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
color: #7ef3ff;
|
||||
font-size: 27px;
|
||||
text-align: center;
|
||||
background: transparent;
|
||||
}
|
||||
.quality-table th,
|
||||
.quality-table td {
|
||||
border: 1px solid rgba(0, 163, 255, 0.4);
|
||||
padding: 16px 23px;
|
||||
}
|
||||
.quality-table th {
|
||||
color: #ffffff;
|
||||
font-size: 27px;
|
||||
font-weight: 600;
|
||||
}
|
||||
.quality-table td:first-child {
|
||||
color: #ffffff;
|
||||
text-align: left;
|
||||
padding-left: 12px;
|
||||
}
|
||||
.quality-table td:last-child {
|
||||
color: rgba(255, 255, 255, 0.6);
|
||||
}
|
||||
.quality-chart {
|
||||
position: absolute;
|
||||
top: 1380px;
|
||||
left: 1183px;
|
||||
width: 975px;
|
||||
height: 370px;
|
||||
}
|
||||
#quality-chart {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
/* 药耗 */
|
||||
.yaohao {
|
||||
position: absolute;
|
||||
top: 343px;
|
||||
width: 94px;
|
||||
height: 56px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
text-align: right;
|
||||
color: rgba(255, 255, 255, 1);
|
||||
font-family: Gilroy;
|
||||
font-weight: 700;
|
||||
font-size: 40px;
|
||||
line-height: 56px;
|
||||
}
|
||||
.yaohao1 {
|
||||
left: 1317px;
|
||||
}
|
||||
.yaohao2 {
|
||||
left: 1652px;
|
||||
}
|
||||
.yaohao3 {
|
||||
left: 2056px;
|
||||
}
|
||||
|
||||
.Middle3 {
|
||||
width: 2100px;
|
||||
position: absolute;
|
||||
top: 300px;
|
||||
left: 2700px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
</head>
|
||||
<body>
|
||||
<div class="screen-container">
|
||||
<!-- <div class="val-6040">6040</div>
|
||||
<div class="val-4197">4197</div>
|
||||
<div class="val-12356">12356</div> -->
|
||||
<div class="left">
|
||||
<div>
|
||||
<div class="slqs slqs-jinri">6040</div>
|
||||
<div class="slqs slqs-zuori">4197</div>
|
||||
<div class="slqs slqs-benyue">12356</div>
|
||||
</div>
|
||||
|
||||
<!-- 七日水量 -->
|
||||
<div class="seven-days-sl">
|
||||
<div id="seven-days-chart"></div>
|
||||
</div>
|
||||
|
||||
<!-- 泥处理指标 -->
|
||||
<div class="ncl">
|
||||
<div class="ncl1">
|
||||
<div class="ncl-val ncl-val1">0</div>
|
||||
<div class="ncl-val ncl-val2">200</div>
|
||||
<div class="ncl-val ncl-val3">4.89</div>
|
||||
</div>
|
||||
<div class="ncl2">
|
||||
<div id="ncl-chart"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="Middle">
|
||||
<div class="Middle1">
|
||||
<!-- 药耗 -->
|
||||
<div>
|
||||
<div class="yaohao yaohao1">300</div>
|
||||
<div class="yaohao yaohao2">200</div>
|
||||
<div class="yaohao yaohao3">1</div>
|
||||
</div>
|
||||
|
||||
<!-- 质量指标 表格 -->
|
||||
<div class="quality-table">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>参数</th>
|
||||
<th>当前值</th>
|
||||
<th>平均值</th>
|
||||
<th>最高</th>
|
||||
<th>最低</th>
|
||||
<th>指标</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>COD (mg/L)</td>
|
||||
<td>13.186</td>
|
||||
<td>12.996</td>
|
||||
<td>14.666</td>
|
||||
<td>11.92</td>
|
||||
<td>0.000–20.000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>TP (mg/L)</td>
|
||||
<td>13.186</td>
|
||||
<td>12.996</td>
|
||||
<td>14.666</td>
|
||||
<td>11.92</td>
|
||||
<td>0.000–20.000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>NH3–N (mg/L)</td>
|
||||
<td>13.186</td>
|
||||
<td>12.996</td>
|
||||
<td>14.666</td>
|
||||
<td>11.92</td>
|
||||
<td>0.000–20.000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>TN (mg/L)</td>
|
||||
<td>13.186</td>
|
||||
<td>12.996</td>
|
||||
<td>14.666</td>
|
||||
<td>11.92</td>
|
||||
<td>0.000–20.000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>PH (mg/L)</td>
|
||||
<td>13.186</td>
|
||||
<td>12.996</td>
|
||||
<td>14.666</td>
|
||||
<td>11.92</td>
|
||||
<td>0.000–20.000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SS</td>
|
||||
<td>13.186</td>
|
||||
<td>12.996</td>
|
||||
<td>14.666</td>
|
||||
<td>11.92</td>
|
||||
<td>0.000–20.000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>温度(℃)</td>
|
||||
<td>13.186</td>
|
||||
<td>12.996</td>
|
||||
<td>14.666</td>
|
||||
<td>11.92</td>
|
||||
<td>0.000–20.000</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="quality-chart">
|
||||
<div id="quality-chart"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="Middle2">
|
||||
<div></div>
|
||||
<div></div>
|
||||
<div></div>
|
||||
<div></div>
|
||||
<div></div>
|
||||
<div></div>
|
||||
</div>
|
||||
|
||||
<!-- 中间图表 -->
|
||||
<div class="Middle3">
|
||||
<img src="../../IMG/monitor.png" style="width: 100%; height: 100%" />
|
||||
</div>
|
||||
|
||||
<div class="Middle4">
|
||||
<!-- 进水 -->
|
||||
<div></div>
|
||||
|
||||
<!-- 出水 -->
|
||||
<div></div>
|
||||
|
||||
<div></div>
|
||||
|
||||
<div></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 视频 -->
|
||||
<div class="right"></div>
|
||||
</div>
|
||||
</body>
|
||||
<script>
|
||||
$(function () {
|
||||
var chartDom = document.getElementById("seven-days-chart");
|
||||
if (!chartDom) return;
|
||||
var myChart = echarts.init(chartDom);
|
||||
var dataAxis = [
|
||||
"11-10",
|
||||
"11-11",
|
||||
"11-12",
|
||||
"11-13",
|
||||
"11-14",
|
||||
"11-15",
|
||||
"11-16",
|
||||
"11-17",
|
||||
];
|
||||
var data = [5200, 4300, 4200, 4300, 6800, 5200, 7400, 5600];
|
||||
var option = {
|
||||
backgroundColor: "transparent",
|
||||
grid: {
|
||||
left: 60,
|
||||
right: 40,
|
||||
top: 40,
|
||||
bottom: 40,
|
||||
},
|
||||
legend: {
|
||||
data: ["处理水量"],
|
||||
right: 10,
|
||||
top: 0,
|
||||
textStyle: {
|
||||
color: "#9BE8FF",
|
||||
fontSize: 25,
|
||||
},
|
||||
},
|
||||
xAxis: {
|
||||
type: "category",
|
||||
data: dataAxis,
|
||||
axisLine: {
|
||||
lineStyle: { color: "#2C3E50" },
|
||||
},
|
||||
axisTick: { show: false },
|
||||
axisLabel: {
|
||||
color: "#B7C9E2",
|
||||
fontSize: 25,
|
||||
},
|
||||
},
|
||||
yAxis: {
|
||||
type: "value",
|
||||
max: 10000,
|
||||
splitNumber: 5,
|
||||
axisLine: { show: false },
|
||||
axisTick: { show: false },
|
||||
axisLabel: {
|
||||
color: "#B7C9E2",
|
||||
fontSize: 18,
|
||||
},
|
||||
splitLine: {
|
||||
lineStyle: {
|
||||
color: "rgba(255,255,255,0.15)",
|
||||
type: "dashed",
|
||||
},
|
||||
},
|
||||
},
|
||||
dataZoom: [{ type: "inside" }],
|
||||
series: [
|
||||
{
|
||||
name: "处理水量",
|
||||
type: "bar",
|
||||
barWidth: 20,
|
||||
data: data,
|
||||
itemStyle: {
|
||||
normal: {
|
||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||
{ offset: 0, color: "#46F2FF" },
|
||||
{ offset: 1, color: "#0B4DB5" },
|
||||
]),
|
||||
shadowColor: "rgba(0, 0, 0, 0.3)",
|
||||
shadowBlur: 10,
|
||||
},
|
||||
},
|
||||
emphasis: {
|
||||
itemStyle: {
|
||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||
{ offset: 0, color: "#6af8ff" },
|
||||
{ offset: 1, color: "#1560d6" },
|
||||
]),
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
type: "bar",
|
||||
barGap: "-100%",
|
||||
data: (function () {
|
||||
var yMax = 10000;
|
||||
var shadow = [];
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
shadow.push(yMax);
|
||||
}
|
||||
return shadow;
|
||||
})(),
|
||||
itemStyle: { normal: { color: "rgba(0,0,0,0.05)" } },
|
||||
silent: true,
|
||||
},
|
||||
],
|
||||
};
|
||||
myChart.setOption(option);
|
||||
var zoomSize = 6;
|
||||
myChart.on("click", function (params) {
|
||||
var startIndex = Math.max(
|
||||
params.dataIndex - Math.floor(zoomSize / 2),
|
||||
0,
|
||||
);
|
||||
var endIndex = Math.min(
|
||||
params.dataIndex + Math.floor(zoomSize / 2),
|
||||
data.length - 1,
|
||||
);
|
||||
myChart.dispatchAction({
|
||||
type: "dataZoom",
|
||||
startValue: dataAxis[startIndex],
|
||||
endValue: dataAxis[endIndex],
|
||||
});
|
||||
});
|
||||
var nclDom = document.getElementById("ncl-chart");
|
||||
if (nclDom) {
|
||||
var nclChart = echarts.init(nclDom, "dark");
|
||||
var nclData = [120, 160, 90, 250, 170, 340, 280, 330, 80, 260];
|
||||
var nclOption = {
|
||||
backgroundColor: "transparent",
|
||||
grid: {
|
||||
left: 60,
|
||||
right: 40,
|
||||
top: 40,
|
||||
bottom: 40,
|
||||
},
|
||||
legend: {
|
||||
data: ["实际小时排泥量"],
|
||||
right: 10,
|
||||
top: 0,
|
||||
textStyle: {
|
||||
color: "#9BE8FF",
|
||||
fontSize: 25,
|
||||
},
|
||||
},
|
||||
xAxis: {
|
||||
type: "category",
|
||||
data: [
|
||||
"2:00",
|
||||
"4:00",
|
||||
"6:00",
|
||||
"8:00",
|
||||
"10:00",
|
||||
"12:00",
|
||||
"14:00",
|
||||
"16:00",
|
||||
"18:00",
|
||||
"20:00",
|
||||
],
|
||||
boundaryGap: false,
|
||||
axisLine: {
|
||||
lineStyle: { color: "#2C3E50" },
|
||||
},
|
||||
axisTick: { show: false },
|
||||
axisLabel: {
|
||||
color: "#B7C9E2",
|
||||
fontSize: 25,
|
||||
},
|
||||
},
|
||||
yAxis: {
|
||||
type: "value",
|
||||
max: 500,
|
||||
splitNumber: 5,
|
||||
axisLine: { show: false },
|
||||
axisTick: { show: false },
|
||||
axisLabel: {
|
||||
color: "#B7C9E2",
|
||||
fontSize: 25,
|
||||
},
|
||||
splitLine: {
|
||||
lineStyle: {
|
||||
color: "rgba(255,255,255,0.15)",
|
||||
type: "dashed",
|
||||
},
|
||||
},
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: "实际小时排泥量",
|
||||
type: "line",
|
||||
smooth: true,
|
||||
symbol: "none",
|
||||
lineStyle: { normal: { width: 2 } },
|
||||
itemStyle: { normal: { color: "#46F2FF" } },
|
||||
areaStyle: {
|
||||
normal: {
|
||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||
{ offset: 0, color: "rgba(70, 242, 255, 0.45)" },
|
||||
{ offset: 1, color: "rgba(11, 77, 181, 0.05)" },
|
||||
]),
|
||||
opacity: 1,
|
||||
},
|
||||
},
|
||||
data: nclData,
|
||||
},
|
||||
],
|
||||
};
|
||||
nclChart.setOption(nclOption);
|
||||
window.addEventListener("resize", function () {
|
||||
nclChart.resize();
|
||||
});
|
||||
}
|
||||
window.addEventListener("resize", function () {
|
||||
myChart.resize();
|
||||
});
|
||||
var qualityDom = document.getElementById("quality-chart");
|
||||
if (qualityDom) {
|
||||
var qualityChart = echarts.init(qualityDom);
|
||||
var qualityData = [8, 13, 9, 14, 21, 14, 18];
|
||||
var qualityOption = {
|
||||
backgroundColor: "transparent",
|
||||
grid: {
|
||||
left: 60,
|
||||
right: 40,
|
||||
top: 40,
|
||||
bottom: 40,
|
||||
},
|
||||
legend: {
|
||||
data: ["水质量"],
|
||||
right: 10,
|
||||
top: 0,
|
||||
textStyle: {
|
||||
color: "#9BE8FF",
|
||||
fontSize: 25,
|
||||
},
|
||||
},
|
||||
xAxis: {
|
||||
type: "category",
|
||||
data: ["11", "12", "13", "14", "15", "16", "17"],
|
||||
boundaryGap: false,
|
||||
axisLine: {
|
||||
lineStyle: { color: "#2C3E50" },
|
||||
},
|
||||
axisTick: { show: false },
|
||||
axisLabel: {
|
||||
color: "#B7C9E2",
|
||||
fontSize: 25,
|
||||
},
|
||||
},
|
||||
yAxis: {
|
||||
type: "value",
|
||||
max: 25,
|
||||
splitNumber: 5,
|
||||
axisLine: { show: false },
|
||||
axisTick: { show: false },
|
||||
axisLabel: {
|
||||
color: "#B7C9E2",
|
||||
fontSize: 25,
|
||||
},
|
||||
splitLine: {
|
||||
lineStyle: {
|
||||
color: "rgba(255,255,255,0.15)",
|
||||
type: "dashed",
|
||||
},
|
||||
},
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: "水质量",
|
||||
type: "line",
|
||||
smooth: true,
|
||||
symbol: "none",
|
||||
lineStyle: { normal: { width: 2 } },
|
||||
itemStyle: { normal: { color: "#46F2FF" } },
|
||||
areaStyle: {
|
||||
normal: {
|
||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
||||
{ offset: 0, color: "rgba(70, 242, 255, 0.45)" },
|
||||
{ offset: 1, color: "rgba(11, 77, 181, 0.05)" },
|
||||
]),
|
||||
opacity: 1,
|
||||
},
|
||||
},
|
||||
data: qualityData,
|
||||
},
|
||||
],
|
||||
};
|
||||
qualityChart.setOption(qualityOption);
|
||||
window.addEventListener("resize", function () {
|
||||
qualityChart.resize();
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
122
src/main/webapp/jsp/jsyw/vehicleGateList.jsp
Normal file
122
src/main/webapp/jsp/jsyw/vehicleGateList.jsp
Normal file
@ -0,0 +1,122 @@
|
||||
<%@ page language="java" pageEncoding="UTF-8" %>
|
||||
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
|
||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
|
||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
|
||||
<%@ page import="com.sipai.entity.base.ServerObject" %>
|
||||
<!DOCTYPE html>
|
||||
<head>
|
||||
<title><%= ServerObject.atttable.get("TOPTITLE")%></title>
|
||||
<jsp:include page="/jsp/inc.jsp"></jsp:include>
|
||||
<link rel="stylesheet" href="<%=request.getContextPath()%>/CSS/module/jsyw-vehicle-gate.css">
|
||||
<script type="text/javascript" src="<%=request.getContextPath()%>/JS/jsyw/vehicleGateList.js"></script>
|
||||
</head>
|
||||
|
||||
<body onload="initMenu()" class="hold-transition ${cu.themeclass} sidebar-mini">
|
||||
<div class="wrapper">
|
||||
<div class="content-wrapper">
|
||||
<section class="content-header">
|
||||
<h1 id="head_title"></h1>
|
||||
<ol class="breadcrumb">
|
||||
<li><a id="head_firstlevel" href="#"><i class="fa fa-dashboard"></i></a></li>
|
||||
</ol>
|
||||
</section>
|
||||
<section class="content container-fluid">
|
||||
<div id="mainAlertdiv"></div>
|
||||
|
||||
<div class="row gate-summary-row">
|
||||
<div class="col-sm-3 col-xs-6">
|
||||
<div class="small-box bg-aqua">
|
||||
<div class="inner">
|
||||
<h3 id="summaryInCount">0</h3>
|
||||
<p>今日进闸</p>
|
||||
</div>
|
||||
<div class="icon"><i class="fa fa-sign-in"></i></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-3 col-xs-6">
|
||||
<div class="small-box bg-green">
|
||||
<div class="inner">
|
||||
<h3 id="summaryOutCount">0</h3>
|
||||
<p>今日出闸</p>
|
||||
</div>
|
||||
<div class="icon"><i class="fa fa-sign-out"></i></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-3 col-xs-6">
|
||||
<div class="small-box bg-yellow">
|
||||
<div class="inner">
|
||||
<h3 id="summaryInsideCount">0</h3>
|
||||
<p>当前场内车辆</p>
|
||||
</div>
|
||||
<div class="icon"><i class="fa fa-car"></i></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-3 col-xs-6">
|
||||
<div class="small-box bg-red">
|
||||
<div class="inner">
|
||||
<h3 id="summaryAbnormalCount">0</h3>
|
||||
<p>异常记录</p>
|
||||
</div>
|
||||
<div class="icon"><i class="fa fa-warning"></i></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="box box-primary">
|
||||
<div class="box-header with-border">
|
||||
<h3 class="box-title">车辆通行记录(静态展示)</h3>
|
||||
</div>
|
||||
<div class="box-body">
|
||||
<form id="searchForm" onsubmit="return false;">
|
||||
<div class="form-group form-inline gate-search-line">
|
||||
<input type="text" class="form-control input-sm gate-input" id="search_plateNo" placeholder="车牌号">
|
||||
<input type="text" class="form-control input-sm gate-input" id="search_passDate" placeholder="通行日期(yyyy-mm-dd)">
|
||||
<select class="form-control input-sm gate-input" id="search_direction">
|
||||
<option value="">通行方向(全部)</option>
|
||||
<option value="IN">进闸</option>
|
||||
<option value="OUT">出闸</option>
|
||||
</select>
|
||||
<select class="form-control input-sm gate-input" id="search_status">
|
||||
<option value="">状态(全部)</option>
|
||||
<option value="NORMAL">正常</option>
|
||||
<option value="ABNORMAL">异常</option>
|
||||
</select>
|
||||
<button type="button" class="btn btn-primary btn-sm" onclick="searchGateRecords()"><i class="fa fa-search"></i> 查询</button>
|
||||
<button type="button" class="btn btn-default btn-sm" onclick="resetGateSearch()"><i class="fa fa-refresh"></i> 重置</button>
|
||||
</div>
|
||||
</form>
|
||||
<table id="gateTable"></table>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal fade" id="gateDetailModal">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<h4 class="modal-title">车辆通行详情</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="gate-detail-line"><span>车牌号:</span><strong id="detail_plateNo"></strong></div>
|
||||
<div class="gate-detail-line"><span>通行方向:</span><span id="detail_direction"></span></div>
|
||||
<div class="gate-detail-line"><span>通行时间:</span><span id="detail_passTime"></span></div>
|
||||
<div class="gate-detail-line"><span>闸机:</span><span id="detail_gateName"></span></div>
|
||||
<div class="gate-detail-line"><span>司机:</span><span id="detail_driverName"></span></div>
|
||||
<div class="gate-detail-line"><span>状态:</span><span id="detail_status"></span></div>
|
||||
<div class="gate-detail-line"><span>备注:</span><span id="detail_note"></span></div>
|
||||
<div class="gate-photo-placeholder">抓拍图占位(静态版)</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default btn-sm" data-dismiss="modal">关闭</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -179,7 +179,7 @@
|
||||
<div style="float:left;height:50%;width:100%;padding:5px 5px 5px 5px;">
|
||||
<div style="height:100%;width:100%;background-color:#ffffff;">
|
||||
<div class="section-header">
|
||||
上海金山卫污水公司
|
||||
上海金山卫污水公司11
|
||||
</div>
|
||||
<div style="width:20%;height:95%;float:left;">
|
||||
<div style="width:100%;height:25%;float:left;background-color:#cbe3f9;margin:6%;">
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user