ChenSir 1 vuosi sitten
vanhempi
commit
23071356b4
42 muutettua tiedostoa jossa 856 lisäystä ja 603 poistoa
  1. 3 0
      aidex-admin/src/main/resources/application-druid.yml
  2. 7 7
      aidex-admin/src/main/resources/application.yml
  3. 52 0
      aidex-controller/src/main/java/com/aidex/web/controller/app/AppController.java
  4. 4 3
      aidex-controller/src/main/java/com/aidex/web/controller/common/CommonController.java
  5. 25 9
      aidex-controller/src/main/java/com/aidex/web/controller/system/SysRouteController.java
  6. 70 0
      aidex-quartz/src/main/java/com/aidex/quartz/task/RefreshMdsTask.java
  7. 28 0
      aidex-system/src/main/java/com/aidex/system/domain/vo/LatAndLng.java
  8. 55 0
      aidex-system/src/main/java/com/aidex/system/domain/vo/SysRouteVo.java
  9. 8 0
      aidex-system/src/main/java/com/aidex/system/mapper/SysConfigMapper.java
  10. 12 0
      aidex-system/src/main/java/com/aidex/system/mapper/SysConfigMapper.xml
  11. 9 0
      aidex-system/src/main/java/com/aidex/system/mapper/SysShipMapper.java
  12. 20 0
      aidex-system/src/main/java/com/aidex/system/mapper/SysShipMapper.xml
  13. 1 1
      aidex-system/src/main/java/com/aidex/system/mapper/SysWharfMapper.xml
  14. 13 2
      aidex-system/src/main/java/com/aidex/system/service/SysConfigService.java
  15. 15 0
      aidex-system/src/main/java/com/aidex/system/service/SysShipService.java
  16. 10 0
      aidex-system/src/main/java/com/aidex/system/service/SysWharfService.java
  17. 10 0
      aidex-system/src/main/java/com/aidex/system/service/impl/SysConfigServiceImpl.java
  18. 11 0
      aidex-system/src/main/java/com/aidex/system/service/impl/SysShipServiceImpl.java
  19. 54 7
      aidex-system/src/main/java/com/aidex/system/service/impl/SysWharfServiceImpl.java
  20. 2 1
      aidex-ui/.env
  21. 2 1
      aidex-ui/.env.development
  22. 2 1
      aidex-ui/.env.preview
  23. 8 7
      aidex-ui/package.json
  24. 1 1
      aidex-ui/public/index.html
  25. BIN
      aidex-ui/public/logo.png
  26. BIN
      aidex-ui/public/logo_bak.png
  27. 24 0
      aidex-ui/src/assets/logo-bak.svg
  28. BIN
      aidex-ui/src/assets/logo.png
  29. 28 23
      aidex-ui/src/assets/logo.svg
  30. BIN
      aidex-ui/src/assets/logo_bak.png
  31. 1 1
      aidex-ui/src/config/defaultSettings.js
  32. 1 1
      aidex-ui/src/layouts/UserLayout.vue
  33. 2 1
      aidex-ui/src/router/index.js
  34. 0 1
      aidex-ui/src/utils/request.js
  35. 5 4
      aidex-ui/src/views/dashboard/index.vue
  36. 210 40
      aidex-ui/src/views/dashboard/portal/About.vue
  37. 1 9
      aidex-ui/src/views/dashboard/portal/CommonUse.vue
  38. 24 380
      aidex-ui/src/views/dashboard/portal/ToDo.vue
  39. 18 18
      aidex-ui/src/views/dashboard/typical-home.less
  40. 108 75
      aidex-ui/src/views/system/line/index.vue
  41. 2 5
      aidex-ui/src/views/system/sysship/index.vue
  42. 10 5
      aidex-ui/vue.config.js

+ 3 - 0
aidex-admin/src/main/resources/application-druid.yml

@@ -9,6 +9,9 @@ spring:
                 url: jdbc:mysql://152.136.217.148:3306/water_bus?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&&allowMultiQueries=true
                 username: site
                 password: admin@2022.cn
+#                url: jdbc:mysql://192.168.0.116:3306/water_bus?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&&allowMultiQueries=true
+#                username: root
+#                password: Gshk@ssbs@8551398
             # 从库数据源
             slave:
                 # 从数据源开关/默认关闭

+ 7 - 7
aidex-admin/src/main/resources/application.yml

@@ -9,7 +9,7 @@ aidex:
   # 实例演示开关
   demoEnabled: true
   # 文件路径 示例( Windows配置D:/aidex/uploadPath,Linux配置 /home/aidex/uploadPath)
-  profile: D:/aidex/uploadPath
+  profile: /home/aidex/uploadPath
   # 获取ip地址开关
   addressEnabled: false
   # 验证码类型 math 数组计算 char 字符验证
@@ -70,13 +70,13 @@ spring:
   # redis 配置
   redis:
     # 地址
-    host: 192.168.1.243
+    host: 127.0.0.1
     # 端口,默认为6379
-    port: 6379
+    port: 16379
     # 数据库索引
     database: 0
     # 密码
-    password: 12345678
+    # password: 12345678
     # 连接超时时间
     timeout: 10s
     lettuce:
@@ -123,7 +123,7 @@ pagehelper:
 # Swagger配置
 swagger:
   # 是否开启swagger
-  enabled: false
+  enabled: true
   # 请求前缀
   pathMapping: /api
 
@@ -138,8 +138,8 @@ xss:
 
 wx:
   miniapp:
-    appid: wx89863f6cc3943d04 #微信小程序的appid
-    secret: 1d8a4519dd92e626e183c4c7e2dad14e  #微信小程序的Secret
+    appid: wx43371b1687d52c06 #微信小程序的appid
+    secret: 98444ae0dfb97e12eb262bea10a5fbd5  #微信小程序的Secret
     msgDataFormat: JSON
     token:
     aesKey:

+ 52 - 0
aidex-controller/src/main/java/com/aidex/web/controller/app/AppController.java

@@ -5,9 +5,15 @@ import com.aidex.common.app.domain.vo.LocationVO;
 import com.aidex.common.app.domain.vo.SysWharfVO;
 import com.aidex.common.app.server.IAppService;
 import com.aidex.common.core.domain.R;
+import com.aidex.common.core.page.PageDomain;
 import com.aidex.common.gps.domain.LocationEntity;
+import com.aidex.system.domain.SysConfig;
+import com.aidex.system.domain.SysDictData;
 import com.aidex.system.domain.SysNotice;
 import com.aidex.system.domain.SysWharf;
+import com.aidex.system.domain.vo.SysRouteVo;
+import com.aidex.system.service.*;
+import com.github.pagehelper.PageInfo;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
@@ -27,6 +33,15 @@ public class AppController {
     @Autowired
     private IAppService iAppService;
 
+    @Autowired
+    private SysWharfService sysWharfService;
+
+    @Autowired
+    private SysDictDataService sysDictDataService;
+
+    @Autowired
+    private SysNoticeService noticeService;
+
     @GetMapping("/carousel")
     @ApiOperation(value = "获取轮播信息", notes = "获取轮播信息", produces = "application/json")
     public R<List<SysNotice>> carousel()
@@ -87,4 +102,41 @@ public class AppController {
     {
         return R.data(iAppService.findNearestStation(lat,lon));
     }
+
+    @GetMapping("/route")
+    @ApiOperation(value = "获取航线信息", notes = "获取航线信息", produces = "application/json")
+    public R<List<SysRouteVo>> getRoute()
+    {
+        return R.data(sysWharfService.getRouteList());
+    }
+
+    @GetMapping("/notice/type")
+    @ApiOperation(value = "获取信息类型", notes = "获取信息类型", produces = "application/json")
+    public R<List<SysDictData>> getNoticeType()
+    {
+        SysDictData sysDictData = new SysDictData();
+        sysDictData.setDictType("sys_notice_type");
+        List<SysDictData> list = sysDictDataService.findList(sysDictData);
+        return R.data(list);
+    }
+
+    @GetMapping("/notice/data")
+    @ApiOperation(value = "按信息类型获取信息数据", notes = "按信息类型获取信息数据", produces = "application/json")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "dictValue", value = "信息类型", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "pageNum", value = "页码", required = true, dataType = "int"),
+            @ApiImplicitParam(name = "pageSize", value = "页大小", required = true, dataType = "int")})
+    public R<PageInfo> getNoticeData(@RequestParam(defaultValue = "1",name = "dictValue") String dictValue,
+                                     @RequestParam(defaultValue = "1" ,name = "pageNum") Integer pageNum,
+                                     @RequestParam(defaultValue = "10" ,name = "pageSize") Integer pageSize)
+    {
+        SysNotice sysNotice = new SysNotice();
+        sysNotice.setNoticeType(dictValue);
+        PageDomain pageDomain = new PageDomain();
+        pageDomain.setPageNum(pageNum);
+        pageDomain.setPageSize(pageSize);
+        sysNotice.setPage(pageDomain);
+        return R.data(noticeService.findPage(sysNotice));
+    }
+
 }

+ 4 - 3
aidex-controller/src/main/java/com/aidex/web/controller/common/CommonController.java

@@ -22,7 +22,7 @@ import java.io.File;
 
 /**
  * 通用请求处理
- * 
+ *
  * @author ruoyi
  */
 @RestController
@@ -35,7 +35,7 @@ public class CommonController
 
     /**
      * 通用下载请求
-     * 
+     *
      * @param fileName 文件名称
      * @param delete 是否删除
      */
@@ -99,7 +99,8 @@ public class CommonController
             String filePath = AiDexConfig.getUploadPath();
             // 上传并返回新文件名称
             String fileName = FileUploadUtils.upload(filePath, file);
-            String url = serverConfig.getUrl() + fileName;
+            // 前端路径应该添加 /api
+            String url = serverConfig.getUrl() + "/api" +fileName;
             AjaxResult ajax = AjaxResult.success();
             ajax.put("fileName", fileName);
             ajax.put("url", url);

+ 25 - 9
aidex-controller/src/main/java/com/aidex/web/controller/system/SysRouteController.java

@@ -6,6 +6,8 @@ import com.aidex.common.core.controller.BaseController;
 import com.aidex.common.core.domain.R;
 import com.aidex.common.core.redis.RedisCache;
 import com.aidex.common.enums.BusinessType;
+import com.aidex.system.domain.SysConfig;
+import com.aidex.system.service.SysConfigService;
 import com.alibaba.fastjson2.JSONArray;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
