<template> <div> <a-row> <a-col :span="24"> <div class="tb-title"> <span>项目组成员 <strong>(注:项目负责人填写到第一行)</strong></span> </div> </a-col> </a-row> <a-row type="flex" class="row_center"> <!-- <a-col :span="1" class="bg-gray"> <div class="special-middle"> <div>序号</div> </div> </a-col> --> <a-col :span="1" class="bg-gray"> <div class="special-middle"> <div class="required">姓名</div> </div> </a-col> <a-col :span="1" class="bg-gray"> <div class="special-middle"> <div class="required">性别</div> </div> </a-col> <a-col :span="1" class="bg-gray"> <div class="special-middle"> <div class="required">出生年月</div> </div> </a-col> <a-col :span="2" class="bg-gray"> <div class="special-middle"> <div class="required">证件类型</div> </div> </a-col> <a-col :span="2" class="bg-gray"> <div class="special-middle"> <div class="required">证件号码</div> </div> </a-col> <a-col :span="2" class="bg-gray"> <div class="special-middle"> <div class="required">民族</div> </div> </a-col> <a-col :span="1" class="bg-gray"> <div class="special-middle"> <div class="required">国别或地区</div> </div> </a-col> <a-col :span="1" class="bg-gray"> <div class="special-middle"> <div class="required">工作单位</div> </div> </a-col> <a-col :span="3" class="bg-gray"> <div class="special-middle"> <div class="required">职称</div> </div> </a-col> <a-col :span="2" class="bg-gray"> <div class="special-middle"> <div class="required">最高学位</div> </div> </a-col> <a-col :span="1" class="bg-gray"> <div class="special-middle"> <div class="required">电子邮箱</div> </div> </a-col> <a-col :span="1" class="bg-gray"> <div class="special-middle"> <div class="required">手机</div> </div> </a-col> <!-- <a-col :span="1" class="bg-gray"> <div class="special-middle"> <div class="required">电话</div> </div> </a-col> <a-col :span="1" class="bg-gray"> <div class="special-middle"> <div class="required">传真</div> </div> </a-col> --> <a-col :span="1" class="bg-gray"> <div class="special-middle"> <div class="required">项目分工</div> </div> </a-col> <a-col :span="1" class="bg-gray"> <div class="special-middle"> <div class="required">每年工作(月)</div> </div> </a-col> <a-col :span="3" class="bg-gray"> <div class="special-middle"> <div class="required">从事专业</div> </div> </a-col> <a-col :span="1" class="bg-gray"> <div class="special-middle"> <div>操作</div> </div> </a-col> </a-row> <a-row v-for="(member, index) in members" :key="index" type="flex" class="row_center table_list"> <!-- <a-col :span="1"> <div class="special-middle"> <div> {{ index + 1 }} </div> </div> </a-col> --> <a-col :span="1"> <div class="special-middle"> <div> <a-form-model-item :prop="'members.' + index + '.name'" :rules="{required: true,message: '*',trigger: 'blur',}"> <a-input v-model="member.name" :maxLength="20" placeholder="姓名" style="width: 100%" /> </a-form-model-item> </div> </div> </a-col> <a-col :span="1"> <div class="special-middle"> <div> <a-form-model-item :prop="'members.' + index + '.sex'" :rules="{required: true,message: '*',trigger: 'change',}"> <base-select v-model="member.sex" :type="16" :isAll="true" style="width: 100%" /> </a-form-model-item> </div> </div> </a-col> <a-col :span="1"> <div class="special-middle"> <div> <a-form-model-item :prop="'members.' + index + '.birthday'" :rules="{required: true,message: '*',trigger: 'change',}"> <a-date-picker format="YYYY-MM-DD" valueFormat="YYYY-MM-DD HH:mm:ss" v-model="member.birthday" style="width: 100%" /> </a-form-model-item> </div> </div> </a-col> <a-col :span="2"> <div class="special-middle"> <div> <a-form-model-item :prop="'members.' + index + '.certificateType'" :rules="{required: true,message: '*',trigger: 'blur',}"> <para-select v-model="member.certificateType" :typeId="49" style="width: 100%" /> </a-form-model-item> </div> </div> </a-col> <a-col :span="2"> <div class="special-middle"> <div> <a-form-model-item :prop="'members.' + index + '.certId'" :rules="{required: true,message: '*',trigger: 'blur',}"> <a-input v-model="member.certId" :maxLength="20" placeholder="证件号" style="width: 100%" /> </a-form-model-item> </div> </div> </a-col> <a-col :span="2"> <div class="special-middle"> <div> <a-form-model-item :prop="'members.' + index + '.nation'" :rules="{required: true,message: '*',trigger: 'change',}"> <para-select v-model="member.nation" :typeId="11" style="width: 100%" /> </a-form-model-item> </div> </div> </a-col> <a-col :span="1"> <div class="special-middle"> <div> <a-form-model-item :prop="'members.' + index + '.country'" :rules="{required: true,message: '*',trigger: 'blur',}"> <a-input v-model="member.country" :maxLength="50" placeholder="国别或地区" style="width: 100%" /> </a-form-model-item> </div> </div> </a-col> <a-col :span="1"> <div class="special-middle"> <div> <a-form-model-item :prop="'members.' + index + '.workUnit'" :rules="{required: true,message: '*',trigger: 'blur',}"> <a-input v-model="member.workUnit" :maxLength="50" placeholder="工作单位" style="width: 100%" /> </a-form-model-item> </div> </div> </a-col> <a-col :span="3"> <div class="special-middle"> <div> <a-form-model-item :prop="'members.' + index + '.title'" :rules="{required: true,message: '*',trigger: 'change',}"> <para-multi-select v-model="member.title" :width="105" :typeId="7" style="width: 100%" /> </a-form-model-item> </div> </div> </a-col> <a-col :span="2"> <div class="special-middle"> <div> <a-form-model-item :prop="'members.' + index + '.degree'" :rules="{required: true,message: '*',trigger: 'change',}"> <para-select v-model="member.degree" :typeId="9" style="width: 100%" /> </a-form-model-item> </div> </div> </a-col> <a-col :span="1"> <div class="special-middle"> <div> <a-form-model-item :prop="'members.' + index + '.email'" :rules="{required: true,message: '*',trigger: 'blur',}"> <a-input v-model="member.email" :maxLength="50" placeholder="电子邮箱" style="width: 100%" /> </a-form-model-item> </div> </div> </a-col> <a-col :span="1"> <div class="special-middle"> <div> <a-form-model-item :prop="'members.' + index + '.mobile'" :rules="{required: true,message: '*',trigger: 'blur',}"> <a-input v-model="member.mobile" :maxLength="20" placeholder="手机" style="width: 100%" /> </a-form-model-item> </div> </div> </a-col> <!-- <a-col :span="1"> <div class="special-middle"> <div> <a-form-model-item :prop="'members.' + index + '.telephone'" :rules="{required: true,message: '*',trigger: 'blur',}"> <a-input v-model="member.telephone" :maxLength="20" placeholder="电话号码" style="width: 80%" /> </a-form-model-item> </div> </div> </a-col> <a-col :span="1"> <div class="special-middle"> <div> <a-form-model-item :prop="'members.' + index + '.fax'" :rules="{required: true,message: '*',trigger: 'blur',}"> <a-input v-model="member.fax" :maxLength="20" placeholder="传真" style="width: 80%" /> </a-form-model-item> </div> </div> </a-col> --> <a-col :span="1"> <div class="special-middle"> <div> <a-form-model-item :prop="'members.' + index + '.projWork'" :rules="{required: true,message: '*',trigger: 'blur',}"> <a-input v-model="member.projWork" :maxLength="20" placeholder="项目分工" style="width: 100%" /> </a-form-model-item> </div> </div> </a-col> <a-col :span="1"> <div class="special-middle"> <div> <a-form-model-item :prop="'members.' + index + '.forMonths'" :rules="{required: true,message: '*',trigger: 'blur',}"> <a-input-number v-model="member.forMonths" :min="0" :step="0.1" style="width: 100%" /> </a-form-model-item> </div> </div> </a-col> <a-col :span="3"> <div class="special-middle"> <div> <a-form-model-item :prop="'members.' + index + '.spec'" :rules="{required: true,message: '*',trigger: 'change',}"> <para-multi-select v-model="member.spec" :width="105" :typeId="42" style="width: 100%" /> </a-form-model-item> </div> </div> </a-col> <a-col :span="1"> <div class="special-middle"> <div> <!-- <a-button icon="arrow-up" type="primary" shape="circle" size="small" :disabled="index == 0" @click="memberUp(index)"></a-button> <a-button icon="arrow-down" type="primary" shape="circle" size="small" style="margin-left:5px;" :disabled="members.length == index + 1" @click="menberDown(index)"></a-button> --> <a-popconfirm title="确定要删除吗?" ok-text="确定" cancel-text="取消" @confirm="removeMembers(member)"> <a-button type="link" size="small">删除</a-button> </a-popconfirm> </div> </div> </a-col> </a-row> <a-row v-if="members && members.length < 10" type="flex"> <a-col :span="24" style="text-align: center;"> <div class="special-middle"> <div> <a-button type="dashed" style="width: 50%" @click="addMembers"> <a-icon type="plus" /> 添加 </a-button> </div> </div> </a-col> </a-row> </div> </template> <script> //用法 <proj-group-member :members.sync="formData.members" /> import paraMultiSelect from '@/views/components/common/paraMultiSelect' import paraSelect from '@/views/components/common/paraSelect' import baseSelect from '@/views/components/common/baseSelect' const Member = { name: null, sex: null, birthday: null, certificateType: null, certId: null, nation: null, country: null, workUnit: null, title: null, degree: null, email: null, mobile: null, telephone: null, fax: null, projWork: null, forMonths: null, spec: null } export default { name: 'ProjGroupMember', data () { return { } }, props: { members: { type: Array, default: () => { return [{ ...Member }] } }, }, components: { paraMultiSelect, paraSelect, baseSelect }, created () { }, methods: { removeMembers (item) {//移除成员 let index = this.members.indexOf(item) if (index !== -1) { this.members.splice(index, 1) } }, memberToTop (item) {//成员置顶 let index = this.members.indexOf(item) if (index !== -1) { this.members.splice(index, 1) this.members.unshift({ ...item }) } }, addMembers () {//添加成员 Member.showIndex = this.members.length + 1 this.members.push({ ...Member }) }, memberUp (index) { let arr = this.members arr.splice(index - 1, 1, ...arr.splice(index, 1, arr[index - 1])) }, menberDown (index) { let arr = this.members arr.splice(index, 1, ...arr.splice(index + 1, 1, arr[index])) } } } </script> <style scoped lang="less"> ::v-deep .table_list { .ant-col { padding: 0px 0px; text-align: left; } .ant-form-item-control { line-height: 4px; } .ant-select { font-size: 12px; } .ant-select .ant-select-selection--single { height: 24px !important; } .ant-select .ant-select-selection__rendered { line-height: 22px !important; margin-right: 6px !important; margin-left: 6px !important; } .ant-select .ant-select-selection__rendered .ant-form-item-control { line-height: 26px !important; } .ant-col .ant-form-item .ant-col { padding: 0px; } .from-table .row_center .ant-col { text-align: left !important; } .special-pum-select .ant-form-item-control-wrapper { display: flex; justify-content: center; align-content: center; } .special-pum-select .ant-form-item-children { display: block; } .special-pum-select .ant-form-item-control { line-height: 26px; } input[type="text"], input[type="password"], input[type="number"], textarea { box-sizing: border-box; margin: 0; padding: 0; width: 100%; height: 24px; padding: 2px 6px; color: rgba(0, 0, 0, 0.65); font-size: 12px; border-radius: 2px; } .ant-input { height: 24px !important; } .ant-input-number-input { height: 24px !important; } } </style>