430 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> -->
<el-tabs v-model="formInline.status" class="demo-tabs" @tab-click="handleChangeStatus">
<el-tab-pane label="已通过" :name="1" :value="1"></el-tab-pane>
<el-tab-pane label="已驳回" :name="2" :value="2"></el-tab-pane>
<el-tab-pane label="待审核" :name="3" :value="3"></el-tab-pane>
</el-tabs>
</div>
<div class="table-cont" style="padding-top: 0">
<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
ref="dialogRef"
:model="dialogForm"
:inline="true"
:label-width="'120'"
:rules="dialogFormRules"
:disabled="formDisabled"
class="dialog-form-container"
>
<el-form-item label="种子种苗名称" prop="seedName" class="dialog-form-item">
<el-input v-model="dialogForm.seedName" clearable placeholder="请输入种子种苗名称" />
</el-form-item>
<el-form-item label="品种名称" prop="varietyName" class="dialog-form-item">
<el-input v-model="dialogForm.varietyName" clearable placeholder="请输入品种名称" />
</el-form-item>
<el-form-item label="品牌" prop="brand" class="dialog-form-item">
<el-input v-model="dialogForm.brand" clearable placeholder="请输入品牌" />
</el-form-item>
<el-form-item label="生产厂家" prop="manufacturer" class="dialog-form-item">
<el-input v-model="dialogForm.manufacturer" clearable placeholder="请输入生产厂家" />
</el-form-item>
<el-form-item label="蔬菜种苗" prop="classifyId" class="dialog-form-item">
<el-cascader
v-model="dialogForm.classifyId"
:options="seedTypeDialogList"
:props="cascaderProps"
placeholder="请选择"
@change="handleCascaderChange"
/>
</el-form-item>
<el-form-item label="产品规格" prop="productUnit" class="dialog-form-item">
<el-input v-model="dialogForm.productUnit" clearable placeholder="请输入产品规格" />
</el-form-item>
<div style="display: flex">
<div style="width: 50%; display: inline-block">
<el-form-item label="种子种苗主图" prop="photoUrl" class="dialog-form-item" style="width: 100%">
<FileUploader v-model="dialogForm.photoUrl" :limit="1" />
</el-form-item>
</div>
<div style="width: 50%; display: inline-block">
<el-form-item label="种子种苗详情图" prop="photoUrlDetail" class="dialog-form-item" style="width: 100%">
<FileUploader v-model="dialogForm.photoUrlDetail" :limit="1" />
</el-form-item>
</div>
</div>
</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 { getPesticideSubsidyRecords, pesticideSubsidySave, editPesticideSubsidy, delPesticideSubsidy } from '@/apis/inputSuppliesApi/subsidyManage';
import { useApp } from '@/hooks';
const app = useApp();
// 查询条件
const formInline = reactive({
name: '',
status: 1,
current: 1,
size: 10,
});
const searchForm = ref(null);
const onSubmit = () => {
formInline.current = 1;
loadData();
};
const resetForm = () => {
searchForm.value.resetFields();
};
const handleChangeStatus = () => {
formInline.current = 1;
loadData();
};
// 表格数据
const tableData = ref([]);
const selectedIds = ref([]);
const tableLoading = ref(false);
const tableTotal = ref(0);
const columns = ref([
{ prop: 'name', label: '申请人姓名' },
{ prop: 'idCard', label: '身份证号' },
{ prop: 'gridName', label: '所属网格' },
{ prop: 'phone', label: '联系方式' },
{ prop: 'bankAccount', label: '银行账户信息' },
{ prop: 'applicantType', label: '申请人身份' },
{ prop: 'landNumber', label: '地块编号' },
{ prop: 'planLocation', label: '种植地点' },
{ prop: 'cropType', label: '种植作物种类' },
{ prop: 'planArea', label: '种植面积(亩)' },
{ prop: 'applyTime', label: '申请时间' },
{ prop: 'subsidyStandards', label: '补贴标准(元/亩)' },
{ prop: 'subsidyAmount', 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 getPesticideSubsidyRecords(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) => {
ElMessage.success('点击查看详情!');
// dialogTitle.value = '详情';
// setDialogForm(row);
// formDisabled.value = true;
// dialogFormVisible.value = true;
};
const handleEdit = (row) => {
ElMessage.success('点击编辑!');
console.log('要编辑的行: ', row);
// dialogTitle.value = '编辑';
// setDialogForm(row);
// formDisabled.value = false;
// dialogFormVisible.value = true;
};
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) => {
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 delPesticideSubsidy(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 pesticideSubsidySave(param);
} else {
response = await editPesticideSubsidy(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;
};
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>