@@ -21,8 +23,9 @@ import org.springframework.web.bind.annotation.*;
 @RequestMapping("/system/sysRouter")
 public class SysRouteController extends BaseController {
 
+
     @Autowired
-    private RedisCache  redisCache;
+    private SysConfigService configService;
 
 
     /**
@@ -30,9 +33,12 @@ public class SysRouteController extends BaseController {
      */
     @GetMapping
     public R<JSONArray> detail() {
-        JSONArray data = new JSONArray();
-        data = redisCache.getCacheObject(Constants.ROUTE_STORE_PREFIX);
-        return R.data(data);
+        JSONArray jsonArray = new JSONArray();
+        SysConfig sysConfigRoute = configService.findConfigByKey(Constants.ROUTE_STORE_PREFIX);
+        if (sysConfigRoute != null) {
+            jsonArray = JSONArray.parseArray(sysConfigRoute.getConfigValue());
+        }
+        return R.data(jsonArray);
     }
 
     /**
@@ -41,8 +47,18 @@ public class SysRouteController extends BaseController {
     @Log(title = "航线管理", businessType = BusinessType.INSERT)
     @PostMapping
     public R add(@RequestBody @Validated  JSONArray data) {
-        redisCache.setCacheObject(Constants.ROUTE_STORE_PREFIX ,data);
-        return R.status(redisCache.hasKey(Constants.ROUTE_STORE_PREFIX));
+        SysConfig sysConfigCurrent = configService.findConfigByKey(Constants.ROUTE_STORE_PREFIX);
+        if (sysConfigCurrent != null) {
+            sysConfigCurrent.setConfigValue(data.toJSONString());
+            return R.status(configService.save(sysConfigCurrent));
+        } else {
+            SysConfig sysConfigNew = new SysConfig();
+            sysConfigNew.setConfigKey(Constants.ROUTE_STORE_PREFIX);
+            sysConfigNew.setConfigName("航线数据");
+            sysConfigNew.setConfigValue(data.toJSONString());
+            sysConfigNew.setConfigType("Y");
+            return R.status(configService.save(sysConfigNew));
+        }
     }
 
 
@@ -52,12 +68,12 @@ public class SysRouteController extends BaseController {
     @Log(title = "航线管理", businessType = BusinessType.DELETE)
     @DeleteMapping("/delRouteLine")
     public R remove() {
-        if (redisCache.hasKey(Constants.ROUTE_STORE_PREFIX)){
-            return R.status(redisCache.deleteKey(Constants.ROUTE_STORE_PREFIX));
+        SysConfig sysConfigCurrent = configService.findConfigByKey(Constants.ROUTE_STORE_PREFIX);
+        if (sysConfigCurrent != null) {
+            return R.status(configService.removeByConfigKey(Constants.ROUTE_STORE_PREFIX));
         } else {
             return R.status(true);
         }
-
     }
 
 

+ 70 - 0
aidex-quartz/src/main/java/com/aidex/quartz/task/RefreshMdsTask.java

@@ -1,21 +1,31 @@
 package com.aidex.quartz.task;
 
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.http.HttpRequest;
 import com.aidex.common.constant.Constants;
+import com.aidex.common.core.domain.BaseEntity;
 import com.aidex.common.core.redis.RedisCache;
 import com.aidex.common.utils.StringUtils;
 import com.aidex.framework.cache.ConfigUtils;
+import com.aidex.system.domain.SysAlarm;
 import com.aidex.system.domain.SysConfig;
+import com.aidex.system.domain.SysShip;
+import com.aidex.system.service.SysShipService;
+import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.Date;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
+import static com.aidex.common.enums.AlarmType.*;
+
 /**
  * @author :ChenSir
  * @date :Created in 2024/3/17 20:07
@@ -31,6 +41,9 @@ public class RefreshMdsTask {
 
 	private final String ACTION_URL = "/GetDataService.aspx";
 
+	@Autowired
+	private SysShipService sysShipService;
+
 
 	/**
 	 * 刷新GPS的token
@@ -117,4 +130,61 @@ public class RefreshMdsTask {
 		logger.info("Gps平台获取token重新获取结束");
 	}
 
+
+	/**
+	 * 刷新GPS的token
+	 * @return token
+	 */
+	public void updateShipStatus(){
+		logger.info("通过船只编号更新船只状态----------开始");
+		try{
+			SysShip sysShip = new SysShip();
+			sysShip.setDelFlag(BaseEntity.DEL_FLAG_NORMAL);
+			List<SysShip> list = sysShipService.findList(sysShip);
+
+			String mds = redisCache.getStringValue(Constants.GPS_TOKEN_PREFIX);
+			SysConfig configUrl = ConfigUtils.getConfigByKey("sys.gps.api.url");
+			String url = configUrl.getConfigValue();
+			Map<String, Object> paramMap = new HashMap<>();
+			paramMap.put("method", "QueryApi");
+			paramMap.put("w", "UserDevices");
+			paramMap.put("mds", mds);
+			logger.info("请求参数:{}", paramMap);
+			//链式构建请求
+			String result = HttpRequest.post(url + ACTION_URL)
+					.form(paramMap)//表单内容
+					.timeout(50000)//超时,毫秒
+					.execute().body();
+			logger.info("请求结果:{}", result);
+			if (result != null) {
+				JSONObject jsonObjec = JSONObject.parseObject(result);
+				if (jsonObjec.getBoolean("success")){
+					logger.info("通过mds获取设备数据,mds----{},设备数据为-----{}", mds, jsonObjec.getJSONArray("data"));
+					JSONArray data  = jsonObjec.getJSONArray("data");
+					for (int i = 0; i < data.size(); i++) {
+						JSONObject json = data.getJSONObject(i);
+						if (json != null && StringUtils.isNotEmpty(json.getString("macid"))){
+							SysShip shipByMacId = sysShipService.getShipByMacId(json.getString("macid"));
+							if (shipByMacId != null){
+								sysShipService.updateStatusByMacId(json.getString("macid"), json.getString("status"));
+							}
+						}
+					}
+				}else {
+					logger.info("通过mds获取设备数据结束,Http 请求结果错误!-----{}", jsonObjec);
+				}
+			for (SysShip item : list){
+				if (configUrl != null && StringUtils.isNotBlank(mds)) {
+
+					}else {
+						logger.info("通过mds获取设备数据结束,Http 请求结果为空!");
+					}
+				}
+			}
+		}catch (Exception e){
+			logger.error(e.getLocalizedMessage());
+		}
+		logger.info("通过船只编号更新船只状态----------结束");
+	}
+
 }

+ 28 - 0
aidex-system/src/main/java/com/aidex/system/domain/vo/LatAndLng.java

@@ -0,0 +1,28 @@
+package com.aidex.system.domain.vo;
+
+import com.aidex.system.domain.SysWharf;
+import com.alibaba.fastjson2.JSONArray;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author :Chensir
+ * @date :Created in 2024/3/21 14:41
+ * @description:航线信息
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor()
+public class LatAndLng {
+
+	// 经度
+	private double lat;
+
+	// 维度
+	private double lng;
+
+	// 高度
+	private double height;
+
+}

+ 55 - 0
aidex-system/src/main/java/com/aidex/system/domain/vo/SysRouteVo.java

@@ -0,0 +1,55 @@
+package com.aidex.system.domain.vo;
+
+import com.aidex.system.domain.SysWharf;
+import com.alibaba.fastjson2.JSONArray;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+/**
+ * @author :Chensir
+ * @date :Created in 2024/3/21 14:41
+ * @description:航线信息
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor()
+public class SysRouteVo {
+
+	// 航线名称
+	@ApiModelProperty(value = "航线名称")
+	private String name;
+
+	// 航线始发站码头信息
+	@ApiModelProperty(value = "航线始发站码头信息")
+	private SysWharf firstWharf;
+
+	// 航线终点站码头信息
+	@ApiModelProperty(value = "航线终点站码头信息")
+	private SysWharf lastWharf;
+
+	// 航线首班时间
+	@ApiModelProperty(value = "航线首班时间")
+	private String firstFlightTime;
+
+	// 航线末班时间
+	@ApiModelProperty(value = "航线末班时间")
+	private String lastFlightTime;
+
+	// 航线票价信息
+	@ApiModelProperty(value = "航线票价")
+	private String fare;
+
+	// 航线经纬度信息
+	@ApiModelProperty(value = "航线经纬度")
+	private JSONArray pathList;
+
+
+	@ApiModelProperty(value = "航线站点")
+	private List<SysWharf> sysWharfList;
+
+
+}

+ 8 - 0
aidex-system/src/main/java/com/aidex/system/mapper/SysConfigMapper.java

@@ -3,6 +3,7 @@ package com.aidex.system.mapper;
 import com.aidex.common.core.mapper.BaseMapper;
 import com.aidex.system.domain.SysConfig;
 import org.apache.ibatis.annotations.Param;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -30,5 +31,12 @@ public interface SysConfigMapper extends BaseMapper<SysConfig>
     @Override
     public List<SysConfig> findListWithUnique(SysConfig sysConfig);
 
+	int removeByConfigKey(String configKey);
 
+    /**
+     * 根据Key获取配置信息
+     * @param
+     * @return
+     */
+    public SysConfig findConfigByKey(String configKey);
 }

+ 12 - 0
aidex-system/src/main/java/com/aidex/system/mapper/SysConfigMapper.xml

@@ -27,6 +27,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		order by a.create_time desc
 	</sql>
 
+	<delete id="removeByConfigKey" parameterType="String">
+		DELETE FROM sys_config WHERE config_key = #{configKey}
+	</delete>
+
 	<select id="get" resultType="SysConfig">
 		SELECT
 		<include refid="configColumns"/>
@@ -77,6 +81,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		</if>
 	</select>
 
+	<select id="findConfigByKey" resultType="com.aidex.system.domain.SysConfig" parameterType="String">
+		SELECT
+		<include refid="configColumns"/>
+		FROM sys_config a
+		<include refid="configJoins"/>
+		WHERE config_key =  #{configKey}
+	</select>
+
 	<update id="update" parameterType="SysConfig">
 		update sys_config
 		<set>

+ 9 - 0
aidex-system/src/main/java/com/aidex/system/mapper/SysShipMapper.java

@@ -21,4 +21,13 @@ public interface SysShipMapper extends BaseMapper<SysShip>
     public int deleteSysShipByIds(@Param("ids") String[] ids, @Param("DEL_FLAG_DELETE") String DEL_FLAG_DELETE);
 
 
