|
|
@@ -12,7 +12,10 @@
|
|
|
<i slot="suffix" class="el-input__icon el-icon-search"></i>
|
|
|
</el-input>
|
|
|
</div>
|
|
|
- <el-button v-if="have_type == 0 || staff == 1" type="success" size="mini"
|
|
|
+ <el-button
|
|
|
+ v-if="have_type == 0 || staff == 1 || have_type == 2"
|
|
|
+ type="success"
|
|
|
+ size="mini"
|
|
|
><a style="color: #fff" href="systemmanage_user_add"
|
|
|
>添加新用户</a
|
|
|
></el-button
|
|
|
@@ -36,17 +39,22 @@
|
|
|
<div class="detail">
|
|
|
<p>
|
|
|
模块类型
|
|
|
- <span v-if="item.user_type == '1'">农林植保平台</span>
|
|
|
- <span v-if="item.user_type == '2'">环境监测平台</span>
|
|
|
- <span v-if="item.user_type == '3'">气象预警平台</span>
|
|
|
- <span v-if="item.user_type == '4'">溯源平台</span>
|
|
|
- <span v-if="item.user_type == '5'">可视化农业</span>
|
|
|
- <span v-if="item.user_type == '6'">监测平台</span>
|
|
|
+ <span v-if="item.user_type == '1'">农业植保监测系统</span>
|
|
|
+ <span v-if="item.user_type == '2'">农业气象监测系统</span>
|
|
|
+ <span v-if="item.user_type == '3'">环境灾害预警系统</span>
|
|
|
+ <span v-if="item.user_type == '4'">农产品溯源系统</span>
|
|
|
+ <span v-if="item.user_type == '5'">可视农业应用系统</span>
|
|
|
+ <span v-if="item.user_type == '6'">苗情监测应用系统</span>
|
|
|
</p>
|
|
|
<p>
|
|
|
用户类型
|
|
|
<span v-if="item.user_have_type == '1'">普通用户</span>
|
|
|
- <span v-if="item.user_have_type == '0'">管理员</span>
|
|
|
+ <span v-if="item.user_have_type == '0'">模块管理员</span>
|
|
|
+ <span v-if="item.user_have_type == '2'">项目管理员</span>
|
|
|
+ </p>
|
|
|
+ <p>
|
|
|
+ 适配用户
|
|
|
+ <span>{{ item.user_have || "无" }}</span>
|
|
|
</p>
|
|
|
<p>
|
|
|
站点名称
|
|
|
@@ -60,7 +68,7 @@
|
|
|
>
|
|
|
</p>
|
|
|
<p>
|
|
|
- 标题
|
|
|
+ 系统标题
|
|
|
<span>{{ item.user_header || "--" }}</span>
|
|
|
</p>
|
|
|
<p>
|
|
|
@@ -71,21 +79,36 @@
|
|
|
</p>
|
|
|
</div>
|
|
|
<div class="btn">
|
|
|
- <el-button type="success" @click="edit(item)" plain
|
|
|
+ <el-button size="small" type="success" @click="edit(item)" plain
|
|
|
>用户编辑</el-button
|
|
|
>
|
|
|
+ <template
|
|
|
+ v-if="(have_type == 0 || staff == 1 || have_type == 2) && (currusername != item.username)"
|
|
|
+ >
|
|
|
+ <el-button
|
|
|
+ size="small"
|
|
|
+ v-if="item.user_have_type == '1' || item.user_have_type == '2'"
|
|
|
+ type="success"
|
|
|
+ @click="allotEquip(item.id, item.username)"
|
|
|
+ plain
|
|
|
+ >分配设备</el-button
|
|
|
+ >
|
|
|
+ <el-button
|
|
|
+ size="small"
|
|
|
+ v-if="item.user_have_type == '1' || item.user_have_type == '2'"
|
|
|
+ type="success"
|
|
|
+ @click="delUser(item.id, item.username)"
|
|
|
+ plain
|
|
|
+ >删除用户</el-button
|
|
|
+ >
|
|
|
+ </template>
|
|
|
<el-button
|
|
|
+ size="small"
|
|
|
type="success"
|
|
|
@click="resetPassword(item.id, item.username)"
|
|
|
plain
|
|
|
>重置密码</el-button
|
|
|
>
|
|
|
- <!-- <a @click="edit(item)">
|
|
|
- <i class="iconfont icon-iconfontedit"></i>编辑
|
|
|
- </a>
|
|
|
- <a @click="resetPassword(item.uid, item.username)">
|
|
|
- <i class="iconfont icon-mima"></i>密码
|
|
|
- </a> -->
|
|
|
</div>
|
|
|
</el-card>
|
|
|
</el-col>
|
|
|
@@ -127,9 +150,6 @@
|
|
|
v-model="resetPassForm.username"
|
|
|
></el-input>
|
|
|
</el-form-item>
|
|
|
- <el-form-item v-if="userType != 1" label="原始密码 : " prop="oldPass">
|
|
|
- <el-input type="password" v-model="resetPassForm.oldPass"></el-input>
|
|
|
- </el-form-item>
|
|
|
<el-form-item label="新密码 : " prop="pass">
|
|
|
<el-input type="password" v-model="resetPassForm.pass"></el-input>
|
|
|
</el-form-item>
|
|
|
@@ -157,7 +177,7 @@
|
|
|
<el-form-item label="用户名 : ">
|
|
|
<el-input v-model="editUserForm.username" disabled></el-input>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="标题 : ">
|
|
|
+ <el-form-item label="系统标题 : ">
|
|
|
<el-input
|
|
|
maxlength="11"
|
|
|
v-model="editUserForm.user_header"
|
|
|
@@ -170,6 +190,7 @@
|
|
|
:auto-upload="false"
|
|
|
:show-file-list="false"
|
|
|
:on-change="changeUpload"
|
|
|
+ :before-upload="beforeAvatarUpload"
|
|
|
>
|
|
|
<img
|
|
|
v-if="editUserForm.logo"
|
|
|
@@ -201,27 +222,6 @@
|
|
|
<el-button type="primary" @click="editUserSubm">确认</el-button>
|
|
|
</span>
|
|
|
</el-dialog>
|
|
|
- <!-- vueCropper 剪裁图片实现-->
|
|
|
- <el-dialog title="图片剪裁" :visible.sync="cropperVisible" append-to-body>
|
|
|
- <div class="cropper-content">
|
|
|
- <div style="width: 100%; height: 500px">
|
|
|
- <vueCropper
|
|
|
- ref="cropper"
|
|
|
- :img="photo.img"
|
|
|
- autoCrop
|
|
|
- centerBox
|
|
|
- fixed
|
|
|
- :fixedNumber="photo.fixedNumber"
|
|
|
- :outputSize="photo.size"
|
|
|
- :outputType="photo.outputType"
|
|
|
- ></vueCropper>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div slot="footer" class="dialog-footer">
|
|
|
- <el-button @click="cropperVisible = false">取 消</el-button>
|
|
|
- <el-button type="primary" @click="finish">确认</el-button>
|
|
|
- </div>
|
|
|
- </el-dialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
@@ -275,7 +275,6 @@ export default {
|
|
|
resetPassForm: {
|
|
|
username: "",
|
|
|
uid: "",
|
|
|
- oldPass: "",
|
|
|
pass: "",
|
|
|
checkPass: "",
|
|
|
},
|
|
|
@@ -290,26 +289,6 @@ export default {
|
|
|
cs_user: false, //1为普通用户
|
|
|
user_group_id: "", //用户组id
|
|
|
},
|
|
|
- cropperVisible: false,
|
|
|
- // 裁剪组件的基础配置option
|
|
|
- photo: {
|
|
|
- img: "", // 裁剪图片的地址
|
|
|
- info: true, // 裁剪框的大小信息
|
|
|
- outputSize: 0.8, // 裁剪生成图片的质量
|
|
|
- outputType: "jpeg", // 裁剪生成图片的格式
|
|
|
- // canScale: false, // 图片是否允许滚轮缩放
|
|
|
- // autoCrop: true, // 是否默认生成截图框
|
|
|
- // autoCropWidth: 300, // 默认生成截图框宽度
|
|
|
- // autoCropHeight: 200, // 默认生成截图框高度
|
|
|
- // fixedBox: true, // 固定截图框大小 不允许改变
|
|
|
- fixed: true, // 是否开启截图框宽高固定比例
|
|
|
- fixedNumber: [230, 165], // 截图框的宽高比例
|
|
|
- full: true, // 是否输出原图比例的截图
|
|
|
- canMoveBox: false, // 截图框能否拖动
|
|
|
- original: false, // 上传图片按照原始比例渲染
|
|
|
- centerBox: false, // 截图框是否被限制在图片里面
|
|
|
- infoTrue: true, // true 为展示真实输出图片宽高 false 展示看到的截图框宽高
|
|
|
- },
|
|
|
cityData,
|
|
|
cityValue: [],
|
|
|
props: {
|
|
|
@@ -332,7 +311,6 @@ export default {
|
|
|
},
|
|
|
//重置密码格规则
|
|
|
resetPassFormRules: {
|
|
|
- oldPass: [{ required: true, message: "请填原始密码", trigger: "blur" }],
|
|
|
pass: [
|
|
|
{ validator: validatePass, trigger: "blur" },
|
|
|
{ required: true, message: "请填写新密码", trigger: "blur" },
|
|
|
@@ -344,6 +322,7 @@ export default {
|
|
|
},
|
|
|
have_type: "",
|
|
|
staff: "",
|
|
|
+ currusername:''
|
|
|
};
|
|
|
},
|
|
|
computed: {
|
|
|
@@ -357,70 +336,24 @@ export default {
|
|
|
this.getList();
|
|
|
this.have_type = localStorage.getItem("have_type"); // 0管理员 1用户
|
|
|
this.staff = localStorage.getItem("staff"); // 1是admin
|
|
|
+ this.currusername = localStorage.getItem("username"); // 1是admin
|
|
|
},
|
|
|
methods: {
|
|
|
getList() {
|
|
|
this.$axios({
|
|
|
method: "POST",
|
|
|
- url: "/api/user_list",
|
|
|
+ url: "user_list",
|
|
|
data: this.qs.stringify({
|
|
|
typelist: 6,
|
|
|
page: this.page,
|
|
|
uname: this.username,
|
|
|
+ page_size: 8,
|
|
|
}),
|
|
|
}).then((res) => {
|
|
|
this.userList = res.data.userlist;
|
|
|
this.totalNum = res.data.nums;
|
|
|
});
|
|
|
},
|
|
|
- getUserGroup() {
|
|
|
- this.$axios({
|
|
|
- method: "POST",
|
|
|
- url: "/api/api_gateway?method=pest.warning_record.rolemanage_view",
|
|
|
- data: this.qs.stringify({
|
|
|
- add_role: "all",
|
|
|
- }),
|
|
|
- }).then((res) => {
|
|
|
- if (res.data.message == "") {
|
|
|
- this.userGroupList = res.data.data.data;
|
|
|
- }
|
|
|
- });
|
|
|
- },
|
|
|
- recharge(id) {
|
|
|
- this.$confirm("是否向该用户充值一年费用?", "信息", {
|
|
|
- confirmButtonText: "确定",
|
|
|
- cancelButtonText: "取消",
|
|
|
- type: "warning",
|
|
|
- })
|
|
|
- .then(() => {
|
|
|
- this.$axios({
|
|
|
- method: "POST",
|
|
|
- url: "/api/api_gateway?method=user.login.user_add_package_time",
|
|
|
- data: this.qs.stringify({
|
|
|
- uid: id,
|
|
|
- }),
|
|
|
- }).then((res) => {
|
|
|
- if (res.data.message == "") {
|
|
|
- this.$message({
|
|
|
- type: "success",
|
|
|
- message: "充值成功!",
|
|
|
- });
|
|
|
- this.getList();
|
|
|
- } else {
|
|
|
- this.$message({
|
|
|
- type: "error",
|
|
|
- message: "充值失败!",
|
|
|
- });
|
|
|
- }
|
|
|
- });
|
|
|
- })
|
|
|
- .catch(() => {
|
|
|
- this.$message({
|
|
|
- type: "info",
|
|
|
- message: "充值取消!",
|
|
|
- });
|
|
|
- });
|
|
|
- },
|
|
|
// 编辑用户信息
|
|
|
edit(role) {
|
|
|
this.editUserForm = JSON.parse(JSON.stringify(role));
|
|
|
@@ -431,43 +364,29 @@ export default {
|
|
|
this.editUserForm.user_area,
|
|
|
];
|
|
|
},
|
|
|
- // 上传按钮 限制图片大小
|
|
|
- changeUpload(file, fileList) {
|
|
|
- const isLt4M = file.size / 1024 / 1024 < 4;
|
|
|
- if (!isLt4M) {
|
|
|
- this.$message.error("上传文件大小不能超过 4MB!");
|
|
|
- return false;
|
|
|
+ beforeAvatarUpload(file) {
|
|
|
+ console.log(file);
|
|
|
+ const isJPG = file.type === "image/jpeg" || file.type === "image/png";
|
|
|
+ const isLt2M = file.size / 1024 / 1024 < 2;
|
|
|
+ if (!isJPG) {
|
|
|
+ this.$message.error("上传头像图片只能是 JPG 和 PNG格式!");
|
|
|
}
|
|
|
- // 上传成功后将图片地址赋值给裁剪框显示图片
|
|
|
- this.$nextTick(() => {
|
|
|
- this.photo.img = URL.createObjectURL(file.raw);
|
|
|
- this.cropperVisible = true;
|
|
|
- });
|
|
|
+ if (!isLt2M) {
|
|
|
+ this.$message.error("上传头像图片大小不能超过 2MB!");
|
|
|
+ }
|
|
|
+ return isJPG && isLt2M;
|
|
|
},
|
|
|
- // 点击裁剪,这一步是可以拿到处理后的地址
|
|
|
- finish() {
|
|
|
- // 获取截图的base64 数据
|
|
|
- this.$refs.cropper.getCropBlob((data) => {
|
|
|
- var form = new FormData();
|
|
|
- let resFile = this.blobToFile(data, "filename.jpg");
|
|
|
- form.append("img_file", resFile);
|
|
|
-
|
|
|
- this.cropperVisible = false;
|
|
|
- this.$axios({
|
|
|
- method: "POST",
|
|
|
- url: "/api/base_photo",
|
|
|
- data: form,
|
|
|
- }).then((res) => {
|
|
|
- this.editUserForm.logo = res.data.src;
|
|
|
- });
|
|
|
+ changeUpload(file, fileList) {
|
|
|
+ var form = new FormData();
|
|
|
+ form.append("img_file", file.raw);
|
|
|
+ this.$axios({
|
|
|
+ method: "POST",
|
|
|
+ url: "base_photo",
|
|
|
+ data: form,
|
|
|
+ }).then((res) => {
|
|
|
+ this.editUserForm.logo = res.data.src;
|
|
|
});
|
|
|
},
|
|
|
- //转成file
|
|
|
- blobToFile(Blob, fileName) {
|
|
|
- Blob.lastModifiedDate = new Date();
|
|
|
- Blob.name = fileName;
|
|
|
- return Blob;
|
|
|
- },
|
|
|
handleChange(value) {
|
|
|
console.log(value);
|
|
|
console.log(this.cityValue);
|
|
|
@@ -483,50 +402,13 @@ export default {
|
|
|
this.editUserForm.user_area = value[1];
|
|
|
}
|
|
|
},
|
|
|
- login(uid, username) {
|
|
|
- //一键登录
|
|
|
- this.$confirm("一键登录将登录此用户,是否继续?", "提示", {
|
|
|
- confirmButtonText: "确定",
|
|
|
- cancelButtonText: "取消",
|
|
|
- type: "warning",
|
|
|
- })
|
|
|
- .then(() => {
|
|
|
- this.$axios({
|
|
|
- method: "POST",
|
|
|
- url: "/api/api_gateway?method=user.login.auto_login",
|
|
|
- data: this.qs.stringify({
|
|
|
- uid,
|
|
|
- }),
|
|
|
- }).then((res) => {
|
|
|
- if (res.data.message == "") {
|
|
|
- this.$message({
|
|
|
- type: "success",
|
|
|
- message: "操作成功!",
|
|
|
- });
|
|
|
- localStorage.setItem("username", username); //修改当前登录的用户名
|
|
|
- this.reload(); //整体刷新
|
|
|
- this.$EventBus.$on("firstPage", (data) => {
|
|
|
- //默认显示菜单第一项
|
|
|
- this.$router.push(`${data}`);
|
|
|
- });
|
|
|
- } else {
|
|
|
- this.$message({
|
|
|
- type: "warning",
|
|
|
- message: res.data.message,
|
|
|
- });
|
|
|
- }
|
|
|
- });
|
|
|
- })
|
|
|
- .catch(() => {
|
|
|
- this.$message({
|
|
|
- type: "info",
|
|
|
- message: "取消一键登录!",
|
|
|
- });
|
|
|
- });
|
|
|
+ // 分配设备
|
|
|
+ allotEquip(id, name) {
|
|
|
+ window.location.href = "allot?uname=" + name;
|
|
|
},
|
|
|
- //用户禁用
|
|
|
- forbidUse(id, state, txt) {
|
|
|
- this.$confirm(txt, "提示", {
|
|
|
+ // 删除普通用户
|
|
|
+ delUser(id, name) {
|
|
|
+ this.$confirm("删除用户, 是否继续?", "警告", {
|
|
|
confirmButtonText: "确定",
|
|
|
cancelButtonText: "取消",
|
|
|
type: "warning",
|
|
|
@@ -534,25 +416,25 @@ export default {
|
|
|
.then(() => {
|
|
|
this.$axios({
|
|
|
method: "POST",
|
|
|
- url: "/api/api_gateway?method=user.login.users_statu_updata",
|
|
|
+ url: "del_user",
|
|
|
data: this.qs.stringify({
|
|
|
- uid: id,
|
|
|
- state: state,
|
|
|
+ userid: id,
|
|
|
}),
|
|
|
}).then((res) => {
|
|
|
- if (res.data.message == "") {
|
|
|
+ if (res.data == 1) {
|
|
|
+ this.getList();
|
|
|
+ } else {
|
|
|
this.$message({
|
|
|
- type: "success",
|
|
|
- message: "操作成功!",
|
|
|
+ type: "error",
|
|
|
+ message: res.data,
|
|
|
});
|
|
|
- this.getList();
|
|
|
}
|
|
|
});
|
|
|
})
|
|
|
.catch(() => {
|
|
|
this.$message({
|
|
|
type: "info",
|
|
|
- message: "禁用取消!",
|
|
|
+ message: "已取消删除",
|
|
|
});
|
|
|
});
|
|
|
},
|
|
|
@@ -568,7 +450,7 @@ export default {
|
|
|
if (!valid) return;
|
|
|
this.$axios({
|
|
|
method: "POST",
|
|
|
- url: "/api/systemmanage_user_list",
|
|
|
+ url: "systemmanage_user_list",
|
|
|
data: this.qs.stringify({
|
|
|
id: this.resetPassForm.id,
|
|
|
req: "resetpwd",
|
|
|
@@ -598,41 +480,7 @@ export default {
|
|
|
addUser() {
|
|
|
this.addUserDialogVisible = true;
|
|
|
},
|
|
|
- //监听用户类型改变
|
|
|
- userTypeChange(val) {
|
|
|
- if (val == 3) {
|
|
|
- this.editIsShow = true;
|
|
|
- } else {
|
|
|
- this.editIsShow = false;
|
|
|
- }
|
|
|
- },
|
|
|
- //监听省/市/区
|
|
|
- pcdChange(val) {
|
|
|
- let addr_type = "";
|
|
|
- switch (val) {
|
|
|
- case "1":
|
|
|
- addr_type = "province";
|
|
|
- break;
|
|
|
- case "2":
|
|
|
- addr_type = "city";
|
|
|
- break;
|
|
|
- case "3":
|
|
|
- addr_type = "district";
|
|
|
- break;
|
|
|
- }
|
|
|
- this.$axios({
|
|
|
- method: "POST",
|
|
|
- url: "/api/api_gateway?method=device.device_manage.device_addr",
|
|
|
- data: this.qs.stringify({
|
|
|
- addr_type,
|
|
|
- }),
|
|
|
- }).then((res) => {
|
|
|
- if (res.data.message == "") {
|
|
|
- this.areaList = res.data.data;
|
|
|
- this.editUserForm.user_area = "";
|
|
|
- }
|
|
|
- });
|
|
|
- },
|
|
|
+
|
|
|
//添加用户提交
|
|
|
addUserSubm() {
|
|
|
this.$refs.addUserFormRef.validate((valid) => {
|
|
|
@@ -640,7 +488,7 @@ export default {
|
|
|
let cs_user = this.addUserForm.cs_user ? "1" : "";
|
|
|
this.$axios({
|
|
|
method: "POST",
|
|
|
- url: "/api/api_gateway?method=user.login.regiest",
|
|
|
+ url: "api_gateway?method=user.login.regiest",
|
|
|
data: this.qs.stringify({
|
|
|
username: this.addUserForm.username,
|
|
|
mobile: this.addUserForm.mobile,
|
|
|
@@ -672,7 +520,7 @@ export default {
|
|
|
if (!valid) return;
|
|
|
this.$axios({
|
|
|
method: "POST",
|
|
|
- url: "/api/user_detail",
|
|
|
+ url: "user_detail",
|
|
|
data: this.qs.stringify(this.editUserForm),
|
|
|
}).then((res) => {
|
|
|
if (res.data == 1) {
|
|
|
@@ -697,24 +545,6 @@ export default {
|
|
|
this.getList();
|
|
|
},
|
|
|
},
|
|
|
- filters: {
|
|
|
- formatUserType(value) {
|
|
|
- switch (value) {
|
|
|
- case 1:
|
|
|
- return "超级管理员";
|
|
|
- break;
|
|
|
- case 2:
|
|
|
- return "经销商";
|
|
|
- break;
|
|
|
- case 3:
|
|
|
- return "农林政府单位";
|
|
|
- break;
|
|
|
- case 4:
|
|
|
- return "普通用户";
|
|
|
- break;
|
|
|
- }
|
|
|
- },
|
|
|
- },
|
|
|
};
|
|
|
</script>
|
|
|
|
|
|
@@ -764,12 +594,12 @@ export default {
|
|
|
justify-content: space-around;
|
|
|
button {
|
|
|
// flex: 1;
|
|
|
- margin: 0 8px;
|
|
|
+ // margin: 0 8px;
|
|
|
border: 1px solid #17bb89;
|
|
|
color: #17bb89;
|
|
|
- // border-radius: 4px;
|
|
|
- // font-size: 12px;
|
|
|
- // padding: 5px 5px;
|
|
|
+ // // border-radius: 4px;
|
|
|
+ // // font-size: 12px;
|
|
|
+ // // padding: 5px 5px;
|
|
|
background: #fff;
|
|
|
cursor: pointer;
|
|
|
i {
|