|
@@ -13,7 +13,9 @@
|
|
|
prop="info.supplyName"
|
|
prop="info.supplyName"
|
|
|
:rules="[{ required: true, message: '请输入物资名称', trigger: 'blur' }]"
|
|
:rules="[{ required: true, message: '请输入物资名称', trigger: 'blur' }]"
|
|
|
>
|
|
>
|
|
|
- <el-input v-model="formData.info.supplyName" placeholder="请输入物资名称" />
|
|
|
|
|
|
|
+ <el-select v-model="formData.info.supplyName" placeholder="请输入物资名称">
|
|
|
|
|
+ <el-option v-for="item in SuppliesNameList" :key="item" :value="item" />
|
|
|
|
|
+ </el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
<el-form-item
|
|
<el-form-item
|
|
|
label="规格:"
|
|
label="规格:"
|
|
@@ -25,7 +27,10 @@
|
|
|
<el-form-item
|
|
<el-form-item
|
|
|
label="单价(元):"
|
|
label="单价(元):"
|
|
|
prop="info.unitPrice"
|
|
prop="info.unitPrice"
|
|
|
- :rules="[{ required: true, message: '请输入单价', trigger: 'blur' }]"
|
|
|
|
|
|
|
+ :rules="[
|
|
|
|
|
+ { required: true, message: '请输入单价', trigger: 'blur' },
|
|
|
|
|
+ { validator: validateFormNumber, trigger: 'blur' },
|
|
|
|
|
+ ]"
|
|
|
>
|
|
>
|
|
|
<el-input v-model.number="formData.info.unitPrice" placeholder="请输入单价" type="number" min="0" />
|
|
<el-input v-model.number="formData.info.unitPrice" placeholder="请输入单价" type="number" min="0" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
@@ -39,6 +44,8 @@
|
|
|
:key="item.id"
|
|
:key="item.id"
|
|
|
:init-data="item"
|
|
:init-data="item"
|
|
|
:dept-tree="deptTree"
|
|
:dept-tree="deptTree"
|
|
|
|
|
+ :dept-selected="deptSelected"
|
|
|
|
|
+ @update-sub-form="onUpdateSubForm"
|
|
|
@close-sub-form="onCloseSubForm(item.id)"
|
|
@close-sub-form="onCloseSubForm(item.id)"
|
|
|
/>
|
|
/>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
@@ -56,13 +63,18 @@
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
|
- import { ElDrawer, ElForm, ElMessage } from 'element-plus';
|
|
|
|
|
- import { ref, reactive, onMounted, useTemplateRef } from 'vue';
|
|
|
|
|
- import type { AddSupplyRequestForm, SupplyRequestDetailList } from '@/types/emergency-supplier';
|
|
|
|
|
|
|
+ import { ElDrawer, ElForm, ElInput, ElSelect, ElMessage } from 'element-plus';
|
|
|
|
|
+ import { ref, reactive, onMounted, useTemplateRef, computed } from 'vue';
|
|
|
|
|
+ import type { AddSupplyRequestForm, AddSupplyRequestSubForm } from '@/types/emergency-supplier';
|
|
|
|
|
+ import { createSupplyRequestDetail, getSupplyNameList } from '@/api/emergency-supplier';
|
|
|
import AddSuppliesSubForm from './AddSuppliesSubForm.vue';
|
|
import AddSuppliesSubForm from './AddSuppliesSubForm.vue';
|
|
|
|
|
|
|
|
import type { DeptTree } from '@/types/dept/type';
|
|
import type { DeptTree } from '@/types/dept/type';
|
|
|
import { getAllDepartments } from '@/api/auth/dept';
|
|
import { getAllDepartments } from '@/api/auth/dept';
|
|
|
|
|
+ import { useRoute } from 'vue-router';
|
|
|
|
|
+
|
|
|
|
|
+ const route = useRoute();
|
|
|
|
|
+ const planId = Number(route.params.id);
|
|
|
|
|
|
|
|
const formRef = ref<InstanceType<typeof ElForm>>();
|
|
const formRef = ref<InstanceType<typeof ElForm>>();
|
|
|
const subFormRefs = useTemplateRef('subFormRef');
|
|
const subFormRefs = useTemplateRef('subFormRef');
|
|
@@ -71,6 +83,13 @@
|
|
|
|
|
|
|
|
const lastDetailId = ref(0);
|
|
const lastDetailId = ref(0);
|
|
|
|
|
|
|
|
|
|
+ // 获取物资名称
|
|
|
|
|
+ const SuppliesNameList = ref<string[]>();
|
|
|
|
|
+ const getSuppliesNameList = async () => {
|
|
|
|
|
+ const res = await getSupplyNameList(planId);
|
|
|
|
|
+ SuppliesNameList.value = res;
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
// 获取部门树
|
|
// 获取部门树
|
|
|
const deptTree = ref<DeptTree[]>();
|
|
const deptTree = ref<DeptTree[]>();
|
|
|
const getDeptTreeData = async () => {
|
|
const getDeptTreeData = async () => {
|
|
@@ -87,6 +106,10 @@
|
|
|
},
|
|
},
|
|
|
],
|
|
],
|
|
|
});
|
|
});
|
|
|
|
|
+ // 表单中已选择的部门id
|
|
|
|
|
+ const deptSelected = computed(() => {
|
|
|
|
|
+ return formData.detailList.map((item) => item.deptId).filter((item) => item !== undefined);
|
|
|
|
|
+ });
|
|
|
|
|
|
|
|
// 清理表单数据
|
|
// 清理表单数据
|
|
|
const clearFormData = () => {
|
|
const clearFormData = () => {
|
|
@@ -101,7 +124,7 @@
|
|
|
|
|
|
|
|
// 打开需求列表&数据初始化
|
|
// 打开需求列表&数据初始化
|
|
|
const openDrawer = () => {
|
|
const openDrawer = () => {
|
|
|
- // 创建时清理为初始化
|
|
|
|
|
|
|
+ // 创建时清理为初始化 TODO 编辑时通过参数进行初始化
|
|
|
clearFormData();
|
|
clearFormData();
|
|
|
showDrawer.value = true;
|
|
showDrawer.value = true;
|
|
|
};
|
|
};
|
|
@@ -123,6 +146,13 @@
|
|
|
formData.detailList = formData.detailList.filter((item) => item.id !== id);
|
|
formData.detailList = formData.detailList.filter((item) => item.id !== id);
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+ // 更新一项需求详情
|
|
|
|
|
+ const onUpdateSubForm = (data: AddSupplyRequestSubForm) => {
|
|
|
|
|
+ const detail = formData.detailList.find((item) => item.id === data.id);
|
|
|
|
|
+ if (!detail) return;
|
|
|
|
|
+ Object.assign(detail, data);
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
// 表单校验
|
|
// 表单校验
|
|
|
const formValidate = async () => {
|
|
const formValidate = async () => {
|
|
|
if (!formRef.value) return;
|
|
if (!formRef.value) return;
|
|
@@ -133,13 +163,45 @@
|
|
|
return await formRef.value.validate();
|
|
return await formRef.value.validate();
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+ const getFormData = () => {
|
|
|
|
|
+ return {
|
|
|
|
|
+ info: { ...formData.info, planId },
|
|
|
|
|
+ detailList: formData.detailList.map((item) => {
|
|
|
|
|
+ return {
|
|
|
|
|
+ deptId: item.deptId,
|
|
|
|
|
+ deptName: item.deptName,
|
|
|
|
|
+ quantity: item.quantity,
|
|
|
|
|
+ sizeDetail: item.sizeDetail,
|
|
|
|
|
+ };
|
|
|
|
|
+ }),
|
|
|
|
|
+ };
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
// 提交表单
|
|
// 提交表单
|
|
|
const handleSubmit = async () => {
|
|
const handleSubmit = async () => {
|
|
|
const res = await formValidate();
|
|
const res = await formValidate();
|
|
|
if (!res) return;
|
|
if (!res) return;
|
|
|
|
|
+ const data = getFormData();
|
|
|
|
|
+ // console.log(data);
|
|
|
|
|
+ try {
|
|
|
|
|
+ await createSupplyRequestDetail(data);
|
|
|
|
|
+ ElMessage.success('提交成功');
|
|
|
|
|
+ showDrawer.value = false;
|
|
|
|
|
+ } catch (error) {
|
|
|
|
|
+ ElMessage.error('提交失败');
|
|
|
|
|
+ }
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ const validateFormNumber = (rule: any, value: number, callback: any) => {
|
|
|
|
|
+ if (value < 0) {
|
|
|
|
|
+ callback(new Error('输入不能小于0'));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ callback();
|
|
|
|
|
+ }
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
|
|
|
+ getSuppliesNameList();
|
|
|
getDeptTreeData();
|
|
getDeptTreeData();
|
|
|
});
|
|
});
|
|
|
|
|
|