+    /**
+     * 批量删除船只管理
+     * @param macId 船只编号
+     * @return
+     */
+    public SysShip getShipByMacId(@Param("macId") String macId, @Param("DEL_FLAG_NORMAL") String DEL_FLAG_NORMAL);
+
+
+    int updateStatusByMacId(@Param("macId") String macId, @Param("status") String status);
 }

+ 20 - 0
aidex-system/src/main/java/com/aidex/system/mapper/SysShipMapper.xml

@@ -92,6 +92,19 @@
         </where>
     </select>
 
+    <select id="getShipByMacId" resultType="com.aidex.system.domain.SysShip">
+        SELECT
+        a.id
+        FROM sys_ship a
+        <include refid="sysShipJoins"/>
+        <where>
+            a.del_flag = #{DEL_FLAG_NORMAL}
+            <if test="macId != null and macId != ''">
+                AND ship_num = #{macId}
+            </if>
+        </where>
+    </select>
+
 
     <insert id="insert">
         INSERT INTO sys_ship(
@@ -197,6 +210,13 @@
         WHERE id = #{id}
     </update>
 
+    <update id="updateStatusByMacId">
+        UPDATE sys_ship SET
+            status = #{status},
+            version = version + 1
+        WHERE ship_num = #{macId}
+    </update>
+
     <delete id="deleteSysShipByIds">
         UPDATE sys_ship SET
             del_flag = #{DEL_FLAG_DELETE}

+ 1 - 1
aidex-system/src/main/java/com/aidex/system/mapper/SysWharfMapper.xml

@@ -74,7 +74,7 @@
                 ORDER BY ${page.orderBy}
             </when>
             <otherwise>
-                ORDER BY a.wharf_order
+                ORDER BY a.wharf_order ASC
             </otherwise>
         </choose>
     </select>

+ 13 - 2
aidex-system/src/main/java/com/aidex/system/service/SysConfigService.java

@@ -11,8 +11,6 @@ import com.aidex.system.domain.SysConfig;
 public interface SysConfigService extends BaseService<SysConfig> {
 
 
-
-
     /**
      * 批量删除参数信息
      *
@@ -23,6 +21,7 @@ public interface SysConfigService extends BaseService<SysConfig> {
 
     /**
      * 刷新缓存
+     *
      * @return 结果
      */
     public void refreshCache();
@@ -39,4 +38,16 @@ public interface SysConfigService extends BaseService<SysConfig> {
      * 加载参数缓存数据
      */
     public void loadingConfigCache();
+
+    /**
+     * 根据Key删除参数配置
+     */
+    public int removeByConfigKey(String Key);
+
+    /**
+     * 根据Key删除参数配置
+     */
+    public SysConfig findConfigByKey(String ConfigKey);
+
 }
+

+ 15 - 0
aidex-system/src/main/java/com/aidex/system/service/SysShipService.java

@@ -18,4 +18,19 @@ public interface SysShipService extends BaseService<SysShip> {
      */
     public int deleteSysShipByIds(String[] ids);
 
+
+    /**
+     * @param macId 船只编号
+     * @return 结果
+     */
+    public SysShip getShipByMacId(String macId);
+
+    /**
+     * 批量删除船只管理
+     * @param macId 船只编号
+     * @return 结果
+     */
+    public int updateStatusByMacId(String macId, String status);
+
+
 }

+ 10 - 0
aidex-system/src/main/java/com/aidex/system/service/SysWharfService.java

@@ -2,6 +2,9 @@ package com.aidex.system.service;
 
 import com.aidex.common.core.service.BaseService;
 import com.aidex.system.domain.SysWharf;
+import com.aidex.system.domain.vo.SysRouteVo;
+
+import java.util.List;
 
 /**
  * 码头管理Service接口
@@ -25,4 +28,11 @@ public interface SysWharfService extends BaseService<SysWharf> {
      */
     public int updateStatus(SysWharf sysWharf);
 
+
+    /**
+     * 小程序获取航线信息
+     * @return 结果
+     */
+    public List<SysRouteVo> getRouteList();
+
 }

+ 10 - 0
aidex-system/src/main/java/com/aidex/system/service/impl/SysConfigServiceImpl.java

@@ -103,5 +103,15 @@ public class SysConfigServiceImpl extends BaseServiceImpl<SysConfigMapper, SysCo
             ConfigUtils.setConfigCache(config);
         }
     }
+    @Transactional(readOnly = false)
+    @Override
+    public int removeByConfigKey(String Key) {
+        return mapper.removeByConfigKey(Key);
+    }
+
+    @Override
+    public SysConfig findConfigByKey(String ConfigKey) {
+        return mapper.findConfigByKey(ConfigKey);
+    }
 
 }

+ 11 - 0
aidex-system/src/main/java/com/aidex/system/service/impl/SysShipServiceImpl.java

@@ -99,4 +99,15 @@ public class SysShipServiceImpl extends BaseServiceImpl<SysShipMapper, SysShip>
         return mapper.deleteSysShipByIds(ids, BaseEntity.DEL_FLAG_DELETE);
     }
 
+    @Override
+    public SysShip getShipByMacId(String macId) {
+        return mapper.getShipByMacId(macId, BaseEntity.DEL_FLAG_NORMAL);
+    }
+
+    @Transactional(readOnly = false)
+    @Override
+    public int updateStatusByMacId(String macId, String status) {
+        return mapper.updateStatusByMacId(macId,status);
+    }
+
 }

+ 54 - 7
aidex-system/src/main/java/com/aidex/system/service/impl/SysWharfServiceImpl.java

@@ -1,18 +1,28 @@
 package com.aidex.system.service.impl;
 
-import java.util.List;
-
+import com.aidex.common.constant.Constants;
+import com.aidex.common.core.domain.BaseEntity;
+import com.aidex.common.core.redis.RedisCache;
+import com.aidex.common.core.service.BaseServiceImpl;
+import com.aidex.framework.cache.ConfigUtils;
+import com.aidex.system.domain.SysConfig;
+import com.aidex.system.domain.SysWharf;
+import com.aidex.system.domain.vo.SysRouteVo;
+import com.aidex.system.mapper.SysConfigMapper;
 import com.aidex.system.mapper.SysWharfMapper;
 import com.aidex.system.service.SysWharfService;
