1
This commit is contained in:
@ -13,11 +13,11 @@
|
||||
<!-- <el-form-item label="所属村委会" prop="villageCommittee">
|
||||
<el-input v-model="queryParams.villageCommittee" placeholder="请输入所属村委会" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="设计面积" prop="designArea">
|
||||
<el-input v-model="queryParams.designArea" placeholder="请输入设计面积" clearable @keyup.enter="handleQuery" />
|
||||
<el-form-item label="设计面积(亩)" prop="designArea">
|
||||
<el-input v-model="queryParams.designArea" type="number" placeholder="请输入设计面积" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="地块数" prop="blockCount">
|
||||
<el-input v-model="queryParams.blockCount" placeholder="请输入地块数" clearable @keyup.enter="handleQuery" />
|
||||
<el-form-item label="地块数(块)" prop="blockCount">
|
||||
<el-input v-model="queryParams.blockCount" type="number" placeholder="请输入地块数" clearable @keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="农户数(户)" prop="farmerCount">
|
||||
<el-input v-model="queryParams.farmerCount" type="number" placeholder="请输入农户数" clearable @keyup.enter="handleQuery" />
|
||||
@ -53,14 +53,14 @@
|
||||
</el-row>
|
||||
</template>
|
||||
<el-table draggable v-loading="loading" :data="landBlockList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column type="index" label="序号" width="55" align="center" />
|
||||
<el-table-column label="地块编号" align="center" prop="landCode" />
|
||||
<el-table-column label="地块名称" align="center" prop="landName" />
|
||||
<el-table-column label="方阵" align="center" prop="unit" />
|
||||
<el-table-column label="所属村委会" align="center" prop="villageCommittee" />
|
||||
<el-table-column label="设计面积" align="center" prop="designArea" />
|
||||
<el-table-column label="地块数" align="center" prop="blockCount" />
|
||||
<el-table-column label="农户数" align="center" prop="farmerCount" />
|
||||
<el-table-column label="设计面积(亩)" align="center" prop="designArea" />
|
||||
<el-table-column label="地块数(块)" align="center" prop="blockCount" />
|
||||
<el-table-column label="农户数(户)" align="center" prop="farmerCount" />
|
||||
<el-table-column label="备注" align="center" prop="remark" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template #default="scope">
|
||||
@ -82,23 +82,20 @@
|
||||
<!-- 地块表单弹窗 -->
|
||||
<el-dialog draggable :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||
<el-form ref="landBlockFormRef" :model="form" :rules="rules" label-width="100px">
|
||||
<el-form-item label="地块编号" prop="landCode">
|
||||
<el-input v-model="form.landCode" placeholder="请输入地块编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="地块名称" prop="landName">
|
||||
<el-input v-model="form.landName" placeholder="请输入地块名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="所属村委会" prop="villageCommittee">
|
||||
<el-input v-model="form.villageCommittee" placeholder="请输入所属村委会" />
|
||||
</el-form-item>
|
||||
<el-form-item label="设计面积" prop="designArea">
|
||||
<el-input v-model="form.designArea" placeholder="请输入设计面积" />
|
||||
<el-form-item label="设计面积(亩)" prop="designArea">
|
||||
<el-input type="number" v-model="form.designArea" placeholder="请输入设计面积" />
|
||||
</el-form-item>
|
||||
<el-form-item label="地块数" prop="blockCount">
|
||||
<el-input v-model="form.blockCount" placeholder="请输入地块数" />
|
||||
<el-form-item label="地块数(块)" prop="blockCount">
|
||||
<el-input type="number" v-model="form.blockCount" placeholder="请输入地块数" />
|
||||
</el-form-item>
|
||||
<el-form-item label="农户数" prop="farmerCount">
|
||||
<el-input v-model="form.farmerCount" placeholder="请输入农户数" />
|
||||
<el-form-item label="农户数(户)" prop="farmerCount">
|
||||
<el-input type="number" v-model="form.farmerCount" placeholder="请输入农户数" />
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
|
||||
@ -106,7 +103,7 @@
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm" v-hasPermi="['land:landBlock:add']">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
@ -131,7 +128,7 @@
|
||||
>
|
||||
<el-cascader
|
||||
:options="fangzhenList"
|
||||
placeholder="请选择"
|
||||
placeholder="请选择方阵"
|
||||
filterable
|
||||
:props="{ value: 'matrixId', label: 'name' }"
|
||||
v-model="item.unitProjectId"
|
||||
@ -151,7 +148,11 @@
|
||||
</el-col>
|
||||
<!-- 方阵状态:保留原有规则 -->
|
||||
<el-col :span="6">
|
||||
<el-form-item label="方阵状态" prop="unitProjectStatus">
|
||||
<el-form-item
|
||||
label="方阵状态"
|
||||
:prop="`unitBoList[${i}].unitProjectStatus`"
|
||||
:rules="{ required: true, message: '请输入方阵状态', trigger: 'blur' }"
|
||||
>
|
||||
<el-input v-model="item.unitProjectStatus" placeholder="请输入方阵状态" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@ -178,7 +179,16 @@
|
||||
</template>
|
||||
|
||||
<script setup name="LandBlock" lang="ts">
|
||||
import { listLandBlock, getLandBlock, delLandBlock, LandUnit, addLandBlock, updateLandBlock, subMatrix } from '@/api/system/landTransfer/landBlock';
|
||||
import {
|
||||
listLandBlock,
|
||||
getLandBlock,
|
||||
delLandBlock,
|
||||
LandUnit,
|
||||
addLandBlock,
|
||||
updateLandBlock,
|
||||
subMatrix,
|
||||
importLandBlock
|
||||
} from '@/api/system/landTransfer/landBlock';
|
||||
import { LandBlockVO, LandBlockQuery, LandBlockForm } from '@/api/system/landTransfer/landBlock/types';
|
||||
import { useUserStoreHook } from '@/store/modules/user';
|
||||
import { getCurrentInstance, ComponentInternalInstance, onMounted, onUnmounted, watch, reactive, ref, toRefs, computed } from 'vue';
|
||||
@ -212,10 +222,10 @@ interface MatrixForm {
|
||||
|
||||
// 基础实例与Store
|
||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
||||
// 获取用户 store
|
||||
const userStore = useUserStoreHook();
|
||||
// 从 store 中获取项目列表和当前选中的项目
|
||||
const currentProject = computed(() => userStore.selectedProject);
|
||||
|
||||
// 响应式数据
|
||||
const landBlockList = ref<LandBlockVO[]>([]);
|
||||
const fangzhenList = ref<FangzhenOption[]>([]);
|
||||
const buttonLoading = ref(false);
|
||||
@ -234,23 +244,20 @@ const ids = ref<Array<string | number>>([]);
|
||||
const single = ref(true);
|
||||
const multiple = ref(true);
|
||||
const total = ref(0);
|
||||
|
||||
// 表单Ref
|
||||
const queryFormRef = ref<ElFormInstance>();
|
||||
const landBlockFormRef = ref<ElFormInstance>();
|
||||
const landBlockFormMatrixRef = ref<ElFormInstance>();
|
||||
|
||||
const dialog = reactive<DialogOption>({
|
||||
visible: false,
|
||||
title: ''
|
||||
});
|
||||
|
||||
const dialogMatrix = reactive<DialogOption>({
|
||||
visible: false,
|
||||
title: '选择方阵'
|
||||
});
|
||||
// 弹窗配置
|
||||
const dialog = reactive<DialogOption>({ visible: false, title: '' });
|
||||
const dialogMatrix = reactive<DialogOption>({ visible: false, title: '选择方阵' });
|
||||
|
||||
// 初始表单数据
|
||||
const initFormData: LandBlockForm = {
|
||||
id: undefined,
|
||||
projectId: currentProject.value.id,
|
||||
projectId: currentProject.value?.id,
|
||||
landCode: undefined,
|
||||
landName: undefined,
|
||||
villageCommittee: undefined,
|
||||
@ -259,12 +266,14 @@ const initFormData: LandBlockForm = {
|
||||
farmerCount: undefined,
|
||||
remark: undefined
|
||||
};
|
||||
|
||||
// 核心数据(含表单规则)
|
||||
const data = reactive({
|
||||
form: { ...initFormData },
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
projectId: currentProject.value.id,
|
||||
projectId: currentProject.value?.id,
|
||||
landCode: undefined,
|
||||
landName: undefined,
|
||||
villageCommittee: undefined,
|
||||
@ -284,91 +293,117 @@ const data = reactive({
|
||||
|
||||
const { queryParams, form, rules } = toRefs(data);
|
||||
|
||||
/** 查询地块信息列表 */
|
||||
/** 查询地块列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true;
|
||||
const res = await listLandBlock(queryParams.value);
|
||||
landBlockList.value = res.rows;
|
||||
total.value = res.total;
|
||||
loading.value = false;
|
||||
try {
|
||||
const res = await listLandBlock(queryParams.value);
|
||||
landBlockList.value = res.rows;
|
||||
total.value = res.total;
|
||||
} catch (err) {
|
||||
proxy?.$modal.msgError('获取地块列表失败');
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
/** 取消按钮 */
|
||||
/** 地块表单取消 */
|
||||
const cancel = () => {
|
||||
reset();
|
||||
dialog.visible = false;
|
||||
};
|
||||
|
||||
/** 表单重置 */
|
||||
/** 地块表单重置 */
|
||||
const reset = () => {
|
||||
form.value = { ...initFormData };
|
||||
landBlockFormRef.value?.resetFields();
|
||||
};
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
/** 搜索提交 */
|
||||
const handleQuery = () => {
|
||||
queryParams.value.pageNum = 1;
|
||||
getList();
|
||||
};
|
||||
|
||||
/** 重置按钮操作 */
|
||||
/** 搜索重置 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value?.resetFields();
|
||||
handleQuery();
|
||||
};
|
||||
|
||||
/** 多选框选中数据 */
|
||||
/** 表格选择变化 */
|
||||
const handleSelectionChange = (selection: LandBlockVO[]) => {
|
||||
ids.value = selection.map((item) => item.id);
|
||||
single.value = selection.length != 1;
|
||||
multiple.value = !selection.length;
|
||||
single.value = selection.length !== 1;
|
||||
multiple.value = selection.length === 0;
|
||||
};
|
||||
|
||||
/** 新增按钮操作 */
|
||||
/** 新增地块 */
|
||||
const handleAdd = () => {
|
||||
reset();
|
||||
dialog.visible = true;
|
||||
dialog.title = '添加地块信息';
|
||||
};
|
||||
|
||||
/** 修改按钮操作 */
|
||||
/** 编辑地块 */
|
||||
const handleUpdate = async (row?: LandBlockVO) => {
|
||||
reset();
|
||||
const _id = row?.id || ids.value[0];
|
||||
const res = await getLandBlock(_id);
|
||||
Object.assign(form.value, res.data);
|
||||
dialog.visible = true;
|
||||
dialog.title = '修改地块信息';
|
||||
if (!_id) return proxy?.$modal.msgWarning('请选择要编辑的地块');
|
||||
|
||||
try {
|
||||
const res = await getLandBlock(_id);
|
||||
Object.assign(form.value, res.data);
|
||||
dialog.visible = true;
|
||||
dialog.title = '修改地块信息';
|
||||
} catch (err) {
|
||||
proxy?.$modal.msgError('获取地块详情失败');
|
||||
}
|
||||
};
|
||||
|
||||
/** 提交按钮 */
|
||||
/** 提交地块表单 */
|
||||
const submitForm = () => {
|
||||
landBlockFormRef.value?.validate(async (valid: boolean) => {
|
||||
if (valid) {
|
||||
buttonLoading.value = true;
|
||||
if (!valid) return;
|
||||
|
||||
buttonLoading.value = true;
|
||||
try {
|
||||
if (form.value.id) {
|
||||
await updateLandBlock(form.value).finally(() => (buttonLoading.value = false));
|
||||
await updateLandBlock(form.value);
|
||||
} else {
|
||||
await addLandBlock(form.value).finally(() => (buttonLoading.value = false));
|
||||
await addLandBlock(form.value);
|
||||
}
|
||||
proxy?.$modal.msgSuccess('操作成功');
|
||||
dialog.visible = false;
|
||||
await getList();
|
||||
} catch (err) {
|
||||
proxy?.$modal.msgError(form.value.id ? '修改失败' : '新增失败');
|
||||
} finally {
|
||||
buttonLoading.value = false;
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/** 删除按钮操作 */
|
||||
/** 删除地块 */
|
||||
const handleDelete = async (row?: LandBlockVO) => {
|
||||
const _ids = row?.id || ids.value;
|
||||
await proxy?.$modal.confirm('是否确认删除地块信息编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false));
|
||||
await delLandBlock(_ids);
|
||||
proxy?.$modal.msgSuccess('删除成功');
|
||||
await getList();
|
||||
if (!_ids.length) return proxy?.$modal.msgWarning('请选择要删除的地块');
|
||||
|
||||
try {
|
||||
await proxy?.$modal.confirm(`是否确认删除地块信息编号为"${_ids}"的数据项?`);
|
||||
await delLandBlock(_ids);
|
||||
proxy?.$modal.msgSuccess('删除成功');
|
||||
await getList();
|
||||
} catch (err) {
|
||||
// 取消确认时不提示错误
|
||||
if (err !== 'cancel') proxy?.$modal.msgError('删除失败');
|
||||
}
|
||||
};
|
||||
|
||||
// 获取方阵列表
|
||||
/** 获取方阵列表 */
|
||||
const getfangzhenList = async () => {
|
||||
if (!currentProject.value?.id) return;
|
||||
|
||||
loading.value = true;
|
||||
try {
|
||||
const res = await subMatrix(currentProject.value.id);
|
||||
@ -399,7 +434,8 @@ const handleView = async (row: LandBlockVO) => {
|
||||
|
||||
dialogMatrix.title = `关联方阵(地块:${row.landName || row.landCode})`;
|
||||
};
|
||||
// 动态添加unitBoList项
|
||||
|
||||
/** 新增方阵表单项 */
|
||||
const addUnitBoItem = () => {
|
||||
formM.value.unitBoList.push({
|
||||
unitProjectArea: '',
|
||||
@ -410,7 +446,7 @@ const addUnitBoItem = () => {
|
||||
landBlockFormMatrixRef.value?.clearValidate();
|
||||
};
|
||||
|
||||
// 移除unitBoList项
|
||||
/** 删除方阵表单项 */
|
||||
const removeUnitBoItem = (index: number) => {
|
||||
if (formM.value.unitBoList.length <= 1) {
|
||||
return proxy?.$modal.msgWarning('至少保留一项方阵配置');
|
||||
@ -443,18 +479,27 @@ const submitFormMatrix = () => {
|
||||
unitProjectName: unitProjectName
|
||||
};
|
||||
});
|
||||
var res = await LandUnit({ ...formM.value, unitBoList: arr });
|
||||
if (res.code == 200) {
|
||||
proxy?.$modal.msgSuccess('操作成功');
|
||||
|
||||
// 调用关联接口
|
||||
const res = await LandUnit({
|
||||
landId: formM.value.landId,
|
||||
unitBoList: unitBoListParams
|
||||
});
|
||||
|
||||
if (res.code === 200) {
|
||||
proxy?.$modal.msgSuccess('关联方阵成功');
|
||||
dialogMatrix.visible = false;
|
||||
await getList();
|
||||
} else {
|
||||
proxy?.$modal.msgError(res.msg);
|
||||
proxy?.$modal.msgError(res.msg || '关联失败');
|
||||
}
|
||||
} catch (err: any) {
|
||||
proxy?.$modal.msgError(err.msg || '关联过程异常');
|
||||
}
|
||||
});
|
||||
};
|
||||
/** 取消按钮 */
|
||||
|
||||
/** 方阵表单取消 */
|
||||
const cancelMatrix = () => {
|
||||
resetMatrix();
|
||||
dialogMatrix.visible = false;
|
||||
@ -469,7 +514,8 @@ const resetMatrix = () => {
|
||||
formM.value.landId = undefined;
|
||||
formM.value.unitBoList = [{ unitProjectArea: '', unitProjectStatus: '', unitProjectId: [] }];
|
||||
};
|
||||
//监听项目id刷新数据
|
||||
|
||||
/** 监听项目变化,刷新数据 */
|
||||
const listeningProject = watch(
|
||||
() => currentProject.value?.id,
|
||||
(newId) => {
|
||||
@ -543,6 +589,8 @@ const downloadTemplate = () => {
|
||||
onUnmounted(() => {
|
||||
listeningProject();
|
||||
});
|
||||
|
||||
/** 生命周期:组件挂载时初始化数据 */
|
||||
onMounted(() => {
|
||||
getList();
|
||||
getfangzhenList();
|
||||
|
Reference in New Issue
Block a user