Browse Source

Merge branch 'mh' of http://124.70.32.114:3100/woka/cesium-map-object into ctw

# Conflicts:
#	ruoyi-ui/src/views/cesiumMap/index.vue
lbj
ctw 3 months ago
parent
commit
a8ae3f9dbd
  1. 8
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java
  2. 2
      ruoyi-admin/src/main/resources/application-druid.yml
  3. 269
      ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
  4. 10
      ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/RegisterBody.java
  5. 1
      ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysRegisterService.java
  6. 4
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/UsersMapper.java
  7. 1
      ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
  8. 10
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
  9. 8
      ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
  10. 6
      ruoyi-system/src/main/resources/mapper/system/UsersMapper.xml
  11. 90
      ruoyi-ui/src/views/cesiumMap/index.vue
  12. 133
      ruoyi-ui/src/views/login.vue
  13. 1
      ruoyi-ui/src/views/register.vue
  14. 2
      ruoyi-ui/vue.config.js

8
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java

@ -28,6 +28,14 @@ public class SysRegisterController extends BaseController
@PostMapping("/register")
public AjaxResult register(@RequestBody RegisterBody user)
{
// 1. 先获取配置值并存入变量
String registerConfig = configService.selectConfigByKey("sys.account.registerUser");
// 2. 打印到控制台
System.out.println("获取到的 Value: [" + registerConfig + "]"); // 加括号能看出是否有空格
System.out.println("类型判断结果: " + "true".equals(registerConfig));
System.out.println("======================");
if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser"))))
{
return error("当前系统没有开启注册功能!");

2
ruoyi-admin/src/main/resources/application-druid.yml

@ -8,7 +8,7 @@ spring:
master:
url: jdbc:mysql://localhost:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: A20040303ctw!
password: 123456
# 从库数据源
slave:
# 从数据源开关/默认关闭

269
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java

@ -3,6 +3,7 @@ package com.ruoyi.common.core.domain.entity;
import java.util.Date;
import java.util.List;
import javax.validation.constraints.*;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.fasterxml.jackson.annotation.JsonProperty;
@ -16,321 +17,333 @@ import com.ruoyi.common.xss.Xss;
/**
* 用户对象 sys_user
*
*
* @author ruoyi
*/
public class SysUser extends BaseEntity
{
public class SysUser extends BaseEntity {
private static final long serialVersionUID = 1L;
/** 用户ID */
/**
* 用户ID
*/
@Excel(name = "用户序号", type = Type.EXPORT, cellType = ColumnType.NUMERIC, prompt = "用户编号")
private Long userId;
/** 部门ID */
/**
* 部门ID
*/
@Excel(name = "部门编号", type = Type.IMPORT)
private Long deptId;
/** 用户账号 */
/**
* 用户账号
*/
@Excel(name = "登录名称")
private String userName;
/** 用户昵称 */
/**
* 用户昵称
*/
@Excel(name = "用户名称")
private String nickName;
/** 用户邮箱 */
/**
* 用户邮箱
*/
@Excel(name = "用户邮箱")
private String email;
/** 手机号码 */
/**
* 手机号码
*/
@Excel(name = "手机号码", cellType = ColumnType.TEXT)
private String phonenumber;
/** 用户性别 */
/**
* 用户性别
*/
@Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知")
private String sex;
/** 用户头像 */
/**
* 用户头像
*/
private String avatar;
/** 密码 */
/**
* 密码
*/
private String password;
/** 账号状态(0正常 1停用) */
/**
* 账号状态0正常 1停用
*/
@Excel(name = "账号状态", readConverterExp = "0=正常,1=停用")
private String status;
/** 删除标志(0代表存在 2代表删除) */
/**
* 删除标志0代表存在 2代表删除
*/
private String delFlag;
/** 最后登录IP */
/**
* 最后登录IP
*/
@Excel(name = "最后登录IP", type = Type.EXPORT)
private String loginIp;
/** 最后登录时间 */
/**
* 最后登录时间
*/
@Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT)
private Date loginDate;
/** 密码最后更新时间 */
/**
* 密码最后更新时间
*/
private Date pwdUpdateDate;
/** 部门对象 */
/**
* 部门对象
*/
@Excels({
@Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT),
@Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT)
@Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT),
@Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT)
})
private SysDept dept;
/** 角色对象 */
/**
* 角色对象
*/
private List<SysRole> roles;
/** 角色组 */
/**
* 角色组
*/
private Long[] roleIds;
/** 岗位组 */
/**
* 岗位组
*/
private Long[] postIds;
/** 角色ID */
/**
* 角色ID
*/
private Long roleId;
public SysUser()
{
/**
* 权限等级
*/
@Excel(name = "权限等级", readConverterExp = "1=管理员,2=主持人,3=普通用户")
private String userLevel;
public SysUser() {
}
public SysUser(Long userId)
{
public SysUser(Long userId) {
this.userId = userId;
}
public Long getUserId()
{
public Long getUserId() {
return userId;
}
public void setUserId(Long userId)
{
public void setUserId(Long userId) {
this.userId = userId;
}
public boolean isAdmin()
{
public boolean isAdmin() {
return SecurityUtils.isAdmin(this.userId);
}
public Long getDeptId()
{
public Long getDeptId() {
return deptId;
}
public void setDeptId(Long deptId)
{
public void setDeptId(Long deptId) {
this.deptId = deptId;
}
@Xss(message = "用户昵称不能包含脚本字符")
@Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
public String getNickName()
{
public String getNickName() {
return nickName;
}
public void setNickName(String nickName)
{
public void setNickName(String nickName) {
this.nickName = nickName;
}
@Xss(message = "用户账号不能包含脚本字符")
@NotBlank(message = "用户账号不能为空")
@Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
public String getUserName()
{
public String getUserName() {
return userName;
}
public void setUserName(String userName)
{
public void setUserName(String userName) {
this.userName = userName;
}
@Email(message = "邮箱格式不正确")
@Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
public String getEmail()
{
public String getEmail() {
return email;
}
public void setEmail(String email)
{
public void setEmail(String email) {
this.email = email;
}
@Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符")
public String getPhonenumber()
{
public String getPhonenumber() {
return phonenumber;
}
public void setPhonenumber(String phonenumber)
{
public void setPhonenumber(String phonenumber) {
this.phonenumber = phonenumber;
}
public String getSex()
{
public String getSex() {
return sex;
}
public void setSex(String sex)
{
public void setSex(String sex) {
this.sex = sex;
}
public String getAvatar()
{
public String getAvatar() {
return avatar;
}
public void setAvatar(String avatar)
{
public void setAvatar(String avatar) {
this.avatar = avatar;
}
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
public String getPassword()
{
public String getPassword() {
return password;
}
public void setPassword(String password)
{
public void setPassword(String password) {
this.password = password;
}
public String getStatus()
{
public String getStatus() {
return status;
}
public void setStatus(String status)
{
public void setStatus(String status) {
this.status = status;
}
public String getDelFlag()
{
public String getDelFlag() {
return delFlag;
}
public void setDelFlag(String delFlag)
{
public void setDelFlag(String delFlag) {
this.delFlag = delFlag;
}
public String getLoginIp()
{
public String getLoginIp() {
return loginIp;
}
public void setLoginIp(String loginIp)
{
public void setLoginIp(String loginIp) {
this.loginIp = loginIp;
}
public Date getLoginDate()
{
public Date getLoginDate() {
return loginDate;
}
public void setLoginDate(Date loginDate)
{
public void setLoginDate(Date loginDate) {
this.loginDate = loginDate;
}
public Date getPwdUpdateDate()
{
public Date getPwdUpdateDate() {
return pwdUpdateDate;
}
public void setPwdUpdateDate(Date pwdUpdateDate)
{
public void setPwdUpdateDate(Date pwdUpdateDate) {
this.pwdUpdateDate = pwdUpdateDate;
}
public SysDept getDept()
{
public SysDept getDept() {
return dept;
}
public void setDept(SysDept dept)
{
public void setDept(SysDept dept) {
this.dept = dept;
}
public List<SysRole> getRoles()
{
public List<SysRole> getRoles() {
return roles;
}
public void setRoles(List<SysRole> roles)
{
public void setRoles(List<SysRole> roles) {
this.roles = roles;
}
public Long[] getRoleIds()
{
public Long[] getRoleIds() {
return roleIds;
}
public void setRoleIds(Long[] roleIds)
{
public void setRoleIds(Long[] roleIds) {
this.roleIds = roleIds;
}
public Long[] getPostIds()
{
public Long[] getPostIds() {
return postIds;
}
public void setPostIds(Long[] postIds)
{
public void setPostIds(Long[] postIds) {
this.postIds = postIds;
}
public Long getRoleId()
{
public Long getRoleId() {
return roleId;
}
public void setRoleId(Long roleId)
{
public void setRoleId(Long roleId) {
this.roleId = roleId;
}
public String getUserLevel() {
return userLevel;
}
public void setUserLevel(String userLevel) {
this.userLevel = userLevel;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("userId", getUserId())
.append("deptId", getDeptId())
.append("userName", getUserName())
.append("nickName", getNickName())
.append("email", getEmail())
.append("phonenumber", getPhonenumber())
.append("sex", getSex())
.append("avatar", getAvatar())
.append("password", getPassword())
.append("status", getStatus())
.append("delFlag", getDelFlag())
.append("loginIp", getLoginIp())
.append("loginDate", getLoginDate())
.append("pwdUpdateDate", getPwdUpdateDate())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("remark", getRemark())
.append("dept", getDept())
.toString();
return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
.append("userId", getUserId())
.append("deptId", getDeptId())
.append("userName", getUserName())
.append("nickName", getNickName())
.append("email", getEmail())
.append("phonenumber", getPhonenumber())
.append("sex", getSex())
.append("avatar", getAvatar())
.append("password", getPassword())
.append("status", getStatus())
.append("delFlag", getDelFlag())
.append("loginIp", getLoginIp())
.append("loginDate", getLoginDate())
.append("pwdUpdateDate", getPwdUpdateDate())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("remark", getRemark())
.append("dept", getDept())
.append("userLevel", getUserLevel())
.toString()
;
}
}

10
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/RegisterBody.java

@ -7,5 +7,15 @@ package com.ruoyi.common.core.domain.model;
*/
public class RegisterBody extends LoginBody
{
private String userLevel;
public String getUserLevel()
{
return userLevel;
}
public void setUserLevel(String role)
{
this.userLevel = userLevel;
}
}

1
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysRegisterService.java

@ -79,6 +79,7 @@ public class SysRegisterService
sysUser.setNickName(username);
sysUser.setPwdUpdateDate(DateUtils.getNowDate());
sysUser.setPassword(SecurityUtils.encryptPassword(password));
sysUser.setUserLevel(registerBody.getUserLevel());
boolean regFlag = userService.registerUser(sysUser);
if (!regFlag)
{

4
ruoyi-system/src/main/java/com/ruoyi/system/mapper/UsersMapper.java

@ -1,6 +1,8 @@
package com.ruoyi.system.mapper;
import java.util.List;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.system.domain.Users;
/**
@ -58,4 +60,6 @@ public interface UsersMapper
* @return 结果
*/
public int deleteUsersByIds(Long[] ids);
SysUser selectUserByUserName(String userName);
}

1
ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java

@ -3,6 +3,7 @@ package com.ruoyi.system.service;
import java.util.Date;
import java.util.List;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.system.domain.Users;
/**
* 用户 业务层

10
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java

@ -5,6 +5,9 @@ import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import javax.validation.Validator;
import com.ruoyi.system.domain.Users;
import com.ruoyi.system.mapper.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@ -23,11 +26,6 @@ import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.system.domain.SysPost;
import com.ruoyi.system.domain.SysUserPost;
import com.ruoyi.system.domain.SysUserRole;
import com.ruoyi.system.mapper.SysPostMapper;
import com.ruoyi.system.mapper.SysRoleMapper;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.mapper.SysUserPostMapper;
import com.ruoyi.system.mapper.SysUserRoleMapper;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysDeptService;
import com.ruoyi.system.service.ISysUserService;
@ -107,7 +105,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* 通过用户名查询用户
*
*
* @param userName 用户名
* @return 用户对象信息
*/

8
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml

@ -24,6 +24,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="remark" column="remark" />
<result property="userLevel" column="user_level" />
<association property="dept" javaType="SysDept" resultMap="deptResult" />
<collection property="roles" javaType="java.util.List" resultMap="RoleResult" />
</resultMap>
@ -48,7 +49,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectUserVo">
select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.pwd_update_date, u.create_by, u.create_time, u.remark,
select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.pwd_update_date, u.create_by, u.create_time, u.remark,u.user_level,
d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,
r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
from sys_user u
@ -58,7 +59,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</sql>
<select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult">
select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from sys_user u
select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,u.user_level, d.dept_name, d.leader from sys_user u
left join sys_dept d on u.dept_id = d.dept_id
where u.del_flag = '0'
<if test="userId != null and userId != 0">
@ -158,6 +159,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="pwdUpdateDate != null">pwd_update_date,</if>
<if test="createBy != null and createBy != ''">create_by,</if>
<if test="remark != null and remark != ''">remark,</if>
<if test="userLevel != null and userLevel != ''">user_level,</if>
create_time
)values(
<if test="userId != null and userId != ''">#{userId},</if>
@ -173,6 +175,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="pwdUpdateDate != null">#{pwdUpdateDate},</if>
<if test="createBy != null and createBy != ''">#{createBy},</if>
<if test="remark != null and remark != ''">#{remark},</if>
<if test="userLevel != null and userLevel != ''">#{userLevel},</if>
sysdate()
)
</insert>
@ -192,6 +195,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="loginDate != null">login_date = #{loginDate},</if>
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="userLevel != null and userLevel != ''">user_level = #{userLevel},</if>
update_time = sysdate()
</set>
where user_id = #{userId}

6
ruoyi-system/src/main/resources/mapper/system/UsersMapper.xml

@ -29,6 +29,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where id = #{id}
</select>
<select id="selectUserByUserName" parameterType="String" resultMap="com.ruoyi.system.mapper.UsersMapper.UsersResult">
select id, username, password, role
from users
where username = #{userName}
</select>
<insert id="insertUsers" parameterType="Users" useGeneratedKeys="true" keyProperty="id">
insert into users
<trim prefix="(" suffix=")" suffixOverrides=",">

90
ruoyi-ui/src/views/cesiumMap/index.vue

@ -13,16 +13,16 @@
<!-- 工具栏内容 -->
<div class="location-panel">
<div class="input-group">
<input
type="number"
v-model.number="targetLng"
placeholder="经度 (例如 116.40)"
<input
type="number"
v-model.number="targetLng"
placeholder="经度 (例如 116.40)"
step="0.000001"
>
<input
type="number"
v-model.number="targetLat"
placeholder="纬度 (例如 39.90)"
<input
type="number"
v-model.number="targetLat"
placeholder="纬度 (例如 39.90)"
step="0.000001"
>
<button @click="flyToLocation" class="tool-btn location-btn">
@ -242,15 +242,15 @@ export default {
drawingPoints: [],
drawingStartPoint: null,
isDrawing: false,
//
allEntities: [], //
entityCounter: 0,
selectedEntity: null, //
//
measurementResult: null,
//
defaultStyles: {
point: { color: '#FF0000', size: 12 },
@ -400,11 +400,11 @@ export default {
// TilingScheme使 WebMercator
tilingScheme: new Cesium.WebMercatorTilingScheme()
})
this.viewer.imageryLayers.addImageryProvider(administrativeMap)
// add
} catch (error) {
console.error('加载地图失败:', error)
this.showGridLayer()
@ -497,7 +497,7 @@ export default {
this.viewer.entities.remove(this.tempEntity);
this.tempEntity = null;
}
//
if (this.tempPreviewEntity) {
this.viewer.entities.remove(this.tempPreviewEntity);
@ -528,7 +528,7 @@ export default {
this.drawingPoints = [];
//
let activeCursorPosition = null;
//
if (this.tempEntity) this.viewer.entities.remove(this.tempEntity);
if (this.tempPreviewEntity) this.viewer.entities.remove(this.tempPreviewEntity);
@ -552,7 +552,7 @@ export default {
// === 线 ===
if (this.drawingPoints.length === 1) {
activeCursorPosition = position; //
// 线
this.tempPreviewEntity = this.viewer.entities.add({
polyline: {
@ -576,7 +576,7 @@ export default {
clampToGround: true //
}
});
}
}
// === /线 ===
else {
// 线线
@ -608,7 +608,7 @@ export default {
} else {
this.cancelDrawing();
}
//
activeCursorPosition = null;
}, Cesium.ScreenSpaceEventType.RIGHT_CLICK);
@ -622,7 +622,7 @@ export default {
this.viewer.entities.remove(this.tempPreviewEntity);
this.tempPreviewEntity = null;
}
// 线
const entity = this.addLineEntity([...this.drawingPoints]);
@ -685,7 +685,7 @@ export default {
// 使便
material: Cesium.Color.fromCssColorString(this.defaultStyles.polygon.color).withAlpha(0.5),
//
perPositionHeight: false
perPositionHeight: false
},
// --- 线 ---
polyline: {
@ -717,7 +717,7 @@ export default {
} else {
this.cancelDrawing(); //
}
//
activeCursorPosition = null;
}, Cesium.ScreenSpaceEventType.RIGHT_CLICK);
@ -785,15 +785,15 @@ export default {
clampToGround: true //
}
});
}
}
// --- B ---
else {
this.drawingPoints.push(position);
//
activeCursorPosition = null;
activeCursorPosition = null;
//
this.finishRectangleDrawing();
this.finishRectangleDrawing();
}
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
@ -807,7 +807,7 @@ export default {
finishRectangleDrawing() {
// 1.
const rect = Cesium.Rectangle.fromCartesianArray(this.drawingPoints);
// 2.
if (this.tempEntity) {
this.viewer.entities.remove(this.tempEntity);
@ -826,10 +826,10 @@ export default {
clampToGround: true
}
});
// 4.
this.allEntities.push(finalEntity);
// 5.
const area = this.calculateRectangleArea(rect);
this.measurementResult = {
@ -845,33 +845,33 @@ export default {
calculateRectangleArea(rectangle) {
//
const ellipsoid = this.viewer.scene.globe.ellipsoid;
// 使 Cesium
// const geometry = new Cesium.RectangleGeometry({ rectangle: rectangle });
// const geometryInstance = Cesium.RectangleGeometry.createGeometry(geometry);
// ...
// 使
//
const west = rectangle.west;
const south = rectangle.south;
const east = rectangle.east;
const north = rectangle.north;
//
const centerLat = (south + north) / 2;
// 西使
// 6378137
const R = 6378137;
const R = 6378137;
const width = (east - west) * R * Math.cos(centerLat);
//
const height = (north - south) * R;
// = *
const area = Math.abs(width * height);
return area;
},
//
@ -927,15 +927,15 @@ export default {
// height: 0, // 使 heightReference
}
});
}
}
// --- B/ ---
else {
// 便
this.drawingPoints.push(position);
activeCursorPosition = null; //
//
this.finishCircleDrawing(position);
this.finishCircleDrawing(position);
}
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
@ -948,10 +948,10 @@ export default {
finishCircleDrawing(edgePosition) {
const centerPoint = this.drawingPoints[0];
// 1.
const radius = Cesium.Cartesian3.distance(centerPoint, edgePosition);
// 2.
if (this.tempEntity) {
this.viewer.entities.remove(this.tempEntity);
@ -978,7 +978,7 @@ export default {
// 5. (π * r²)
//
const area = Math.PI * Math.pow(radius, 2);
this.measurementResult = {
radius: radius, //
area: area,
@ -1180,7 +1180,7 @@ export default {
id: id,
name: `圆形 ${this.entityCounter}`,
position: center, //
// 使 ellipse ()
ellipse: {
semiMinorAxis: radius, // =
@ -1378,7 +1378,7 @@ export default {
clearAll() {
// 1.
if (this.allEntities && this.allEntities.length > 0) {
// 2.
this.allEntities.forEach(item => {
try {

133
ruoyi-ui/src/views/login.vue

@ -1,4 +1,5 @@
<template>
<div class="page-container">
<!-- 登录主容器 v-->
<div class="login-wrapper">
@ -14,14 +15,14 @@
<div class="login-card">
<!-- 登录/注册切换标签 -->
<div class="tab-container">
<button
<button
@click="switchTab('login')"
:class="{ 'tab-active': activeTab === 'login' }"
class="tab-item"
>
<i class="el-icon-user mr-1"></i> 登录
</button>
<button
<button
@click="switchTab('register')"
:class="{ 'tab-active': activeTab === 'register' }"
class="tab-item"
@ -39,10 +40,10 @@
<label class="form-label">账号</label>
<div class="input-wrapper">
<i class="el-icon-user input-icon"></i>
<input
type="text"
<input
type="text"
v-model="form.username"
placeholder="请输入账号"
placeholder="请输入账号"
class="form-input"
>
</div>
@ -56,13 +57,13 @@
</div>
<div class="input-wrapper">
<i class="el-icon-lock input-icon"></i>
<input
:type="showPwd ? 'text' : 'password'"
<input
:type="showPwd ? 'text' : 'password'"
v-model="form.password"
placeholder="请输入密码"
placeholder="请输入密码"
class="form-input"
>
<i
<i
@click="togglePwd"
:class="showPwd ? 'el-icon-view' : 'el-icon-hide'"
class="toggle-pwd-icon"
@ -83,7 +84,7 @@
</div>
<!-- 登录按钮 -->
<button
<button
@click="handleLogin"
:class="{ 'login-btn-disabled': isLogging }"
class="login-btn"
@ -99,10 +100,10 @@
<label class="form-label">账号</label>
<div class="input-wrapper">
<i class="el-icon-user input-icon"></i>
<input
type="text"
<input
type="text"
v-model="form.username"
placeholder="请输入账号"
placeholder="请输入账号"
class="form-input"
>
</div>
@ -113,13 +114,13 @@
<label class="form-label">密码</label>
<div class="input-wrapper">
<i class="el-icon-lock input-icon"></i>
<input
:type="showPwd ? 'text' : 'password'"
<input
:type="showPwd ? 'text' : 'password'"
v-model="form.password"
placeholder="请输入密码"
placeholder="请输入密码"
class="form-input"
>
<i
<i
@click="togglePwd"
:class="showPwd ? 'el-icon-view' : 'el-icon-hide'"
class="toggle-pwd-icon"
@ -132,13 +133,13 @@
<label class="form-label">确认密码</label>
<div class="input-wrapper">
<i class="el-icon-lock input-icon"></i>
<input
:type="showConfirmPwd ? 'text' : 'password'"
<input
:type="showConfirmPwd ? 'text' : 'password'"
v-model="form.confirmPassword"
placeholder="请确认密码"
placeholder="请确认密码"
class="form-input"
>
<i
<i
@click="toggleConfirmPwd"
:class="showConfirmPwd ? 'el-icon-view' : 'el-icon-hide'"
class="toggle-pwd-icon"
@ -149,7 +150,7 @@
<!-- 权限等级 -->
<div class="form-item">
<label class="form-label">权限等级</label>
<select
<select
v-model="form.role"
class="form-select"
>
@ -160,7 +161,7 @@
</div>
<!-- 注册按钮 -->
<button
<button
@click="handleRegister"
:class="{ 'login-btn-disabled': isRegistering }"
class="login-btn"
@ -181,6 +182,7 @@
<script>
import axios from 'axios';
import { register } from "@/api/login";
export default {
name: 'Login',
@ -210,52 +212,77 @@ export default {
toggleConfirmPwd() {
this.showConfirmPwd = !this.showConfirmPwd;
},
handleLogin() {
async handleLogin() {
if (this.isLogging) return;
if (!this.form.username || !this.form.password) {
this.$message.error('请输入账号和密码');
return;
}
this.isLogging = true;
// selectRoom
setTimeout(() => {
try {
const loginBody = {
username: this.form.username,
password: this.form.password
};
await this.$store.dispatch("Login", loginBody);
this.$router.push('/selectRoom');
} catch (error) {
// error msg
this.$message.error(error.msg || '登录失败');
} finally {
this.isLogging = false;
}, 500);
}
},
async handleRegister() {
if (this.isRegistering) return;
//
// 1.
if (!this.form.username || !this.form.password || !this.form.confirmPassword) {
alert('请填写所有必填字段');
this.$message.error('请填写所有必填字段');
return;
}
if (this.form.password !== this.form.confirmPassword) {
alert('两次输入的密码不一致');
this.$message.error('两次输入的密码不一致');
return;
}
this.isRegistering = true;
try {
const response = await axios.post('http://localhost:3002/api/users/register', {
username: this.form.username,
password: this.form.password,
role: this.form.role
});
// 2.
const roleMap = {
'admin': '1',
'host': '2',
'user': '3'
};
// sys_user
const regData = {
username: this.form.username,
password: this.form.password,
userLevel: roleMap[this.form.role] || '3' // role
};
// 3. API
register(regData).then(res => {
this.isRegistering = false;
alert('注册成功,请登录');
this.switchTab('login');
//
this.form = {
username: '',
password: '',
confirmPassword: '',
role: 'user'
};
} catch (error) {
this.$alert("<font color='red'>恭喜你,您的账号 " + regData.username + " 注册成功!</font>", '系统提示', {
dangerouslyUseHTMLString: true,
type: 'success'
}).then(() => {
this.switchTab('login');
//
this.form = {
username: '',
password: '',
confirmPassword: '',
role: 'user'
};
});
}).catch(() => {
this.isRegistering = false;
alert(error.response?.data?.message || '注册失败,请重试');
}
});
}
}
}

1
ruoyi-ui/src/views/register.vue

@ -88,6 +88,7 @@ export default {
username: "",
password: "",
confirmPassword: "",
userLevel: "3",
code: "",
uuid: ""
},

2
ruoyi-ui/vue.config.js

@ -10,7 +10,7 @@ const CompressionPlugin = require('compression-webpack-plugin')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const name = process.env.VUE_APP_TITLE || '若依管理系统' // 网页标题
const baseUrl = 'http://192.168.50.30:8080' // 后端接口
const baseUrl = 'http://127.0.0.1:8080' // 后端接口
const port = process.env.port || process.env.npm_config_port || 80 // 端口
// 定义 Cesium 源码路径

Loading…
Cancel
Save