-import org.springframework.stereotype.Service;
+import com.alibaba.fastjson2.JSONArray;
+import com.github.pagehelper.PageInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import com.github.pagehelper.PageInfo;
-import com.aidex.common.core.domain.BaseEntity;
-import com.aidex.common.core.service.BaseServiceImpl;
-import com.aidex.system.domain.SysWharf;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
 /**
  * 码头管理Service业务层处理
  * @author ChenSir
@@ -25,6 +35,9 @@ public class SysWharfServiceImpl extends BaseServiceImpl<SysWharfMapper, SysWhar
 
     private static final Logger log = LoggerFactory.getLogger(SysWharfServiceImpl.class);
 
+    @Autowired
+    private SysConfigMapper sysConfigMapper;
+
     /**
      * 获取单条数据
      * @param sysWharf 码头管理
@@ -106,4 +119,38 @@ public class SysWharfServiceImpl extends BaseServiceImpl<SysWharfMapper, SysWhar
         return mapper.updateStatus(sysWharf);
     }
 
+    @Override
+    public List<SysRouteVo> getRouteList() {
+        List<SysRouteVo> SysRouteVoList  = new ArrayList<>();
+        List<SysWharf> list = mapper.findList(new SysWharf());
+        SysConfig sysConfigRoute = sysConfigMapper.findConfigByKey(Constants.ROUTE_STORE_PREFIX);
+        JSONArray pathJson = JSONArray.parseArray(sysConfigRoute.getConfigValue());
+        // 正向
+        SysRouteVo sysRouteVo = new SysRouteVo();
+        sysRouteVo.setFirstWharf(list.get(0));
+        sysRouteVo.setLastWharf(list.get(list.size() - 1));
+        sysRouteVo.setName(ConfigUtils.getConfigValueByKey("sys.route.name"));
+        sysRouteVo.setFirstFlightTime(ConfigUtils.getConfigValueByKey("sys.route.start"));
+        sysRouteVo.setLastFlightTime(ConfigUtils.getConfigValueByKey("sys.route.end"));
+        sysRouteVo.setFare(ConfigUtils.getConfigValueByKey("sys.route.fare"));
+        sysRouteVo.setPathList(pathJson);
+        sysRouteVo.setSysWharfList(list);
+        SysRouteVoList.add(sysRouteVo);
+        // 反向
+        SysRouteVo sysRouteVoRe = new SysRouteVo();
+        sysRouteVoRe.setFirstWharf(list.get(list.size() - 1));
+        sysRouteVoRe.setLastWharf(list.get(0));
+        sysRouteVoRe.setName(ConfigUtils.getConfigValueByKey("sys.route.name"));
+        sysRouteVoRe.setFirstFlightTime(ConfigUtils.getConfigValueByKey("sys.route.start"));
+        sysRouteVoRe.setLastFlightTime(ConfigUtils.getConfigValueByKey("sys.route.end"));
+        sysRouteVoRe.setFare(ConfigUtils.getConfigValueByKey("sys.route.fare"));
+        Collections.reverse(pathJson);
+        Collections.reverse(list);
+        sysRouteVoRe.setSysWharfList(list);
+        sysRouteVoRe.setPathList(pathJson);
+        SysRouteVoList.add(sysRouteVoRe);
+
+        return SysRouteVoList;
+    }
+
 }

+ 2 - 1
aidex-ui/.env

@@ -1,3 +1,4 @@
 NODE_ENV=production
 VUE_APP_PREVIEW=false
-VUE_APP_BASE_API=/api
+VUE_APP_BASE_API=/api
+BASE_URL=/

+ 2 - 1
aidex-ui/.env.development

@@ -1,3 +1,4 @@
 NODE_ENV=development
 VUE_APP_PREVIEW=true
-VUE_APP_BASE_API=/api
+VUE_APP_BASE_API=/api
+BASE_URL=/

+ 2 - 1
aidex-ui/.env.preview

@@ -1,3 +1,4 @@
 NODE_ENV=production
 VUE_APP_PREVIEW=true
-VUE_APP_BASE_API=/api
+VUE_APP_BASE_API=/api
+BASE_URL=/

+ 8 - 7
aidex-ui/package.json

@@ -12,18 +12,19 @@
   },
   "dependencies": {
     "ant-design-vue": "1.7.2",
-    "axios": "^1.6.8",
+    "axios": "1.6.8",
     "core-js": "^3.1.2",
     "echarts": "^5.0.0",
     "enquire.js": "^2.1.6",
     "highlight.js": "^10.5.0",
     "lodash.clonedeep": "^4.5.0",
     "lodash.get": "^4.4.2",
-    "lodash.pick": "^3.1.0",
+    "lodash.pick": "^4.4.0",
     "md5": "^2.2.1",
     "mockjs2": "1.0.8",
     "moment": "^2.24.0",
     "nprogress": "^0.2.0",
+    "qq": "^0.3.5",
     "sortablejs": "^1.10.2",
     "store": "^2.0.12",
     "v-viewer": "^1.5.1",
@@ -42,12 +43,12 @@
   },
   "devDependencies": {
     "@ant-design/colors": "^3.2.1",
-    "@vue/cli-plugin-babel": "^5.0.8",
-    "@vue/cli-plugin-eslint": "^5.0.8",
-    "@vue/cli-plugin-router": "^5.0.8",
-    "@vue/cli-plugin-unit-jest": "^5.0.8",
+    "@vue/cli-plugin-babel": "^4.0.4",
+    "@vue/cli-plugin-eslint": "^4.0.4",
+    "@vue/cli-plugin-router": "^4.0.4",
+    "@vue/cli-plugin-unit-jest": "^4.0.4",
     "@vue/cli-plugin-vuex": "^4.0.4",
-    "@vue/cli-service": "^3.3.1",
+    "@vue/cli-service": "^4.0.4",
     "@vue/eslint-config-standard": "^4.0.0",
     "@vue/test-utils": "^1.0.0-beta.29",
     "babel-eslint": "^10.0.1",

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 1
aidex-ui/public/index.html


BIN
aidex-ui/public/logo.png


BIN
aidex-ui/public/logo_bak.png


+ 24 - 0
aidex-ui/src/assets/logo-bak.svg

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 24.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.0" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 200 200" style="enable-background:new 0 0 200 200;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#FFFFFF;}
+	.st1{fill:#FFC024;}
+	.st2{fill:#5473E8;}
+</style>
+<g>
+	<path class="st0" d="M158,190H42c-17.67,0-32-14.33-32-32V42c0-17.67,14.33-32,32-32h116c17.67,0,32,14.33,32,32v116
+		C190,175.67,175.67,190,158,190z"/>
+	<g>
+		<g>
+			<g>
+				<path class="st1" d="M98.82,115.63l-0.14-0.37l-21.98,9.23c0,0,8.65-25.75,14.8-44.11l-8.68-42.14l-47.7,126.43l-0.07,0.14
+					L35,165l1.9-0.73l11.95-4.54l18.11-6.89l37.74-14.66L98.82,115.63z M116.78,37.24L115.94,35H91.68l7.6,22.08
+					c0-0.02,0.01-0.03,0.01-0.04c0.06-0.19,0.09-0.28,0.09-0.28l25.74,74.79l4.39,12.78L165,165L116.78,37.24z"/>
+			</g>
+		</g>
+		<polygon class="st2" points="165,165 129.51,144.34 125.11,131.56 91.9,35 115.94,35 116.78,37.24 164.94,164.84 		"/>
+	</g>
+</g>
+</svg>

BIN
aidex-ui/src/assets/logo.png


+ 28 - 23
aidex-ui/src/assets/logo.svg

@@ -1,24 +1,29 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 24.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.0" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 viewBox="0 0 200 200" style="enable-background:new 0 0 200 200;" xml:space="preserve">
-<style type="text/css">
-	.st0{fill:#FFFFFF;}
-	.st1{fill:#FFC024;}
-	.st2{fill:#5473E8;}
-</style>
-<g>
-	<path class="st0" d="M158,190H42c-17.67,0-32-14.33-32-32V42c0-17.67,14.33-32,32-32h116c17.67,0,32,14.33,32,32v116
-		C190,175.67,175.67,190,158,190z"/>
-	<g>
-		<g>
-			<g>
-				<path class="st1" d="M98.82,115.63l-0.14-0.37l-21.98,9.23c0,0,8.65-25.75,14.8-44.11l-8.68-42.14l-47.7,126.43l-0.07,0.14
-					L35,165l1.9-0.73l11.95-4.54l18.11-6.89l37.74-14.66L98.82,115.63z M116.78,37.24L115.94,35H91.68l7.6,22.08
-					c0-0.02,0.01-0.03,0.01-0.04c0.06-0.19,0.09-0.28,0.09-0.28l25.74,74.79l4.39,12.78L165,165L116.78,37.24z"/>
-			</g>
-		</g>
-		<polygon class="st2" points="165,165 129.51,144.34 125.11,131.56 91.9,35 115.94,35 116.78,37.24 164.94,164.84 		"/>
-	</g>
-</g>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="32px" height="32px" viewBox="0 0 32 32" enable-background="new 0 0 32 32" xml:space="preserve">  <image id="image0" width="32" height="32" x="0" y="0"
+    href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAACBjSFJN
+AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAA
+CXBIWXMAAAsTAAALEwEAmpwYAAAEiElEQVRYw8WXS2xUZRTHf+e7j5npdFqGTh+0lAEJEBHFFQQ1
+imFjSCQmwMLEGGVrNMS40Y3RhYlLNxLduDBq4saEBGNMTIwkRhGliFAepSh90k47nel0nvd+x8Ut
+WDClEmr7T77kJjf3/n/fOfec+x1UlQUro6rvqervqlrV5VNVVftU9d15j1ueC80PqurMMpoupsK8
+120AB1XVroD5TdmbEKKq7cAA0MLKqghsMcCrq2DOvOdRUdU+YOcqAACcE1WtArFVAqiLquo9PxXA
+zxdDjn3doHON8P4RH98V6gFMFCzDk0pPRuhpMxi5+7vuGWA4p5z8I2Rw3NLdJmQ7ha41QqEs9A2G
+nP1T+W1AeWqH4c3DLmtTdye4J4DpWWVgVClWLEZgdFr59Yry5Q8hoyMKDcABLODDJ2/5vLDXxXWW
+ASC0cO5ayE+XLP3DyvfnLEOTli1dhkc2Gbb3RpFoTgquE/WXBzcYNrQbHHOfALUG/NgfcOqSBYG2
+lCHbIXSvhWRccAyECo0G1AKo1aHSUGp1mK0qRoTWpigwF/6y9GaEfY86JOOyNEAjgOuTlht5BRFi
+nuKaCCpfVnIF5UZeGcsr4zMwXVSKFShXYLYWQVgbAc3kYf8eh7efd9meNSR8wb2buVWl/3rI6QFL
+oQxzFbg+AWeuCUOTSrlkqNcMDQtWAUdBLDgWx4lAY66iAqUavPacy9HnXNZnDI6zSAqCEE5fsZwf
+FoZnhF+uQl2hXAPfhXQCkjFIeuAJ2BDCUKmFQrUOlQYUylCoQGkOxgtQzMOBx0M+fsXQkRYW1sUt
+AKswWYKhabg4ouSL4NsGmXiJtDtLszNLzObxwjyuLeJQxbgB4jioawgcl9B41IlRszGqQZxykGCy
+lCA318qBx3rZ1OUjd1TlrRTU6wGlsSl0ZJxdYY52Z5xUMIEzMwW1MfBqSFMSWtKQbIN4E7gCJgo5
+Tji/BDwXdQScGIiHSiuS6P6X+W0A8tUxHrh2ls2lSzB1Ncrnum3QswNty0JrG9qUAs8jqisDCqgh
+ujCgCrYBtRqYCpgSYmaQWDMQLlGGhzZAsY7u3Q/ZzdDRA6kWIIBGBeoFCOciZN9EDcc0QGpAFZwK
+6lpwQXwvAvVd1LFI4iEkdRikaXEA/eYzGL6M9m5E5kqQG4fcBTTII+kMZLphbQe0tIEfj8LtOhGI
+50M8CX4KvCTiOOAmgToqDfA6EacLxF88BYgPJ08ihY/AN8jOp2HrLljXC4lmCCpQGoGZ0SgCrZ0Q
+a0ESrdCShVQW3BTI7W1viX/RAoDpG8jYCPryG+j6jeC5UJxC+08h42egOQk7n0Hat8DmJyGd/Q+v
+X1r/fAOjg+h3n6PpLjh/Guk7Ds1x2PcSbNyKbHsC0uvv23DRCOjQIPrFp5C7jOzeCy++g2zfDdmH
+l2WnS6egWgINkA+/RXbsgXjz/2a6UKt9JCsZ4OIqmQMMGuD4KgKcEFXtAK6wioPJBHCEqKGvlHTe
+c2LhcHpIVYsrMBcWFw6ncsd5JAO8DjwLbAO8ZdrxHHAZOAF8AORu3vgbBNjLobRjOFQAAAAldEVY
+dGRhdGU6Y3JlYXRlADIwMjQtMDMtMjVUMTU6MjM6MDErMDE6MDBwvgL8AAAAJXRFWHRkYXRlOm1v
+ZGlmeQAyMDI0LTAzLTI1VDE1OjIzOjAxKzAxOjAwAeO6QAAAAABJRU5ErkJggg==" />
 </svg>

BIN
aidex-ui/src/assets/logo_bak.png


+ 1 - 1
aidex-ui/src/config/defaultSettings.js

@@ -23,7 +23,7 @@ export default {
   menu: {
     locale: true
   },
-  title: '兰州市水上巴士',
+  title: '兰州水上公交',
   pwa: false,
   iconfontUrl: '',
   production: process.env.NODE_ENV === 'production' && process.env.VUE_APP_PREVIEW !== 'true'

+ 1 - 1
aidex-ui/src/layouts/UserLayout.vue

@@ -6,7 +6,7 @@
           <div class="header">
             <a href="/">
               <img src="~@/assets/logo.svg" class="logo" alt="logo">
-              <span class="title">兰州水上巴士</span><br>
+              <span class="title">兰州水上公交</span><br>
               <span class="title">运营服务平台</span>
             </a>
           </div>

+ 2 - 1
aidex-ui/src/router/index.js

@@ -13,5 +13,6 @@ Vue.use(Router)
 
 export default new Router({
   mode: 'history',
-  routes: constantRouterMap
+  routes: constantRouterMap,
+  base: process.env.BASE_URL
 })

+ 0 - 1
aidex-ui/src/utils/request.js

@@ -10,7 +10,6 @@ import errorCode from '@/utils/errorCode'
 const request = axios.create({
   // API 请求的默认前缀
   baseURL: process.env.VUE_APP_BASE_API,
-  // baseURL: 'https://aidex.setworld.net',
   timeout: 20000 // 请求超时时间
 })
 

+ 5 - 4
aidex-ui/src/views/dashboard/index.vue

@@ -1,15 +1,16 @@
 <template>
   <div id="content" style="margin: -8px;">
-    <common-use/>
-<!--    <about/>-->
+    <about/>
     <to-do/>
+    <common-use/>
+    <!--    <to-do/>-->
   </div>
 </template>
 
 <script>
   import CommonUse from './portal/CommonUse.vue'
-   import ToDo from './portal/ToDo.vue'
-import About from './portal/About.vue'
+  import ToDo from './portal/ToDo.vue'
+  import About from './portal/About.vue'
   export default {
     components: {
      CommonUse,

+ 210 - 40
aidex-ui/src/views/dashboard/portal/About.vue

@@ -1,44 +1,46 @@
 <template>
-  <div class="typical-home" ref="portaletDiv">
-    <a-row :gutter="[24,24]" class="module-list">
-      <!-- 待办事项 -->
-      <a-col :span="24" >
-        <div class="module-in module-in01 modlule-show" style="height: 260px;">
-          <a-page-header :ghost="false" title="平台简介">
-            <template slot="extra">
-              <a-icon type="more" />
-            </template>
-          </a-page-header>
-          <p>
-            <a-alert message="免费开源【欢迎star和fork项目,请点击下方按钮访问】" type="info" show-icon />
-          </p>
-          <p style="text-indent: 30px;">
-            基于若依-ruoyi-vue项目扩展,前端采用Ant-Design-VUE,代码易读易懂、界面简洁美观,不仅仅是一个后台开发框架,它是一个企业级快速开发解决方案,我们将把UI交互、快速开发能力追求到极致,适配国产数据库,国产中间件,将支持多租户、flowable工作流,移动APP,更多插件正在扩展中
-          </p>
-          <p>
-            当前版本:V3.0(后台与ruoyi-vue定期同步)
-          </p>
-
-          <p>
-            <a-row :gutter="[24,24]">
-              <a-col :span="8">
-                <a-button block style="height: 40px;" type="primary" @click="goTarget('https://gitee.com/big-hedgehog/aidex-sharp')">
-                  访问AiDex
-                </a-button>
-              </a-col>
-              <a-col :span="8">
-                <a-button block style="height: 40px;" type="primary" ghost @click="goTarget('https://www.bilibili.com/video/BV13L411u7oC?spm_id_from=333.999.0.0')">
-                  我的B站
-                </a-button>
-              </a-col>
-              <a-col :span="8">
-                <a-button block style="height: 40px;" type="primary" ghost @click="goTarget('https://gitee.com/y_project/RuoYi-Vue')">
-                  访问若依
-                </a-button>
-              </a-col>
-            </a-row>
-          </p>
-        </div>
+  <div class="padding-card monitor-box" style="margin-top: 12px;padding-bottom: 12px;" ref="portaletDiv">
+    <a-row class="columns-list-ul" :gutter="24">
+      <a-col :span="5">
+        <a-card :bordered="false">
+          <div class="text-number">8</div>
+          <div class="title-text">在线船只数量</div>
+        </a-card>
+      </a-col>
+      <a-col :span="5">
+        <a-card :bordered="false">
+          <div class="text-number">100</div>
+          <div class="title-text">
+            当前报警数量
+          </div>
+        </a-card>
+      </a-col>
+      <a-col :span="5">
+        <a-card :bordered="false">
+          <div class="text-number">23</div>
+          <div class="title-text">
+            用户活跃量
+            <!-- 比昨日 <em class="drop">- 0.05%</em> -->
+          </div>
+        </a-card>
+      </a-col>
+      <a-col :span="5">
+        <a-card :bordered="false">
+          <div class="text-number">100</div>
+          <div class="title-text">
+            累计用户数
+            比昨日 <em class="rise">+ 1.25%</em>
+          </div>
+        </a-card>
+      </a-col>
+      <a-col :span="4">
+        <a-card :bordered="false">
+          <div class="text-number">100</div>
+          <div class="title-text">
+            累计里程数
+            <!-- 比昨日 <em class="rise">+ 1.25%</em> -->
+          </div>
+        </a-card>
       </a-col>
     </a-row>
   </div>
@@ -47,6 +49,7 @@
 <script>
   export default {
     data () {
+      return {}
     },
     computed: {
     },
@@ -65,3 +68,170 @@
     }
   }
 </script>
+
+<style lang="less">
+/* .ant-table-thead > tr > th {
+      background: #fff !important;
+  } */
+.monitor-box {
+  .ant-card-head {
+    border-bottom: 0;
+  }
+  .ant-card-head-title {
+    font-size: 14px;
+    font-weight: bold;
+    color: #262626;
+    i.anticon {
+      color: #2496ff;
+    }
+  }
+  .ant-card-grid {
+    width: 100%;
+    padding: 0;
+    box-shadow: none;
+    background: #f7f9fa;
+  }
+  .card-grid-name {
+    background: #f0f3f5;
+    text-align: center;
+    color: #333333;
+    font-size: 14px;
+    line-height: 40px;
+  }
+  .columns-list-ul .ant-card-body {
+    text-align: center;
+    padding: 10px 24px 20px;
+  }
+  .title-text {
+    font-size: 12px;
+    margin: 0;
+    padding: 0;
+    color: #666666;
+  }
+  .title-text em {
+    font-style: normal;
+  }
+  .title-text em.rise {
+    color: #cf1221;
+  }
+  .title-text em.drop {
+    color: #347f00;
+  }
+  .text-number {
+    color: #000000;
+    font-size: 42px;
+  }
+  .disc-list-ul {
+    padding: 10px 20px 10px 15px;
+    margin-bottom: 15px;
+  }
+  .disc-caption-text {
+    font-size: 16px;
+    font-weight: bold;
+    color: #333;
+    margin-bottom: 5px;
+    em {
+      font-size: 12px;
+      color: #858585;
+      font-style: normal;
+      font-weight: normal;
+    }
+  }
+  .ant-progress-text {
+    color: #575757;
+    font-size: 18px;
+    font-weight: bold;
+  }
+  .disc-other {
+    font-size: 12px;
+    color: #666666;
+    line-height: 20px;
+    text-align: center;
+  }
+  .disc-other em {
+    font-style: normal;
+    font-size: 22px;
+    margin-top: 10px;
+    display: inline-block;
+  }
+  .disc-other em.disc-other-color01 {
+    color: #2496ff;
+  }
+  .disc-other em.disc-other-color02 {
+    color: #3f8652;
+  }
+  .stat-pic {
+    display: inline-block;
+    width: 100%;
+    text-align: center;
+    margin-bottom: 12px;
+  }
+  .list-border {
+    border-right: 1px solid #ececec;
+  }
+  .monitor-card .ant-card-body {
+    padding: 0 0 10px;
+  }
+  .ant-descriptions {
+    font-size: 12px;
+  }
+  .ant-descriptions-item-label {
+    font-size: 14px;
+    color: #666666;
+  }
+  .ant-descriptions-item-content {
+    font-size: 14px;
+    color: #000000;
+    font-weight: normal;
+  }
+  .ant-card-grid {
+    font-size: 12px;
+  }
+  .ant-statistic-title {
+    font-size: 12px;
+    color: #666666;
+  }
+  .ant-statistic-content {
+    font-size: 14px;
+  }
+  .ant-statistic-content-value-int,
+  .ant-statistic-content-value-decimal {
+    font-size: 22px;
+  }
+  .ant-statistic-content-suffix {
+    font-size: 12px;
+    color: #666666;
+  }
+  .card-grid-name {
+    color: #666666;
+    font-size: 14px;
+    font-weight: bold;
+  }
+  .ant-card-grid-hoverable:hover {
+    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05);
+  }
+  .monitor-card .ant-descriptions-item {
+    padding: 10px 30px;
+  }
+  .monitor-card .ant-descriptions-row:nth-child(odd) {
+    background: #fbfbfb;
+    border-top: 1px solid #f8f8f8;
+  }
+  .monitor-card .ant-descriptions-row:nth-child(even) {
+    border-top: 1px solid #f8f8f8;
+  }
+  .ant-statistic {
+    text-align: center;
+    padding: 10px;
+  }
+  .monitor-cardbox .ant-card-body {
+    padding: 10px;
+  }
+  .monitor-cardbox .text01 .ant-statistic-content {
+    color: #3f8652;
+  }
+  .monitor-cardbox .text02 .ant-statistic-content {
+    color: #ff6600;
+  }
+}
+</style>

