手机大屏

This commit is contained in:
周源 2021-07-22 10:58:06 +08:00
parent c15912c3cb
commit 0e84e20189
202 changed files with 8649 additions and 154 deletions

View File

@ -40,24 +40,42 @@ public class ApiStatisticsContactController extends ApiBaseController {
@ApiOperation("联络站总数量")
@GetMapping("count")
public void count() {
int count = officeService.count(new LambdaQueryWrapper<Office>().eq(Office::getDuty, "contact"));
@ApiImplicitParam(name = "streetId", value = "街道id")
public void count(String streetId) {
int count = officeService.count(new LambdaQueryWrapper<Office>().eq(Office::getDuty, "contact")
.eq(StrUtil.isNotBlank(streetId), Office::getStreet, streetId));
render(Ret.ok().data(count));
}
@ApiOperation("联络站身份的人举办的活动次数")
@ApiImplicitParam(name = "streetId", value = "街道id")
@GetMapping("activity/count")
public void activityCount() {
Integer activityCount = jdbcTemplate.queryForObject("SELECT count(b.id) FROM t_office a right join t_activity b on a.user_id=b.created_id where a.duty='contact'", Integer.class);
public void activityCount(String streetId) {
Integer activityCount;
if (StrUtil.isNotBlank(streetId)) {
activityCount = jdbcTemplate.queryForObject("SELECT count(b.id) FROM t_office a right join t_activity b on a.user_id=b.created_id " +
"where a.duty='contact' and a.street=? ", Integer.class, streetId);
} else {
activityCount = jdbcTemplate.queryForObject("SELECT count(b.id) FROM t_office a right join t_activity b on a.user_id=b.created_id " +
"where a.duty='contact'", Integer.class);
}
render(Ret.ok().data(activityCount));
}
@ApiOperation("联络站活动举办次数排名")
@ApiImplicitParam(name = "streetId", value = "街道id")
@GetMapping("activity/count/rank")
public void activityCountRank() {
List<CountRankVo> list = jdbcTemplate.query("SELECT c.name,(SELECT count(a.id) FROM t_activity a LEFT JOIN t_office b ON a.created_id=b.user_id WHERE a.created_id=c.user_id) AS count FROM t_office c WHERE c.duty='contact' order by count desc limit 0,6 ", new BeanPropertyRowMapper(CountRankVo.class));
public void activityCountRank(String streetId) {
List<CountRankVo> list;
if (StrUtil.isNotBlank(streetId)) {
list = jdbcTemplate.query("SELECT c.name,(SELECT count(a.id) FROM t_activity a LEFT JOIN t_office b ON a.created_id=b.user_id WHERE a.created_id=c.user_id) AS count " +
"FROM t_office c WHERE c.duty='contact' and c.street=? order by count desc limit 0,6 ", new BeanPropertyRowMapper(CountRankVo.class), streetId);
} else {
list = jdbcTemplate.query("SELECT c.name,(SELECT count(a.id) FROM t_activity a LEFT JOIN t_office b ON a.created_id=b.user_id WHERE a.created_id=c.user_id) AS count " +
"FROM t_office c WHERE c.duty='contact' order by count desc limit 0,6 ", new BeanPropertyRowMapper(CountRankVo.class));
}
List<String> nameList = list.stream().map(CountRankVo::getName).collect(Collectors.toList());
List<String> countList = list.stream().map(CountRankVo::getCount).collect(Collectors.toList());
List<Integer> countList = list.stream().map(CountRankVo::getCount).collect(Collectors.toList());
render(Ret.ok().data(Dict.create().set("nameList", nameList).set("countList", countList)));
}
@ -78,49 +96,20 @@ public class ApiStatisticsContactController extends ApiBaseController {
@GetMapping("sign/record")
@ApiImplicitParam(name = "streetId", value = "街道id")
public void signRecord(String streetId) {
//活动签到
if (StrUtil.isBlank(streetId)) {
List<ActivitySignVo> list = jdbcTemplate.query("SELECT a.sign_time AS signTime,b.activity_address AS address,c.user_name AS NAME FROM t_activity_user a LEFT JOIN t_activity b ON a.activity_id=b.id LEFT JOIN t_sys_user c ON a.user_id=c.id WHERE to_days(a.sign_time)=to_days(now()) ORDER BY a.sign_time DESC LIMIT 0,3", new BeanPropertyRowMapper(ActivitySignVo.class));
render(Ret.ok().data(list));
List<ActivitySignVo> list;
if (StrUtil.isNotBlank(streetId)) {
list = jdbcTemplate.query("SELECT a.sign_time AS signTime,b.activity_address AS address,c.user_name AS NAME FROM t_activity_user a LEFT JOIN t_activity b ON a.activity_id=b.id LEFT JOIN t_sys_user c ON a.user_id=c.id WHERE to_days(a.sign_time)=to_days(now()) AND c.street_id=? ORDER BY a.sign_time DESC LIMIT 0,3", new BeanPropertyRowMapper(ActivitySignVo.class), streetId);
} else {
List<ActivitySignVo> list = jdbcTemplate.query("SELECT a.sign_time AS signTime,b.activity_address AS address,c.user_name AS NAME FROM t_activity_user a LEFT JOIN t_activity b ON a.activity_id=b.id LEFT JOIN t_sys_user c ON a.user_id=c.id WHERE to_days(a.sign_time)=to_days(now()) AND c.street_id=? ORDER BY a.sign_time DESC LIMIT 0,3", new BeanPropertyRowMapper(ActivitySignVo.class), streetId);
render(Ret.ok().data(list));
list = jdbcTemplate.query("SELECT a.sign_time AS signTime,b.activity_address AS address,c.user_name AS NAME FROM t_activity_user a LEFT JOIN t_activity b ON a.activity_id=b.id LEFT JOIN t_sys_user c ON a.user_id=c.id WHERE to_days(a.sign_time)=to_days(now()) ORDER BY a.sign_time DESC LIMIT 0,3", new BeanPropertyRowMapper(ActivitySignVo.class));
}
render(Ret.ok().data(list));
}
@ApiOperation("指定街道的统计 不传为全部")
@GetMapping("count/detail")
@ApiImplicitParam(name = "streetId", value = "街道id")
public void countDetail(String streetId) {
if (StrUtil.isBlank(streetId)) {
//根据街道找联络站账号
List<Office> officeList = officeService.list(new LambdaQueryWrapper<Office>().eq(Office::getDuty, "contact"));
if (CollectionUtil.isNotEmpty(officeList)) {
//省级人大代表数
//-省1市2县3乡镇4
Integer provinceDbCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_db a LEFT JOIN t_office b ON a.office_id=b.id WHERE b.duty='contact' AND a.db_identity=? ", Integer.class, "1");
//市级人大代表数
Integer cityDbCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_db a LEFT JOIN t_office b ON a.office_id=b.id WHERE b.duty='contact' AND a.db_identity=? ", Integer.class, "2");
//县级人大代表数
Integer countryDbCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_db a LEFT JOIN t_office b ON a.office_id=b.id WHERE b.duty='contact' AND a.db_identity=? ", Integer.class, "3");
//乡镇级人大代表数
Integer townDbCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_db a LEFT JOIN t_office b ON a.office_id=b.id WHERE b.duty='contact' AND a.db_identity=? ", Integer.class, "4");
//受理问题数
Integer questionCount = jdbcTemplate.queryForObject("select count(id) from t_voter_suggest_db ", Integer.class);
//督事活动数
Integer superviseThingCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_supervise_thing a left join t_office b on a.created_id=b.created_id where b.duty='contact' ", Integer.class);
//联络站数量
Dict dict = Dict.create().set("contactNum", officeList.size())
.set("provinceDbCount", provinceDbCount)
.set("cityDbCount", cityDbCount)
.set("countryDbCount", countryDbCount)
.set("townDbCount", townDbCount)
.set("questionCount", questionCount)
.set("superviseThingCount", superviseThingCount);
render(Ret.ok().data(dict));
}
} else {
//根据街道找联络站账号
if (StrUtil.isNotBlank(streetId)) {
List<Office> officeList = officeService.list(new LambdaQueryWrapper<Office>().eq(Office::getDuty, "contact")
.eq(Office::getStreet, streetId));
if (CollectionUtil.isNotEmpty(officeList)) {
@ -147,6 +136,32 @@ public class ApiStatisticsContactController extends ApiBaseController {
.set("superviseThingCount", superviseThingCount);
render(Ret.ok().data(dict));
}
} else {
List<Office> officeList = officeService.list(new LambdaQueryWrapper<Office>().eq(Office::getDuty, "contact"));
if (CollectionUtil.isNotEmpty(officeList)) {
//省级人大代表数
//-省1市2县3乡镇4
Integer provinceDbCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_db a LEFT JOIN t_office b ON a.office_id=b.id WHERE b.duty='contact' AND a.db_identity=? ", Integer.class, "1");
//市级人大代表数
Integer cityDbCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_db a LEFT JOIN t_office b ON a.office_id=b.id WHERE b.duty='contact' AND a.db_identity=? ", Integer.class, "2");
//县级人大代表数
Integer countryDbCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_db a LEFT JOIN t_office b ON a.office_id=b.id WHERE b.duty='contact' AND a.db_identity=? ", Integer.class, "3");
//乡镇级人大代表数
Integer townDbCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_db a LEFT JOIN t_office b ON a.office_id=b.id WHERE b.duty='contact' AND a.db_identity=? ", Integer.class, "4");
//受理问题数
Integer questionCount = jdbcTemplate.queryForObject("select count(id) from t_voter_suggest_db ", Integer.class);
//督事活动数
Integer superviseThingCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_supervise_thing a left join t_office b on a.created_id=b.created_id where b.duty='contact' ", Integer.class);
//联络站数量
Dict dict = Dict.create().set("contactNum", officeList.size())
.set("provinceDbCount", provinceDbCount)
.set("cityDbCount", cityDbCount)
.set("countryDbCount", countryDbCount)
.set("townDbCount", townDbCount)
.set("questionCount", questionCount)
.set("superviseThingCount", superviseThingCount);
render(Ret.ok().data(dict));
}
}
}
@ -160,18 +175,18 @@ public class ApiStatisticsContactController extends ApiBaseController {
String year = Convert.toStr(DateUtil.year(date));
List<String> monthList = DateUtils.getMonthList();
Iterator<String> iterator = monthList.iterator();
if (StrUtil.isBlank(streetId)) {
if (StrUtil.isNotBlank(streetId)) {
while (iterator.hasNext()) {
String month = iterator.next();
String yearMonth = year + "-" + month;
Integer activityCount = jdbcTemplate.queryForObject("SELECT count(b.id) FROM t_office a right join t_activity b on a.user_id=b.created_id where a.duty='contact' and DATE_FORMAT( b.created_at, '%Y-%m' )=?", Integer.class, yearMonth);
Integer activityCount = jdbcTemplate.queryForObject("SELECT count(b.id) FROM t_office a right join t_activity b on a.user_id=b.created_id where a.duty='contact' and DATE_FORMAT( b.created_at, '%Y-%m' )=? and a.street=?", Integer.class, yearMonth, streetId);
countList.add(activityCount);
}
} else {
while (iterator.hasNext()) {
String month = iterator.next();
String yearMonth = year + "-" + month;
Integer activityCount = jdbcTemplate.queryForObject("SELECT count(b.id) FROM t_office a right join t_activity b on a.user_id=b.created_id where a.duty='contact' and DATE_FORMAT( b.created_at, '%Y-%m' )=? and a.street=?", Integer.class, yearMonth, streetId);
Integer activityCount = jdbcTemplate.queryForObject("SELECT count(b.id) FROM t_office a right join t_activity b on a.user_id=b.created_id where a.duty='contact' and DATE_FORMAT( b.created_at, '%Y-%m' )=?", Integer.class, yearMonth);
countList.add(activityCount);
}
}

View File

@ -27,6 +27,7 @@ import lombok.AllArgsConstructor;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@ -50,50 +51,68 @@ public class ApiStatisticsDbController extends ApiBaseController {
PerformService performService;
@ApiOperation("人大代表数量统计")
@ApiImplicitParam(name = "streetId", value = "街道id")
@GetMapping("count")
public void count() {
int provinceDbCount = dbService.count(new LambdaQueryWrapper<Db>().eq(Db::getDbIdentity, "1"));
int cityDbCount = dbService.count(new LambdaQueryWrapper<Db>().eq(Db::getDbIdentity, "2"));
int countryDbCount = dbService.count(new LambdaQueryWrapper<Db>().eq(Db::getDbIdentity, "3"));
int townDbCount = dbService.count(new LambdaQueryWrapper<Db>().eq(Db::getDbIdentity, "4"));
public void count(String streetId) {
int provinceDbCount = dbService.count(new LambdaQueryWrapper<Db>().eq(Db::getDbIdentity, "1").eq(StrUtil.isNotBlank(streetId), Db::getPrecinctAddress, streetId));
int cityDbCount = dbService.count(new LambdaQueryWrapper<Db>().eq(Db::getDbIdentity, "2").eq(StrUtil.isNotBlank(streetId), Db::getPrecinctAddress, streetId));
int countryDbCount = dbService.count(new LambdaQueryWrapper<Db>().eq(Db::getDbIdentity, "3").eq(StrUtil.isNotBlank(streetId), Db::getPrecinctAddress, streetId));
int townDbCount = dbService.count(new LambdaQueryWrapper<Db>().eq(Db::getDbIdentity, "4").eq(StrUtil.isNotBlank(streetId), Db::getPrecinctAddress, streetId));
Dict dict = Dict.create().set("provinceDbCount", provinceDbCount).set("cityDbCount", cityDbCount).set("countryDbCount", countryDbCount).set("townDbCount", townDbCount);
render(Ret.ok().data(dict));
}
@ApiOperation("代表履职活动排行")
@ApiImplicitParam(name = "streetId", value = "街道id")
@GetMapping("perform/count")
public void performCount() {
List<CountRankVo> list = jdbcTemplate.query("SELECT c.name,(SELECT count(a.id) FROM t_perform a LEFT JOIN t_db b ON a.created_id=b.user_id WHERE a.created_id=c.user_id) AS count FROM t_db c order by count desc limit 0,10 ", new BeanPropertyRowMapper(CountRankVo.class));
public void performCount(String streetId) {
List<CountRankVo> list;
if (StrUtil.isNotBlank(streetId)) {
list = jdbcTemplate.query("SELECT c.name,(SELECT count(a.id) FROM t_perform a LEFT JOIN t_db b ON a.created_id=b.user_id WHERE a.created_id=c.user_id) AS count FROM t_db c and c.precinct_address=? order by count desc limit 0,10 ", new BeanPropertyRowMapper(CountRankVo.class), streetId);
} else {
list = jdbcTemplate.query("SELECT c.name,(SELECT count(a.id) FROM t_perform a LEFT JOIN t_db b ON a.created_id=b.user_id WHERE a.created_id=c.user_id) AS count FROM t_db c order by count desc limit 0,10 ", new BeanPropertyRowMapper(CountRankVo.class));
}
List<String> nameList = list.stream().map(CountRankVo::getName).collect(Collectors.toList());
List<String> countList = list.stream().map(CountRankVo::getCount).collect(Collectors.toList());
List<Integer> countList = list.stream().map(CountRankVo::getCount).collect(Collectors.toList());
render(Ret.ok().data(Dict.create().set("nameList", nameList).set("countList", countList)));
}
@ApiOperation("代表履职活动情况分析")
@ApiImplicitParam(name = "streetId", value = "街道id")
@GetMapping("perform/analyze")
public void performAnalyze() {
public void performAnalyze(String streetId) {
List countList = new ArrayList();
//默认当前年
Date date = DateUtil.date();
String year = Convert.toStr(DateUtil.year(date));
List<String> monthList = DateUtils.getMonthList();
Iterator<String> iterator = monthList.iterator();
while (iterator.hasNext()) {
String month = iterator.next();
String yearMonth = year + "-" + month;
Integer activityCount = jdbcTemplate.queryForObject("SELECT count(b.id) FROM t_perform b , t_db a where a.user_id=b.created_id and DATE_FORMAT( b.created_at, '%Y-%m' )=?", Integer.class, yearMonth);
countList.add(activityCount);
if (StrUtil.isNotBlank(streetId)) {
while (iterator.hasNext()) {
String month = iterator.next();
String yearMonth = year + "-" + month;
Integer activityCount = jdbcTemplate.queryForObject("SELECT count(b.id) FROM t_perform b , t_db a where a.user_id=b.created_id and DATE_FORMAT( b.created_at, '%Y-%m' )=? and a.precinct_address=?", Integer.class, yearMonth, streetId);
countList.add(activityCount);
}
} else {
while (iterator.hasNext()) {
String month = iterator.next();
String yearMonth = year + "-" + month;
Integer activityCount = jdbcTemplate.queryForObject("SELECT count(b.id) FROM t_perform b , t_db a where a.user_id=b.created_id and DATE_FORMAT( b.created_at, '%Y-%m' )=?", Integer.class, yearMonth);
countList.add(activityCount);
}
}
render(Ret.ok().data(Dict.create().set("countList", countList).set("monthList", DateUtils.getMonthStrList())));
}
@ApiOperation("代表督事阶段占比")
@ApiImplicitParam(name = "streetId", value = "街道id")
@GetMapping("supervise_thing/status_count")
public void SuperviseThingStatusCount() {
int allCount = superviseThingService.count(new LambdaQueryWrapper<SuperviseThing>());
int yiCount = superviseThingService.count(new LambdaQueryWrapper<SuperviseThing>().eq(SuperviseThing::getStatus, SuperviseThing.STATUS_YI));
int duCount = superviseThingService.count(new LambdaQueryWrapper<SuperviseThing>().eq(SuperviseThing::getStatus, SuperviseThing.STATUS_DU));
int pingCount = superviseThingService.count(new LambdaQueryWrapper<SuperviseThing>().eq(SuperviseThing::getStatus, SuperviseThing.STATUS_PING));
public void SuperviseThingStatusCount(String streetId) {
int allCount = superviseThingService.count(new LambdaQueryWrapper<SuperviseThing>().eq(StrUtil.isNotBlank(streetId), SuperviseThing::getStreet, streetId));
int yiCount = superviseThingService.count(new LambdaQueryWrapper<SuperviseThing>().eq(SuperviseThing::getStatus, SuperviseThing.STATUS_YI).eq(StrUtil.isNotBlank(streetId), SuperviseThing::getStreet, streetId));
int duCount = superviseThingService.count(new LambdaQueryWrapper<SuperviseThing>().eq(SuperviseThing::getStatus, SuperviseThing.STATUS_DU).eq(StrUtil.isNotBlank(streetId), SuperviseThing::getStreet, streetId));
int pingCount = superviseThingService.count(new LambdaQueryWrapper<SuperviseThing>().eq(SuperviseThing::getStatus, SuperviseThing.STATUS_PING).eq(StrUtil.isNotBlank(streetId), SuperviseThing::getStreet, streetId));
// 督事一创建就进入了议状态所以永远都是0
Double wenPercent = 0D;
@ -109,20 +128,34 @@ public class ApiStatisticsDbController extends ApiBaseController {
}
@ApiOperation("代表督事区域分布")
@ApiImplicitParam(name = "streetId", value = "街道id")
@GetMapping("supervise_thing/region/count")
public void SuperviseThingRegionCount() {
List<CountRankVo> list = jdbcTemplate.query("select b.name,count(a.id)as count from t_supervise_thing a left join t_sys_street b on a.street=b.id GROUP BY b.name order by count desc", new BeanPropertyRowMapper(CountRankVo.class));
public void SuperviseThingRegionCount(String streetId) {
List<CountRankVo> list;
if (StrUtil.isNotBlank(streetId)) {
list = jdbcTemplate.query("select b.name,count(a.id)as count from t_supervise_thing a left join t_sys_street b on a.street=b.id where a.street=? GROUP BY b.name order by count desc", new BeanPropertyRowMapper(CountRankVo.class), streetId);
} else {
list = jdbcTemplate.query("select b.name,count(a.id)as count from t_supervise_thing a left join t_sys_street b on a.street=b.id GROUP BY b.name order by count desc", new BeanPropertyRowMapper(CountRankVo.class));
}
List<String> nameList = list.stream().map(CountRankVo::getName).collect(Collectors.toList());
List<String> countList = list.stream().map(CountRankVo::getCount).collect(Collectors.toList());
List<Integer> countList = list.stream().map(CountRankVo::getCount).collect(Collectors.toList());
render(Ret.ok().data(Dict.create().set("nameList", nameList).set("countList", countList)));
}
@ApiOperation("代表列表")
@ApiImplicitParam(name = "streetId", value = "街道id")
@GetMapping("list")
public void list() {
List<DbVo> list = jdbcTemplate.query("SELECT a.*,(" +
"SELECT count(b.id) FROM t_perform b WHERE b.created_id=a.user_id) AS performCount,(" +
"SELECT count(c.id) FROM t_voter_suggest_db c WHERE c.db=a.id) AS voterSuggestCount FROM t_db a WHERE a.show_screen=1", new BeanPropertyRowMapper(DbVo.class));
public void list(String streetId) {
List<DbVo> list;
if (StrUtil.isNotBlank(streetId)) {
list = jdbcTemplate.query("SELECT a.*,(" +
"SELECT count(b.id) FROM t_perform b WHERE b.created_id=a.user_id) AS performCount,(" +
"SELECT count(c.id) FROM t_voter_suggest_db c WHERE c.db=a.id) AS voterSuggestCount FROM t_db a WHERE a.show_screen=1 and a.precinct_address=?", new BeanPropertyRowMapper(DbVo.class), streetId);
} else {
list = jdbcTemplate.query("SELECT a.*,(" +
"SELECT count(b.id) FROM t_perform b WHERE b.created_id=a.user_id) AS performCount,(" +
"SELECT count(c.id) FROM t_voter_suggest_db c WHERE c.db=a.id) AS voterSuggestCount FROM t_db a WHERE a.show_screen=1", new BeanPropertyRowMapper(DbVo.class));
}
list.forEach(item -> {
item.setSex(DictUtils.getDictLabel("sys_user_sex", item.getSex()));
item.setDbIdentity(DictUtils.getDictLabel("sys_db_identity", item.getDbIdentity()));
@ -134,9 +167,9 @@ public class ApiStatisticsDbController extends ApiBaseController {
}
@ApiOperation("代表详情")
@GetMapping("detail")
@GetMapping("detail/{id}")
@ApiImplicitParam(name = "id", value = "代表id")
public void detail(String id) {
public void detail(@PathVariable String id) {
Db db = dbService.getById(id);
DbVO dbVO = DbWrapper.build().entityVO(db);
//履职记录

View File

@ -18,6 +18,7 @@ import com.ydool.boot.modules.rddb.wrapper.NoticeWrapper;
import com.ydool.boot.modules.sys.entity.Config;
import com.ydool.boot.modules.sys.service.ConfigService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
@ -48,35 +49,59 @@ public class ApiStatisticsOfficeController extends ApiBaseController {
ConferenceService conferenceService;
@ApiOperation("基础情况")
@ApiImplicitParam(name = "streetId", value = "街道id")
@GetMapping("count")
public void count() {
public void count(String streetId) {
DecimalFormat df = new DecimalFormat("0.00");
//文件发放
int dataBankCount = dataBankService.count();
//文件阅览
int readFileCount = readFileService.count();
//文件办理
int auditCount = auditService.count();
//报送
int reportCount = reportService.count();
//录用
int passCount = reportService.count(new LambdaQueryWrapper<Report>().eq(Report::getHireStatus, 1));
//录用率
Double passPercent = reportCount == 0 ? 0 : Convert.toDouble(passCount) / Convert.toDouble(reportCount) * 100;
Dict dict = Dict.create()
.set("dataBankCount", dataBankCount)
.set("readFileCount", readFileCount)
.set("auditCount", auditCount)
.set("reportCount", reportCount)
.set("passCount", passCount)
.set("passPercent", df.format(passPercent));
render(Ret.ok().data(dict));
if (StrUtil.isNotBlank(streetId)) {
Integer dataBankCount = jdbcTemplate.queryForObject("select count(a.id) from t_data_bank a left join t_sys_user b on a.created_id=b.id where b.street_id=?", Integer.class, streetId);
Integer readFileCount = jdbcTemplate.queryForObject("select count(a.id) from t_read_file a left join t_sys_user b on a.created_id=b.id where b.street_id=?", Integer.class, streetId);
Integer auditCount = jdbcTemplate.queryForObject("select count(a.id) from t_audit a left join t_sys_user b on a.created_id=b.id where b.street_id=?", Integer.class, streetId);
int reportCount = reportService.count(new LambdaQueryWrapper<Report>().eq(Report::getStreet, streetId).ne(Report::getHireStatus, 2));
int passCount = reportService.count(new LambdaQueryWrapper<Report>().eq(Report::getHireStatus, 1).eq(Report::getStreet, streetId));
Double passPercent = reportCount == 0 ? 0 : Convert.toDouble(passCount) / Convert.toDouble(reportCount) * 100;
Dict dict = Dict.create()
.set("dataBankCount", dataBankCount)
.set("readFileCount", readFileCount)
.set("auditCount", auditCount)
.set("reportCount", reportCount)
.set("passCount", passCount)
.set("passPercent", df.format(passPercent));
render(Ret.ok().data(dict));
} else {
//文件发放
int dataBankCount = dataBankService.count();
//文件阅览
int readFileCount = readFileService.count();
//文件办理
int auditCount = auditService.count();
//报送
int reportCount = reportService.count(new LambdaQueryWrapper<Report>().ne(Report::getHireStatus, 3));
//录用
int passCount = reportService.count(new LambdaQueryWrapper<Report>().eq(Report::getHireStatus, 1));
//录用率
Double passPercent = reportCount == 0 ? 0 : Convert.toDouble(passCount) / Convert.toDouble(reportCount) * 100;
Dict dict = Dict.create()
.set("dataBankCount", dataBankCount)
.set("readFileCount", readFileCount)
.set("auditCount", auditCount)
.set("reportCount", reportCount)
.set("passCount", passCount)
.set("passPercent", df.format(passPercent));
render(Ret.ok().data(dict));
}
}
@ApiOperation("乡镇信息报道录用分析")
@ApiImplicitParam(name = "streetId", value = "街道id")
@GetMapping("analyze")
public void analyze() {
List<CountRankVo> list = jdbcTemplate.query("select b.name,count(a.id)as count from t_report a left join t_sys_street b on a.street=b.id GROUP BY b.name order by count desc", new BeanPropertyRowMapper(CountRankVo.class));
public void analyze(String streetId) {
List<CountRankVo> list;
if (StrUtil.isNotBlank(streetId)) {
list = jdbcTemplate.query("select b.name,count(a.id)as count from t_report a left join t_sys_street b on a.street=b.id where a.street=? GROUP BY b.name order by count desc", new BeanPropertyRowMapper(CountRankVo.class), streetId);
} else {
list = jdbcTemplate.query("select b.name,count(a.id)as count from t_report a left join t_sys_street b on a.street=b.id GROUP BY b.name order by count desc", new BeanPropertyRowMapper(CountRankVo.class));
}
render(Ret.ok().data(list));
}
@ -97,26 +122,37 @@ public class ApiStatisticsOfficeController extends ApiBaseController {
}
@ApiOperation("人大会议月度召开情况统计")
@ApiImplicitParam(name = "streetId", value = "街道id")
@GetMapping("conference/analyze")
public void conferenceAnalyze() {
public void conferenceAnalyze(String streetId) {
List countList = new ArrayList();
//默认当前年
Date date = DateUtil.date();
String year = Convert.toStr(DateUtil.year(date));
List<String> monthList = DateUtils.getMonthList();
Iterator<String> iterator = monthList.iterator();
while (iterator.hasNext()) {
String month = iterator.next();
String yearMonth = year + "-" + month;
Integer activityCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_conference a where DATE_FORMAT( a.created_at, '%Y-%m' )=?", Integer.class, yearMonth);
countList.add(activityCount);
if (StrUtil.isNotBlank(streetId)) {
while (iterator.hasNext()) {
String month = iterator.next();
String yearMonth = year + "-" + month;
Integer activityCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_conference a left join t_sys_user b on a.created_id=b.id where b.street_id=? and DATE_FORMAT( a.created_at, '%Y-%m' )=?", Integer.class, streetId, yearMonth);
countList.add(activityCount);
}
} else {
while (iterator.hasNext()) {
String month = iterator.next();
String yearMonth = year + "-" + month;
Integer activityCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_conference a where DATE_FORMAT( a.created_at, '%Y-%m' )=?", Integer.class, yearMonth);
countList.add(activityCount);
}
}
render(Ret.ok().data(Dict.create().set("monthList", DateUtils.getMonthStrList()).set("countList", countList)));
}
@ApiOperation("当月人大会议类型情况占比")
@ApiImplicitParam(name = "streetId", value = "街道id")
@GetMapping("conference/category/count")
public void conferenceCategoryCount() {
public void conferenceCategoryCount(String streetId) {
//默认当前年
Date date = DateUtil.date();
String year = Convert.toStr(DateUtil.year(date));
@ -124,25 +160,46 @@ public class ApiStatisticsOfficeController extends ApiBaseController {
String yearMonth = year + "-" + month;
DecimalFormat df = new DecimalFormat("0.00");
//总数
Integer allCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_conference a where DATE_FORMAT( a.created_at, '%Y-%m' )=?", Integer.class, yearMonth);
//主任会议数 常委会议数 其他会议数
//1主任 2常委 3其他
int zrCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_conference a where DATE_FORMAT( a.created_at, '%Y-%m' )=? and a.category=1", Integer.class, yearMonth);
int cwCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_conference a where DATE_FORMAT( a.created_at, '%Y-%m' )=? and a.category=2", Integer.class, yearMonth);
int otherCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_conference a where DATE_FORMAT( a.created_at, '%Y-%m' )=? and a.category=3", Integer.class, yearMonth);
Double zrPercent = allCount == 0 ? 0 : Convert.toDouble(zrCount) / Convert.toDouble(allCount) * 100;
Double cwPercent = allCount == 0 ? 0 : Convert.toDouble(cwCount) / Convert.toDouble(allCount) * 100;
Double otherPercent = allCount == 0 ? 0 : Convert.toDouble(otherCount) / Convert.toDouble(allCount) * 100;
Dict dist = Dict.create().set("zrPercent", df.format(zrPercent)).set("cwPercent", df.format(cwPercent)).set("otherPercent", df.format(otherPercent));
render(Ret.ok().data(dist));
if (StrUtil.isNotBlank(streetId)) {
Integer allCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_conference a left join t_sys_user b on a.created_id=b.id where b.street_id=? and DATE_FORMAT( a.created_at, '%Y-%m' )=?", Integer.class, streetId, yearMonth);
//主任会议数 常委会议数 其他会议数
//1主任 2常委 3其他
int zrCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_conference a left join t_sys_user b on a.created_id=b.id where b.street_id=? and DATE_FORMAT( a.created_at, '%Y-%m' )=? and a.category=1", Integer.class, streetId, yearMonth);
int cwCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_conference a left join t_sys_user b on a.created_id=b.id where b.street_id=? and DATE_FORMAT( a.created_at, '%Y-%m' )=? and a.category=2", Integer.class, streetId, yearMonth);
int otherCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_conference a left join t_sys_user b on a.created_id=b.id where b.street_id=? and DATE_FORMAT( a.created_at, '%Y-%m' )=? and a.category=3", Integer.class, streetId, yearMonth);
Double zrPercent = allCount == 0 ? 0 : Convert.toDouble(zrCount) / Convert.toDouble(allCount) * 100;
Double cwPercent = allCount == 0 ? 0 : Convert.toDouble(cwCount) / Convert.toDouble(allCount) * 100;
Double otherPercent = allCount == 0 ? 0 : Convert.toDouble(otherCount) / Convert.toDouble(allCount) * 100;
Dict dist = Dict.create().set("zrPercent", df.format(zrPercent)).set("cwPercent", df.format(cwPercent)).set("otherPercent", df.format(otherPercent));
render(Ret.ok().data(dist));
} else {
Integer allCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_conference a where DATE_FORMAT( a.created_at, '%Y-%m' )=?", Integer.class, yearMonth);
//主任会议数 常委会议数 其他会议数
//1主任 2常委 3其他
int zrCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_conference a where DATE_FORMAT( a.created_at, '%Y-%m' )=? and a.category=1", Integer.class, yearMonth);
int cwCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_conference a where DATE_FORMAT( a.created_at, '%Y-%m' )=? and a.category=2", Integer.class, yearMonth);
int otherCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_conference a where DATE_FORMAT( a.created_at, '%Y-%m' )=? and a.category=3", Integer.class, yearMonth);
Double zrPercent = allCount == 0 ? 0 : Convert.toDouble(zrCount) / Convert.toDouble(allCount) * 100;
Double cwPercent = allCount == 0 ? 0 : Convert.toDouble(cwCount) / Convert.toDouble(allCount) * 100;
Double otherPercent = allCount == 0 ? 0 : Convert.toDouble(otherCount) / Convert.toDouble(allCount) * 100;
Dict dist = Dict.create().set("zrPercent", df.format(zrPercent)).set("cwPercent", df.format(cwPercent)).set("otherPercent", df.format(otherPercent));
render(Ret.ok().data(dist));
}
}
@ApiOperation("人大大事记")
@ApiImplicitParam(name = "streetId", value = "街道id")
@GetMapping("notice")
public void notice() {
IPage<Notice> paged = noticeService.page(new Page<>(getPageNum(), getPageSize()),
new QueryWrapper<Notice>().orderByDesc("created_at"));
render(Ret.ok().paged(NoticeWrapper.build().pageVO(paged)));
public void notice(String streetId) {
if (StrUtil.isNotBlank(streetId)) {
IPage<Notice> paged = noticeService._page(new Page<>(getPageNum(), getPageSize()),
new QueryWrapper<Notice>().eq("b.street_id", streetId));
render(Ret.ok().paged(NoticeWrapper.build().pageVO(paged)));
} else {
IPage<Notice> paged = noticeService.page(new Page<>(getPageNum(), getPageSize()),
new QueryWrapper<Notice>().orderByDesc("created_at"));
render(Ret.ok().paged(NoticeWrapper.build().pageVO(paged)));
}
}
}

View File

@ -13,6 +13,7 @@ import com.ydool.boot.common.result.Ret;
import com.ydool.boot.modules.rddb.entity.VoterSuggestDb;
import com.ydool.boot.modules.rddb.service.VoterSuggestDbService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
@ -38,14 +39,19 @@ public class ApiStatisticsVoterController extends ApiBaseController {
VoterSuggestDbService voterSuggestDbService;
@ApiOperation("民情统计")
@ApiImplicitParam(name = "streetId", value = "街道id")
@GetMapping("count")
public void count() {
public void count(String streetId) {
DecimalFormat df = new DecimalFormat("0.00");
//总量
int allCount = voterSuggestDbService.count();
//受理总量
int okCount = voterSuggestDbService.count(new LambdaQueryWrapper<VoterSuggestDb>().eq(VoterSuggestDb::getStatus, 1));
//受理率
int allCount;
int okCount;
if (StrUtil.isNotBlank(streetId)) {
allCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_voter_suggest_db a left join t_db b on a.db=b.id where b.precinct_address=? ", Integer.class, streetId);
okCount = jdbcTemplate.queryForObject("SELECT count(a.id) FROM t_voter_suggest_db a left join t_db b on a.db=b.id where b.precinct_address=? and a.status=1", Integer.class, streetId);
} else {
allCount = voterSuggestDbService.count();
okCount = voterSuggestDbService.count(new LambdaQueryWrapper<VoterSuggestDb>().eq(VoterSuggestDb::getStatus, 1));
}
Double percent = allCount == 0 ? 0 : Convert.toDouble(okCount) / Convert.toDouble(allCount) * 100;
String averageTime = ConfigUtils.getStr("screen_vote_average_time");
@ -61,20 +67,25 @@ public class ApiStatisticsVoterController extends ApiBaseController {
}
@ApiOperation("区域民情分析")
@ApiImplicitParam(name = "streetId", value = "街道id")
@GetMapping("analyze")
public void analyze() {
public void analyze(String streetId) {
DecimalFormat df = new DecimalFormat("0.00");
List<CountRankVo> list = jdbcTemplate.query("select b.name,count(a.id)as count from t_voter_suggest_db a left join t_sys_street b on a.db_region=b.id GROUP BY b.name order by count desc", new BeanPropertyRowMapper(CountRankVo.class));
List<CountRankVo> list;
if (StrUtil.isNotBlank(streetId)) {
list = jdbcTemplate.query("select b.name,count(a.id)as count from t_voter_suggest_db a left join t_sys_street b on a.db_region=b.id where a.db_region=? GROUP BY b.name order by count desc", new BeanPropertyRowMapper(CountRankVo.class), streetId);
} else {
list = jdbcTemplate.query("select b.name,count(a.id)as count from t_voter_suggest_db a left join t_sys_street b on a.db_region=b.id GROUP BY b.name order by count desc", new BeanPropertyRowMapper(CountRankVo.class));
}
List<String> nameList = list.stream().map(CountRankVo::getName).collect(Collectors.toList());
List<String> countList = list.stream().map(CountRankVo::getCount).collect(Collectors.toList());
List<Integer> countList = list.stream().map(CountRankVo::getCount).collect(Collectors.toList());
List<String> percentList = new ArrayList<>();
String max = CollectionUtil.max(countList);
if (StrUtil.isNotBlank(max)) {
Integer maxCount = Convert.toInt(max);
Iterator<String> iterator = countList.iterator();
if (CollectionUtil.isNotEmpty(countList)) {
Integer maxCount = CollectionUtil.max(countList);
Iterator<Integer> iterator = countList.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
Integer item = iterator.next();
Double percent = maxCount == 0 ? 0 : Convert.toDouble(item) / Convert.toDouble(maxCount) * 100;
percentList.add(df.format(percent));
}
@ -83,19 +94,29 @@ public class ApiStatisticsVoterController extends ApiBaseController {
}
@ApiOperation("民情月度受理统计")
@ApiImplicitParam(name = "streetId", value = "街道id")
@GetMapping("month/count")
public void monthCount() {
public void monthCount(String streetId) {
List countList = new ArrayList();
//默认当前年
Date date = DateUtil.date();
String year = Convert.toStr(DateUtil.year(date));
List<String> monthList = DateUtils.getMonthList();
Iterator<String> iterator = monthList.iterator();
while (iterator.hasNext()) {
String month = iterator.next();
String yearMonth = year + "-" + month;
Integer activityCount = jdbcTemplate.queryForObject("SELECT count(b.id) FROM t_voter_suggest_db b , t_db a where a.id=b.db and DATE_FORMAT( b.created_at, '%Y-%m' )=?", Integer.class, yearMonth);
countList.add(activityCount);
if(StrUtil.isNotBlank(streetId)){
while (iterator.hasNext()) {
String month = iterator.next();
String yearMonth = year + "-" + month;
Integer activityCount = jdbcTemplate.queryForObject("SELECT count(b.id) FROM t_voter_suggest_db b left join t_db a on a.id=b.db where a.db_region=? and DATE_FORMAT( b.created_at, '%Y-%m' )=?", Integer.class, streetId,yearMonth);
countList.add(activityCount);
}
}else{
while (iterator.hasNext()) {
String month = iterator.next();
String yearMonth = year + "-" + month;
Integer activityCount = jdbcTemplate.queryForObject("SELECT count(b.id) FROM t_voter_suggest_db b left join t_db a on a.id=b.db where DATE_FORMAT( b.created_at, '%Y-%m' )=?", Integer.class, yearMonth);
countList.add(activityCount);
}
}
render(Ret.ok().data(Dict.create().set("monthList", DateUtils.getMonthStrList()).set("countList", countList)));
}
@ -135,5 +156,4 @@ public class ApiStatisticsVoterController extends ApiBaseController {
}
}
}

View File

@ -6,5 +6,5 @@ import lombok.Data;
public class CountRankVo {
//联络站的名字举办的次数
String name;
String count;
Integer count;
}

View File

@ -1,12 +1,21 @@
package com.ydool.boot.modules.rddb.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ydool.boot.modules.rddb.entity.Notice;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
/**
* @author chenchen
* @date 2020/07/27
*/
public interface NoticeMapper extends BaseMapper<Notice> {
@Select("select a.* from t_notice a left join t_sys_user b on a.created_id = b.id ${ew.customSqlSegment} ")
IPage<Notice> _page(Page<Object> page, @Param(Constants.WRAPPER) QueryWrapper<Notice> qw);
}

View File

@ -2,6 +2,9 @@ package com.ydool.boot.modules.rddb.service;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ydool.boot.modules.rddb.entity.Const;
import com.ydool.boot.modules.rddb.entity.Message;
@ -66,4 +69,7 @@ public class NoticeService extends ServiceImpl<NoticeMapper, Notice> {
return flag;
}
public IPage<Notice> _page(Page<Object> page, QueryWrapper<Notice> qw) {
return getBaseMapper()._page(page,qw);
}
}

View File

@ -0,0 +1,31 @@
package com.ydool.boot.show;
import com.ydool.boot.modules.sys.entity.User;
import com.ydool.boot.modules.sys.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
@Controller
@RequestMapping(value = {"/mshow", "/mshow/"})
public class MShowIndexController {
@Autowired
UserService userService;
@GetMapping
public String index(String userId, RedirectAttributes attr) {
User user = userService.getById(userId);
if ("admin".equals(user.getAccountType())) {
attr.addAttribute("streetId", "");
} else {
String streetId = user.getStreetId();
attr.addAttribute("streetId", streetId);
}
return "redirect:/mshow/index.html";
}
}

View File

@ -0,0 +1,22 @@
package com.ydool.boot.show;
import com.ydool.boot.modules.sys.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping(value = {"${ydool.showUrl}", "${ydool.showUrl}/"})
public class ShowIndexController {
@Autowired
UserService userService;
@GetMapping
public String index() {
return "redirect:/show/index.html";
}
}

Binary file not shown.

View File

@ -1,14 +1,14 @@
#online
#db.user = ydool_rd
#db.pass = MfaSPabGrDmPtET@123
#db.url = jdbc:mysql://122.112.138.17:3306/ydool_rd?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8
#db.driver = com.mysql.cj.jdbc.Driver
db.user = ydool_rd
db.pass = MfaSPabGrDmPtET@123
db.url = jdbc:mysql://122.112.138.17:3306/ydool_rd?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8
db.driver = com.mysql.cj.jdbc.Driver
#local
db.user = root
db.pass = 123456
db.url = jdbc:mysql://127.0.0.1:3306/ydool_rd?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8
db.driver = com.mysql.cj.jdbc.Driver
#db.user = root
#db.pass = 123456
#db.url = jdbc:mysql://127.0.0.1:3306/ydool_rd?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8
#db.driver = com.mysql.cj.jdbc.Driver
spring.servlet.multipart.max-file-size=500MB
spring.servlet.multipart.max-request-size=500MB
@ -17,6 +17,7 @@ spring.redis.host=106.54.109.185
ydool.path=/admin
ydool.homeUrl=/page
ydool.showUrl=/show
ydool.skipAuthUrls[0] = /admin/static/**

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 233 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,390 @@
*{
padding: 0;
margin: 0;
text-decoration: none;
list-style: none;
-webkit-tap-highlight-color: rgba(255, 255, 255, 0);
}
body{
width: 100%;
height: 100%;
/* background: url('../img/bg.jpg') no-repeat; */
background: #10234B;
/* background-size: 100% 100%; */
color: #fff;
padding-bottom: 60px;
font-size: 14px;
}
.menu{
position: fixed;
width: 100%;
bottom: 0;
z-index: 99;
display: flex;
justify-content: space-between;
background: #0F1A46;
height: 60px;
align-items: center;
padding:0 5%;
box-sizing: border-box;
}
.menu .iconfont{
font-size: 20px;
margin-bottom: 2px;
text-align: center;
}
.menu a{
color: #fff;
}
.menu .active{
color: #00E9F9;
}
.allname{
background: url('../img/namebg.png') no-repeat;
height: 60px;
background-size: 100% 100%;
text-align: center;
line-height: 60px;
font-weight: bold;
font-size: 20px;
}
.charts{
padding:0 5% 30px;
}
.charts>div{
margin-top: 30px;
}
.charts>div .name{
color: #fff;
background: url('../img/title.png') no-repeat;
background-size: 100% 100%;
display: inline-block;
padding:0 10px;
box-sizing: border-box;
height: 40px;
line-height: 40px;
}
.circle{
display: flex;
justify-content: space-between;
}
.circle>div{
flex: 1;
}
.circle p{
text-align:center;
color:#fff;
}
.map{
position: relative;
}
.map>img{
width: 100%;
}
.dimap{
position: absolute;
top: 0;
width: 100%;
height: 100%;
}
.dimap img{
width: 12px;
}
.dimap>div{
position: absolute;
z-index: 1;
cursor: pointer;
}
@keyframes beats{
0% {
top: -10px;
}
25%{
top: -5px;
}
50%{
top: 0;
}
75%{
top: -5px;
}
100%{
top: -10px;
}
}
.dimap .dong{
animation-name: beats;
animation-duration: 1s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
animation-play-state: running;
}
.item1{
position: absolute;
left: 0;
background: #07216A;
bottom: 50px;
width: 240px;
border-radius: 8px;
padding: 15px;
box-sizing: border-box;
color: #fff;
}
.item2{
position: absolute;
right: -10px;
background: rgba(8,37,117,.5);
top: 50px;
width: 250px;
border-radius: 8px;
padding: 15px;
box-sizing: border-box;
color: #fff;
z-index: 99;
}
.item2>div{
display: flex;
align-items: center;
}
.item2>div .icon{
background: url('../img/blue.png') no-repeat;
background-size: 100% 100%;
width: 70px;
height: 24px;
line-height: 24px;
box-sizing: border-box;
padding-left: 10px;
font-size: 14px;
}
.item2>div .red{
background: url('../img/red.png') no-repeat;
background-size: 100% 100%;
}
.item2>div .desc{
padding:10px 15px;
border-left: 1px solid #1D5ECD;
line-height: 30px;
}
.item1>div{
display: flex;
justify-content: space-between;
flex-wrap: wrap;
}
.item1>div div{
width: 50%;
margin-top: 15px;
line-height: 30px;
}
.item1>div div span{
color: #F8CD03;
}
.box>div{
display: none;
}
.page1 .numbox{
display: flex;
flex-wrap: wrap;
padding: 15px 0 15px 5%;
background: url('../img/kuang.png') no-repeat;
background-size: 100% 100%;
}
.page1 .numbox>div{
width: 50%;
font-size: 14px;
margin: 10px 0;
color: #B2DCF9;
box-sizing: border-box;
}
.page1 .numbox>div span:first-child{
color: #CBCCD3;
font-weight: bold;
}
.page1 .numbox>div span:last-child{
color: #0BBFCA;
font-size: 18px;
}
.page1 .item{
display: block;
color: #fff;
font-size: 14px;
padding:7px 10px;
box-sizing: border-box;
}
.page1 .wai{
border:1px solid #353B52;
margin-top: 20px;
}
.page1 .item>div:first-child{
text-align: center;
}
.page1 .item img{
width: 128px;
margin-bottom: 10px;
}
.page1 .item .info{
display: flex;
flex-wrap: wrap;
}
.page1 .item .info p{
width: 50%;
opacity: .7;
margin-bottom: 15px;
}
.page1 .item .btn{
background: url('../img/border.png') no-repeat;
width: 80px;
height: 30px;
line-height: 30px;
text-align: center;
background-size: 100% 100%;
cursor: pointer;
}
.page3 .info{
color: #fff;
display: flex;
flex-wrap: wrap;
font-size: 14px;
justify-content: space-between;
margin-top: 20px;
}
.page3 .info>div{
border-left: 2px solid #8F93A4;
background: linear-gradient(to right, #102254 , #0C1948);
width: 48%;
padding:5px 8px;
box-sizing: border-box;
line-height: 26px;
margin-top: 10px;
}
.page3 .info>div span:first-child{
font-size: 18px;
color: #0BBFCA;
}
.page3 .info>div span:last-child{
font-size: 14px;
}
.page3 .info>div p:last-child{
text-align: right;
}
.page3 .redian{
background:url('../img/kuang2.png') no-repeat;
background-size: 100% 100%;
margin-top: 20px;
}
.page4 .info{
color: #7882BC;
font-size: 14px;
}
.page4 .info>div{
display: flex;
justify-content: space-between;
flex-wrap: wrap;
line-height: 36px;
font-weight: bold;
background:url('../img/kuang2.png') no-repeat;
background-size: 100% 100%;
margin-top: 20px;
padding:20px 10px;
}
.page4 .info>div p{
width: 50%;
display: flex;
align-items: center;
}
.page4 .info span{
color: #E34561;
font-size: 18px;
}
.page4 .list{
color: #fff;
}
.page4 .list .head{
display: flex;
color: #7882BC;
border-bottom: 2px solid #46BAB1;
line-height: 50px;
justify-content: space-between;
}
.page4 .list .head>p{
text-align: center;
}
.page4 .list .head>p:last-child{
width: 30%;
}
.page4 .list .head>p:first-child,.page4 .list .box>div p:first-child{
width: 65%;
overflow: hidden;
text-overflow: ellipsis;
white-space:nowrap;
}
.page4 .list .box{
height: 250px;
max-height: 250px;
overflow: hidden;
}
.page4 .list .box>div{
display: flex;
line-height: 40px;
color: #eee;
justify-content: space-between;
}
.page4 .list .box>div p:last-child{
width: 30%;
text-align: center;
}
.xq{
position: absolute;
width: 90%;
height: 800px;
background: url('../img/bg.jpg') no-repeat;
top: 140px;
left: 5%;
display: none;
z-index: 11;
padding:50px;
box-sizing: border-box;
}
.zhe{
background-color: rgba(0, 0, 0, .8);
position: absolute;
width:1920px;
height: 1080px;
z-index: 10;
}
.xq>div{
display: flex;
justify-content: space-between;
}
.xq .graph{
color: #fff;
width:30%;
}
.xq .graph>p{
font-size: 20px;
padding:10px 30px;
background: linear-gradient(to right,rgba(9,33,143,1),rgba(16,29,71,.1));
}
.xq .graph>div{
margin-top: 20px;
}
.xq .graph .listitem{
line-height: 50px;
padding:0 20px;
}
.xq .graph .listitem:nth-child(2n){
background: #1B375E;
}
.xq .graph .listitem span:first-child{
margin-right: 15px;
}
.xq .graph .wen{
line-height: 30px;
padding:0 20px;
}
.xq .graph .wen p{
margin-bottom: 10px;
}

View File

@ -0,0 +1,606 @@
/**
* Swiper 6.3.5
* Most modern mobile touch slider and framework with hardware accelerated transitions
* https://swiperjs.com
*
* Copyright 2014-2020 Vladimir Kharlampidi
*
* Released under the MIT License
*
* Released on: October 30, 2020
*/
@font-face {
font-family: swiper-icons;
src: url('data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB/yIY09An6AH2Bdu/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z/PEJ6YOB5hKh4dj3EvXhxPqH/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN/d/gczfEimrE/fs/bOuq29Zmn8tloORaXgZgGa78yO9/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH//wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv/H9ezGI6Z5XBAw8CBK/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow/P/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA') format('woff');
font-weight: 400;
font-style: normal
}
:root {
--swiper-theme-color: #007aff
}
.swiper-container {
margin-left: auto;
margin-right: auto;
position: relative;
overflow: hidden;
list-style: none;
padding: 0;
z-index: 1
}
.swiper-container-vertical>.swiper-wrapper {
flex-direction: column
}
.swiper-wrapper {
position: relative;
width: 100%;
height: 100%;
z-index: 1;
display: flex;
transition-property: transform;
box-sizing: content-box
}
.swiper-container-android .swiper-slide,
.swiper-wrapper {
transform: translate3d(0px, 0, 0)
}
.swiper-container-multirow>.swiper-wrapper {
flex-wrap: wrap
}
.swiper-container-multirow-column>.swiper-wrapper {
flex-wrap: wrap;
flex-direction: column
}
.swiper-container-free-mode>.swiper-wrapper {
transition-timing-function: ease-out;
margin: 0 auto
}
.swiper-slide {
flex-shrink: 0;
width: 100%;
height: 100%;
position: relative;
transition-property: transform
}
.swiper-slide-invisible-blank {
visibility: hidden
}
.swiper-container-autoheight,
.swiper-container-autoheight .swiper-slide {
height: auto
}
.swiper-container-autoheight .swiper-wrapper {
align-items: flex-start;
transition-property: transform, height
}
.swiper-container-3d {
perspective: 1200px
}
.swiper-container-3d .swiper-cube-shadow,
.swiper-container-3d .swiper-slide,
.swiper-container-3d .swiper-slide-shadow-bottom,
.swiper-container-3d .swiper-slide-shadow-left,
.swiper-container-3d .swiper-slide-shadow-right,
.swiper-container-3d .swiper-slide-shadow-top,
.swiper-container-3d .swiper-wrapper {
transform-style: preserve-3d
}
.swiper-container-3d .swiper-slide-shadow-bottom,
.swiper-container-3d .swiper-slide-shadow-left,
.swiper-container-3d .swiper-slide-shadow-right,
.swiper-container-3d .swiper-slide-shadow-top {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 10
}
.swiper-container-3d .swiper-slide-shadow-left {
background-image: linear-gradient(to left, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0))
}
.swiper-container-3d .swiper-slide-shadow-right {
background-image: linear-gradient(to right, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0))
}
.swiper-container-3d .swiper-slide-shadow-top {
background-image: linear-gradient(to top, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0))
}
.swiper-container-3d .swiper-slide-shadow-bottom {
background-image: linear-gradient(to bottom, rgba(0, 0, 0, .5), rgba(0, 0, 0, 0))
}
.swiper-container-css-mode>.swiper-wrapper {
overflow: auto;
scrollbar-width: none;
-ms-overflow-style: none
}
.swiper-container-css-mode>.swiper-wrapper::-webkit-scrollbar {
display: none
}
.swiper-container-css-mode>.swiper-wrapper>.swiper-slide {
scroll-snap-align: start start
}
.swiper-container-horizontal.swiper-container-css-mode>.swiper-wrapper {
scroll-snap-type: x mandatory
}
.swiper-container-vertical.swiper-container-css-mode>.swiper-wrapper {
scroll-snap-type: y mandatory
}
:root {
--swiper-navigation-size: 44px
}
.swiper-button-next,
.swiper-button-prev {
position: absolute;
top: 50%;
width: calc(var(--swiper-navigation-size)/ 44 * 27);
height: var(--swiper-navigation-size);
margin-top: calc(-1 * var(--swiper-navigation-size)/ 2);
z-index: 10;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
color: #fff;
background: #CCCCCC;
}
.swiper-button-next.swiper-button-disabled,
.swiper-button-prev.swiper-button-disabled {
opacity: .35;
cursor: auto;
pointer-events: none
}
.swiper-button-next:after,
.swiper-button-prev:after {
font-family: swiper-icons;
font-size: var(--swiper-navigation-size);
text-transform: none !important;
letter-spacing: 0;
text-transform: none;
font-variant: initial;
line-height: 1
}
.swiper-button-prev,
.swiper-container-rtl .swiper-button-next {
left: 10px;
right: auto
}
.swiper-button-prev:after,
.swiper-container-rtl .swiper-button-next:after {
content: 'prev'
}
.swiper-button-next,
.swiper-container-rtl .swiper-button-prev {
right: 10px;
left: auto
}
.swiper-button-next:after,
.swiper-container-rtl .swiper-button-prev:after {
content: 'next'
}
.swiper-button-next.swiper-button-white,
.swiper-button-prev.swiper-button-white {
--swiper-navigation-color: #ffffff
}
.swiper-button-next.swiper-button-black,
.swiper-button-prev.swiper-button-black {
--swiper-navigation-color: #000000
}
.swiper-button-lock {
display: none
}
.swiper-pagination {
position: absolute;
text-align: center;
transition: .3s opacity;
transform: translate3d(0, 0, 0);
z-index: 10
}
.swiper-pagination.swiper-pagination-hidden {
opacity: 0
}
.swiper-container-horizontal>.swiper-pagination-bullets,
.swiper-pagination-custom,
.swiper-pagination-fraction {
bottom: 10px;
left: 0;
width: 100%
}
.swiper-pagination-bullets-dynamic {
overflow: hidden;
font-size: 0
}
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
transform: scale(.33);
position: relative
}
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active {
transform: scale(1)
}
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main {
transform: scale(1)
}
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev {
transform: scale(.66)
}
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev {
transform: scale(.33)
}
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next {
transform: scale(.66)
}
.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next {
transform: scale(.33)
}
.swiper-pagination-bullet {
width: 8px;
height: 8px;
display: inline-block;
border-radius: 100%;
background: #000;
opacity: .2
}
button.swiper-pagination-bullet {
border: none;
margin: 0;
padding: 0;
box-shadow: none;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none
}
.swiper-pagination-clickable .swiper-pagination-bullet {
cursor: pointer
}
.swiper-pagination-bullet-active {
opacity: 1;
background: var(--swiper-pagination-color, var(--swiper-theme-color))
}
.swiper-container-vertical>.swiper-pagination-bullets {
right: 10px;
top: 50%;
transform: translate3d(0px, -50%, 0)
}
.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet {
margin: 6px 0;
display: block
}
.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic {
top: 50%;
transform: translateY(-50%);
width: 8px
}
.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
display: inline-block;
transition: .2s transform, .2s top
}
.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet {
margin: 0 4px
}
.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic {
left: 50%;
transform: translateX(-50%);
white-space: nowrap
}
.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
transition: .2s transform, .2s left
}
.swiper-container-horizontal.swiper-container-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {
transition: .2s transform, .2s right
}
.swiper-pagination-progressbar {
background: rgba(0, 0, 0, .25);
position: absolute
}
.swiper-pagination-progressbar .swiper-pagination-progressbar-fill {
background: var(--swiper-pagination-color, var(--swiper-theme-color));
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
transform: scale(0);
transform-origin: left top
}
.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill {
transform-origin: right top
}
.swiper-container-horizontal>.swiper-pagination-progressbar,
.swiper-container-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite {
width: 100%;
height: 4px;
left: 0;
top: 0
}
.swiper-container-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,
.swiper-container-vertical>.swiper-pagination-progressbar {
width: 4px;
height: 100%;
left: 0;
top: 0
}
.swiper-pagination-white {
--swiper-pagination-color: #ffffff
}
.swiper-pagination-black {
--swiper-pagination-color: #000000
}
.swiper-pagination-lock {
display: none
}
.swiper-scrollbar {
border-radius: 10px;
position: relative;
-ms-touch-action: none;
background: rgba(0, 0, 0, .1)
}
.swiper-container-horizontal>.swiper-scrollbar {
position: absolute;
left: 1%;
bottom: 3px;
z-index: 50;
height: 5px;
width: 98%
}
.swiper-container-vertical>.swiper-scrollbar {
position: absolute;
right: 3px;
top: 1%;
z-index: 50;
width: 5px;
height: 98%
}
.swiper-scrollbar-drag {
height: 100%;
width: 100%;
position: relative;
background: rgba(0, 0, 0, .5);
border-radius: 10px;
left: 0;
top: 0
}
.swiper-scrollbar-cursor-drag {
cursor: move
}
.swiper-scrollbar-lock {
display: none
}
.swiper-zoom-container {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
text-align: center
}
.swiper-zoom-container>canvas,
.swiper-zoom-container>img,
.swiper-zoom-container>svg {
max-width: 100%;
max-height: 100%;
object-fit: contain
}
.swiper-slide-zoomed {
cursor: move
}
.swiper-lazy-preloader {
width: 42px;
height: 42px;
position: absolute;
left: 50%;
top: 50%;
margin-left: -21px;
margin-top: -21px;
z-index: 10;
transform-origin: 50%;
animation: swiper-preloader-spin 1s infinite linear;
box-sizing: border-box;
border: 4px solid var(--swiper-preloader-color, var(--swiper-theme-color));
border-radius: 50%;
border-top-color: transparent
}
.swiper-lazy-preloader-white {
--swiper-preloader-color: #fff
}
.swiper-lazy-preloader-black {
--swiper-preloader-color: #000
}
@keyframes swiper-preloader-spin {
100% {
transform: rotate(360deg)
}
}
.swiper-container .swiper-notification {
position: absolute;
left: 0;
top: 0;
pointer-events: none;
opacity: 0;
z-index: -1000
}
.swiper-container-fade.swiper-container-free-mode .swiper-slide {
transition-timing-function: ease-out
}
.swiper-container-fade .swiper-slide {
pointer-events: none;
transition-property: opacity
}
.swiper-container-fade .swiper-slide .swiper-slide {
pointer-events: none
}
.swiper-container-fade .swiper-slide-active,
.swiper-container-fade .swiper-slide-active .swiper-slide-active {
pointer-events: auto
}
.swiper-container-cube {
overflow: visible
}
.swiper-container-cube .swiper-slide {
pointer-events: none;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
z-index: 1;
visibility: hidden;
transform-origin: 0 0;
width: 100%;
height: 100%
}
.swiper-container-cube .swiper-slide .swiper-slide {
pointer-events: none
}
.swiper-container-cube.swiper-container-rtl .swiper-slide {
transform-origin: 100% 0
}
.swiper-container-cube .swiper-slide-active,
.swiper-container-cube .swiper-slide-active .swiper-slide-active {
pointer-events: auto
}
.swiper-container-cube .swiper-slide-active,
.swiper-container-cube .swiper-slide-next,
.swiper-container-cube .swiper-slide-next+.swiper-slide,
.swiper-container-cube .swiper-slide-prev {
pointer-events: auto;
visibility: visible
}
.swiper-container-cube .swiper-slide-shadow-bottom,
.swiper-container-cube .swiper-slide-shadow-left,
.swiper-container-cube .swiper-slide-shadow-right,
.swiper-container-cube .swiper-slide-shadow-top {
z-index: 0;
-webkit-backface-visibility: hidden;
backface-visibility: hidden
}
.swiper-container-cube .swiper-cube-shadow {
position: absolute;
left: 0;
bottom: 0px;
width: 100%;
height: 100%;
background: #000;
opacity: .6;
-webkit-filter: blur(50px);
filter: blur(50px);
z-index: 0
}
.swiper-container-flip {
overflow: visible
}
.swiper-container-flip .swiper-slide {
pointer-events: none;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
z-index: 1
}
.swiper-container-flip .swiper-slide .swiper-slide {
pointer-events: none
}
.swiper-container-flip .swiper-slide-active,
.swiper-container-flip .swiper-slide-active .swiper-slide-active {
pointer-events: auto
}
.swiper-container-flip .swiper-slide-shadow-bottom,
.swiper-container-flip .swiper-slide-shadow-left,
.swiper-container-flip .swiper-slide-shadow-right,
.swiper-container-flip .swiper-slide-shadow-top {
z-index: 0;
-webkit-backface-visibility: hidden;
backface-visibility: hidden
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 957 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 957 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 420 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 796 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 583 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 438 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 473 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -0,0 +1,28 @@
var act = {
baseUrl: "https://rd.ydool.org",
streetId: "",
ajax: (url, type, data, func) => {
$.ajax({
"url": act.baseUrl + url,
"type": type,
"data": data,
"dataType": "json",
success: function (resp) {
if (func) func(resp);
}
});
},
get: (url, func) => {
act.ajax(url + "?streetId=" + act.streetId, "get", null, func);
}
}
act.streetId = window.location.href.split("streetId=")[1];
$(function () {
$("a").on("click", function (e) {
var href = $(this).attr("href");
e.preventDefault();
href += "?streetId=" + act.streetId;
window.location.href = href;
});
});

View File

@ -0,0 +1,11 @@
xun();
function xun(){
if($('.xun').length==0){
$('.top img').addClass('xun');
}else{
$('.top img').removeClass('xun');
}
}
setInterval(() => {
xun()
}, 3000);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,29 @@
// JavaScript Document
(function($){
$.fn.extend({
"slideUp":function(h,value){
var docthis = this;
value=$.extend({
"time":5000,
"movetime":1000
},value)
function autoani(){
$("div:first",docthis).animate({"margin-top":-h},value.movetime,function(){
$(this).css("margin-top",0).appendTo(".box");
})
}
var anifun = setInterval(autoani,value.time);
$(docthis).children("div").hover(function(){
clearInterval(anifun);
},function(){
if($('.zhe').length==0){
anifun = setInterval(autoani,value.time);
}
})
$('.dise').click(function(){
anifun = setInterval(autoani,value.time);
})
}
})
})(jQuery)

View File

@ -0,0 +1,159 @@
(function () {
act.get("/api/statistics/db/perform/analyze", function (resp) {
var data = resp.data.countList;
option = {
animation: true,
grid: {
top: "15%",
bottom: 40,
right: 0,
left: 40
},
xAxis: {
data: resp.data.monthList,
axisLine: {
show: false //隐藏X轴轴线
},
axisTick: {
show: false //隐藏X轴轴线
},
splitLine: {
show: false,
lineStyle: {
color: "rgba(77, 128, 254, 0.2)",
width: 2
}
},
axisLabel: {
show: true,
margin: 14,
interval: 0,
fontSize: 14,
textStyle: {
color: "#65D5FF" //X轴文字颜色
}
}
},
yAxis: [
{
type: "value",
gridIndex: 0,
// splitNumber: 4,
splitLine: {
show: true,
lineStyle: {
color: "rgba(77, 128, 254, 0.2)",
width: 2
}
},
axisTick: {
show: false
},
axisLine: {
show: true,
lineStyle: {
color: "rgba(77, 128, 254, 0.2)"
}
},
axisLabel: {
show: true,
margin: 14,
fontSize: 14,
textStyle: {
color: "#65D5FF"
}
}
}
],
series: [
{
name: "设备在线率",
type: "bar",
barWidth: 16,
itemStyle: {
normal: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: "rgba(146, 225, 255, 1)"
},
{
offset: 1,
color: "rgba(0, 151, 251, 1)"
}
])
}
},
data: data,
z: 10,
zlevel: 0
},
{
// 分隔
type: "pictorialBar",
itemStyle: {
normal: {
color: "#0F375F"
}
},
symbolRepeat: "fixed",
symbolMargin: 6,
symbol: "rect",
symbolClip: true,
symbolSize: [18, 2],
symbolPosition: "start",
symbolOffset: [1, 1],
data: data,
width: 2,
z: 0,
zlevel: 1
},
{
name: "外框",
type: "bar",
barGap: "-110%", // 设置外框粗细
data: [100, 100, 100, 100, 100, 100, 100],
barWidth: 16,
itemStyle: {
normal: {
color: "transparent", // 填充色
// barBorderRadius: 0, //圆角半径
label: {
// 标签显示位置
show: false,
position: "top" // insideTop 或者横向的 insideLeft
}
}
},
z: 0
},
{
name: "背影",
type: "line",
smooth: true, //平滑曲线显示
showAllSymbol: false, //显示所有图形。
symbolSize: 0,
lineStyle: {
width: 0
},
areaStyle: {
color: "rgba(0, 151, 251, 0.1)"
},
data: data,
z: 5
}
],
dataZoom: [
{
type: "slider",
show: false,
xAxisIndex: [0],
endValue: 11,
startValue: 0
}
]
}
var myChart = echarts.init(document.getElementById('page1_1'));
myChart.setOption(option);
});
})()

View File

@ -0,0 +1,205 @@
(function () {
act.get("/api/statistics/db/supervise_thing/region/count", function (resp) {
let categoryData = resp.data.nameList;
let partdata = resp.data.nameList.slice(0, 5);
let chartdata = resp.data.countList;
let numdata = resp.data.countList.slice(0, 5);
let itemcolor = {
type: 'linear',
colorStops: [
{
offset: 0,
color: 'rgba(6, 120, 157,1)',
},
{
offset: 0.5,
color: 'rgba(6, 120, 157,0.2)',
},
{
offset: 1,
color: 'rgba(6, 120, 157,1)',
},
],
};
myoption = {
textStyle: {
color: '#c0c3cd',
fontSize: 14,
},
toolbox: {
show: false,
feature: {
saveAsImage: {
backgroundColor: '#031245',
},
restore: {},
},
iconStyle: {
borderColor: '#c0c3cd',
},
},
legend: {
top: 10,
itemWidth: 8,
itemHeight: 8,
icon: 'circle',
left: 'center',
padding: 0,
textStyle: {
color: '#c0c3cd',
fontSize: 14,
padding: [2, 0, 0, 0],
},
},
color: ['#00D7E9', 'rgba(0, 215, 233, 0.9)'],
grid: {
left: 30,
right: 0,
bottom: 20,
top: 40,
},
xAxis: {
nameTextStyle: {
color: '#c0c3cd',
padding: [0, 0, -10, 0],
fontSize: 14,
},
axisLabel: {
color: '#c0c3cd',
fontSize: 14,
interval: 0,
},
axisTick: {
show: false,
lineStyle: {
color: '#384267',
width: 1,
},
},
splitLine: {
show: false,
},
axisLine: {
lineStyle: {
color: '#335971',
},
show: true,
},
data: partdata,
type: 'category',
},
yAxis: {
nameTextStyle: {
color: '#c0c3cd',
padding: [0, 0, -10, 0],
fontSize: 14,
},
axisLabel: {
color: '#c0c3cd',
fontSize: 14,
},
axisTick: {
lineStyle: {
color: '#668092',
width: 1,
},
show: true,
},
splitLine: {
show: true,
lineStyle: {
color: '#335971',
// "type": "dashed"
},
},
axisLine: {
lineStyle: {
color: '#668092',
width: 1,
// "type": "dashed"
},
show: true,
},
},
series: [
{
data: numdata,
type: 'bar',
barMaxWidth: 'auto',
barWidth: 20,
itemStyle: {
color: {
x: 0,
y: 1,
x2: 0,
y2: 0,
type: 'linear',
colorStops: [
{
offset: 0,
color: '#00D7E9',
},
{
offset: 1,
color: 'rgba(0, 167, 233,0.3)',
},
],
},
},
label: {
show: true,
position: 'top',
distance: 10,
color: '#fff',
},
},
{
data: [1, 1, 1, 1, 1, 1],
type: 'pictorialBar',
barMaxWidth: '20',
symbol: 'diamond',
symbolOffset: [0, '50%'],
symbolSize: [20, 10],
},
{
data: numdata,
type: 'pictorialBar',
barMaxWidth: '20',
symbolPosition: 'end',
symbol: 'diamond',
symbolOffset: [0, '-50%'],
symbolSize: [20, 12],
zlevel: 2,
},
],
tooltip: {
show: true,
formatter: '{b}:{c0}',
},
};
var num1 = 6;
var num2 = 6;
function han() {
if (num1 > categoryData.length - 1) {
num1 = 0;
num2 = 0;
}
myoption.series[0].data.shift();
myoption.series[0].data.push(chartdata[num2++]);
myoption.xAxis.data.shift();
myoption.xAxis.data.push(categoryData[num1++]);
myChart.setOption(myoption);
}
interval = setInterval(function () {
han()
}, 3000);
var myChart = echarts.init(document.getElementById('page1_2'));
myChart.setOption(myoption);
});
})()

View File

@ -0,0 +1,77 @@
(function () {
act.get("/api/statistics/db/perform/count", function (resp) {
let nameList = resp.data.nameList;
let countList = resp.data.countList;
option = {
tooltip: {
trigger: 'axis',
show: false,
axisPointer: { // 坐标轴指示器,坐标轴触发有效
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
},
},
legend: {
show: false
},
grid: {
top: 20,
left: '15%',
right: '8%',
bottom: 0
},
xAxis: [{
splitLine: {
show: false
},
type: 'value',
show: false,
}],
yAxis: [{
splitLine: {
show: false
},
axisLine: { //y轴
show: false
},
type: 'category',
axisTick: {
show: false
},
inverse: true,
data: nameList,
axisLabel: {
color: '#A7D6F4',
fontSize: 14,
}
}],
series: [{
name: '标准化',
type: 'bar',
barWidth: 12, // 柱子宽度
label: {
show: true,
position: 'right', // 位置
color: '#A7D6F4',
fontSize: 14,
distance: 15, // 距离
formatter: '{c} 次' // 这里是数据展示的时候显示的数据
}, // 柱子上方的数值
itemStyle: {
barBorderRadius: [0, 20, 20, 0], // 圆角(左上、右上、右下、左下)
color: new echarts.graphic.LinearGradient(1, 0, 0, 0, [{
offset: 0,
color: '#51C5FD'
}, {
offset: 1,
color: '#005BB1'
}], false), // 渐变
},
data: countList
},]
};
var myChart = echarts.init(document.getElementById('page1_3'));
myChart.setOption(option);
});
})()

View File

@ -0,0 +1,99 @@
(function () {
act.get("/api/statistics/db/supervise_thing/status_count", function (resp) {
option = {
tooltip: {
trigger: 'item',
formatter: "{b} : ({d}%)",
extraCssText: 'z-index:2'
},
series: [{
type: 'pie',
radius: '68%',
center: ['50%', '55%'],
clockwise: false,
data: [{
value: resp.data.wenPercent,
name: '问'
}, {
value: resp.data.pingPercent,
name: '评'
}, {
value: resp.data.yiPercent,
name: '议'
}, {
value: resp.data.duPercent,
name: '督'
}],
label: {
normal: {
textStyle: {
color: '#fff',
fontSize: 14,
}
}
},
labelLine: {
normal: {
show: false
}
},
itemStyle: {
normal: {
borderWidth: 2,
borderColor: '#ffffff',
},
emphasis: {
borderWidth: 0,
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}],
color: [
'#00acee',
'#52cdd5',
'#79d9f1',
'#a7e7ff',
'#c8efff'
]
};
var myChart = echarts.init(document.getElementById('page1_4'));
myChart.setOption(option);
let index = 0;
function fun() {
var timer = setInterval(function () {
myChart.dispatchAction({
type: 'hideTip',
seriesIndex: 0,
dataIndex: index
});
// 显示提示框
myChart.dispatchAction({
type: 'showTip',
seriesIndex: 0,
dataIndex: index
});
// 取消高亮指定的数据图形
myChart.dispatchAction({
type: 'downplay',
seriesIndex: 0,
dataIndex: index == 0 ? 2 : index - 1
});
myChart.dispatchAction({
type: 'highlight',
seriesIndex: 0,
dataIndex: index
});
index++;
if (index > 4) {
index = 0;
}
}, 2000)
}
fun();
});
})()

View File

@ -0,0 +1,125 @@
(function () {
act.get("/api/statistics/contact/count", function (resp) {
var option = {
series: [{
type: 'liquidFill',
radius: '60%',
center: ['50%', '50%'],
data: [0.5, 0.5, 0.5],
backgroundStyle: {
borderWidth: 1,
color: 'rgb(255,0,255,0.1)'
},
label: {
normal: {
formatter: resp.data + '个',
textStyle: {
fontSize: 20
}
}
},
outline: {
show: false,
}
},
{
"type": "pie",
"center": ["50%", "50%"],
"radius": ["80%", "76%"],
"hoverAnimation": false,
"data": [{
"name": "",
"value": 500,
labelLine: {
show: false
},
itemStyle: {
color: '#5886f0'
},
emphasis: {
labelLine: {
show: false
},
itemStyle: {
color: '#5886f0'
},
}
},
{
"name": "",
"value": 4,
labelLine: {
show: false
},
itemStyle: {
color: '#ffffff',
"normal": {
"color": "#5886f0",
"borderColor": "#5886f0",
"borderWidth": 20,
// borderRadius: '100%'
},
},
label: {
borderRadius: '100%'
},
emphasis: {
labelLine: {
show: false
},
itemStyle: {
color: '#5886f0'
},
}
},
{ // 解决圆点过大后续部分显示明显的问题
"name": "",
"value": 4,
labelLine: {
show: false
},
itemStyle: {
color: '#5886f0'
},
emphasis: {
labelLine: {
show: false
},
itemStyle: {
color: '#5886f0'
},
}
},
{ //画剩余的刻度圆环
"name": "",
"value": 0,
itemStyle: {
color: '#050038'
},
"label": {
show: false
},
labelLine: {
show: false
},
emphasis: {
labelLine: {
show: false
},
itemStyle: {
color: 'rgba(255,255,255,0)'
},
}
}
]
}
]
}
var myChart = echarts.init(document.getElementById('page2_1'));
myChart.setOption(option);
});
})()

View File

@ -0,0 +1,124 @@
(function () {
act.get("/api/statistics/contact/activity/count", function (resp) {
var option = {
series: [{
type: 'liquidFill',
radius: '60%',
center: ['50%', '50%'],
data: [0.5, 0.5, 0.5],
backgroundStyle: {
borderWidth: 1,
color: 'rgb(255,0,255,0.1)'
},
label: {
normal: {
formatter: resp.data + '次',
textStyle: {
fontSize: 20
}
}
},
outline: {
show: false,
}
},
{
"type": "pie",
"center": ["50%", "50%"],
"radius": ["80%", "76%"],
"hoverAnimation": false,
"data": [{
"name": "",
"value": 500,
labelLine: {
show: false
},
itemStyle: {
color: '#5886f0'
},
emphasis: {
labelLine: {
show: false
},
itemStyle: {
color: '#5886f0'
},
}
},
{
"name": "",
"value": 4,
labelLine: {
show: false
},
itemStyle: {
color: '#ffffff',
"normal": {
"color": "#5886f0",
"borderColor": "#5886f0",
"borderWidth": 20,
// borderRadius: '100%'
},
},
label: {
borderRadius: '100%'
},
emphasis: {
labelLine: {
show: false
},
itemStyle: {
color: '#5886f0'
},
}
},
{ // 解决圆点过大后续部分显示明显的问题
"name": "",
"value": 4,
labelLine: {
show: false
},
itemStyle: {
color: '#5886f0'
},
emphasis: {
labelLine: {
show: false
},
itemStyle: {
color: '#5886f0'
},
}
},
{ //画剩余的刻度圆环
"name": "",
"value": 0,
itemStyle: {
color: '#050038'
},
"label": {
show: false
},
labelLine: {
show: false
},
emphasis: {
labelLine: {
show: false
},
itemStyle: {
color: 'rgba(255,255,255,0)'
},
}
}
]
}
]
}
var myChart = echarts.init(document.getElementById('page2_1_1'));
myChart.setOption(option);
});
})()

View File

@ -0,0 +1,107 @@
(function () {
act.get("/api/statistics/contact/activity/count/rank", function (resp) {
let className = resp.data.nameList;
let data = resp.data.countList;
var colorList = ['#2473EF', '#33DDF8', '#2473EF', '#33DDF8', '#2473EF', '#33DDF8'];
var defaultData = [100, 100, 100, 100, 100, 100];
option = {
grid: {
left: '22%',
right: '12%',
bottom: 0,
top: '10%',
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'none'
},
formatter: function (params) {
return params[0].name + '<br/>' +
"<span style='display:inline-block;margin-right:5px;border-radius:10px;width:9px;height:9px;background-color:rgba(36,207,233,0.9)'></span>" +
// params[0].seriesName + ' : ' + Number((params[0].value.toFixed(4) / 10000).toFixed(2)).toLocaleString() + ' <br/>'
params[0].seriesName + ' : ' + params[0].value + '次'
}
},
xAxis: {
show: false,
type: 'value'
},
yAxis: [{
type: 'category',
inverse: true,
axisLabel: {
show: true,
textStyle: {
color: '#fff'
},
},
splitLine: {
show: false
},
axisTick: {
show: false
},
axisLine: {
show: false
},
data: className
}, {
type: 'category',
inverse: true,
axisTick: 'none',
axisLine: 'none',
show: true,
axisLabel: {
textStyle: {
color: '#ffffff',
fontSize: '12'
},
formatter: function (value) {
return value + ' 次';
},
},
data: data
}],
series: [{
name: '举办次数',
type: 'bar',
zlevel: 1,
itemStyle: {
normal: {
barBorderRadius: 13,
// color: new echarts.graphic.LinearGradient(0, 0, 1, 0, [{
// offset: 0,
// color: 'rgb(57,89,255,1)'
// }, {
// offset: 1,
// color: 'rgb(46,200,207,1)'
// }]),
color: (params) => {
return colorList[params.dataIndex]
}
},
},
barWidth: 10,
data: data
},
{
name: '背景',
type: 'bar',
barWidth: 10,
barGap: '-100%',
data: defaultData,
itemStyle: {
normal: {
color: '#1B375E',
barBorderRadius: 0,
}
},
},
]
};
var myChart = echarts.init(document.getElementById('page2_2'));
myChart.setOption(option);
});
})()

View File

@ -0,0 +1,87 @@
(function () {
act.get("/api/statistics/contact/activity/channel/count", function (resp) {
var channelArr = resp.data.channelArr;
var countArr = resp.data.countArr;
var objArr = new Array();
channelArr.forEach((item, index) => {
objArr.push({ "value": countArr[index], "name": item });
});
var color = ['#FFAA45', '#38FCBE', '#6844C6', '#164EB8', '#678198']
option = {
tooltip: {
trigger: 'item'
},
legend: {
orient: 'vertical',
right: 0,
top: 'center',
textStyle: {
color: '#fff'
}
},
series: [
{
type: 'pie',
radius: '80%',
center: ['35%', '50%'],
data: objArr,
label: {
show: false
},
itemStyle: {
normal: {
borderColor: '#10234B',
borderWidth: '5',
},
},
color: color,
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
};
var myChart = echarts.init(document.getElementById('page2_3'));
myChart.setOption(option);
let index = 0;
function fun() {
var timer = setInterval(function () {
myChart.dispatchAction({
type: 'hideTip',
seriesIndex: 0,
dataIndex: index
});
// 显示提示框
myChart.dispatchAction({
type: 'showTip',
seriesIndex: 0,
dataIndex: index
});
// 取消高亮指定的数据图形
myChart.dispatchAction({
type: 'downplay',
seriesIndex: 0,
dataIndex: index == 0 ? 2 : index - 1
});
myChart.dispatchAction({
type: 'highlight',
seriesIndex: 0,
dataIndex: index
});
index++;
if (index > 5) {
index = 0;
}
}, 2000)
}
fun();
});
})()

View File

@ -0,0 +1,92 @@
(function () {
act.get("/api/statistics/contact/activity/count/month", function (resp) {
var monthList = resp.data.monthList;
var countList = resp.data.countList;
option = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
},
grid: {
right: '3%',
left: '8%',
bottom: 30
},
xAxis: [{
type: 'category',
data: monthList,
axisLine: {
lineStyle: {
color: '#FFFFFF'
}
},
axisLabel: {
margin: 10,
color: '#e2e9ff',
textStyle: {
fontSize: 14
},
},
axisTick: {
show: false
}
}],
yAxis: [{
axisLabel: {
formatter: '{value}',
color: '#e2e9ff',
},
axisTick: {
show: false
},
axisLine: {
show: false,
lineStyle: {
color: 'rgba(0,186,255,.6)'
}
},
splitLine: {
lineStyle: {
color: 'rgba(255,255,255,0.12)'
}
}
}],
series: [{
type: 'bar',
data: countList,
barWidth: '28px',
itemStyle: {
normal: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
offset: 0,
color: 'rgba(0,244,255,1)' // 0% 处的颜色
}, {
offset: 1,
color: 'rgba(0,77,167,1)' // 100% 处的颜色
}], false),
shadowColor: 'rgba(0,160,221,1)',
shadowBlur: 4,
}
},
label: {
normal: {
show: true,
lineHeight: 30,
formatter: '{c}',
position: 'top',
textStyle: {
color: '#00D6F9',
fontSize: 14
}
}
}
}]
};
var myChart = echarts.init(document.getElementById('page2_4'));
myChart.setOption(option);
});
})()

View File

@ -0,0 +1,220 @@
(function () {
act.get("/api/statistics/contact/activity/month/analyze", function (resp) {
var monthArr = resp.data.monthArr;
var sameRateArr = resp.data.sameRateArr;
var cycleRateArr = resp.data.cycleRateArr;
// 统计百分比
var data1 = cycleRateArr;
var data2 = sameRateArr;
var json = {
chart0: {
xcategory: monthArr,
low: data1,
lowLine: [],
}
};
var json2 = {
chart0: {
xcategory: monthArr,
low: data2,
lowLine: [],
}
};
var zrUtil = echarts.util;
zrUtil.each(json.chart0.xcategory, function (item, index) {
json.chart0.lowLine.push([{
coord: [index, json.chart0.low[index]]
}, {
coord: [index + 1, json.chart0.low[index + 1]]
}]);
});
zrUtil.each(json.chart0.xcategory, function (item, index) {
json2.chart0.lowLine.push([{
coord: [index, json2.chart0.low[index]]
}, {
coord: [index + 1, json2.chart0.low[index + 1]]
}]);
});
var option = {
tooltip: {
trigger: 'axis',
axisPointer: {
lineStyle: {
color: '#15ecf4'
}
},
backgroundColor: 'rgba(0,0,0,.8)',
extraCssText: 'box-shadow: 4px 4px 10px rgba(21, 250, 255,.6);',
formatter: function (params) {
var result = params[0].name + '<br>';
params.forEach(function (item) {
result += '<span style="display:inline-block;margin-right:5px;border-radius:10px;width:9px;height:9px;background-color:' + item.color + '"></span>';
// 判断设置增长还是降低
if (parseFloat(item.data) >= 50) {
result += item.seriesName + ": " + '<span class="growth">增长' + item.data + "%</span><br>"
} else if (parseFloat(item.data) < 50) {
result += item.seriesName + ": " + '<span class="reduce">降低' + item.data + "%</span><br>"
}
});
return result;
}
},
legend: {
data: ['同比', '环比'],
textStyle: {
fontSize: 12,
color: 'rgb(0,253,255,0.6)'
},
top: '5%',
right: '5%'
},
grid: {
bottom: 30,
left: 50,
right: 0,
},
xAxis: {
axisLine: {
show: true,
lineStyle: {
color: '#15faff',
},
},
axisTick: {
show: false
},
axisLabel: {
show: true
},
data: ['1月', '2月', '3月', '4月', '5月', '6月'],
},
yAxis: {
max: 100,
splitNumber: 4,
interval: 25,
axisLine: {
show: false,
},
axisTick: {
show: false
},
splitLine: {
lineStyle: {
type: 'dashed',
color: '#4b4d64'
}
},
axisLabel: {
formatter: '{value} %',
textStyle: { //改变刻度字体样式
color: '#ffffff'
}
},
},
series: [{
name: '环比',
type: 'line',
// smooth: true,
symbol: 'circle',
symbolSize: 10,
areaStyle: {
normal: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
offset: 0,
color: 'rgba(255, 204,1, .9)'
}, {
offset: 0.8,
color: 'rgba(6, 8, 41,.1)'
}], false),
shadowColor: 'rgba(0, 0, 0, 0.1)',
shadowBlur: 10
}
},
itemStyle: {
normal: {
color: '#ffcb00'
}
},
data: data1
},
{
name: '环比',
type: 'lines',
coordinateSystem: 'cartesian2d',
zlevel: 1,
smooth: true,
symbol: 'circle',
effect: {
show: true,
smooth: true,
period: 2,
symbolSize: 8
},
lineStyle: {
normal: {
color: '#ffcb00',
width: 0,
opacity: 0,
curveness: 0,
}
},
data: json.chart0.lowLine
},
{
name: '同比',
type: 'line',
// smooth: true,
symbol: 'circle',
symbolSize: 10,
areaStyle: {
normal: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
offset: 0,
color: 'rgba(21, 250, 255,.9)'
}, {
offset: 0.8,
color: 'rgba(6, 8, 41,.1)'
}], false),
shadowColor: 'rgba(0, 0, 0, 0.1)',
shadowBlur: 10
}
},
itemStyle: {
normal: {
color: '#15faff'
}
},
data: data2
},
{
name: '同比',
type: 'lines',
coordinateSystem: 'cartesian2d',
zlevel: 1,
smooth: true,
symbol: 'circle',
effect: {
show: true,
smooth: true,
period: 2,
symbolSize: 8
},
lineStyle: {
normal: {
color: '#15faff',
width: 0,
opacity: 0,
curveness: 0,
}
},
data: json2.chart0.lowLine
},
]
};
var myChart = echarts.init(document.getElementById('page2_5'));
myChart.setOption(option);
});
})()

View File

@ -0,0 +1,93 @@
(function () {
act.get("/api/statistics/contact/activity/people/month/analyze", function (resp) {
var monthArr = resp.data.monthArr;
var countArr = resp.data.countArr;
option = {
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
},
grid: {
right: '3%',
left: '9%',
bottom: '15%'
},
xAxis: [{
type: 'category',
data: monthArr,
axisLine: {
lineStyle: {
color: '#FFFFFF'
}
},
axisLabel: {
margin: 10,
color: '#e2e9ff',
textStyle: {
fontSize: 14
},
},
axisTick: {
show: false
}
}],
yAxis: [{
axisLabel: {
formatter: '{value}',
color: '#e2e9ff',
},
axisTick: {
show: false
},
axisLine: {
show: false,
lineStyle: {
color: 'rgba(0,186,255,.6)'
}
},
splitLine: {
lineStyle: {
color: 'rgba(255,255,255,0.12)'
}
}
}],
series: [{
type: 'bar',
data: countArr,
barWidth: '14px',
itemStyle: {
normal: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
offset: 0,
color: 'rgba(0,162,255,1)' // 0% 处的颜色
}, {
offset: 1,
color: 'rgba(16,70,174,1)' // 100% 处的颜色
}], false),
shadowBlur: 4,
//柱形图圆角,初始化效果
barBorderRadius: [15, 15, 0, 0]
}
},
label: {
normal: {
show: true,
lineHeight: 30,
formatter: '{c}',
position: 'top',
textStyle: {
color: '#00D6F9',
fontSize: 14
}
}
}
}]
};
var myChart = echarts.init(document.getElementById('page2_6'));
myChart.setOption(option);
});
})()

View File

@ -0,0 +1,244 @@
(function () {
act.get("/api/statistics/voter/analyze", function (resp) {
var nameList = resp.data.nameList;
var leftIndex = nameList.length % 2 == 0 ? nameList.length / 2 : nameList.length / 2 + 1;
var leftNameList = nameList.slice(0, leftIndex);
var rightNameList = nameList.slice(leftIndex, nameList.length);
var countList = resp.data.countList;
var leftCountList = countList.slice(0, leftIndex);
var rightCountList = countList.slice(leftIndex, countList.length);
var percentList = resp.data.percentList;
var leftPercentList = percentList.slice(0, leftIndex);
var rightPercentList = percentList.slice(leftIndex, percentList.length);
var leftFullPercentList = new Array();
var rightFullPercentList = new Array();
leftPercentList.forEach(() => {
leftFullPercentList.push("100");
});
rightPercentList.forEach(() => {
rightFullPercentList.push("100");
});
var option = {
grid: [
{
//左侧的柱状图grid
width: "46%",
left: 0,
top: '8%',
right: '5%',
bottom: 0
},
{
//右侧的柱状图grid
width: "46%",
left: '54%',
top: '8%',
right: 0,
bottom: 0
}
],
xAxis: [
{
//左侧柱状图的X轴
gridIndex: 0,//x 轴所在的 grid 的索引
show: false
},
{
//右侧柱状图的X轴
gridIndex: 1,//x 轴所在的 grid 的索引
show: false
}],
yAxis: [
{
//左侧柱状图的Y轴
gridIndex: 0,//y轴所在的 grid 的索引
splitLine: 'none',
axisTick: 'none',
axisLine: 'none',
axisLabel: {
verticalAlign: 'bottom',
align: 'left',
padding: [0, 0, 8, 10],
textStyle: {
color: '#befbff',
fontSize: '14',
}
},
data: leftNameList,
inverse: true,
},
{
//左侧柱状图的Y轴
gridIndex: 0,//y轴所在的 grid 的索引
splitLine: 'none',
axisTick: 'none',
axisLine: 'none',
data: leftCountList,
inverse: true,
axisLabel: {
show: true,
verticalAlign: 'bottom',
align: 'right',
padding: [0, 16, 8, 0],
textStyle: {
color: '#fff',
fontSize: '14',
},
formatter: function (value) {
return '{x|' + value + '} {y|' + "次}"
},
rich: {
y: {
color: '#befbff',
fontSize: 14
},
x: {
color: '#f6cf42',
fontSize: 14
}
}
}
},
{
//左侧柱状图的Y轴
gridIndex: 0,//y轴所在的 grid 的索引
splitLine: 'none',
axisTick: 'none',
axisLine: 'none',
data: []
},
{
//右侧柱状图的Y轴
gridIndex: 1,//y轴所在的 grid 的索引
splitLine: 'none',
axisTick: 'none',
axisLine: 'none',
axisLabel: {
verticalAlign: 'bottom',
align: 'left',
padding: [0, 0, 8, 10],
textStyle: {
color: '#befbff',
fontSize: '14',
}
},
data: rightNameList,
inverse: true
},
{
//右侧柱状图的Y轴
gridIndex: 1,//y轴所在的 grid 的索引
splitLine: 'none',
axisTick: 'none',
axisLine: 'none',
data: rightCountList,
inverse: true,
axisLabel: {
show: true,
verticalAlign: 'bottom',
align: 'right',
padding: [0, 16, 8, 0],
textStyle: {
color: '#fff',
fontSize: '14',
},
formatter: function (value) {
return '{x|' + value + '} {y|' + "次}"
},
rich: {
y: {
color: '#befbff',
fontSize: 14
},
x: {
color: '#f6cf42',
fontSize: 14
}
}
},
},
{
//右侧柱状图的Y轴
gridIndex: 1,//y轴所在的 grid 的索引
splitLine: 'none',
axisTick: 'none',
axisLine: 'none',
data: []
}
],
series: [
{
name: '值',
type: 'bar',
xAxisIndex: 0,//使用的 x 轴的 index在单个图表实例中存在多个 x 轴的时候有用。
yAxisIndex: 0,//使用的 y 轴的 index在单个图表实例中存在多个 y轴的时候有用。
data: leftPercentList,
barWidth: 10,
itemStyle: {
normal: {
color: '#0BBFCA',
barBorderRadius: 6,
}
},
z: 2
},
{
name: '外框',
type: 'bar',
xAxisIndex: 0,//使用的 x 轴的 index在单个图表实例中存在多个 x 轴的时候有用。
yAxisIndex: 2,//使用的 y 轴的 index在单个图表实例中存在多个 y轴的时候有用。
barGap: '-100%',
data: leftFullPercentList,
barWidth: 10,
itemStyle: {
normal: {
color: '#2d5271',
barBorderRadius: 6,
}
},
z: 0
},
{
name: '值',
type: 'bar',
xAxisIndex: 1,//使用的 x 轴的 index在单个图表实例中存在多个 x 轴的时候有用。
yAxisIndex: 3,//使用的 y 轴的 index在单个图表实例中存在多个 y轴的时候有用。
data: rightPercentList,
barWidth: 10,
itemStyle: {
normal: {
color: '#0BBFCA',
barBorderRadius: 6,
}
},
z: 2
},
{
name: '外框',
type: 'bar',
xAxisIndex: 1,//使用的 x 轴的 index在单个图表实例中存在多个 x 轴的时候有用。
yAxisIndex: 5,//使用的 y 轴的 index在单个图表实例中存在多个 y轴的时候有用。
barGap: '-100%',
data: rightFullPercentList,
barWidth: 10,
itemStyle: {
normal: {
color: '#2d5271',
barBorderRadius: 6,
}
},
z: 0
}
]
};
var myChart = echarts.init(document.getElementById('page3_1'));
myChart.setOption(option);
});
})()

View File

@ -0,0 +1,110 @@
(function () {
act.get("/api/statistics/voter/month/count", function (resp) {
var countList = resp.data.countList;
var monthList = resp.data.monthList;
option = {
color: ["#63caff", "#3608FE"],
grid: {
left: 36,
right: 0,
bottom: 30,
top: 40
},
xAxis: {
axisLabel: {
color: "#c0c3cd",
fontSize: 14,
interval: 0
},
splitLine: {
show: false
},
axisLine: {
lineStyle: {
color: "#384267",
width: 1,
type: "dashed"
},
show: true
},
data: monthList,
type: "category"
},
yAxis: {
axisLabel: {
color: "#c0c3cd",
fontSize: 14
},
splitLine: {
show: true,
lineStyle: {
color: "#384267",
type: "dashed"
}
},
axisLine: {
lineStyle: {
color: "#384267",
width: 1,
type: "dashed"
},
show: true
},
name: ""
},
series: [{
data: countList,
type: "bar",
barWidth: 30,
itemStyle: {
color: {
x: 0,
y: 0,
x2: 0,
y2: 1,
type: "linear",
global: false,
colorStops: [{
offset: 0,
color: "#3A1BFD"
}, {
offset: 1,
color: "#3BEFFD"
}]
}
},
label: {
show: true,
position: "top",
distance: 10,
color: "#fff"
}
}, {
data: [1, 1, 1, 1, 1, 1, 1, 1],
type: "pictorialBar",
barMaxWidth: "20",
symbol: "diamond",
symbolOffset: [0, "50%"],
symbolSize: [30, 15]
}, {
data: countList,
type: "pictorialBar",
barMaxWidth: "20",
symbolPosition: "end",
symbol: "diamond",
symbolOffset: [0, "-50%"],
symbolSize: [30, 12],
zlevel: 2
}],
tooltip: {
trigger: "item",
show: true
}
}
var myChart = echarts.init(document.getElementById('page3_2'));
myChart.setOption(option);
});
})()

View File

@ -0,0 +1,170 @@
(function () {
act.get("/api/statistics/voter/people_condition/category", function (resp) {
var categoryArr = resp.data.categoryArr;
var countArr = resp.data.countArr;
var objArr = new Array();
categoryArr.forEach((item, index) => {
objArr.push({ "value": countArr[index], "name": item });
});
option = {
color: ["#EAEA26", "#906BF9", "#01E17E", "#3DD1F9", "#FE5656", "#164BCD", "#3434B0", "#FFAD05"],
tooltip: {
trigger: 'item',
formatter: "{b} : {c} ({d}%)"
},
legend: {
type: "scroll",
orient: "vartical",
// x: "right",
top: "center",
right: 0,
// bottom: "0%",
itemWidth: 16,
itemHeight: 8,
itemGap: 10,
textStyle: {
color: '#A3E2F4',
fontSize: 12,
fontWeight: 0
},
data: categoryArr
},
polar: {},
angleAxis: {
interval: 1,
type: 'category',
data: [],
z: 10,
axisLine: {
show: false,
lineStyle: {
color: "#0B4A6B",
width: 1,
type: "solid"
},
},
axisLabel: {
interval: 0,
show: true,
color: "#0B4A6B",
margin: 8,
fontSize: 14
},
},
radiusAxis: {
show: false,
min: 40,
max: 120,
interval: 20,
axisLine: {
show: false,
lineStyle: {
color: "#0B3E5E",
width: 1,
type: "solid"
},
},
axisLabel: {
formatter: '{value} %',
show: false,
padding: [0, 0, 20, 0],
color: "#0B3E5E",
fontSize: 14
},
splitLine: {
lineStyle: {
color: "#0B3E5E",
width: 2,
type: "solid"
}
}
},
calculable: true,
series: [{
type: 'pie',
radius: ["5%", "10%"],
center: ['40%', '50%'],
hoverAnimation: false,
labelLine: {
normal: {
show: false,
length: 15,
length2: 18
},
emphasis: {
show: false
}
},
data: [{
name: '',
value: 0,
itemStyle: {
normal: {
color: "#0B4A6B"
}
}
}]
}, {
type: 'pie',
radius: ["75%", "80%"],
center: ['40%', '50%'],
hoverAnimation: false,
labelLine: {
normal: {
show: false,
length: 30,
length2: 55
},
emphasis: {
show: false
}
},
name: "",
data: [{
name: '',
value: 0,
itemStyle: {
normal: {
color: "#0B4A6B"
}
}
}]
}, {
stack: 'a',
type: 'pie',
radius: ['20%', '60%'],
center: ['40%', '50%'],
roseType: 'area',
zlevel: 10,
label: {
normal: {
show: true,
formatter: "{c}",
textStyle: {
fontSize: 12,
},
position: 'outside'
},
emphasis: {
show: true
}
},
labelLine: {
normal: {
show: true,
length: 10,
length2: 20
},
emphasis: {
show: false
}
},
data: objArr
},]
}
var myChart = echarts.init(document.getElementById('page3_3'));
myChart.setOption(option);
});
})()

Some files were not shown because too many files have changed in this diff Show More