pc端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

210 lines
5.4 KiB

<template>
<div class="task-form bg-white border-radius-10">
<a-form ref="formRef" :model="assignExperFormData">
<a-form-item>
<label class="color-3">实验名称</label>
<a-input v-model:value="assignExperFormData.name" placeholder="实验名称" />
</a-form-item>
<a-form-item>
<label class="color-3">完成期限</label>
<a-space direction="vertical" :size="12">
<a-range-picker v-model:value="assignExperFormData.date" />
</a-space>
</a-form-item>
<a-form-item>
<label class="color-3">负责人</label>
<a-select
v-model:value="assignExperFormData.memberId"
show-search
optionFilterProp="label"
placeholder="负责人"
:options="options"
:filter-option="filterOption"
@search="handleSearch"
:getPopupContainer="
triggerNode => {
return triggerNode.parentNode || document.body;
}
"
></a-select>
</a-form-item>
<a-form-item>
<label class="color-3">实验目标</label>
<a-textarea v-model:value="assignExperFormData.target" placeholder="实验目标" />
</a-form-item>
<a-form-item class="text-right">
<a-button type="primary" html-type="submit" @click="onSubmit">确定</a-button>
</a-form-item>
</a-form>
</div>
</template>
<script setup>
import { ref, computed, watch } from 'vue';
import { useStore } from 'vuex';
import dayjs from 'dayjs';
import { createExperiment, memberQuery, getExperimentation } from 'apis';
import { message } from 'ant-design-vue';
const store = useStore();
const formRef = ref(null);
const projectId = computed(() => store.getters['projects/projectId']);
const options = ref([]);
const experimentationId = computed(() => store.state.task.experimentationId); // 子课题ID
// 子课题起止时间
// const subStartTime = computed(() => store.state.layout.subStartTime);
// const subEndTime = computed(() => store.state.layout.subEndTime);
// console.log(subStartTime.value, subEndTime.value);
if (experimentationId.value) {
getSubProject(experimentationId.value);
}
watch(experimentationId, async () => {
await getSubProject(experimentationId.value);
});
const assignExperFormData = ref({
projectId: projectId.value,
id: '',
name: '',
memberId: '',
date: [],
startTime: '',
endTime: '',
target: '',
});
getList(); // 获取成员列表
const handleSearch = async value => {
await getList(value); // 获取成员列表
};
const filterOption = (input, option) => {
return option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0;
};
const onSubmit = async () => {
if (assignExperFormData.value.date.length > 0) {
assignExperFormData.value.date.forEach((item, index) => {
if (index === 0) {
assignExperFormData.value.startTime = dayjs(item).format('x');
} else {
assignExperFormData.value.endTime = dayjs(item).format('x');
}
});
// if (subStartTime.value && assignExperFormData.value.startTime < subStartTime.value) {
// message.info('实验开始时间不能小于子课题开始时间');
// return false;
// }
// if (subEndTime.value && assignExperFormData.value.endTime > subEndTime.value) {
// message.info('实验结束时间不能小于子课题结束时间');
// return false;
// }
}
try {
const params = { param: assignExperFormData.value };
await createExperiment(params);
store.commit('layout/setThirdPlanTime', { startTime: assignExperFormData.value.startTime, endTime: assignExperFormData.value.endTime });
await getSubProject(experimentationId.value);
} catch (error) {
message.info(error);
}
};
// 获取成员列表
async function getList(name) {
try {
const params = { param: { projectId: projectId.value, name } };
const data = await memberQuery(params);
store.commit('task/setMembers', data);
options.value = [];
data.forEach(item => {
const obj = {
label: item.memberName,
value: item.memberId,
};
options.value.push(obj);
});
} catch (error) {
message.info(error);
throw new Error(error);
}
}
async function getSubProject(id) {
try {
const params = { param: { id } };
const data = await getExperimentation(params);
store.commit('layout/setRefreshProjects');
if (data) {
data.date = [];
if (data.startTime) {
const start = dayjs(Number(data.startTime));
const end = dayjs(Number(data.endTime));
data.date = [start, end];
}
data.projectId = projectId.value;
assignExperFormData.value = data;
} else {
assignExperFormData.value = {
projectId: projectId.value,
id: '',
name: '',
memberId: '',
date: [],
startTime: '',
endTime: '',
target: '',
};
}
} catch (error) {
message.info(error);
throw new Error(error);
}
}
</script>
<style scoped>
.task-detail {
background-color: #fff;
}
.ant-col {
margin-top: 10px;
}
.ant-col:nth-child(-n + 4) {
margin-top: 2px;
}
.deliverables .ant-input,
.deliverables-son .ant-input {
width: 23px;
height: 14px;
border-radius: 0;
padding: 0;
font-size: 12px;
color: #1890ff;
text-align: center;
margin-left: 5px;
}
.deliverables-son {
margin-top: 10px !important;
}
</style>