+ 1 - 9
aidex-ui/src/views/dashboard/portal/CommonUse.vue

@@ -1,18 +1,10 @@
 <template style="background:#f5f6fa;">
   <div class="typical-home" ref="portaletDiv">
     <a-spin :spinning="spinning" :delay="delayTime" tip="loading...">
-      <a-row :gutter="[16, 16]" style="margin: ;">
+      <a-row :gutter="[16, 16]" style="margin: 10px;">
         <!-- 顶部列表 -->
         <a-col :span="24" style="padding-bottom:0;">
           <a-row :gutter="[16, 16]" class="top-list">
-<!--            <a-col :xxl="6" :xl="8" :lg="16" style="height:164px;">
-              <a
-                style="display: block;height: 148px;overflow: hidden;border-radius: 4px;background: #516bf7;"
-                v-if="bannerType === '1'"><img src="@/views/dashboard/images/banner1.png" /></a>
-              <a
-                style="display: block;height: 148px;overflow: hidden;border-radius: 4px;background: #516bf7;"
-                v-if="bannerType === '2'"><img src="@/views/dashboard/images/banner2.png" /></a>
-            </a-col>-->
             <a-col v-for="(item, index) in dataList" :key="index" :xxl="3" :xl="4" :lg="8">
               <a-card :bordered="false" @click="addTabMenu(item.path)" style="cursor: pointer;">
                 <a-icon

+ 24 - 380
aidex-ui/src/views/dashboard/portal/ToDo.vue

@@ -1,245 +1,33 @@
 <template style="background:#f5f6fa;">
   <div class="typical-home" ref="portaletDiv">
