Files
dvcp_v2_webapp/packages/3.0.0/AppMeetingChinaunion/components/add.vue

1000 lines
34 KiB
Vue
Raw Normal View History

2021-12-18 18:29:28 +08:00
<template>
<div class="addThreeMeeting">
<ai-detail>
<ai-title slot="title" :title="`${form.id?'编辑':'添加'}三会一课`" isShowBack @onBackClick="$parent.goBack()"
isShowBottomBorder/>
<template #content>
<ai-card>
<template #content>
<el-form :model="form" label-width="100px" ref="basicForm" :rules="fromRules" size="small">
<ai-title title="基本信息" isShowBottomBorder/>
<el-form-item label="会议分类:" prop="meetingClassification">
<el-checkbox-group v-model="form.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>
<el-form-item prop="meetingAgenda" label="会议名称:" ref="fromTitle">
<el-input
v-model="form.meetingAgenda"
placeholder="限30字"
clearable
:maxLength="30"
/>
</el-form-item>
<el-form-item prop="appThreeMeetingOrganizationList" label="与会组织:"
ref="appThreeMeetingOrganizationList">
<div class="organ" @click="showDialogVisible()">
<span v-if="form.appThreeMeetingOrganizationList.length">
<span v-for="(item,i) in form.appThreeMeetingOrganizationList" :key="item.name"
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>
<el-form-item prop="isOnline" label="举办方式">
<!-- <el-radio label="1" v-model="form.isOnline">线上举办</el-radio>-->
<el-radio label="0" v-model="form.isOnline">线下举办</el-radio>
</el-form-item>
<el-form-item prop="meetingAddress" label="会议地点:" v-if="form.isOnline==0">
<el-input
v-model="form.meetingAddress"
placeholder="限60字"
clearable
:maxLength="60"
/>
</el-form-item>
<el-row type="flex" justify="space-between">
<el-form-item prop="startTime" label="开始时间:" ref="startTime">
<el-date-picker @change="dataChange()"
value-format="yyyy-MM-dd HH:mm:ss"
type="datetime"
v-model="form.startTime"
placeholder="请选择..."
/>
</el-form-item>
<el-form-item prop="endTime" label="结束时间:" ref="endTime">
<el-date-picker @change="dataChange()"
value-format="yyyy-MM-dd HH:mm:ss"
type="datetime"
v-model="form.endTime"
placeholder="请选择..."
:disabled="!Boolean(form.startTime)"
></el-date-picker>
</el-form-item>
</el-row>
<el-form-item label="会议说明:" prop="meetingDescription" calss="uedtor" style="margin-top: 16px;">
<ai-editor v-model="form.meetingDescription" :instance="instance"/>
</el-form-item>
<el-form-item label="附件:">
<ai-uploader :instance="instance" v-model="form.fileList" fileType="file"
:limit="9"></ai-uploader>
</el-form-item>
<ai-title title="人员设置" isShowBottomBorder/>
<div class="person">
<el-form-item label="与会人员:" prop="participantList" label-width="106px" ref="participantList">
<div class="select-person" v-for="(item,index) in form.participantList" :key="item.name"
style="margin-bottom: 36px;">
<div class="person-pictrue" style="cursor: pointer;" @click="selectHost(index)">
<img :src="item.avatarUrl" alt="" v-if="item.avatarUrl"
style="position: absolute;left: 0;top:0;">
<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.participantList"
:key="partyKey"
customOrg
v-if="isShowChooseUser"
:disable="hostDisable"
:area-id="areaId"
:partyOrgList="form.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-bottom: 0;"
ref="recorderList">
<ai-person-select :customClicker="true" :chooseUserList="form.recorderList" customRightText
:instance="instance" url="/admin/user/pageForWeb" headerTitle="人员列表"
dialogTitle="选择" @selectPerson="changeRecorderList">
<template v-slot:option="{ item }">
<span class="iconfont iconProlife">{{ item.name }}</span>
<span>{{ item.phone }}</span>
</template>
</ai-person-select>
</el-form-item>
<span class="tips">*从系统用户中选择拥有签到管理权限</span>
</div>
<ai-title title="会议投票设置" isShowBottomBorder/>
<el-form-item label="是否投票:">
<el-radio v-for="op in dict.getDict('yesOrNo')"
:key="op.dictValue" :label="op.dictValue" v-model="form.isVote">
{{ op.dictName }}
</el-radio>
</el-form-item>
<template v-if="form.isVote==1">
<el-form-item label="投票主题:" prop="voteTopic">
<el-input type="textarea" v-model="form.voteTopic" maxlength="80" show-word-limit rows="4"/>
</el-form-item>
<el-form-item label="投票选项:" required>
<el-radio label="1" v-model="voteOps">同意/不同意</el-radio>
</el-form-item>
<el-form-item label="投票形式:" prop="anonymous">
<ai-select v-model="form.anonymous" :selectList="dict.getDict('ThreeMeetingAnonymous')"/>
</el-form-item>
<el-form-item label="截止时间:" prop="voteDeadline">
<el-date-picker v-model="form.voteDeadline" type="datetime" placeholder="请选择"
value-format="yyyy-MM-dd HH:mm:ss"/>
</el-form-item>
</template>
<ai-title title="其他设置" isShowBottomBorder/>
<el-form-item v-if="form.isOnline==0" label="签到方式:" prop="signMethod">
<el-radio-group v-model="form.signMethod">
<el-radio label="1">签到</el-radio>
<el-radio label="0">不签到</el-radio>
</el-radio-group>
</el-form-item>
<div class="person" v-if="form.signMethod=='1'">
<el-form-item label="签到负责人:" label-width="106px" style="width:100%" ref="chargeOfSignInList">
<ai-person-select :customClicker="true" :chooseUserList="form.chargeOfSignInList"
:instance="instance" customRightText url="/admin/user/pageForWeb"
headerTitle="人员列表" dialogTitle="选择" :isMultiple="true"
@selectPerson="changeCharge">
<template v-slot:option="{ item }">
<span class="iconfont iconProlife">{{ item.name }}</span>
<span>{{ item.phone }}</span>
</template>
</ai-person-select>
</el-form-item>
<span class="tips">*从系统用户中选择拥有签到管理权限</span>
</div>
<div class="areaList" v-if="form.signMethod=='1'">
<el-form-item label="签到时间:" style="width:100%;"
:prop="form.signMethod=='1'?'meetingBefore':'meetingBeforeCo'">
会议开始时间前
<el-input v-model="form.meetingBefore" class="time-input"
oninput="value=value.replace(/[^\d]/g,'')"></el-input>
分钟至会议开始时间后
<el-input v-model="form.meetingAfter" class="time-input"
oninput="value=value.replace(/[^\d]/g,'')"></el-input>
分钟可进行签到
<P>
可签到时间为
<span style="color:#5088FF"
v-if="form.meetingBefore&&form.meetingAfter&&form.startTime">({{ signStart }} ~ {{
signEnd
}})</span>
<span style="color:#5088FF" v-else>-</span>
</P>
</el-form-item>
</div>
<el-form-item label="提醒方式:" style="width:100%;" prop="reminderMethod">
<el-checkbox-group v-model="form.reminderMethod">
<el-checkbox label="5" style="width: 100%;"
:disabled="form.reminderMethod.indexOf('0')>-1 || form.reminderMethod.indexOf('1')>-1||form.reminderMethod.indexOf('2')>-1||form.reminderMethod.indexOf('3')>-1 || form.reminderMethod.indexOf('4')>-1">
不提醒
</el-checkbox>
<el-checkbox label="0" style="width: 16%;" :disabled="form.reminderMethod.indexOf('5') > -1">立即通知
</el-checkbox>
<el-checkbox label="1" style="width: 16%;" :disabled="form.reminderMethod.indexOf('5') > -1">提前10分钟
</el-checkbox>
<el-checkbox label="2" style="width: 16%;" :disabled="form.reminderMethod.indexOf('5') > -1">提前30分钟
</el-checkbox>
<el-checkbox label="3" style="width: 16%;" :disabled="form.reminderMethod.indexOf('5') > -1">提前1小时
</el-checkbox>
<el-checkbox label="4" style="width: 16%;" :disabled="form.reminderMethod.indexOf('5') > -1">提前2小时
</el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-form>
</template>
</ai-card>
</template>
<template #footer>
<el-button size="small" @click="confirm()">取消</el-button>
<el-button type="primary" size="small" @click="confirm('1')">立即发布</el-button>
<el-button size="small" @click="confirm('0')">保存</el-button>
</template>
</ai-detail>
<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"
: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="item.name" 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>
</div>
</template>
<script>
import {mapState} from "vuex";
import moment from 'dayjs';
export default {
name: "add",
props: {
instance: Function,
dict: Object,
permissions: Function,
detail: Object,
},
computed: {
...mapState(["user"]),
hostDisable() {
if (!this.form.meetingUser) return []
const list = [
...this.form.chargeOfSignInList,
...this.form.participantList,
...this.form.recorderList
]
return list || []
},
color() {
return ["#FF4466", "#2EA222", "#2266FF", "#FF8822", "#333333"]
},
},
data() {
const endTimePass = (rule, value, callback) => {
if (value) {
if (moment(value).unix() - moment(this.form.startTime).unix() > 0) {
callback()
} else {
callback(new Error('结束时间要大于开始时间'));
}
} else {
callback(new Error('请填写结束时间'));
}
}
const startTimePass = (rule, value, callback) => {
if (value) {
if (moment(value).unix() - moment(new Date()).unix() > 0) {
callback()
} else {
callback(new Error('开始时间要大于当前时间'));
}
} else {
callback(new Error('请填写开始时间'));
}
}
return {
form: {
meetingClassification: [], //会议分类
meetingAgenda: "", //会议名称
meetingAddress: "",//会议地点
meetingDescription: "",//会议说明
hostList: [], //主持人
meetingBefore: "",
meetingAfter: "",
startTime: "",//开始时间
endTime: "",//结束时间
reminderMethod: ["5"],//提醒方式,默认不签到
signMethod: "0",//签到方式 默认不签到
appThreeMeetingOrganizationList: [],//组织
participantList: [],//与会人员
recorderList: [],//纪要负责人
chargeOfSignInList: [],//签到负责人
annex: "",
fileList: [],
isOnline: "0",
isVote: "0"
},
signStart: "",
signEnd: "",
areaId: "",
voteOps: '1',
fromRules: {
meetingClassification: [{required: true, message: "请选择会议分类", trigger: "change"}],
meetingAgenda: [{required: true, message: "请输入会议名称", trigger: "change"}],
meetingAddress: [{required: true, message: "请输入会议地点", trigger: "change"}],
isOnline: [{required: true, message: "请选择举办方式", trigger: "change"}],
voteTopic: [{required: true, message: "请输入投票主题", trigger: "change"}],
anonymous: [{required: true, message: "请选择投票形式", trigger: "change"}],
voteDeadline: [{required: true, message: "请选择截止时间", trigger: "change"}],
meetingDescription: [{required: true, message: "请输入补充说明", trigger: "change"}],
meetingBefore: [{required: true, message: '请填写签到时间', trigger: "change"}],
meetingBeforeCo: [{required: false, message: '请填写签到时间', trigger: "change"}],
startTime: [{required: true, validator: startTimePass, trigger: "change"}],
endTime: [{required: true, validator: endTimePass, trigger: "change"}],
signMethod: [{required: true, message: "请选择签到方式", trigger: "change"}],
reminderMethod: [{required: true, message: "请选择提醒方式", trigger: "change"}],
hostList: [{required: true, message: "请选择主持人", trigger: "change"}],
recorderList: [{required: true, message: "请选择纪要负责人", trigger: "change"}],
chargeOfSignInList: [{required: true, message: "请选择签到负责人", trigger: "change"}],
participantList: [{required: true, message: "请选择与会人员", trigger: "change"}],
appThreeMeetingOrganizationList: [{required: true, message: "请选择党组织", trigger: "change"}]
},
defaultProps: {
children: 'children',
label: 'name'
},
treeData: [],//tree
dialogVisible: false,//弹窗
filterText: "",//tree模糊搜索
selectParty: [],//选中的党组织
partyKey: 1,
isShowChooseUser: true,
search: {
postStatus: "",
meetingUserName: "",
},
};
},
watch: {
filterText(val) {
this.$refs.partyTree.filter(val);
},
selectParty(newVal) {
++this.partyKey
if (!newVal.length) {
this.isShowChooseUser = false
this.$nextTick(() => {
setTimeout(() => {
this.isShowChooseUser = true
}, 1000)
})
}
this.$set(this.form, 'hostList', [])
this.$set(this.form, 'recorderList', [])
this.$set(this.form, 'chargeOfSignInList', [])
this.$set(this.form, 'participantList', [])
},
form: {
handler(newVal) {
if (newVal.startTime && newVal.meetingBefore) {
let d = new Date(newVal.startTime);
let time = d.getTime();
let min = (Number(newVal.meetingBefore)) * 60000
let total = time - min;
this.signStart = this.$moment(total).format('YYYY-MM-DD HH:mm:ss');
}
if (newVal.startTime && newVal.meetingAfter) {
let d = new Date(newVal.startTime);
let time = d.getTime();
let min = (Number(newVal.meetingAfter)) * 60000
let total = time + min;
this.signEnd = this.$moment(total).format('YYYY-MM-DD HH:mm:ss');
}
},
deep: true
}
},
methods: {
deletePerson(index) {
if (this.form.participantList[index].isHost) {
this.form.participantList.map(e => {
this.$set(e, "isHost", false);
})
}
this.form.participantList.splice(index, 1);
},
//选择主持人
selectHost(index) {
this.form.participantList.map(e => {
e.isHost = false;
})
this.form.participantList[index].isHost = true;
},
//开始时间,结束时间验证
dataChange() {
this.$refs.startTime.$emit('el.form.change');
this.$refs.endTime.$emit('el.form.change');
if (!this.form.startTime) {
this.form.endTime = null
}
},
//与会人员
handleSelectParty() {
this.form.participantList.map(e => {
e.meetingUserRole = "3";
e.userName = e.name;
this.$set(e, "isHost", false);
})
},
//纪要负责人
changeRecorderList(val) {
if (val) {
this.$set(val, "meetingUserRole", "1");
this.$set(val, "userName", val.name);
this.form.recorderList.splice(0, 1, val);
} else {
this.form.recorderList = [];
}
},
//签到负责人
changeCharge(val) {
val.map((e) => {
this.$set(e, "meetingUserRole", "2");
this.$set(e, "userName", e.name);
})
this.form.chargeOfSignInList = val;
},
//参与人
changeParticipantList(val) {
this.$set(val, "meetingUserRole", "3");
this.$set(val, "userName", val.name);
this.form.participantList.push(val);
},
//保存提交表单验证
confirm(status) {
if (status == '1') {
this.$refs.basicForm.validate(validate => {
if (validate) {
this.addUpdate(status);
}
});
} else if (status == '0') {
if (this.form.meetingAgenda == "") {
return this.$message.error("请填写会议名称");
} else if (!this.form.appThreeMeetingOrganizationList.length) {
return this.$message.error("请选择与会组织");
} else {
this.addUpdate(status);
}
} else { //取消返回主页
this.$confirm('是否放弃编辑内容').then(() => {
this.$parent.goBack();
});
}
},
//新增
addUpdate(status) {
let hasHost = false;
this.form.participantList.map(e => {
if (e.isHost) {
hasHost = true;
this.form.hostList.push({
...e,
meetingUserRole: "0"
})
}
})
if (!hasHost && status == '1') {
return this.$message.error("请选择主持人");
}
if (this.form.signMethod == '0') {
this.form.chargeOfSignInList = [];
this.form.meetingBefore = "";
this.form.meetingAfter = "";
}
//会议分类
this.form.meetingClassification = this.form.meetingClassification.join(",");
//提醒方式
this.form.reminderMethod = this.form.reminderMethod.join(",");
//发布状态
let postStatus = status;
let appThreeMeetingUserList = [];
let meetingList = [];
//选择人员
meetingList = [...this.form.hostList, ...this.form.recorderList, ...this.form.chargeOfSignInList, ...this.form.participantList]
meetingList.forEach(i => {
appThreeMeetingUserList.push({
"meetingUserId": i.id,
"meetingUserName": i.name,
"meetingUserRole": i.meetingUserRole,
"avatarUrl": i.avatarUrl ? i.avatarUrl : ""
})
})
//附件
this.form.annex = JSON.stringify(this.form.fileList);
if (this.form.meetingBefore === '' && this.form.signMethod != 0) {
this.form.meetingBefore = 60
}
if (this.form.meetingAfter === '' && this.form.signMethod != 0) {
this.form.meetingAfter = 60
}
this.instance.post(`/app/appthreemeetinginfo/addOrUpdate`, {
...this.form,
...this.form.file,
...this.form.meetingUser,
appThreeMeetingUserList,
postStatus,
id: this.detail.id
}).then(res => {
if (res && res.code == 0) {
this.$message.success(status == '1' ? "会议新增成功" : "保存成功");
this.$parent.goBack();
}
})
},
//获取会议详请
getDetailInfo() {
this.instance.post(`/app/appthreemeetinginfo/queryDetailById?id=${this.detail.id}`).then(res => {
if (res && res.data) {
this.form = res.data
this.form.meetingClassification = res.data.meetingClassification.split(",");
this.form.meetingAgenda = res.data.meetingAgenda;
this.form.meetingAddress = res.data.meetingAddress;
this.form.startTime = res.data.startTime;
this.form.endTime = res.data.endTime;
this.form.appThreeMeetingOrganizationList = res.data.appThreeMeetingOrganizationList;
this.form.meetingDescription = res.data.meetingDescription;
this.form.fileList = JSON.parse(res.data.annex || '[]');
this.form.participantList = res.data.participantList.map(e => {
return {
...e,
name: e.meetingUserName,
isHost: res.data.hostList.length ? (e.id == res.data.hostList[0].id) : false
}
});
this.form.recorderList = res.data.recorderList.map(e => {
return {...e, name: e.meetingUserName}
});
this.form.chargeOfSignInList = res.data.chargeOfSignInList.map(e => {
return {...e, name: e.meetingUserName}
});
this.form.signMethod = res.data.signMethod;
this.form.reminderMethod = res.data.reminderMethod.split(",");
this.form.meetingBefore = res.data.meetingBefore;
this.form.meetingAfter = res.data.meetingAfter;
}
});
},
//显示树结构
showDialogVisible() {
this.dialogVisible = true;
this.$nextTick(() => {
this.$refs.partyTree.setCheckedNodes(
this.form.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;
},
//选中的数据
handleCheckChange() {
this.selectParty = this.$refs.partyTree.getCheckedNodes()
},
//取消选择
cancelSelect(index) {
this.selectParty.splice(index, 1)
this.$refs.partyTree.setCheckedNodes(this.selectParty);
},
//删除选择
delate(index) {
let parentId = this.form.appThreeMeetingOrganizationList[index].parentId
this.form.appThreeMeetingOrganizationList.splice(index, 1);
this.form.appThreeMeetingOrganizationList.map((item, i) => {
if (item.id == parentId) {
this.delate(i)
}
})
this.form.hostList = []
this.form.recorderList = []
this.form.chargeOfSignInList = []
this.form.participantList = []
},
//清空
clearSelect() {
this.$refs.partyTree.setCheckedKeys([]);
this.selectParty = [];
this.form.hostList = []
this.form.recorderList = []
this.form.chargeOfSignInList = []
this.form.participantList = []
},
//确认选择
confirmSelect() {
this.form.appThreeMeetingOrganizationList = this.selectParty;
},
},
created() {
this.areaId = this.user.info.areaId;
this.dict.load('yesOrNo', 'ThreeMeetingAnonymous', "meetingClassification", "feminderMethod", "addSignMethod", "postStatus").then(() => {
this.searchSysAll();
if (this.detail && this.detail.id) {
this.getDetailInfo();
}
});
},
filters: {
formatTime(time) {
return moment(time).format("YYYY-MM-DD HH:mm");
}
}
};
</script>
<style scoped lang="scss">
.addThreeMeeting {
height: 100%;
::v-deep .el-form {
.ailist-title {
padding-left: 0;
margin-bottom: 8px;
}
.el-form-item {
.el-date-editor {
width: 100%;
}
}
}
::v-deep .el-dialog__body {
padding-top: 16px !important;
}
.host {
font-size: 12px;
width: 40px;
height: 40px;
display: inline-block;
position: absolute;
left: 0;
top: 0;
color: #ffffff;
background-color: transparent;
border-radius: 50%;
opacity: 0;
&:hover {
opacity: 1;
background-color: #AAAAAA;
}
}
::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;
}
.tips {
box-sizing: border-box;
padding: 0 106px;
font-size: 12px;
color: #999999;
line-height: 16px;
}
.person {
width: 100%;
margin-top: 16px;
.emcee {
position: absolute;
left: 0;
top: 0;
color: #2266FF;
padding: 0 106px;
font-size: 12px;
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: 16px;
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;
}
}
}
}
::v-deep p.add_top {
margin: 0;
}
.time-input {
width: 48px;
height: 32px;
margin: 0 8px;
::v-deep .el-input__inner {
line-height: 32px;
height: 32px;
padding: 0 10px;
}
}
::v-deep .select-party {
.el-dialog__header {
padding: 13px 16px;
border-bottom: 1px solid #eee;
}
.el-dialog__body {
padding: 24px 40px 48px;
}
.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;
margin: 0;
.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;
}
}
}
</style>