Files
dvcp_v2_webapp/packages/party/AppMeetingChinaunion/components/supplement.vue
2022-05-10 20:02:37 +08:00

1156 lines
34 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>
<ai-detail class="addThreeMeeting detail-content details-page no-content-border">
<ai-title slot="title" title="补录三会一课" isShowBack @onBackClick="$parent.goBack()" isShowBottomBorder/>
<template #content>
<ai-card title="基本信息">
<template #content>
<el-form :model="form.basic" label-width="100px" ref="basicForm" :rules="fromRules">
<div class="areaList" style="width:100%">
<el-form-item label="会议分类:" style="width:100%;" prop="meetingClassification">
<el-checkbox-group v-model="form.basic.meetingClassification">
<el-checkbox
:label="op.dictValue"
v-for="(op,j) in dict.getDict('meetingClassification')"
:key="j"
>{{ op.dictName }}
</el-checkbox>
</el-checkbox-group>
</el-form-item>
</div>
<div class="el-form-p">
<el-form-item prop="meetingAgenda" label="会议名称:" ref="fromTitle">
<el-input
v-model="form.basic.meetingAgenda"
size="small"
placeholder="限30字"
clearable
:maxLength="30"
></el-input>
</el-form-item>
<div class="el-form-p" style="margin-top:5px">
<el-form-item
prop="appThreeMeetingOrganizationList"
label="与会组织:"
ref="appThreeMeetingOrganizationList"
>
<div class="organ" @click="showDialogVisible()">
<span v-if="form.basic.appThreeMeetingOrganizationList.length">
<span
v-for="(item,i) in form.basic.appThreeMeetingOrganizationList"
:key="i"
class="organzation">
{{ item.name || item.organizationName }}
<span
class="iconfont iconOverrule"
@click.stop="delate(i)"
></span>
</span>
</span>
<span v-else>请选择</span>
</div>
</el-form-item>
</div>
<el-form-item prop="isOnline" label="举办方式:">
<el-radio label="1" v-model="form.basic.isOnline">线上举办</el-radio>
<el-radio label="0" v-model="form.basic.isOnline">线下举办</el-radio>
</el-form-item>
<el-form-item prop="meetingAddress" label="会议地点:" v-if="form.basic.isOnline==0">
<el-input
v-model="form.basic.meetingAddress"
size="small"
placeholder="限60字"
clearable
:maxLength="60"
></el-input>
</el-form-item>
<el-row type="flex" justify="space-between">
<el-form-item prop="startTime" label="开始时间:" ref="startTime">
<el-date-picker @change="dateChage()"
value-format="yyyy-MM-dd HH:mm:ss"
size="small"
type="datetime"
v-model="form.basic.startTime"
placeholder="请选择..."
></el-date-picker>
</el-form-item>
<el-form-item prop="endTime" label="结束时间:" ref="endTime">
<el-date-picker @change="dateChage()"
value-format="yyyy-MM-dd HH:mm:ss"
size="small"
type="datetime"
v-model="form.basic.endTime"
placeholder="请选择..."
:disabled="!Boolean(form.basic.startTime)"
></el-date-picker>
</el-form-item>
</el-row>
<el-form-item label="会议说明:" prop="meetingDescription" calss="uedtor" style="margin-top: 20px;">
<ai-editor v-model="form.basic.meetingDescription" :instance="instance" :limit="3000"/>
</el-form-item>
</div>
</el-form>
<el-form label-width="100px" ref="fileForm" :rules="fromRules">
<div class="el-form-p">
<el-form-item label="附件:">
<ai-uploader :instance="instance" v-model="fileList" fileType="file" :limit="10"></ai-uploader>
</el-form-item>
</div>
</el-form>
</template>
</ai-card>
<ai-card title="人员设置">
<template #content>
<el-form
:model="form.meetingUser"
label-width="100px"
ref="meetingUserForm"
:rules="fromRules">
<div class="person">
<el-form-item label="与会人员:" prop="participantList" label-width="106px"
style="width:100%;margin-bottom: 10px;"
ref="participantList">
<div class="select-person" v-for="(item,index) in form.meetingUser.participantList"
:key="item+index" style="margin-bottom: 34px;">
<div class="person-pictrue" style="cursor: pointer;" @click="selectHost(index)">
<img :src="item.avatarUrl" v-if="item.avatarUrl">
<div
style="overflow: hidden;width:40px;white-space: nowrap;background-color:#2266FF;border-radius:50%;"
v-else>{{ item.name }}
</div>
<span class="host">主持人</span>
<span class="iconfont del-icon iconOverrule"
@click.stop="deletePerson(index)"></span>
</div>
<span class="person-name">{{ item.name }}</span>
<span style="position: absolute;left: 0;top: 60px;color: #2266FF;" v-if="item.isHost">
<span class="iconfont iconzxjyzdls" style="color: #8899BB;"></span>
<span style="font-size: 12px;">主持人</span>
</span>
</div>
<ai-party-member
:instance="instance"
customCliker
dialogTitle="添加参与人"
v-model="form.meetingUser.participantList"
:area-id="areaId"
:disable="participantDisable"
customOrg
:partyOrgList="form.basic.appThreeMeetingOrganizationList"
@change="handleSelectParty">
<div class="select-person add-person">
<div class="add-icon"><span class="el-icon-plus icon-add"></span></div>
<span class="person-name">选择</span>
</div>
</ai-party-member>
</el-form-item>
<span class="tips">*从党员用户中选择必须设置一名主持人(点击与会人员头像设置或变更主持人)</span>
</div>
<div class="person">
<el-form-item label="纪要负责人:" label-width="106px"
style="width:100%;margin-top: 20px;margin-bottom: 0;"
ref="recorderList">
<ai-person-select :customClicker="true" customRightText :instance="instance"
url="/admin/user/pageForWeb" headerTitle="人员列表" dialogTitle="选择"
@selectPerson="changeRecorderList">
<template v-slot:option="{ item }">
<span class="iconfont iconProlife">{{ item.name }}</span>
<ai-id mode="show" :show-eyes="false" :value="item.idNumber"/>
</template>
</ai-person-select>
</el-form-item>
<span class="tips">*从系统用户中选择拥有签到管理权限</span>
</div>
</el-form>
</template>
</ai-card>
<ai-card title="会议纪要">
<template #content>
<el-form
:model="form.summary"
label-width="100px"
ref="summaryForm"
:rules="summaryRules"
>
<div class="el-form-p">
<el-form-item prop="content" label="纪要内容:">
<el-input
type="textarea"
:rows="6"
placeholder="请输入内容"
v-model="form.summary.content"
></el-input>
</el-form-item>
</div>
<div class="el-form-p">
<el-form-item label="图片附件:">
<el-upload
class="upload-demo upload-list"
ref="upload"
multiple
action
list-type="picture-card"
:file-list="form.summary.images"
:http-request="uploadFilePhoto"
:on-remove="handleRemoveFilePhoto"
:on-change="fileChangePhoto"
accept=".jpeg, .jpg, .png">
<div class="upload-img">
<div class="iconfont iconPhoto"></div>
<div class="upload-text">上传照片</div>
</div>
</el-upload>
<div style="color: #999;font-size: 12px">最多上传50张图片,单个文件最大10MB支持jpgjpegpng格式</div>
</el-form-item>
</div>
</el-form>
</template>
</ai-card>
</template>
<template #footer>
<el-button size="small" @click="toList()">取消</el-button>
<el-button type="primary" size="small" @click="confirm()">保存</el-button>
</template>
<el-dialog width="644px" title="选择党组织" :visible.sync="dialogVisible" class="select-party">
<div>
<el-row type="flex" justify="space-between">
<el-row class="search-panel" type="flex" justify="space-between">
<div class="add-item" style="padding-bottom:3px;overflow-x: hidden">
<p class="add_top">
<span>党组织</span>
<el-input
placeholder="党组织名称"
size="small"
style="width:166px;"
clearable
suffix-icon="el-icon-search"
v-model="filterText"
></el-input>
</p>
<div class="tree_list">
<el-tree
:data="treeData"
show-checkbox
node-key="id"
ref="partyTree"
:filter-node-method="filterNode"
@check-change="handleCheckChange"
@node-click="handleNodeClick"
:highlight-current="true"
:props="defaultProps"
></el-tree>
</div>
</div>
</el-row>
<div class="selected-people add-item">
<p class="add_top">
<span>已选择</span>
<el-button icon="iconfont iconDelete" size="mini" @click="clearSelect()">清空</el-button>
</p>
<div class="add_tag" v-if="selectParty.length" style="width:100%;">
<el-tag
v-for="(item,i) in selectParty"
:disable-transitions="true"
:key="i"
type="info"
>
{{ item.name }}
<span
class="iconfont iconOverrule icon-color89B"
style="float: right;"
@click.stop="cancelSelect(i)"
></span>
</el-tag>
</div>
<div
class="add_tag"
v-else
style="display:flex;align-items:center;justify-content:center;width:100%;"
>
<span>暂无数据</span>
</div>
</div>
</el-row>
</div>
<div slot="footer" style="text-align: center;">
<el-button
style="width:92px"
size="small"
class="delete-btn"
@click="dialogVisible=false"
>取消
</el-button>
<el-button
style="width:92px"
size="small"
type="primary"
@click="dialogVisible=false,confirmSelect()"
>确认
</el-button>
</div>
</el-dialog>
</ai-detail>
</template>
<script>
import {mapState} from "vuex";
import moment from 'dayjs';
export default {
name: "supplement",
props: {
instance: Function,
dict: Object,
permissions: Function
},
computed: {
isEdit() {
return this.detail ? Boolean(this.detail.id) : false;
},
...mapState(["user"]),
participantDisable() {
if (!this.form.meetingUser) return []
const list = [
...this.form.meetingUser.recorderList,
...this.form.meetingUser.hostList
]
return list || []
}
},
data() {
let endTimePass = (rule, value, callback) => {
if (value) {
if (
moment(value).unix() - moment(this.form.basic.startTime).unix() > 0
) {
callback();
} else {
callback(new Error("结束时间要大于开始时间"));
}
} else {
callback(new Error("请填写结束时间"));
}
};
let startTimePass = (rule, value, callback) => {
if (value) {
callback();
} else {
callback(new Error("请填写开始时间"));
}
};
let meetingBeforePass = (rule, value, callback) => {
if (value) {
if (this.form.basic.meetingAfter) {
callback();
} else {
callback(new Error("请填写签到时间"));
}
} else {
callback(new Error("请填写签到时间"));
}
};
return {
dictList: [
"meetingClassification",
"feminderMethod",
"addSignMethod"
],
form: {
basic: {
editable: false,
id: "",
meetingClassification: [], //会议分类
meetingAgenda: "",
meetingAddress: "", //会议地址
meetingDescription: "", //补充说明
meetingBefore: "",
meetingAfter: "",
startTime: "", //开始时间
endTime: "", //结束时间
appThreeMeetingOrganizationList: [], //组织
isOnline: "0"
},
file: {
annex: [], //附件
editable: false
},
meetingUser: {
editable: false,
hostList: [], //主持人
recorderList: [], //记录人
participantList: [] //参与人
},
summary: {
createUserId: "",
editable: false,
content: "",
images: [],
meetingId: ""
}
},
signStart: "",
signEnd: "",
areaId: "",
fromRules: {
meetingClassification: [
{required: true, message: "请选择会议分类", trigger: "change"}
],
meetingAgenda: [{required: true, message: "请输入会议标题", trigger: "change"}],
isOnline: [{required: true, message: "请选择举办方式", trigger: "change"}],
meetingAddress: [
{required: true, message: "请输入会议地点", trigger: "change"}
],
meetingDescription: [
{required: true, message: "请输入补充说明", trigger: "change"}
],
meetingBefore: [
{required: true, validator: meetingBeforePass, trigger: "change"}
],
startTime: [
{required: true, validator: startTimePass, trigger: "change"}
],
endTime: [
{required: true, validator: endTimePass, trigger: "change"}
],
hostList: [
{required: true, message: "请选择主持人", trigger: "change"}
],
recorderList: [
{required: true, message: "请选择记录人", trigger: "change"}
],
participantList: [
{required: true, message: "请选择参与人", trigger: "change"}
],
appThreeMeetingOrganizationList: [
{required: true, message: "请选择党组织", trigger: "change"}
]
},
summaryRules: {
content: [{required: true, message: "请输入正文内容", trigger: "change"}],
},
defaultProps: {
children: "children",
label: "name"
},
treeData: [], //tree
dialogVisible: false, //弹窗
filterText: "", //tree模糊搜索
selectParty: [], //选中的党组织
fileList: [],
}
},
watch: {
filterText(val) {
this.$refs.partyTree.filter(val);
},
form: {
handler(newVal) {
if (newVal.basic.startTime && newVal.basic.meetingBefore) {
let d = new Date(newVal.basic.startTime);
let time = d.getTime();
let min = Number(newVal.basic.meetingBefore) * 60000;
let total = time - min;
this.signStart = this.countTime(total);
}
if (newVal.basic.startTime && newVal.basic.meetingAfter) {
let d = new Date(newVal.basic.startTime);
let time = d.getTime();
let min = Number(newVal.basic.meetingAfter) * 60000;
let total = time + min;
this.signEnd = this.countTime(total);
}
},
deep: true
}
},
methods: {
deletePerson(index) {
if (this.form.meetingUser.participantList[index].isHost) {
this.form.meetingUser.participantList.map(e => {
this.$set(e, "isHost", false);
})
}
this.form.meetingUser.participantList.splice(index, 1);
},
selectHost(index) {
this.form.meetingUser.participantList.map(e => {
e.isHost = false;
})
this.form.meetingUser.participantList[index].isHost = true;
},
toList() {
this.$parent.goBack();
},
//开始时间,结束时间验证
dateChage() {
this.$refs.startTime.$emit("el.form.change");
this.$refs.endTime.$emit("el.form.change");
},
// 上传照片
uploadFilePhoto(file) {
let isPng = file.file.type == "image/jpeg" ||
file.file.type == "image/png" ||
file.file.type == "image/jpg";
if (!isPng) {
this.$message.warning("上传图片信息必须是jpeg/png/jpg格式!");
for (let i = 0; i < this.form.summary.images.length; i++) {
if (this.form.summary.images[i].uid == file.file.uid) {
this.form.summary.images.splice(i, 1);
}
}
return;
}
const isLt10M = file.file.size / 1024 / 1024 < 10;
if (!isLt10M) {
this.$message.warning("图片大小不能超过 10MB!");
for (let i = 0; i < this.form.summary.images.length; i++) {
if (this.form.summary.images[i].uid == file.file.uid) {
this.form.summary.images.splice(i, 1);
}
}
return;
}
if (this.form.summary.images.length > 50) {
this.$message.error("图片信息不能超过50张");
this.form.summary.images.map((item, index) => {
if (item.uid == file.file.uid) {
this.form.summary.images.splice(index, 1);
}
return this.form.summary.images;
});
return;
}
let formData = new FormData();
formData.append("file", file.file);
this.instance.post(`/admin/file/add`, formData).then(res => {
if (res.msg == "success") {
this.$message({message: "图片上传成功", type: "success"});
let imgInfo = res.data[0].split(";");
let img = {
fileId: imgInfo[1],
accessUrl: imgInfo[0]
};
this.form.summary.images.map((item, index) => {
if (item.uid == file.file.uid) {
this.form.summary.images[index].fileId = img.fileId;
this.form.summary.images[index].accessUrl = img.accessUrl;
this.form.summary.images[index].url = img.accessUrl;
}
return this.form.summary.images;
});
}
});
},
handleRemoveFilePhoto(file, fileList) {
this.form.summary.images = fileList;
},
fileChangePhoto(file, fileList) {
this.form.summary.images = fileList;
},
//会议签到时间计算
countTime(total) {
let now = new Date(total);
let y = now.getFullYear();
let m = now.getMonth() + 1;
m = m < 10 ? "0" + m : m;
let da = now.getDate();
da = da < 10 ? "0" + da : da;
let h = now.getHours();
h = h < 10 ? "0" + h : h;
let minute = now.getMinutes();
minute = minute < 10 ? "0" + minute : minute;
let seconds = now.getSeconds();
seconds = seconds < 10 ? "0" + seconds : seconds;
return y + "-" + m + "-" + da + " " + h + ":" + minute + ":" + seconds;
},
//纪要负责人
changeRecorderList(val) {
if (val) {
this.$set(val, "meetingUserRole", "1");
this.$set(val, "userName", val.name);
this.form.meetingUser.recorderList.splice(0, 1, val);
} else {
this.form.meetingUser.recorderList = [];
}
},
//与会人员
handleSelectParty() {
this.form.meetingUser.participantList.map(e => {
e.meetingUserRole = "3";
e.userName = e.name;
this.$set(e, "isHost", false);
})
},
//保存提交表单验证
confirm() {
this.$refs.basicForm.validate(validate => {
let flag = validate;
for (let k in this.form) {
if (this.$refs[k + "Form"])
this.$refs[k + "Form"].validate(v => {
flag = flag && v;
});
}
if (flag) {
this.addUpdate();
}
});
},
//新增
addUpdate() {
let hasHost = false;
this.form.meetingUser.participantList.map(e => {
if (e.isHost) {
hasHost = true;
this.form.meetingUser.hostList.push({
...e,
meetingUserRole: "0"
})
}
})
if (!hasHost) {
return this.$message.error("请选择主持人");
}
//会议分类
this.form.basic.meetingClassification = this.form.basic.meetingClassification.join(",");
//发布状态
let postStatus = 0;
let appThreeMeetingUserList = [];
let meetingList = [];
//选择人员
meetingList = [
...this.form.meetingUser.hostList,
...this.form.meetingUser.recorderList,
...this.form.meetingUser.participantList
];
meetingList.forEach(i => {
appThreeMeetingUserList.push({
meetingUserId: i.id,
meetingUserName: i.userName,
meetingUserRole: i.meetingUserRole,
organizationId: i.partyOrgId,
organizationName: i.partyOrgName
});
});
// this.form.summary.images = JSON.stringify(this.form.summary.images);
let imgs = this.form.summary.images.map(e => {
return {
url: e.url
}
})
this.instance
.post(`/app/appthreemeetinginfo/makeup`, {
...this.form.basic,
...this.form.file,
...this.form.meetingUser,
...this.form.summary,
annex: JSON.stringify(this.fileList),
images: JSON.stringify(imgs),
appThreeMeetingUserList,
postStatus
}).then(res => {
if (res && res.code == 0) {
this.$message.success("会议补录成功");
this.$parent.goBack();
}
});
},
//显示树结构
showDialogVisible() {
this.dialogVisible = true;
this.$nextTick(() => {
this.$refs.partyTree.setCheckedNodes(
this.form.basic.appThreeMeetingOrganizationList
);
});
},
// 查询所有党组织 树形结构
searchSysAll() {
this.instance
.post("/admin/partyOrganization/queryAllChildren", null, {
params: {id: this.user.info.organizationId}
})
.then(res => {
if (res && res.code == 0) {
res.data = res.data.map(a => {
return {...a};
});
this.treeData = res.data.filter(
e => e.id == this.user.info.organizationId
);
this.treeData.map(t => this.addChild(t, res.data));
if (this.filterText) {
this.$nextTick(() => {
this.$refs.partyTree.filter(this.filterText);
});
}
}
});
},
//节点过滤/搜索
filterNode(value, data) {
if (!value) return true;
return data.name.indexOf(value) !== -1;
},
//点击节点
handleNodeClick() {
},
//选中的数据
handleCheckChange() {
this.selectParty = this.$refs.partyTree.getCheckedNodes();
},
//取消选择
cancelSelect(index) {
this.selectParty.splice(index, 1);
this.$refs.partyTree.setCheckedNodes(this.selectParty);
},
//删除选择
delate(index) {
this.form.basic.appThreeMeetingOrganizationList.splice(index, 1);
this.form.meetingUser.hostList = [];
this.form.meetingUser.recorderList = [];
this.form.meetingUser.participantList = [];
},
//清空
clearSelect() {
this.$refs.partyTree.setCheckedKeys([]);
this.selectParty = [];
this.form.meetingUser.hostList = [];
this.form.meetingUser.recorderList = [];
this.form.meetingUser.participantList = [];
},
//确认选择
confirmSelect() {
this.form.basic.appThreeMeetingOrganizationList = this.selectParty;
},
},
mounted() {
this.dict.load(this.dictList);
if (!this.isEdit) {
this.form.basic.editable = true;
this.form.file.editable = true;
this.form.meetingUser.editable = true;
this.form.summary.editable = true;
this.searchSysAll();
} else {
if (this.copy) {
for (let k in this.form) {
this.form[k].editable = true;
}
}
this.getDetailInfo();
}
this.areaId = this.user.info.areaId;
}
};
</script>
<style scoped lang="scss">
.addThreeMeeting {
::v-deep .el-upload-list--picture-card {
.el-upload-list__item-actions {
width: 84px !important;
height: 84px !important;
}
}
.host {
font-size: 12px;
width: 40px;
height: 40px;
display: inline-block;
position: absolute;
left: 6px;
top: 6px;
color: #ffffff;
background-color: transparent;
border-radius: 50%;
opacity: 0;
&:hover {
opacity: 1;
background-color: #AAAAAA;
}
}
::v-deep .el-upload-list__item {
margin-right: 16px;
}
::v-deep .el-date-editor--datetime {
width: 100% !important;
}
::v-deep .el-upload-list__item:nth-of-type(7) {
margin-right: 0;
}
::v-deep .el-upload-list__item,
.el-upload-list__item {
img {
width: 84px !important;
height: 84px !important;
border-radius: 2px !important;
}
}
.upload-list {
// padding-bottom: 100px;
::v-deep .el-upload-list__item {
width: 84px !important;
height: 84px !important;
border-radius: 2px !important;
}
}
.upload-img {
width: 84px;
height: 84px;
background: rgba(245, 245, 245, 1);
border-radius: 2px;
border: 1px solid rgba(208, 212, 220, 1);
.iconPhoto {
margin-top: 20px;
font-size: 32px;
color: #8b9cb6;
}
}
.upload-demo {
// padding: 0 15px;
}
.upload-text {
color: rgba(102, 102, 102, 1);
font-size: 12px;
height: 16px;
line-height: 16px;
}
::v-deep .el-upload--picture-card {
width: 84px !important;
height: 84px !important;
line-height: 30px !important;
background: rgba(245, 245, 245, 1) !important;
border-radius: 2px !important;
border: none !important;
}
.content-left {
width: 160px;
height: 100%;
// float:left;
position: absolute;
left: -224px;
.content-left-nav {
width: 158px;
background-color: #ffffff;
border-radius: 4px;
border: solid 1px #eeeeee;
margin-top: 56px;
overflow: hidden;
li {
height: 48px;
line-height: 48px;
padding-left: 24px;
font-size: 14px;
font-weight: normal;
font-stretch: normal;
letter-spacing: 0;
color: #666666;
cursor: pointer;
border-left: 3px solid transparent;
&:hover {
border-left: 3px solid #5088ff;
}
a {
display: block;
}
}
.navActive {
border-left: 3px solid #5088ff;
color: #5088ff;
}
}
}
.flie {
width: 100%;
height: 40px;
line-height: 40px;
padding: 0 8px;
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 14px;
color: rgba(51, 51, 51, 1);
background: rgba(255, 255, 255, 1);
border-radius: 4px;
border: 1px solid rgba(208, 212, 220, 1);
margin-bottom: 16px;
cursor: pointer;
p {
display: flex;
justify-content: flex-start;
align-items: center;
}
.iconDelete {
color: #8899bb;
margin-left: 4px;
font-size: 16px;
}
}
.flie:hover {
background-color: #f3f6f9;
border: none;
}
.flie:hover .iconDelete {
color: #ff4466;
}
.person {
width: 100%;
.tips {
box-sizing: border-box;
padding: 0 106px;
font-size: 12px;
color: #999999;
line-height: 16px;
}
.select-person {
display: flex;
flex-direction: column;
position: relative;
// width:70px;
margin: 0 15px;
height: 70px;
justify-content: center;
align-items: center;
.person-pictrue {
width: 54px;
height: 54px;
border-radius: 50%;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
color: #fff;
position: relative;
img {
width: 40px;
height: 40px;
border-radius: 50%;
}
.del-icon {
position: absolute;
top: -12px;
right: -4px;
font-size: 20px;
color: #333;
width: 20px;
height: 24px;
border-radius: 50%;
background-color: #fff;
}
}
.person-name {
font-size: 14px;
color: #666;
line-height: normal;
}
}
::v-deep .el-form-item__content {
display: flex;
flex-wrap: wrap;
}
.add-person {
display: flex;
flex-direction: column;
position: relative;
// width:70px;
margin: 0 15px;
height: 70px;
justify-content: center;
align-items: center;
.add-icon {
width: 40px;
height: 40px;
line-height: 40px;
margin: 0 auto 4px;
text-align: center;
font-size: 20px;
color: #2266FF;
border: 1px dashed #2266ff;
border-radius: 50%;
box-sizing: border-box;
.icon-add {
color: #2266FF;
font-size: 20px;
margin-top: 5px;
}
}
}
}
.time-input {
width: 48px;
height: 32px;
margin: 0 8px;
::v-deep .el-input__inner {
line-height: 32px;
height: 32px;
padding: 0 10px;
}
}
.select-party {
::v-deep .el-dialog__header {
padding: 13px 16px;
border-bottom: 1px solid #eee;
}
::v-deep .el-dialog__body {
padding: 24px 40px 48px;
}
::v-deep .el-tree {
background-color: #fcfcfc;
height: calc(100% - 40px);
width: 350px;
}
.add-item {
width: 274px;
height: 360px;
background: rgba(252, 252, 252, 1);
border-radius: 2px;
border: 1px solid rgba(208, 212, 220, 1);
position: relative;
overflow: auto;
box-sizing: border-box;
.add_top {
width: 100%;
height: 40px;
background: rgba(245, 245, 245, 1);
border-bottom: 1px solid rgba(208, 212, 220, 1);
padding: 0 8px;
box-sizing: border-box;
display: flex;
justify-content: space-between;
align-items: center;
}
.tree_list {
width: 100%;
overflow: auto;
height: calc(100% - 40px);
}
.add_buttom {
position: absolute;
left: 0;
bottom: 0;
font-size: 12px;
width: 310px;
height: 32px;
line-height: 32px;
z-index: 10000;
background: rgba(245, 246, 247, 1);
color: rgba(51, 51, 51, 1);
box-shadow: 0 1px 0 0 rgba(216, 220, 227, 1);
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
}
.add_tag {
width: 310px;
height: calc(100% - 40px);
overflow-y: auto;
.el-tag {
margin: 8px 8px 0 8px;
background: rgba(238, 238, 238, 1);
border: none;
color: #666;
max-width: calc(100% - 16px);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
width: 100%;
}
::v-deep .el-tag .el-icon-close {
color: #666;
}
}
}
}
.organ {
width: auto;
height: auto;
padding: 0 10px;
line-height: 32px;
border: 1px solid #d0d4dc;
border-radius: 5px;
cursor: pointer;
box-sizing: border-box;
color: #666;
.organzation {
background-color: #eee;
margin-right: 4px;
padding: 4px;
}
}
.el-checkbox {
width: 20%;
}
}
</style>