vue-apps/com.actionsoft.apps.coe.pal/components/CooperationUpdate/component.vue
shangxiaoran@qq.com 9d8f9f0e92 初始化应用
2022-06-28 01:29:37 +08:00

594 lines
27 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<validation-observer ref="newTeam">
<awsui-layout id="update">
<awsui-dialog
v-loading="loading"
element-loading-text="加载中"
:title=title
:visible.sync="dialogVisible"
:width="width"
:height=height
:border=false
:close-on-click-modal=false
:before-close="handleClose">
<!--awsui-dialog标签中的内容都可以自行去控制-->
<div>
<el-steps :active="stepActive" align-center>
<el-step title="小组信息"></el-step>
<el-step title="小组管理员"></el-step>
<el-step title="小组权限"></el-step>
</el-steps>
<div style="width: 524px;height: 260px;border: 1px solid #e9e9e9;padding: 10px 10px 10px 15px;">
<div v-if="stepActive == 1" style="position: relative;padding: 12px 0;">
<awsui-form ref="infoForm" :model="baseInfo.form" :rules="baseInfo.rules" label-width="100px" label-position="top">
<div v-if="isloaded">
<awsui-icon-picker class="icon-team-div" :defaultOptions="iconPickerOptions" :value="{icon:baseInfo.form.teamLogo.code, color:baseInfo.form.teamLogo.color}" @change="changeIcon"></awsui-icon-picker>
</div>
<awsui-row>
<awsui-col :span="18">
<awsui-form-item label="名称" required>
<validation-provider rules="required|teamName_formatCheck|maxLength:36"
v-slot="{classes,errors}">
<awsui-input placeholder="请输入名称" v-model="baseInfo.form.teamName"></awsui-input>
<div :class="classes">{{ errors[0] }}</div>
</validation-provider>
</awsui-form-item>
</awsui-col>
</awsui-row>
<awsui-row>
<awsui-col :span="18">
<awsui-form-item label="工作网络" required>
<validation-provider rules="required|teamName_formatCheck|maxLength:36"
v-slot="{classes,errors}">
<awsui-select
filterable
allow-create
default-first-option
placeholder="请选择/输入工作网络"
v-model="baseInfo.form.category"
:options="baseInfo.form.categoryOpts"
@change="changeCategory"
>
</awsui-select>
<div :class="classes">{{ errors[0] }}</div>
</validation-provider>
</awsui-form-item>
</awsui-col>
</awsui-row>
<awsui-row>
<awsui-col :span="24">
<awsui-form-item label="简介">
<validation-provider rules="maxLength:255"
v-slot="{classes,errors}">
<awsui-input v-model="baseInfo.form.teamDesc" type="textarea" placeholder="请输入简介"></awsui-input>
<div :class="classes">{{ errors[0] }}</div>
</validation-provider>
</awsui-form-item>
</awsui-col>
</awsui-row>
</awsui-form>
</div>
<div v-if="stepActive == 2" v-loading="adminUserInfo.loading">
<div style="height: 270px;overflow:auto;">
<el-tree
key="userTree"
ref="userTree"
:props="adminUserInfo.treeProps"
:default-checked-keys="adminUserInfo.value"
:expand-on-click-node=false
:highlight-current=true
empty-text=""
@node-click="openUserNode"
@node-expand="expandUserNode"
@node-collapse="closeUserNode"
@check-change="checkedUserNode"
check-strictly
:show-checkbox=true
node-key="id"
lazy
:load="loadUserNode">
<span slot-scope="{node, data}">
<i class="awsui-iconfont tree-content-icon tree-content-icon-padding" :style="{'color': node.data.icon.color}" v-html="node.data.icon.icon"></i>
<span>{{node.label}}</span>
</span>
</el-tree>
</div>
</div>
<div v-if="stepActive == 3" v-loading="permInfo.loading">
<el-select
style="width: 100%;"
v-model="permInfo.ws.value"
filterable
default-first-option
size="small"
placeholder="请选择资产库"
@change="changeWs">
<el-option
v-for="item in permInfo.ws.options"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<div style="height: 238px;overflow: auto;">
<el-tree v-if="permInfo.ws.value != ''"
key="repositoryTree"
ref="repositoryTree"
:props="permInfo.tree.props"
:default-checked-keys="permInfo.tree.value"
:expand-on-click-node=false
:highlight-current=true
empty-text=""
@node-click="openNode"
@node-expand="expandNode"
@node-collapse="closeNode"
@check-change="checkedNode"
check-strictly
show-checkbox
node-key="versionId"
lazy
:load="loadNode">
<span slot-scope="{node, data}">
<i class="awsui-iconfont tree-content-icon tree-content-icon-padding" :style="{'color': node.data.icon.color}" v-html="node.data.icon.icon"></i>
<span>{{node.data.name}}</span>
</span>
</el-tree>
</div>
</div>
</div>
</div>
<span slot="footer" class="dialog-footer">
<awsui-button v-show="stepActive == 2 || stepActive == 3" class="button-general-color-reverse" @click="function(){stepActive--}">上一步</awsui-button>
<awsui-button v-show="stepActive == 1 || stepActive == 2" class="button-general-color" type="primary" @click="next">下一步</awsui-button>
<awsui-button v-show="stepActive == 3" class="button-general-color" type="primary" @click="submit">确定</awsui-button>
</span>
</awsui-dialog>
</awsui-layout>
</validation-observer>
</template>
<script>
import awsuiAxios from "../../awsuiAxios"
export default {
name: "CooperationUpdate",
props: {
visible: {
type: Boolean,
default: false
},
teamId: {// 小组ID
type: String,
default: ''
},
title: {// 标题
type: String,
default: '新建'
}
},
data() {
return {
dialogVisible: false,
loading: false,
width: '600px',
height: '350px',
addressType: 'user',
baseInfo: {// 基本信息
form: {
teamName: '',
category: '',
categoryOpts: [],
teamDesc: '',
teamLogo: {
color: '',
code: ''
}
},
rules: {
category: [
{ required: true, message: '[工作网络]不允许为空', trigger: 'blur' },
],
teamName: [
{ required: true, message: '[名称]不允许为空', trigger: 'blur' },
]
}
},
adminUserInfo: {// 管理员信息
value: [],
treeProps: {
label: 'name',
isLeaf: 'leaf'
},
loading: false,
},
permInfo: {// 权限信息
loading: false,
ws: {
value: '',
options: []
},
tree: {
props: {
children: 'children',
label: 'label',
isLeaf: 'leaf'
},
value: []
}
},
stepActive: 1,
isloaded: false,
iconPickerOptions: {
type: "background", //必传type为"background"时改变背景颜色图标颜色固定type为"icon"时改变图标颜色,背景颜色固定
fatherWidth: 70, //非必传展示区域宽高type为"background"时代表外层圆形直径type为"icon"时代表外层正方形宽高如不传分别默认80px和30px
iconFontSize: 52, //非必传展示区域iconfont字体大小如不传分别默认30px和16px
colorList: ["#dc4f39", "#ff9421", "#009b52", "#3383da", "#009688", "#6600d5", "#0b0e7b", "#666666", "#e6e8ea"], //必传,颜色可选项数组
iconfontArray: window.iconfontArray, //必传iconfont可选项数组
}
};
},
mounted() {
},
methods: {
changeCategory(val) {// 变更分类
this.baseInfo.form.category = val;
},
initData() {// 初始化查询
const that = this;
// axios查询新建返回分类资产库列表修改返回所有信息
that.loading = true;
const data = {
url:'jd',
data:{
cmd: 'com.actionsoft.apps.coe.pal.cooperation_team_create_or_update_data_query',
teamId: that.teamId
}
};
awsuiAxios.post(data).then(function (ro) {
if (ro.result == 'ok') {
const data = ro.data;
that.baseInfo.form.teamName = data.teamName;
that.baseInfo.form.category = data.category;
that.baseInfo.form.categoryOpts = data.categoryArr;
that.baseInfo.form.teamDesc = data.teamDesc;
that.baseInfo.form.teamLogo = data.teamLogo;
that.isloaded = true;
that.adminUserInfo.value = data.admins;
that.permInfo.ws.value = data.wsId;
that.permInfo.ws.options = data.wsArr;
that.permInfo.tree.value = data.repositorys;
} else {
that.$message.error(ro.msg);
}
that.loading = false;
}).catch(error=>{
console.log(error);
that.loading = false;
})
},
next() {
const that = this;
if (this.stepActive == 1) {
this.$refs.newTeam.validate().then(valid => {
if (!valid) {
return
}
this.stepActive++;
});
} else if (this.stepActive == 2) {
if (that.adminUserInfo.value.length == 0) {
that.$message('未选择任何管理员,保存时默认' + (that.teamId == '' ? '创建' : '修改') + '人为管理员');
}
this.stepActive++;
}
},
clearAllData() {// 清空数据
const that = this;
that.baseInfo.form.teamName = '';
that.baseInfo.form.category = '';
that.baseInfo.form.teamDesc = '';
that.baseInfo.form.teamLogo = {};
that.adminUserInfo.value = [];
that.permInfo.ws.value = '';
that.permInfo.ws.options = [];
that.permInfo.tree.value = [];
that.stepActive = 1;
that.isloaded = false;
},
handleClose(done) {
this.closeDlalog('cancel');
done();
},
cancel() {
this.closeDlalog('cancel');
},
submit() {
const wsId = this.permInfo.ws.value;
if (wsId == '') {
this.$message({message: '请先创建资产库再进行小组创建',type: 'warning'});
return;
}
this.closeDlalog('save');
},
closeDlalog(type) {// 取消/确定之后的关闭
const that = this;
if (type == 'save') {
const teamId = that.teamId;
const teamName = that.baseInfo.form.teamName;
const category = that.baseInfo.form.category;
const teamDesc = that.baseInfo.form.teamDesc;
const teamLogo = that.baseInfo.form.teamLogo;
const admins = that.adminUserInfo.value;
const wsId = that.permInfo.ws.value;
const repositorys = that.permInfo.tree.value;
const data = {
teamId: teamId,
teamName: teamName,
category: category,
teamDesc: teamDesc,
teamLogo: teamLogo,
admins: admins,
wsId: wsId,
repositorys: repositorys
};
// 保存
that.loading = true;
const params = {
url:'jd',
data:{
cmd: 'com.actionsoft.apps.coe.pal.cooperation_team_create_or_update_data_save',
data: JSON.stringify(data)
}
};
awsuiAxios.post(params).then(function (ro) {
that.loading = false;
if (ro.result == 'ok') {
that.$message({
message: '保存成功',
type: 'success'
});
that.$emit('getResult', 'ok');
that.dialogVisible = false;
// 清空所有数据
that.clearAllData();
} else {
that.$message.error(ro.msg);
}
}).catch(error=>{
console.log(error);
that.loading = false;
})
} else {
that.$emit('cancel');
that.dialogVisible = false;
// 清空所有数据
that.clearAllData();
}
},
/**********设置管理员*************/
openUserNode(obj, node, tree) {// 打开一只模型文件
},
loadUserNode(node, resolve) {// `动态`加载
const that = this;
that.adminUserInfo.loading = true;
const data = {
url:'jd',
data:{
cmd: 'com.actionsoft.apps.coe.pal.cooperation_pal_user_tree_subjson',
pid: ''
}
};
if (node.level === 0) {
// 获取根目录
data.data.parentType = '';
} else {
// 获取其他目录
data.data.pid = node.data.id;
data.data.parentType = node.data.type;
}
// 查询数据
awsuiAxios.post(data).then(function (ro) {
// 设置是否可选中
const isDept = that.addressType.indexOf('dept') > -1;
const isUser = that.addressType.indexOf('user') > -1;
const isRole = that.addressType.indexOf('role') > -1;
for (let i = 0; i < ro.data.length; i++) {
const curr = ro.data[i];
if (curr.type == 'company') {
curr.disabled = true;
} else {
if (isDept && curr.type == 'dept') curr.disabled = false;
if (!isDept && curr.type == 'dept') curr.disabled = true;
if (isUser && curr.type == 'user') curr.disabled = false;
if (!isUser && curr.type == 'user') curr.disabled = true;
if (curr.type == 'user') {
curr.leaf = true;
}
}
}
resolve(ro.data);
that.adminUserInfo.loading = false;
if (node.level == 0 && ro.data.length > 0) {
const tree = that.$refs.userTree;
tree.getNode(ro.data[0].id).expand();
setTimeout(function(){
const childNode = tree.getNode(ro.data[0].id).childNodes[0];
if (childNode != null) {
childNode.expand();
}
}, 500);
}
}).catch(error=>{
console.log(error);
})
},
expandUserNode(obj, node, tree) {// 展开节点
},
closeUserNode(obj, node, tree) {// 关闭时清空,下次展开重新请求动态加载
node.childNodes = [];
node.loaded = false;
},
checkedUserNode(data, checked, subChecked) {// 节点选中事件
// 获取所有子节点
const that = this;
const currUserId = data.id;
if (checked) {// 选中
const userIds = that.adminUserInfo.value;
if (userIds.indexOf(currUserId) == -1) {
userIds.push(currUserId);
}
} else {// 取消选中
const userIds = that.adminUserInfo.value;
const tempArr = [];
for (let i = 0; i < userIds.length; i++) {
if (userIds[i] != currUserId) {
tempArr.push(userIds[i]);
}
}
that.adminUserInfo.value = tempArr;
}
},
/************资产库权限设置**************/
changeWs(targetWsId) {// 变更资产库
const that = this;
that.permInfo.ws.value = '';
that.permInfo.tree.value;
that.$nextTick(function () {
that.permInfo.ws.value = targetWsId;
})
},
openNode(obj, node, tree) {// 点击数
},
loadNode(node, resolve) {
const that = this;
that.permInfo.loading = true;
const data = {
url:'jd',
data:{
}
};
data.data.wsId = that.permInfo.ws.value;
data.data.teamId = '';
data.data.cmd = 'com.actionsoft.apps.coe.pal_processlevel_tree_data';
if (node.level === 0) {
// 获取根目录
data.data.pid = '';
} else {
// 获取其他目录
data.data.pid = node.data.id;
}
// 查询数据
awsuiAxios.post(data).then(function (ro) {
// 根节点设置只读
for (let i = 0; i < ro.data.length; i++) {
if (ro.data[i].id.length < 36) {
ro.data[i].disabled = true;
}
}
resolve(ro.data);
that.permInfo.loading = false;
if (node.level == 0 && ro.data.length > 0) {
const tree = that.$refs.repositoryTree;
tree.getNode(ro.data[0].id).expand();
setTimeout(function(){
const childNode = tree.getNode(ro.data[0].id).childNodes[0];
if (childNode != null) {
childNode.expand();
}
}, 500);
}
}).catch(error=>{
console.log(error);
})
},
expandNode(obj, node, tree) {// 展开节点
},
closeNode(obj, node, tree) {// 关闭时清空,下次展开重新请求动态加载
node.childNodes = [];
node.loaded = false;
},
checkedNode(data, checked, subChecked) {// 节点选中事件
// 获取所有子节点
const that = this;
const params = {
url:'jd',
data:{
cmd: 'com.actionsoft.apps.coe.pal_publish_publishgroup_repository_data_query',
wsId: that.permInfo.ws.value,
pid: data.id,
}
};
awsuiAxios.post(params).then(function (ro) {
const childVerIds = ro.data;
const currVerId = data.versionId;
if (checked) {// 选中
const checkedVerIds = that.permInfo.tree.value;
if (checkedVerIds.indexOf(currVerId) == -1) {
checkedVerIds.push(currVerId);
}
for (let i = 0; i < childVerIds.length; i++) {
if (checkedVerIds.indexOf(childVerIds[i]) == -1) {
checkedVerIds.push(childVerIds[i]);
}
}
that.$refs.repositoryTree.setCheckedKeys(checkedVerIds);
} else {// 取消选中
const checkedVerIds = that.permInfo.tree.value;
const tempArr = [];
for (let i = 0; i < checkedVerIds.length; i++) {
if (checkedVerIds[i] != currVerId && childVerIds.indexOf(checkedVerIds[i]) == -1) {
tempArr.push(checkedVerIds[i]);
}
}
that.permInfo.tree.value = tempArr;
that.$refs.repositoryTree.setCheckedKeys([]);
}
}).catch(error=>{
console.log(error);
})
},
changeIcon(icon) {
this.baseInfo.form.teamLogo.code = icon.icon;
this.baseInfo.form.teamLogo.color = icon.color;
}
},
watch: {
visible(val) {
this.dialogVisible = val;
if (val) {// 打开
this.initData();
} else {// 关闭
}
}
}
}
</script>
<style scoped>
#update >>> .el-step__title {
font-size: 12px;
}
#update >>> .awsui-icon-picker-box1 {
border-radius: 15%;
}
.icon-team-div {
height: 70px;
width: 70px;
line-height: 70px;
display: inline-block;
position:absolute;
z-index: 2;
right: 30px;
top: 50px;
}
.icon-team {
color: white;
font-size: 52px;
}
</style>