439 lines
14 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="app-container">
<div class="container-custom">
<h2 class="custom-h2">种子使用监管</h2>
<div ref="searchBarRef" class="search-box">
<div class="search-bar">
<div class="search-bar-left">
<el-form ref="searchForm" :inline="true" :model="formInline" class="demo-form-inline" :label-width="'auto'">
<el-form-item label="关键字" prop="name">
<el-input v-model="formInline.name" placeholder="请输入" clearable />
</el-form-item>
<!-- <el-form-item label="分类" prop="seedTypeId">
<el-select v-model="formInline.seedTypeId" placeholder="请选择" clearable @change="seedTypeChange">
<el-option v-for="item in seedTypeList" :key="item.id" :value="item.id" :label="item.dataName" />
</el-select>
</el-form-item> -->
<el-form-item label="">
<el-button type="primary" icon="Search" @click="onSubmit">查询</el-button>
<el-button icon="Refresh" @click="resetForm">重置</el-button>
</el-form-item>
</el-form>
</div>
</div>
</div>
<div class="table-toolbar">
<el-button type="primary" icon="plus" @click="addItem()">新增</el-button>
</div>
<div class="table-cont">
<tableComponent
:table-data="tableData"
:columns="columns"
:show-selection="false"
:loading="tableLoading"
:total="tableTotal"
:current-page="formInline.current"
:page-size="formInline.size"
:show-sort="false"
@page-change="handlePaginationChange"
>
<!-- 自定义-操作 -->
<template #action="slotProps">
<el-button type="primary" @click="seeDetails(slotProps.row)">查看</el-button>
<el-button type="primary" @click="handleEdit(slotProps.row)">编辑</el-button>
<el-button @click="handleDelete(slotProps.row)">删除</el-button>
</template>
</tableComponent>
</div>
</div>
<el-dialog v-model="dialogFormVisible" :title="dialogTitle" width="800" :close-on-click-modal="false">
<el-form :inline="true" :label-width="'auto'">
<el-form-item label="地块编号" prop="seedName">
<el-input v-model="dialogForm.id" placeholder="请输入地块编号" clearable />
</el-form-item>
<el-form-item label="">
<el-button type="primary" icon="Search" @click="getDetails">查询</el-button>
</el-form-item>
</el-form>
<el-descriptions title="地块信息" border>
<el-descriptions-item label="地块">kooriookami</el-descriptions-item>
<el-descriptions-item label="所属行政区">18100000000</el-descriptions-item>
<el-descriptions-item label="所属网格">Suzhou</el-descriptions-item>
</el-descriptions>
<el-descriptions title="经营主体信息" border>
<el-descriptions-item label="姓名">kooriookami</el-descriptions-item>
<el-descriptions-item label="联系方式">18100000000</el-descriptions-item>
</el-descriptions>
<el-form
ref="dialogRef"
:model="dialogForm"
:inline="true"
:label-width="'80'"
:rules="dialogFormRules"
:disabled="formDisabled"
class="dialog-form-container"
>
<div class="dialog-form-title">农药用药详情</div>
<el-form-item label="种子编号" prop="name" class="dialog-form-item">
<el-input v-model="dialogForm.name" clearable placeholder="请输入姓名" />
</el-form-item>
<el-form-item label="种子名称" prop="phone" class="dialog-form-item">
<el-input v-model="dialogForm.phone" clearable placeholder="请输入联系方式" />
</el-form-item>
<el-form-item label="使用量" required prop="useNumber" class="dialog-form-item">
<el-input-number v-model="dialogForm.useNumber" :min="1" :controls="false" placeholder="请输入用药量" style="width: 150px" />
<el-select v-model="dialogForm.useUnit" placeholder="请选择" style="width: 80px">
<el-option v-for="el in unitList" :key="el.unit" :value="el.unit" :label="el.unit" />
</el-select>
</el-form-item>
<el-form-item label="使用时间" prop="detectionTime" class="dialog-form-item">
<el-date-picker v-model="dialogForm.detectionTime" :clearable="false" type="date" value-format="YYYY-MM-DD" placeholder="请选择使用时间" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button v-if="!formDisabled" type="primary" @click="onSaveCategory">保存</el-button>
<el-button v-if="!formDisabled" @click="cancelDialog">取消</el-button>
<el-button v-else @click="cancelDialog">关闭</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup>
import { ref, reactive, computed, onMounted, onBeforeUnmount, nextTick } from 'vue';
import tableComponent from '@/components/tableComponent.vue';
import { ElMessage } from 'element-plus';
import inputSuppliesApi from '@/apis/inputSuppliesApi';
const { getMaterailTypes } = inputSuppliesApi;
import {
getSeedUseRegulatoryRecords,
seedUseRegulatorySave,
editSeedUseRegulatory,
delSeedUseRegulatory,
getRowDetails,
} from '@/apis/inputSuppliesApi/supervisionOfInputs';
import { useApp } from '@/hooks';
const app = useApp();
// 查询条件
const formInline = reactive({
name: '',
seedTypeId: '',
current: 1,
size: 10,
});
const searchForm = ref(null);
const onSubmit = () => {
formInline.current = 1;
loadData();
};
const resetForm = () => {
searchForm.value.resetFields();
};
// 表格数据
const tableData = ref([]);
const selectedIds = ref([]);
const tableLoading = ref(false);
const tableTotal = ref(0);
const columns = ref([
{ prop: 'regionName', label: '所属行政区域' },
{ prop: 'regionCode', label: '行政区域编号' },
{ prop: 'landName', label: '地块名称' },
{ prop: 'landId', label: '地块编号' },
{ prop: 'gridName', label: '所属网格' },
{ prop: 'gridId', label: '网格编号' },
{ prop: 'name', label: '负责人姓名' },
{ prop: 'phone', label: '联系方式' },
{ prop: 'provenanceId', label: '种子编号' },
{ prop: 'provenanceName', label: '种子名称' },
// { prop: 'action', label: '操作', slotName: 'action', width: 230, fixed: 'right' },
]);
const handlePaginationChange = ({ page, pageSize }) => {
formInline.current = page;
formInline.size = pageSize;
loadData();
};
const loadData = async () => {
tableLoading.value = true;
try {
let response = await getSeedUseRegulatoryRecords(formInline);
tableLoading.value = false;
if (response.code == 200) {
tableData.value = response.data.records;
tableTotal.value = response.data.total;
}
} catch (error) {
tableLoading.value = false;
console.error(error);
}
};
const extractThirdLevelChildren = (dataArray) => {
let result = [];
// 遍历第一层数组
for (const level1 of dataArray) {
// 检查第一层是否有children且是数组
if (level1.children && Array.isArray(level1.children)) {
// 遍历第二层数组
for (const level2 of level1.children) {
// 检查第二层是否有children且是数组
if (level2.children && Array.isArray(level2.children)) {
// 将第三层的所有对象添加到结果数组中
result.push(...level2.children);
}
}
}
}
return result;
};
const seedTypeChange = () => {
console.log(formInline.seedTypeId);
// 重新获取表格数据,需添加参数
};
const dialogFormVisible = ref(false);
const dialogRef = ref(null);
const dialogTitle = ref('新增');
const formDisabled = ref(false);
const dialogForm = reactive({
id: '',
seedName: '', //种子种苗名称
varietyName: '', //品种名称
brand: '', //品牌
manufacturer: '', //生产厂家
classifyId: '', //蔬菜种苗id
classifyName: '', //蔬菜种苗名称
productSpecification: '', //产品规格number
productUnit: '', //产品规格单位
productAttributes: '', //自定义商品属性
photoUrl: '', //种子种苗主图
photoUrlDetail: '', //种子种苗详情图
});
const dialogFormRules = ref({
seedName: [{ required: true, message: '请输入种子种苗名称', trigger: 'blur' }],
varietyName: [{ required: true, message: '请输入品种名称', trigger: 'blur' }],
brand: [{ required: true, message: '请输入品牌', trigger: 'blur' }],
manufacturer: [{ required: true, message: '请输入品牌', trigger: 'blur' }],
classifyId: [{ required: true, message: '请选择蔬菜种苗', trigger: ['change', 'blur'] }],
productUnit: [{ required: true, message: '请输入产品规格', trigger: 'blur' }],
});
// 新增操作
const addItem = async () => {
ElMessage.success('点击新增!');
// restDialogForm();
// dialogTitle.value = '新增';
// formDisabled.value = false;
// dialogFormVisible.value = true;
};
// 查看详情
const seeDetails = async (row) => {
console.log('查看详情: ', row);
ElMessage.success('点击查看详情!');
// dialogTitle.value = '详情';
// setDialogForm(row);
// formDisabled.value = true;
// dialogFormVisible.value = true;
};
// 编辑操作
const handleEdit = (row) => {
console.log('要编辑的行: ', row);
ElMessage.success('点击编辑!');
// dialogTitle.value = '编辑';
// setDialogForm(row);
// formDisabled.value = false;
// dialogFormVisible.value = true;
};
const getDetails = async () => {
let response = await getRowDetails({
url: '/inputGoods/supervise/provenance/getDetail/',
id: dialogForm.id,
});
console.log(response);
if (response.code == 200) {
setDialogForm(response.data);
} else {
ElMessage.error(response.message);
}
};
const setDialogForm = (row) => {
dialogForm.id = row.id;
dialogForm.seedName = row.seedName;
dialogForm.varietyName = row.varietyName;
dialogForm.brand = row.brand;
dialogForm.manufacturer = row.manufacturer;
dialogForm.classifyId = row.classifyId;
dialogForm.classifyName = row.classifyName;
dialogForm.productSpecification = row.productSpecification;
dialogForm.productUnit = row.productUnit;
dialogForm.productAttributes = row.productAttributes;
dialogForm.photoUrl = row.photoUrl;
dialogForm.photoUrlDetail = row.photoUrlDetail;
};
// 删除操作
const handleDelete = (row) => {
console.log('删除操作: ', row);
app
.$confirm(`删除后信息将不可查看,确认要删除吗?`, '确定删除', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
deleteGoods(row.id)
.then((res) => {
if (res.code === 200) {
onSubmit();
app.$message.success('删除成功!');
}
})
.catch((err) => {
app.$message.error(err.msg);
});
})
.catch(() => {});
};
const deleteGoods = async (ids) => {
try {
let res = await delSeedUseRegulatory(ids);
return res;
} catch (error) {
return false;
}
};
const onSaveCategory = () => {
console.log(dialogForm);
dialogRef.value.validate(async (valid, fields) => {
if (valid) {
try {
let param = { ...dialogForm };
param.classifyId = dialogForm.classifyId.join(',');
param.classifyName = dialogForm.classifyName.join(',');
console.log(param);
let response;
if (dialogTitle.value == '新增') {
response = await seedUseRegulatorySave(param);
} else {
response = await editSeedUseRegulatory(param);
}
if (response.code == 200) {
cancelDialog();
onSubmit();
if (dialogTitle.value == '新增') {
ElMessage.success('新增成功!');
} else {
ElMessage.success('编辑成功!');
}
} else {
ElMessage.error(response.msg);
}
} catch (error) {
console.error(error);
}
}
});
};
const cancelDialog = async () => {
restDialogForm();
dialogFormVisible.value = false;
};
const restDialogForm = () => {
Object.assign(dialogForm, {
id: '',
seedName: '', //种子种苗名称
varietyName: '', //品种名称
brand: '', //品牌
manufacturer: '', //生产厂家
classifyId: '', //蔬菜种苗id
classifyName: '', //蔬菜种苗名称
productSpecification: '', //产品规格number
productUnit: '', //产品规格单位
productAttributes: '', //自定义商品属性
photoUrl: '', //种子种苗主图
photoUrlDetail: '', //种子种苗详情图
});
};
const seedTypeList = ref([]);
const seedTypeDialogList = ref([]);
const getSeedTypeList = async () => {
try {
let response = await getMaterailTypes({ moduleType: '4' });
console.log(response);
if (response.code == 200) {
if (response.data?.length > 0) {
seedTypeDialogList.value = response.data[0].children;
let result = extractThirdLevelChildren(response.data);
seedTypeList.value = result;
console.log(seedTypeDialogList.value);
}
}
} catch (error) {
console.error(error);
}
};
// 级联选择器配置
const cascaderProps = ref({
label: 'dataName', // 选项标签字段名
value: 'id', // 选项值字段名
children: 'children', // 子选项字段名
emitPath: true,
expandTrigger: 'hover',
});
const handleCascaderChange = () => {
const selectedNames = getSelectedNames(dialogForm.classifyId);
console.log('对应的名称:', selectedNames); // 例如: ['花草类种子', '具体种子名称']
// 如果需要,可以将名称也保存到表单数据中
dialogForm.classifyName = selectedNames;
};
const getSelectedNames = (ids) => {
if (!ids || !ids.length) return [];
let names = [];
let currentLevel = seedTypeDialogList.value;
for (const id of ids) {
const foundItem = currentLevel.find((item) => item.id === id);
if (!foundItem) break;
names.push(foundItem.dataName);
currentLevel = foundItem.children || [];
}
return names;
};
const unitList = ref([
{ id: '1', unit: 'kg' },
{ id: '2', unit: 'g' },
{ id: '3', unit: 'L' },
{ id: '4', unit: 'ml' },
]);
onMounted(() => {
onSubmit();
// getSeedTypeList();
});
</script>
<style lang="scss" scoped>
.dialog-form-item {
:deep(.el-upload--picture-card) {
width: 100px;
height: 100px;
}
:deep(.file-uploader__upload) {
width: 100px;
height: 100px;
}
:deep(.el-upload-list__item) {
width: 100px;
height: 100px;
}
}
</style>