履约验收
This commit is contained in:
@@ -74,13 +74,53 @@
|
||||
</el-col>
|
||||
</template>
|
||||
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item label="验收地点" prop="acceptAddress">
|
||||
<el-input v-model="form.acceptAddress" placeholder="请输入验收地点" :disabled="readonly" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item label="存在问题及改进意见" prop="question">
|
||||
<el-input
|
||||
v-model="form.question"
|
||||
type="textarea"
|
||||
:rows="2"
|
||||
placeholder="请输入存在问题及改进意见"
|
||||
:disabled="readonly"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<!-- 验收小组 -->
|
||||
<el-col :span="12">
|
||||
<el-form-item label="验收小组" prop="acceptTeam">
|
||||
<div class="team-list">
|
||||
<div v-for="(m, idx) in form.acceptTeam" :key="idx" class="team-row">
|
||||
<el-input v-model="m.name" placeholder="姓名" size="small" style="width:120px" :disabled="readonly" />
|
||||
<el-input v-model="m.deptName" placeholder="部门" size="small" style="width:160px" :disabled="readonly" />
|
||||
<el-select
|
||||
v-model="m.roleType"
|
||||
placeholder="身份"
|
||||
size="small"
|
||||
style="width: 130px; margin-right: 8px"
|
||||
:disabled="readonly"
|
||||
@change="(val) => onRoleChange(idx, val as string)"
|
||||
>
|
||||
<el-option label="组长(校内)" value="LEADER_IN" />
|
||||
<el-option label="组长(校外)" value="LEADER_OUT" />
|
||||
<el-option label="组员(校内)" value="MEMBER_IN" />
|
||||
<el-option label="组员(校外)" value="MEMBER_OUT" />
|
||||
</el-select>
|
||||
<template v-if="m.roleType === 'LEADER_IN' || m.roleType === 'MEMBER_IN'">
|
||||
<org-selector
|
||||
v-model:orgList="m.userList"
|
||||
type="user"
|
||||
:multiple="false"
|
||||
@update:orgList="(list: any[]) => onTeamUserChange(idx, list)"
|
||||
/>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-input v-model="m.name" placeholder="姓名" size="small" style="width:120px" :disabled="readonly" />
|
||||
<el-input v-model="m.deptName" placeholder="单位/部门" size="small" style="width:160px" :disabled="readonly" />
|
||||
</template>
|
||||
<el-button v-if="!readonly && form.acceptTeam.length > 3" type="danger" link size="small" @click="removeTeam(idx)">删除</el-button>
|
||||
</div>
|
||||
<el-button v-if="!readonly" type="primary" link size="small" @click="addTeam">+ 增加成员</el-button>
|
||||
@@ -149,11 +189,13 @@ const form = reactive({
|
||||
acceptDate: '',
|
||||
acceptContents: [] as any[],
|
||||
acceptTeam: [
|
||||
{ name: '', deptCode: '', deptName: '' },
|
||||
{ name: '', deptCode: '', deptName: '' },
|
||||
{ name: '', deptCode: '', deptName: '' },
|
||||
{ name: '', deptCode: '', deptName: '', roleType: '' },
|
||||
{ name: '', deptCode: '', deptName: '', roleType: '' },
|
||||
{ name: '', deptCode: '', deptName: '', roleType: '' },
|
||||
] as any[],
|
||||
templateFileIds: [] as string[],
|
||||
acceptAddress: '',
|
||||
question: '',
|
||||
remark: '',
|
||||
...props.modelValue,
|
||||
})
|
||||
@@ -197,7 +239,7 @@ watch(() => form.templateFileIds, (arr) => {
|
||||
}, { immediate: true, deep: true })
|
||||
|
||||
const addTeam = () => {
|
||||
form.acceptTeam.push({ name: '', deptCode: '', deptName: '' })
|
||||
form.acceptTeam.push({ name: '', deptCode: '', deptName: '', roleType: '' })
|
||||
}
|
||||
|
||||
const removeTeam = (idx: number) => {
|
||||
@@ -212,6 +254,7 @@ const onCopyFromBatch = (n: number | null) => {
|
||||
name: m.name || '',
|
||||
deptCode: m.deptCode || '',
|
||||
deptName: m.deptName || '',
|
||||
roleType: m.roleType || '',
|
||||
}))
|
||||
}
|
||||
copyFromBatch.value = null
|
||||
@@ -222,6 +265,37 @@ const rules: FormRules = {
|
||||
acceptDate: [{ required: true, message: '请选择验收日期', trigger: 'change' }],
|
||||
}
|
||||
|
||||
const onRoleChange = (idx: number, val: string) => {
|
||||
const isLeader = val === 'LEADER_IN' || val === 'LEADER_OUT'
|
||||
if (isLeader) {
|
||||
const hasOtherLeader = form.acceptTeam.some((m, i) =>
|
||||
i !== idx && (m.roleType === 'LEADER_IN' || m.roleType === 'LEADER_OUT')
|
||||
)
|
||||
if (hasOtherLeader) {
|
||||
// 只能有一个组长
|
||||
form.acceptTeam[idx].roleType = ''
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const onTeamUserChange = (idx: number, list: any[]) => {
|
||||
const m = form.acceptTeam[idx]
|
||||
if (!m) return
|
||||
if (list && list.length) {
|
||||
const u = list[0]
|
||||
m.name = u.name || u.realName || ''
|
||||
m.deptCode = u.deptCode || u.commonDeptCode || ''
|
||||
m.deptName = u.deptName || u.commonDeptName || ''
|
||||
m.userList = list
|
||||
} else {
|
||||
m.name = ''
|
||||
m.deptCode = ''
|
||||
m.deptName = ''
|
||||
m.userList = []
|
||||
}
|
||||
}
|
||||
|
||||
const validate = () => formRef.value?.validate()
|
||||
|
||||
defineExpose({ validate, form })
|
||||
|
||||
Reference in New Issue
Block a user