-<!--    <a-row :gutter="[24,24]" class="module-list">
-      <a-col :span="8">
-        <div class="module-in module-in01">
-          <a-page-header :ghost="false" title="技术选型">
-            <template slot="extra">
-              <a-icon type="more" />
-            </template>
-          </a-page-header>
-          <a-row :gutter="[24,24]">
-            <a-col :span="12">
-              <div class="technology">
-                <a-list size="small" :split="false" :data-source="consoleTech">
-                  <a-list-item slot="renderItem" slot-scope="item">
-                    {{ item }}
-                  </a-list-item>
-                  <div slot="header">
-                    后端
-                  </div>
-                </a-list>
-              </div>
-            </a-col>
-            <a-col :span="12">
-              <div class="technology">
-                <a-list size="small" :split="false" :data-source="frontTech" >
-                  <a-list-item slot="renderItem" slot-scope="item" >
-                    {{ item }}
-                  </a-list-item>
-                  <div slot="header">
-                    前端
-                  </div>
-                </a-list>
-              </div>
-            </a-col>
-          </a-row>
-        </div>
-      </a-col>
-      <a-col :span="8">
-        <div class="module-in module-in01 ">
-          <a-page-header :ghost="false" title="联系我们">
-            <template slot="extra">
-              <a-icon type="more" />
-            </template>
-          </a-page-header>
-          <p>
-            <a-alert message="专业UI设计(5年+)+VUE前端功能开发(3年+)" type="info" show-icon />
-          </p>
-          <a-list item-layout="horizontal" :data-source="detaildata" class="list-detail">
-            <a-list-item class="module-text">
-              <a-list-item-meta>
-                <template slot="description">
-                  <span>【1】</span>
-                  <span>接AiDex Sharp系列架构的定制服务</span>
-                </template>
-              </a-list-item-meta>
-            </a-list-item>
-            <a-list-item class="module-text">
-              <a-list-item-meta>
-                <template slot="description">
-                  <span>【2】</span>
-                  <span >接3个月以内工期的vue、springboot、springcloud、app、小程序等软件定制服务</span>
-                </template>
-              </a-list-item-meta>
-            </a-list-item>
-            <a-list-item class="module-text">
-              <a-list-item-meta>
-                <template slot="description">
-                  <span>【3】</span>
-                  <span>UI原型页面设计及切图服务</span>
-                </template>
-              </a-list-item-meta>
-            </a-list-item>
-            <a-list-item class="module-text">
-              <a-list-item-meta>
-                <template slot="description">
-                  <span>【4】</span>
-                  <span>有意向请联系唯一指定联系人:皮皮大刺猬(右侧扫码)</span>
-                </template>
-              </a-list-item-meta>
-            </a-list-item>
-          </a-list>
-        </div>
-      </a-col>
-      &lt;!&ndash; 个人信息 &ndash;&gt;
-      <a-col :span="8">
-        <div class="module-in module-in07" style="height: 370px;">
-          <a-page-header :ghost="false" title="关于我">
-            <template slot="extra">
-              <a-icon type="more" />
-            </template>
-          </a-page-header>
-          <a-row>
-            <a-col>
-              <a-col class="name">
-                <span>皮皮大刺猬</span>
-                <a-icon type="form" @click="compileshowModal" />
-                <a-modal v-model="compile" title="Basic Modal" @ok="compilehandleOk" centered>
-                  <p>Some contents...</p>
-                  <p>Some contents...</p>
-                  <p>Some contents...</p>
-                </a-modal>
-              </a-col>
-              <a-col>
-                <span>QQ号:</span>
-                <span>1125373330</span>
-              </a-col>
-              <a-col>
-                <span>QQ群:</span>
-                <span>208511180</span>
-              </a-col>
-              <a-col>
-                <span>微信号:</span>
-                <span>big-hebgehog</span>
-              </a-col>
-              <a-col>
-                <span>我的特长:</span>
-                <span>专业UI设计(5年+)+VUE前端功能开发(3年+)</span>
-              </a-col>
-              <a-col>
-                <span>项目:</span>
-                <span><a style="color: red;" @click="goTarget('https://gitee.com/big-hedgehog/aidex-sharp')">若依-Adiex Sharp快速开发平台</a></span>
-              </a-col>
-              <a-col>
-                <a-row>
-                  <a-col :span="12">
-                    <div class="wxcode" style="text-align: center;background: #f7f7f7;border: 1px solid #e8e8e8;width: 124px; margin: 0 auto;border-radius: 8px;padding-top: 8px;">
-                      <img src="../images/wxCode.png" style="height:100px">
-                      <p style="margin-bottom: 8px;">微信</p>
-                    </div>
-                  </a-col>
-                  <a-col :span="12">
-                    <div class="QQcode" style="text-align: center;background: #f7f7f7;border: 1px solid #e8e8e8;width: 124px; margin: 0 auto;border-radius: 8px;padding-top: 8px;">
-                      <img src="../images/QQCode.png"style="height:100px">
-                      <p style="margin-bottom: 8px;">QQ</p>
-                    </div>
-                  </a-col>
-                </a-row>
-              </a-col>
-            </a-col>
-          </a-row>
-
-        </div>
-      </a-col>
-    </a-row>-->
-    <a-row :gutter="[16,16]">
+    <a-row :gutter="[24,24]">
       <!-- 顶部列表 -->
-      <a-col :span="16" class="module-list">
-        <a-row :gutter="[16,16]">
-          <!-- 待办事项 -->
-<!--          <a-col :span="12">
-            <div class="module-in module-in01">
-              <a-page-header :ghost="false" title="待办事项">
-                <template slot="extra">
-                  <a-icon type="more" />
-                </template>
-              </a-page-header>
-              <a-list :grid="{ gutter: 8, column: 3 }" :data-source="data" class="list-totality">
-                <a-list-item slot="renderItem" slot-scope="item">
-                  <a-card>
-                    <p>{{ item.title }}</p>
-                    <span>{{ item.data }}</span>
-                  </a-card>
-                </a-list-item>
-              </a-list>
-              <a-list item-layout="horizontal" :data-source="detaildata" class="list-detail">
-                <a-list-item slot="renderItem" slot-scope="item">
-                  <a-list-item-meta>
-                    <template slot="description">
-                      <span>{{ item.state }}</span>
-                      <span>{{ item.txt }}</span>
-                      <a-tooltip placement="top">
-                        <template slot="title">
-                          <span>{{ item.hint }}</span>
-                        </template>
-                        <a-icon type="question-circle" />
-                      </a-tooltip>
-                      <a>办理</a>
-                    </template>
-                  </a-list-item-meta>
-                </a-list-item>
-              </a-list>
-            </div>
-          </a-col>
-          &lt;!&ndash; 关注项目总览 &ndash;&gt;
-          <a-col :span="12">
-            <div class="module-in module-in02">
-              <a-page-header :ghost="false" title="关注项目总览">
-                <template slot="extra">
-                  <a-icon type="more" />
-                </template>
-              </a-page-header>
-              <a-table :columns="projectcolumns" :data-source="projectdata" size="small">
-                <a-badge slot="status" slot-scope="text,record" :status="record.icon" :text="record.text" />
-              </a-table>
-            </div>
-          </a-col>
-          &lt;!&ndash; 组件API搜索 &ndash;&gt;
-          <a-col :span="24">
-            <div class="module-in module-in03">
-              <a-page-header :ghost="false" title="组件API搜索">
-                <template slot="extra">
-                  <a-icon type="more" />
-                </template>
-              </a-page-header>
-              <a-input placeholder="输入组件或 API 名称,支持中英文模糊搜索" />
-              <div class="subtitle">最近使用</div>
-              &lt;!&ndash; 默认最多只显示4个最近使用项 &ndash;&gt;
-              <a-list :grid="{ gutter: 16, column: 4 }" :data-source="apidata">
-                <a-list-item slot="renderItem" slot-scope="item,">
-                  <a-card>
-                    <a-icon :type="item.icon" />
-                    <span>{{ item.con }}</span>
-                  </a-card>
-                </a-list-item>
-              </a-list>
-            </div>
-          </a-col>-->
+      <a-col :span="24" class="module-list">
+        <a-row :gutter="[24,24]">
           <!-- 趋势图 -->
           <a-col :span="24">
             <div class="module-in module-in04">
-                <a-page-header
+              <a-page-header
                 :ghost="false"
-                title="行驶里程数统计"
+                title="小程序访问量"
               >
                 <template slot="extra">
-                  <a-radio-group default-value="a" button-style="solid" size="small">
-                    <a-radio-button value="a">
-                      一个月
+                  <a-radio-group default-value="month" button-style="solid" size="small" @change="handleDateChange">
+                    <a-radio-button value="week">
+                      本周
                     </a-radio-button>
-                    <a-radio-button value="b">
-                      三个
+                    <a-radio-button value="month">
+                      本月
                     </a-radio-button>
-                    <a-radio-button value="c">
-                      六个月
+                    <a-radio-button value="year">
+                      本年
                     </a-radio-button>
                   </a-radio-group>
                 </template>
               </a-page-header>
               <div style="height:410px;padding-top:8px ;">
                 <!-- chart盒子 -->
-                <line-radar></line-radar>
+                <line-radar :statistics-type="statisticsType"></line-radar>
               </div>
             </div>
           </a-col>
@@ -248,177 +36,33 @@
             <div class="module-in module-in04">
               <a-page-header
                 :ghost="false"
-                title="小程序访问量"
+                title="行驶里程数统计"
               >
                 <template slot="extra">
-                  <a-radio-group default-value="week" button-style="solid" size="small" @change="handleDateChange">
-                    <a-radio-button value="week">
-                      本周
+                  <a-radio-group default-value="a" button-style="solid" size="small">
+                    <a-radio-button value="a">
+                      一个月
                     </a-radio-button>
-                    <a-radio-button value="month">
-                      
+                    <a-radio-button value="b">
+                      三个
                     </a-radio-button>
-                    <a-radio-button value="year">
-                      本年
+                    <a-radio-button value="c">
+                      六个月
                     </a-radio-button>
                   </a-radio-group>
                 </template>
               </a-page-header>
               <div style="height:410px;padding-top:8px ;">
                 <!-- chart盒子 -->
-                <line-radar :statistics-type="statisticsType"></line-radar>
+                <line-radar></line-radar>
               </div>
             </div>
           </a-col>
