提交 21c7db60 编写于 作者: VK1688's avatar VK1688

1.4.1

上级 a70562fa
### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。
### 更新内容
#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.4.0`
#### 2、【重要】适配`uni-id 3.3.3`:支持不同端用户隔离 [点击查看文档](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4313231&doc_id=975983)
#### 3、【重要】用户管理全面升级,支持展示不同端用户,支持`批量设置可登录的应用`
#### 4、【重要】新增应用管理
#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983)
##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架
### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。
## 1.4.1(2021-08-04)
### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。
### 更新内容
#### 1、【升级】`vk-unicloud-admin-ui` 包升级至 `1.4.0`
#### 2、【重要】适配`uni-id 3.3.3`:支持不同端用户隔离 [点击查看文档](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4313231&doc_id=975983)
#### 3、【重要】用户管理全面升级,支持展示不同端用户,支持`批量设置可登录的应用`
#### 4、【重要】新增应用管理
#### 框架更新步骤指南 [点击查看](https://gitee.com/vk-uni/vk-uni-cloud-router/wikis/pages?sort_id=4023455&doc_id=975983)
##### 框架学习Q群:`22466457` 欢迎萌新和大佬来使用和共同改进框架
### 如果你觉得框架对你有用,可以在下方进行评论,也可以进行赞赏。
## 1.4.0(2021-08-04)
### vk-unicloud-admin 框架研究Q群:`22466457` 如有问题或建议可以在群内讨论。
### 更新内容
......
{
"id": "vk-unicloud-admin",
"name": "vk-unicloud-admin",
"version": "1.4.0",
"version": "1.4.1",
"displayName": "【开箱即用】vk-unicloud-admin - 快速开发框架 - 几分钟即可完成一个页面CRUD",
"description": "vk-unicloud-admin是基于unicloud+uni-id+element+vk-unicloud-router的一套快速PC admin完整开发框架。丰富的API可以让你开发事半功倍。",
"keywords": [
......
<template>
<vk-data-dialog
v-model="value.show"
:title="page.title"
:top="page.top"
:width="page.width"
:close-on-click-modal="true"
mode="form"
>
<!-- 页面主体内容开始 -->
<vk-data-form
ref="form1"
v-model="form1.data"
:form-type="value.mode"
:rules="form1.props.rules"
:action="form1.props.action"
:columns="form1.props.columns"
:loading.sync="form1.props.loading"
:labelWidth="form1.props.labelWidth"
:before-action="form1.props.beforeAction"
:show-cancel="page.showCancel"
:cancel-text="page.cancelText"
:submit-text="page.submitText"
@success="onFormSuccess"
></vk-data-form>
<!-- 页面主体内容结束 -->
</vk-data-dialog>
</template>
<script>
var that; // 当前页面对象
var vk = uni.vk; // vk实例
export default {
props: {
value: {
Type: Object,
default: function() {
return {
show: false,
mode: "",
item: {}
};
}
}
},
data: function() {
// 组件创建时,进行数据初始化
return {
page: {
title: "标题",
submitText: "确定",
cancelText: "关闭",
showCancel: true,
top: "7vh",
width: "800px"
},
form1: {
// 表单请求数据,此处可以设置默认值
data: {
login_appid_type:1,
mode:1
},
// 表单属性
props: {
// 表单请求地址
action: "admin/system/user/sys/batchUpdateAppLogin",
// 表单字段显示规则
columns: [
{
key:"login_appid_type", title:"登录权限", type:"radio",
optionType:"button",
data:[
{ value:1, label:"部分应用" },
{ value:0, label:"全部应用" }
]
},
{
key:"mode", title:"模式", type:"radio",
optionType:"button",
data:[
{ value:1, label:"覆盖" },
{ value:2, label:"新增" },
{ value:3, label:"移除" }
],
showRule:"login_appid_type=1",
},
{
key:"dcloud_appid", title:"可登录的应用", type:"checkbox",
border:true,
itemWidth:100,
data:[],
props:{ value:"appid", label:"name" },
showRule:"login_appid_type=1&&mode=1"
},
{
key:"dcloud_appid", title:"可登录的应用", type:"radio",
border:true,
itemWidth:100,
data:[],
props:{ value:"appid", label:"name" },
showRule:"login_appid_type=1&&mode!=1"
},
],
// 表单验证规则
rules: {
},
// 左侧label的宽度
labelWidth: "100px",
// 提交前执行
beforeAction:function(formData){
let allow_login_background = false;
if(!formData.login_appid_type){
allow_login_background = true;
}else{
if(typeof formData.dcloud_appid === "object"){
formData.dcloud_appid.map((appid, index) => {
let item = vk.pubfn.getListItem(that.value.item.dcloudAppidData, "appid", appid);
if(item.type === "admin"){
allow_login_background = true;
}
});
}else{
let item = vk.pubfn.getListItem(that.value.item.dcloudAppidData, "appid", formData.dcloud_appid);
if(item.type === "admin"){
allow_login_background = true;
}
}
}
formData.user_ids = that.value.item.user_ids;
formData.allow_login_background = allow_login_background;
return formData;
}
}
}
};
},
mounted() {
that = this;
that.init();
},
methods: {
// 初始化
init() {
let { value } = that;
that.$emit("input", value);
},
// 监听 - 页面打开
onOpen() {
that = this;
let { item={} } = that.value;
// 每次打开时,重新设置表单的值 = value.item 的值,item通过 vk.pubfn.openForm('表单名',{ item:{ _id:"1" } }) 传递值
that.form1.props.columns[2].data = item.dcloudAppidData;
that.form1.props.columns[3].data = item.dcloudAppidData;
},
// 监听 - 页面关闭
onClose() {
//that.$refs.form1.resetForm(); // 关闭时,重置表单
},
// 监听 - 提交成功后
onFormSuccess() {
that.value.show = false; // 关闭页面
that.$emit("success");
}
},
watch: {
"value.show": {
handler(newValue, oldValue) {
let that = this;
if (newValue) {
that.onOpen();
} else {
that.onClose();
}
}
}
},
// 过滤器
filters: {},
// 计算属性
computed: {}
};
</script>
<style lang="scss" scoped></style>
......@@ -30,6 +30,7 @@
<el-dropdown-menu slot="dropdown">
<el-dropdown-item :command="1">账号批量解冻</el-dropdown-item>
<el-dropdown-item :command="2">账号批量冻结</el-dropdown-item>
<el-dropdown-item :command="3">批量设置可登录的应用</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
......@@ -81,6 +82,9 @@
<bindRole v-model="formDatas.bindRole" @success="refresh"></bindRole>
<!-- 重置密码弹窗 -->
<resetPassword v-model="formDatas.resetPassword" @success="refresh"></resetPassword>
<!-- 批量设置用户允许登录的客户端 -->
<setAuthorizedAppLogin v-model="formDatas.setAuthorizedAppLogin" @success="refresh"></setAuthorizedAppLogin>
<!-- 页面内容结束 -->
</view>
</template>
......@@ -94,14 +98,17 @@
{ value:2, label:""},
{ value:0, label:"保密"}
];
var dcloudAppidData = [];
import bindRole from './form/bindRole'
import resetPassword from './form/resetPassword'
import setAuthorizedAppLogin from './form/setAuthorizedAppLogin'
export default {
components:{
bindRole,
resetPassword
resetPassword,
setAuthorizedAppLogin
},
data() {
// 页面数据变量
......@@ -125,7 +132,8 @@
{ key:"appList", title:"可登录的应用", type:"html", width:220,
formatter: function(val, row, column, index) {
if(typeof row.dcloud_appid === "undefined") return "全部应用";
if(val.length === 0) return "未绑定任何应用";
if(row.dcloud_appid.length === 0) return "未绑定任何应用";
if(val.length === 0 && row.dcloud_appid.length > 0) return row.dcloud_appid;
let str = "";
val.map((item, index) => {
str += `、${item.name}`;
......@@ -230,7 +238,7 @@
showRule:"login_appid_type=1",
onChange:function(val, formData, column, index, option=[]){
let allow_login_background = false;
option.map((item, index) => {
option.map((item={}, index) => {
if(item.type === "admin"){
allow_login_background = true;
}
......@@ -309,10 +317,15 @@
url: 'admin/system/app/sys/getList',
data:{},
success:function(data){
dcloudAppidData = data.rows;
let dcloudAppidData1 = vk.pubfn.copyObject(data.rows);
let dcloudAppidData2 = vk.pubfn.copyObject(data.rows);
let index1 = vk.pubfn.getListIndex(that.form1.props.columns, "key", "dcloud_appid");
that.form1.props.columns[index1].data = dcloudAppidData1;
dcloudAppidData2.unshift({
appid:"___error___",
name:"不存在的应用"
});
dcloudAppidData2.unshift({
appid:"___empty-array___",
name:"未绑定应用"
......@@ -323,6 +336,11 @@
});
let index2 = vk.pubfn.getListIndex(that.queryForm1.columns, "key", "dcloud_appid");
that.queryForm1.columns[index2].data = dcloudAppidData2;
let appids = [];
dcloudAppidData.map((item, index) => {
appids.push(item.appid);
});
that.queryForm1.formData.appids = appids;
}
});
},
......@@ -385,6 +403,7 @@
switch(index){
case 1: that.frozen(0); break;
case 2: that.frozen(1); break;
case 3: that.setAuthorizedAppLogin(); break;
default: break;
}
},
......@@ -425,6 +444,20 @@
that.refresh();
}
});
},
// 批量设置允许登录的客户端
setAuthorizedAppLogin(){
let user_ids = [];
that.table1.multipleSelection.map((item,index)=>{
user_ids.push(item._id);
});
that.formDatas.setAuthorizedAppLogin = {
show:true,
item:{
user_ids,
dcloudAppidData
}
};
}
},
// 监听属性
......
'use strict';
module.exports = {
/**
* 批量修改用户可登录的客户端
* @url admin/system/user/sys/batchUpdateAppLogin 前端调用的url参数地址
* data 请求参数
* @param {String} params1 参数1
*/
main: async (event) => {
let { data = {}, userInfo, util, filterResponse, originalParam } = event;
let { uniID, customUtil, config, pubFun, vk, db, _ } = util;
let { uid } = data;
let res = { code: 0, msg: "" };
// 业务逻辑开始-----------------------------------------------------------
// 可写与数据库的交互逻辑等等
let {
user_ids,
allow_login_background = false,
dcloud_appid,
login_appid_type,
mode
} = data;
if(vk.pubfn.isNullOne(user_ids, login_appid_type, mode)){
return { code: -1, msg: "参数错误" };
}
if(mode !== 1 && typeof dcloud_appid !== "string"){
return { code: -1, msg: "新增和移除模式下,dcloud_appid只能是字符串" };
}
let dataJson = {};
dataJson["allow_login_background"] = allow_login_background;
if(login_appid_type === 0){
// 可登录全部应用
dataJson["dcloud_appid"] = _.remove();
} else{
res.successNum = 0;
res.failNum = 0;
for(let i=0; i<user_ids.length; i++){
let user_id = user_ids[i];
let updateRes;
try {
if(mode === 1){
// 可登录部分应用
updateRes = await uniID.setAuthorizedAppLogin({
uid: user_id,
dcloudAppidList: dcloud_appid
});
}else if(mode === 2){
// 可登录部分应用
updateRes = await uniID.authorizeAppLogin({
uid: user_id,
dcloudAppid: dcloud_appid
});
}else if(mode === 3){
// 可登录部分应用
updateRes = await uniID.forbidAppLogin({
uid: user_id,
dcloudAppid: dcloud_appid
});
}
}catch(err){}
if(updateRes.code === 0){
res.successNum ++;
}else{
res.failNum ++;
}
}
}
res.num = await vk.baseDao.update({
dbName:"uni-id-users",
whereJson:{
_id: _.in(user_ids)
},
dataJson
});
// 业务逻辑结束-----------------------------------------------------------
return res;
}
}
......@@ -18,15 +18,17 @@ module.exports = {
let { uid } = data;
let res = { code: 0, msg: '' };
// 业务逻辑开始-----------------------------------------------------------
let { dcloud_appid } = data.formData || {};
let { dcloud_appid, appids } = data.formData || {};
let whereJson = {};
if(dcloud_appid){
if (dcloud_appid === "___empty-array___"){
if (dcloud_appid) {
if (dcloud_appid === "___empty-array___") {
whereJson["dcloud_appid"] = [];
} else if(dcloud_appid === "___non-existent___"){
} else if (dcloud_appid === "___error___") {
whereJson["dcloud_appid"] = _.and(_.exists(true), _.nin(appids));
} else if (dcloud_appid === "___non-existent___") {
whereJson["dcloud_appid"] = _.exists(false);
} else{
whereJson["dcloud_appid"] = _.or(_.eq(dcloud_appid), _.exists(false));
} else {
whereJson["dcloud_appid"] = _.or(_.eq(dcloud_appid), _.exists(false));
}
}
let dbName = "uni-id-users";
......
## 3.3.3(2021-08-04)
- 修复使用数组形式的配置文件报错的Bug
## 3.3.2(2021-08-03)
- 修复上3.3.0版本引出的createInstance接口传入配置不生效的Bug 感谢[hmh](https://gitee.com/hmh)
## 3.3.1(2021-07-30)
......
{
"id": "uni-id",
"displayName": "uni-id",
"version": "3.3.2",
"version": "3.3.3",
"description": "简单、统一、可扩展的用户中心",
"keywords": [
"uniid",
......
{
"name": "uni-id",
"version": "3.3.2",
"version": "3.3.3",
"description": "uni-id for uniCloud",
"main": "index.js",
"homepage": "https://uniapp.dcloud.io/uniCloud/uni-id",
......
......@@ -3,8 +3,9 @@
#### [1、实现逻辑](#一)
#### [2、数据库](#二)
#### [3、应用管理](#三)
#### [4、隔离不同端配置](#四)
#### [5、补齐用户dcloud_appid字段](#五)
#### [4、添加应用(重要)(重要)(重要)](#四)
#### [5、隔离不同端配置](#五)
#### [6、补齐用户dcloud_appid字段](#六)
### 一
### 实现逻辑
......@@ -56,12 +57,20 @@
```
### 四
### 添加应用(重要)
#### 因为每个人的 `DCloud Appid`是不一样的,所以你需要在应用管理中添加自己的应用(或直接修改内置的2条数据的appid即可)
#### `DCloud Appid` 获取方法
#### 复制`uniapp`项目根目录的`manifest.json`文件内的`appid`
![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-cf0c5e69-620c-4f3c-84ab-f4619262939f/e717232f-0f18-4dee-8437-5dec2c224920.png)
### 五
#### 隔离不同端配置(一般无必要,如有必要,可以这么做)
#### 将`uni-id` 的`config.json`配置成数组形式(下方配置并非完全版,请勿直接复制)
##### "dcloudAppid": "__UNI__xxxx1", // 务必替换为对应项目manifest.json内的DCloud Appid
##### "isDefaultConfig": true, // 默认配置标记,未匹配到dcloudAppid的情况下使用默认配置
```json
[{
"dcloudAppid": "__UNI__xxxx1", // 务必替换为对应项目manifest.json内的DCloud Appid
"isDefaultConfig": true, // 默认配置标记,未匹配到dcloudAppid的情况下使用默认配置
"dcloudAppid": "__UNI__xxxx1",
"isDefaultConfig": true,
"passwordSecret": "passwordSecret-demo",
"tokenSecret": "tokenSecret-demo",
"tokenExpiresIn": 7200,
......@@ -76,7 +85,7 @@
}
}
}, {
"dcloudAppid": "__UNI__xxxx2", // 务必替换为对应项目manifest.json内的DCloud Appid
"dcloudAppid": "__UNI__xxxx2",
"passwordSecret": "passwordSecret-demo",
"tokenSecret": "tokenSecret-demo",
"tokenExpiresIn": 7200,
......@@ -94,7 +103,7 @@
```
###
###
### 补齐用户dcloud_appid字段
#### uni-id在3.3.0提供了根据客户端appid(项目manifest.json内配置的DCloud Appid)隔离不同用户的功能
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册