-          <!-- 帮助文档 -->
-<!--          <a-col :span="24">
-            <div class="module-in module-in05">
-              <a-page-header :ghost="false" title="帮助文档">
-              </a-page-header>
-              <a-row :gutter="[16,16]">
-                <a-col :span="4">
-                  <a-list size="small" :data-source="aiddata">
-                    <a-list-item slot="renderItem" slot-scope="item">
-                      {{ item }}
-                    </a-list-item>
-                    <div slot="header">
-                      组件使用方法
-                    </div>
-                  </a-list>
-                </a-col>
-                <a-col :span="4">
-                  <a-list size="small" :data-source="aiddata">
-                    <a-list-item slot="renderItem" slot-scope="item">
-                      {{ item }}
-                    </a-list-item>
-                    <div slot="header">
-                      组件使用方法
-                    </div>
-                  </a-list>
-                </a-col>
-                <a-col :span="4">
-                  <a-list size="small" :data-source="aiddata">
-                    <a-list-item slot="renderItem" slot-scope="item">
-                      {{ item }}
-                    </a-list-item>
-                    <div slot="header">
-                      组件使用方法
-                    </div>
-                  </a-list>
-                </a-col>
-                <a-col :span="4">
-                  <a-list size="small" :data-source="aiddata">
-                    <a-list-item slot="renderItem" slot-scope="item">
-                      {{ item }}
-                    </a-list-item>
-                    <div slot="header">
-                      组件使用方法
-                    </div>
-                  </a-list>
-                </a-col>
-              </a-row>
-            </div>
-          </a-col>-->
-        </a-row>
-      </a-col>
-      <a-col :span="8" class="module-list">
-        <a-row :gutter="[0,16]">
-
-          <!-- 公告 -->
-          <a-col>
-            <div class="module-in module-in06">
-              <a-page-header :ghost="false" title="公告">
-                <template slot="extra">
-                  <a-icon type="more" />
-                </template>
-              </a-page-header>
-              <a-tabs default-active-key="1" @change="callback" size="small">
-                <a-tab-pane key="1" tab="首推">
-                  <a-list item-layout="horizontal" :data-source="noticedata">
-                    <a-list-item slot="renderItem" slot-scope="item">
-                      <a-list-item-meta>
-                        <a slot="description" :href="item.url">{{ item.state }}{{ item.title }}</a>
-                      </a-list-item-meta>
-                    </a-list-item>
-                    <a-button type="link">
-                      更多
-                    </a-button>
-                  </a-list>
-                </a-tab-pane>
-                <a-tab-pane key="2" tab="升级" force-render>
-                  Content of Tab Pane 2
-                </a-tab-pane>
-                <a-tab-pane key="3" tab="安全">
-                  Content of Tab Pane 3
-                </a-tab-pane>
-                <a-tab-pane key="4" tab="备案">
-                  Content of Tab Pane 3
-                </a-tab-pane>
-                <a-tab-pane key="5" tab="其他">
-                  Content of Tab Pane 3
-                </a-tab-pane>
-              </a-tabs>
-            </div>
-          </a-col>
 
-          <!-- 产品热度 -->
-<!--          <a-col>
-            <div class="module-in module-in08">
-              <a-page-header :ghost="false" title="产品热度">
-                <template slot="extra">
-                  <a-icon type="more" />
-                </template>
-              </a-page-header>
-              <a-list item-layout="horizontal" :data-source="heatdata">
-                <a-list-item slot="renderItem" slot-scope="item">
-                  <a-list-item-meta>
-                    <a slot="description" :href="item.url">
-                      <div class="order">{{ item.index }}</div>
-                      <a-icon class="icon" :type="item.icon" />
-                      <div class="txt">{{ item.txt }}</div>
-                      <a-statistic :value="item.value" :precision="1">
-                        <template #suffix>
-                          <a-icon :type="item.arrow" :style="{ color:item.color }" />
-                        </template>
-                      </a-statistic>
-                    </a>
-                  </a-list-item-meta>
-                </a-list-item>
-              </a-list>
-            </div>
-          </a-col>-->
-          <!-- 统计信息 -->
-          <a-col>
-            <div class="module-in module-in09">
-              <a-page-header :ghost="false" title="统计信息">
-                <template slot="extra">
-                  <a-date-picker :format="dateFormat" />
-                  <a-icon type="more" />
-                </template>
-              </a-page-header>
-              <div style="height:260px; text-align: center;">
-                <!-- chart -->
-                <img src="@/views/dashboard/images/img03.png" alt="">
-              </div>
-              <a-table
-                :columns="statisticscolumns"
-                :data-source="statisticsdata"
-                size="small"
-                :pagination="false"
-                style="height:238px;">
-                <span slot="tags" slot-scope="tags">
-                  <a-tag :color="tags >= 0 ?'green': 'volcano' ">
-                    {{ tags >= 0 ? '+' + tags+'%': tags+'%' }}
-                  </a-tag>
-                </span>
-                <a-badge slot="status" slot-scope="text,record" :status="record.icon" :text="record.text" />
-              </a-table>
-            </div>
-          </a-col>
         </a-row>
       </a-col>
     </a-row>
-    </a-row></div>
+  </div>
 </template>
 <style type="less" >
   body{
@@ -810,7 +454,7 @@
         heatdata,
         adddata,
         dataList,
-        statisticsType: 'week'
+        statisticsType: 'month'
       }
     },
     created () {

+ 18 - 18
aidex-ui/src/views/dashboard/typical-home.less

@@ -7,8 +7,8 @@
     .ant-card-body{
       height: 66px;
       padding: 13px;
-      overflow: hidden; 
-      white-space: nowrap; 
+      overflow: hidden;
+      white-space: nowrap;
       text-overflow: ellipsis;
       border-radius: 4px;
       span{
@@ -51,7 +51,7 @@
         }
       }
     }
-    
+
     // 待办事项
     .module-in01{
       height: 370px;
@@ -60,15 +60,15 @@
         background: #f7f9fa;
         border-radius: 8px;
         .ant-list-split{
-          
+
          .ant-list-item{
-             
+
                display: block;
            border: 0!important;
            padding:8px 0 ;
-         }   
+         }
         }
-      
+
       }
       .list-totality{
         .ant-card-bordered{
@@ -129,13 +129,13 @@
               font-size: 12px;
             }
             span:nth-child(2){
-              overflow: hidden; 
-              white-space: nowrap; 
+              overflow: hidden;
+              white-space: nowrap;
               text-overflow: ellipsis;
               max-width: 164px;
               color: #131415;
             }
-           
+
           }
         }
       }
@@ -191,8 +191,8 @@
         .ant-card-body{
           color: #333;
           padding:0 0 0 20px;
-          overflow: hidden; 
-          white-space: nowrap; 
+          overflow: hidden;
+          white-space: nowrap;
           text-overflow: ellipsis;
           .anticon{
             width: 38px;
@@ -237,8 +237,8 @@
         padding: 0;
         font-size: 12px;
         line-height: 30px;
-        overflow: hidden; 
-        white-space: nowrap; 
+        overflow: hidden;
+        white-space: nowrap;
         text-overflow: ellipsis;
       }
     }
@@ -277,7 +277,7 @@
           }
         }
       }
-      
+
     }
     // 个人信息
     .module-in07{
@@ -346,7 +346,7 @@
               color: #131415;
               max-width: 200px;
               overflow: hidden;
-              white-space: nowrap; 
+              white-space: nowrap;
               text-overflow: ellipsis;
             }
             .ant-statistic{
@@ -475,7 +475,7 @@
           .ant-tabs-ink-bar{
             left: 0;
             width: 3px;
-            
+
           }
         }
         .ant-tabs-tab-active{
@@ -506,7 +506,7 @@
               margin-top: 2px;
               .ant-avatar{
                 border-radius: 4px;
-                font-size: 24px!;
+                font-size: 24px !important;
                 // background: #ff8b40;
               }
             }

+ 108 - 75
aidex-ui/src/views/system/line/index.vue

@@ -17,9 +17,9 @@
       <div style="height: 80vh; width: 100%" id="container"></div>
       <div id="toolControl">
         <!--                <div class="toolItem" id="markers" title="开始" @click="beginMove"></div>-->
-<!--        <div class="toolItem active" id="marker" title="点标记" @click="selectDragType('marker')"></div>-->
+        <!--        <div class="toolItem active" id="marker" title="点标记" @click="selectDragType('marker')"></div>-->
         <div class="toolItem" id="polyline" title="折线" @click="selectDragType('polyline')"></div>
-<!--        <div class="toolItem" id="polygon" title="多边形" @click="selectDragType('polygon')"></div>
+        <!--        <div class="toolItem" id="polygon" title="多边形" @click="selectDragType('polygon')"></div>
         <div class="toolItem" id="circle" title="圆形" @click="selectDragType('circle')"></div>
         <div class="toolItem" id="rectangle" title="矩形" @click="selectDragType('rectangle')"></div>
         <div class="toolItem" id="ellipse" title="椭圆" @click="selectDragType('ellipse')"></div>-->
@@ -27,9 +27,16 @@
       <div class="control">
         <button @click="changeDirection" class="beginMove"><a-icon type="swap" />方向转换</button>
         <button @click="saveMapData" class="stopMove"><a-icon type="save" />保存</button>
+        <a-popover title="提示">
+          <template #content>
+            <p>1、启用编辑后,点击线条,可调整航线</p>
+            <p>2、调整航线后,按Esc退出后,保存航线,即可更新航线数据</p>
+          </template>
+          <button @click="openPolyLine" class="stopMove"><a-icon type="edit" />启用编辑</button>
+        </a-popover>
         <button @click="resetMapData" class="resumeMove"><a-icon type="radius-setting" />重置</button>
       </div>
-<!--      <div class="control">
+      <!--      <div class="control">
         <button @click="beginMove" class="beginMove" :disabled="moved">航线模拟</button>
         <button @click="stopMove" class="stopMove">终止模拟</button>
         <button @click="pauseMove" class="pauseMove">暂停模拟</button>
@@ -63,7 +70,8 @@ export default {
       customPath:[],
       moved: true,
       polyLine: null,
-      startAndEndMarkerLayer: null
+      startAndEndMarkerLayer: null,
+      polylineLayerEdit: null
     }
   },
   filters: {
@@ -106,19 +114,17 @@ export default {
         onOk () {
           return delRouteLine()
             .then(() => {
-              that.map = null
               that.editor = null
               that.activeType = 'polyline'
               that.markerLayer = null
               that.customPath = []
-              if (that.polyLine) {
-                that.polyLine.setMap(null)
-              }
-              if (that.startAndEndMarkerLayer) {
-                that.startAndEndMarkerLayer.setMap(null)
-              }
+              /*if (that.map && that.polyLine && that.startAndEndMarkerLayer) {
+                that.map.removeLayer("polyline-layer")
+                that.map.removeLayer("marker-layer")
+              }*/
               that.polyLine = null
               that.startAndEndMarkerLayer = null
+              that.map.destroy()
               that.initMap()
               that.$message.success(
                 '重置成功',
@@ -133,11 +139,9 @@ export default {
       if (this.stepArr.length > 0){
         this.stepArr = this.stepArr.reverse()
       }
-      if (this.polyLine){
-        this.polyLine.setMap(null)
-      }
-      if (this.startAndEndMarkerLayer){
-        this.polyLine.setMap(null)
+      if (this.map && this.startAndEndMarkerLayer && this.polyLine) {
+        this.map.removeLayer("polyline-layer")
+        this.map.removeLayer("marker-layer")
       }
       if (this.path.length > 0){
         this.path = this.path.reverse()
@@ -151,11 +155,24 @@ export default {
       })
     },
     getLinePath() {
+      if (this.map && this.editor){
+        console.log('摧毁编辑器')
+        this.editor.disable()
+        this.editor.removeOverlay('polyline-edit')
+        if (this.polylineLayerEdit){
+          this.map.removeLayer("polyline-layer-edit")
+        }
+      } else {
+        if (this.map && this.startAndEndMarkerLayer && this.polyLine) {
+          this.map.removeLayer("polyline-layer")
+          this.map.removeLayer("marker-layer")
+        }
+      }
       this.path = []
       getRouteLine().then((response) => {
         this.path = response.data
         // 添加路径 开始 结束 图标
-        if (this.path.length > 1) {
+        if (this.path && this.path.length > 1) {
           this.markRoutePath(this.path)
         }
       })
@@ -211,6 +228,63 @@ export default {
         this.model.resumeMove();
       }
     },
+    openPolyLine() {
+      this.customPath = []
+      const paths = this.path.map((item) => {
+        return new window.TMap.LatLng(item.lat,item.lng)
+      })
+      if (this.map && this.startAndEndMarkerLayer && this.polyLine) {
+        this.map.removeLayer("polyline-layer")
+        this.map.removeLayer("marker-layer")
+      }
+      this.editor = null
+      this.polylineLayerEdit = new window.TMap.MultiPolyline({
+        id: 'polyline-layer-edit',
+        map: this.map,
+        styles: {
+          style_blue: new window.TMap.PolylineStyle({
+            color: '#3777FF', //线填充色
+            width: 6, //折线宽度
+            borderWidth: 5, //边线宽度
+            borderColor: '#FFF', //边线颜色
+            lineCap: 'butt' //线端头方式
+          })
+        },
+        geometries: [
+          {
+            id: 'pl_1', //设置折线唯一id,可用于删除等
+            styleId: 'style_blue',//绑定样式id,对应上面第一组样式
+            paths: paths
+          }
+        ]
+      })
+      this.editor = new window.TMap.tools.GeometryEditor({
+        map: this.map, // 编辑器绑定的地图对象
+        overlayList: [ // 可编辑图层
+          {
+            overlay: this.polylineLayerEdit,
+            id: 'polyline-edit',
+            selectedStyleId: 'style_blue',
+          }
+        ],
+        actionMode: window.TMap.tools.constants.EDITOR_ACTION.INTERACT, // 编辑器的工作模式
+        activeOverlayId: 'polyline-edit', // 激活图层
+        selectable: true,
+        snappable: true
+      });
+      // 修改完成监听
+      this.editor.on('adjust_complete', (geometry) => {
+        console.log('航线编辑完成!!!!!!!')
+        // 判断当前处于编辑状态的图层id是否是overlayList中id为rectangle(矩形)图层
+        const _this = this
+        if (this.editor.getActiveOverlay().id === 'polyline-edit') {
+          // 获取折线路径坐标
+          console.log('绘制的多边形坐标:', geometry.paths)
+          this.customPath = geometry.paths
+          console.log('当前路径Path:', this.customPath)
+        }
+      })
+    },
     resetMap() {
       this.$router.go(0)
     },
@@ -254,6 +328,9 @@ export default {
       });
     },
     markRoutePath(pathArr) {
+      const paths = pathArr.map((item) => {
+        return new window.TMap.LatLng(item.lat, item.lng)
+      })
       const _this = this
       // 添加起点和终点 - 开始
       const startPosition = new window.TMap.LatLng(pathArr[0].lat, pathArr[0].lng) // 路线规划起点
@@ -295,20 +372,25 @@ export default {
         id: 'polyline-layer',
         map: _this.map,
         styles: {
-          style_blue: new TMap.PolylineStyle({
+          style_blue: new window.TMap.PolylineStyle({
             color: '#3777FF',
-            width: 8,
-            borderWidth: 5,
+            width: 10,
+            borderWidth: 4,
             borderColor: '#FFF',
-            lineCap: 'butt',
-            showArrow: true
+            lineCap: 'square',
+            showArrow: true,
+            arrowOptions: {
+              width: 8,
+              height: 12,
+              space: 80,
+            }
           })
         },
         geometries: [
           {
             id: 'pl_1',
             styleId: 'style_blue',
-            paths: _this.path
+            paths: paths
           }
         ]
       })
@@ -361,51 +443,17 @@ export default {
     },
     initMap() {
       // 设置地图中心点
-      const center = new TMap.LatLng(36.092574, 103.728268)
+      const center = new TMap.LatLng(36.076698,103.805328)
       // 定义工厂模式函数
       const myOptions = {
-        zoom: 17, // 设置地图缩放级别
+        zoom: 13.8, // 设置地图缩放级别
         center: center
       }
       // 初始化重新定位
       this.map = new TMap.Map('container', myOptions)
-
-      // 初始化几何图形及编辑器
-      // const marker = new TMap.MultiMarker({
-      //   map: this.map
-      // })
       const polyline = new TMap.MultiPolyline({
         map: this.map
       })
-      /*const polygon = new TMap.MultiPolygon({
-        map: this.map
-      })
-      const circle = new TMap.MultiCircle({
-        map: this.map
-      })
-      const rectangle = new TMap.MultiRectangle({
-        map: this.map
-      })
-      const ellipse = new TMap.MultiEllipse({
-        map: this.map
-      })*/
-      /*  ,
-        {
-          overlay: polygon,
-          id: 'polygon'
-        },
-        {
-          overlay: circle,
-          id: 'circle'
-        },
-        {
-          overlay: rectangle,
-          id: 'rectangle'
-        },
-        {
-          overlay: ellipse,
-          id: 'ellipse'
-        }*/
       this.editor = new TMap.tools.GeometryEditor({
         // TMap.tools.GeometryEditor 文档地址:https://lbs.qq.com/webApi/javascriptGL/glDoc/glDocEditor
         map: this.map, // 编辑器绑定的地图对象
@@ -416,7 +464,7 @@ export default {
             id: 'polyline'
           }
         ],
-        actionMode: TMap.tools.constants.EDITOR_ACTION.DRAW, // 编辑器的工作模式
+        actionMode: window.TMap.tools.constants.EDITOR_ACTION.DRAW, // 编辑器的工作模式
         activeOverlayId: 'polyline', // 激活图层
         snappable: true // 开启吸附
       })
@@ -425,21 +473,6 @@ export default {
         // 判断当前处于编辑状态的图层id是否是overlayList中id为rectangle(矩形)图层
         // 判断当前处于编辑状态的图层id是否是overlayList中id为rectangle(矩形)图层
         const id = geometry.id
-        /*if (this.editor.getActiveOverlay().id === 'rectangle') {
-          // 获取矩形顶点坐标
-          const geo = rectangle.geometries.filter(function (item) {
-            return item.id === id
-          })
-          console.log('绘制的矩形定位的坐标:', geo[0].paths)
-        }
-
-        if (this.editor.getActiveOverlay().id === 'polygon') {
-          // 获取多边形顶点坐标
-          const geo = polygon.geometries.filter(function (item) {
-            return item.id === id
-          })
-          console.log('绘制的多边形坐标:', geo[0].paths)
-        }*/
         const _this = this
         if (this.editor.getActiveOverlay().id === 'polyline') {
           // 获取折线路径坐标

+ 2 - 5
aidex-ui/src/views/system/sysship/index.vue

@@ -153,13 +153,10 @@ export default {
         pageNum: 1,
         pageSize: 10,
         shipNum: undefined,
-
         shipNanme: undefined,
-
         gpsDeviceNum: undefined,
-
-        nuclearLoadNum: undefined
-
+        nuclearLoadNum: undefined,
+        orderByColumn: 'ship_nanme'
       },
       columns: [
         {

+ 10 - 5
aidex-ui/vue.config.js

@@ -34,15 +34,20 @@ const assetsCDN = {
   css: [],
   // https://unpkg.com/browse/vue@2.6.10/
   js: [
-    '//cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.min.js',
-    '//cdn.jsdelivr.net/npm/vue-line@3.1.3/dist/vue-line.min.js',
-    '//cdn.jsdelivr.net/npm/vuex@3.1.1/dist/vuex.min.js',
-    '//cdn.jsdelivr.net/npm/axios@0.19.0/dist/axios.min.js'
+    '//cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.min.js',
+    '//cdn.bootcdn.net/ajax/libs/vue-router/3.1.3/vue-router.min.js',
+    '//cdn.bootcdn.net/ajax/libs/vuex/3.1.1/vuex.min.js',
+    '//cdn.bootcdn.net/ajax/libs/axios/1.6.8/axios.min.js'
+   /* 'https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.min.js',
+    'https://cdn.jsdelivr.net/npm/vue-router@3.1.3/dist/vue-router.min.js',
+    'https://cdn.jsdelivr.net/npm/vuex@3.1.1/dist/vuex.min.js',
+    'https://cdn.jsdelivr.net/npm/axios@1.6.8/dist/axios.min.js'*/
   ]
 }
 
 // vue.config.js
 const vueConfig = {
+  publicPath: process.env.NODE_ENV === 'development' ? '/' : '/',
   configureWebpack: {
     // webpack plugins
     plugins: [
@@ -136,7 +141,7 @@ const vueConfig = {
   productionSourceMap: false,
   lintOnSave: undefined,
   // babel-loader no-ignore node_modules/*
-  transpileDependencies: []
+  transpileDependencies: [],
 }
 
 // preview.pro.loacg.com only do not use in your production;