Merge branch 'dev' of http://47.109.205.240:3000/Web/daimp-front into dev
This commit is contained in:
		
						commit
						eb48bf786e
					
				| @ -17,5 +17,5 @@ VITE_APP_BASE_URL = 'http://192.168.18.99:8080' | ||||
| VITE_APP_UPLOAD_URL = 'http://192.168.18.99:8080' | ||||
| 
 | ||||
| # 本地开发接口地址 | ||||
| # VITE_APP_BASE_URL = 'http://192.168.18.74:8080' | ||||
| # VITE_APP_UPLOAD_URL = 'http://192.168.18.74:8080' | ||||
| VITE_APP_BASE_URL = 'http://192.168.18.99:8080' | ||||
| VITE_APP_UPLOAD_URL = 'http://192.168.18.99:8080' | ||||
| @ -0,0 +1,31 @@ | ||||
| import request from '@/utils/axios'; | ||||
| 
 | ||||
| /* 种子使用监管-列表 */ | ||||
| export function getSeedUseRegulatoryRecords(params) { | ||||
|   return request('/inputGoods/supervise/provenance/page', { | ||||
|     params, | ||||
|   }); | ||||
| } | ||||
| /* 种子使用监管-新增 */ | ||||
| export function seedUseRegulatorySave(data) { | ||||
|   return request('/inputGoods/supervise/provenance/save', { | ||||
|     method: 'POST', | ||||
|     data, | ||||
|   }); | ||||
| } | ||||
| /* 种子使用监管-编辑 */ | ||||
| export function editSeedUseRegulatory(data) { | ||||
|   return request('/inputGoods/supervise/provenance/edit', { | ||||
|     data, | ||||
|     method: 'PUT', | ||||
|   }); | ||||
| } | ||||
| /* 种子使用监管-删除 */ | ||||
| export function delSeedUseRegulatory(ids) { | ||||
|   return request(`/inputGoods/supervise/provenance/delete/${ids}`); | ||||
| } | ||||
| 
 | ||||
| /* 获取详情-通用,传入url和参数 */ | ||||
| export function getRowDetails({ url, id }) { | ||||
|   return request(`${url}${id}`); | ||||
| } | ||||
| @ -51,6 +51,32 @@ const inputSuppliesRoutes = [ | ||||
|         component: () => import('@/views/inputSuppliesManage/material/others/index.vue'), | ||||
|         meta: { title: '其他投入品管理', icon: 'TakeawayBox' }, | ||||
|       }, | ||||
|       { | ||||
|         path: '/sub-government-affairs-service/supervisionOfInputs ', | ||||
|         name: 'supervisionOfInputs', | ||||
|         redirect: '/sub-government-affairs-service/supervisionOfInputs/seedRegulation', | ||||
|         meta: { title: '投入品使用监管', icon: 'Connection' }, | ||||
|         children: [ | ||||
|           // {
 | ||||
|           //   path: '/sub-government-affairs-service/supervisionOfInputs/regulatoryOverview',
 | ||||
|           //   name: 'regulatoryOverview',
 | ||||
|           //   component: () => import('@/views/inputSuppliesManage/supervisionOfInputs/regulatoryOverview.vue'),
 | ||||
|           //   meta: { title: '使用监管概览', icon: '' },
 | ||||
|           // },
 | ||||
|           { | ||||
|             path: '/sub-government-affairs-service/supervisionOfInputs/seedRegulation', | ||||
|             name: 'seedRegulation', | ||||
|             component: () => import('@/views/inputSuppliesManage/supervisionOfInputs/seedRegulation.vue'), | ||||
|             meta: { title: '种子使用监管', icon: '' }, | ||||
|           }, | ||||
|           { | ||||
|             path: '/sub-government-affairs-service/supervisionOfInputs/fertilizerRegulation', | ||||
|             name: 'fertilizerRegulation', | ||||
|             component: () => import('@/views/inputSuppliesManage/supervisionOfInputs/fertilizerRegulation.vue'), | ||||
|             meta: { title: '肥料使用监管', icon: '' }, | ||||
|           }, | ||||
|         ], | ||||
|       }, | ||||
|     ], | ||||
|   }, | ||||
| ]; | ||||
|  | ||||
| @ -76,7 +76,7 @@ | ||||
|                 :clearable="false" | ||||
|                 type="date" | ||||
|                 value-format="YYYY-MM-DD" | ||||
|                 placeholder="请选择起始日期" | ||||
|                 placeholder="请选择检测时间" | ||||
|               /> | ||||
|             </el-form-item> | ||||
|             <el-form-item label="检测结果" prop="detectionResult" class="dialog-form-item"> | ||||
|  | ||||
| @ -136,6 +136,7 @@ const selectedIds = ref([]); | ||||
| const tableLoading = ref(false); | ||||
| const tableTotal = ref(0); | ||||
| const columns = ref([ | ||||
|   { prop: 'id', label: '编码' }, | ||||
|   { prop: 'seedName', label: '种子种苗名称' }, | ||||
|   { prop: 'varietyName', label: '品种名称' }, | ||||
|   { prop: 'brand', label: '品牌' }, | ||||
|  | ||||
| @ -0,0 +1,414 @@ | ||||
| <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="seedName"> | ||||
|                 <el-input v-model="formInline.seedName" 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="true" | ||||
|           @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 { getSeedList, seedSave, delSeed, getMaterailTypes } = inputSuppliesApi; | ||||
| import { useApp } from '@/hooks'; | ||||
| const app = useApp(); | ||||
| 
 | ||||
| // 查询条件 | ||||
| const formInline = reactive({ | ||||
|   seedName: '', | ||||
|   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: 'id', label: '编码' }, | ||||
|   { prop: 'seedName', label: '种子种苗名称' }, | ||||
|   { prop: 'varietyName', label: '品种名称' }, | ||||
|   { prop: 'brand', label: '品牌' }, | ||||
|   { prop: 'manufacturer', label: '生产厂家' }, | ||||
|   { prop: 'classifyName', label: '分类' }, | ||||
|   { prop: 'productUnit', 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 getSeedList(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 () => { | ||||
|   restDialogForm(); | ||||
|   dialogTitle.value = '新增'; | ||||
|   formDisabled.value = false; | ||||
|   dialogFormVisible.value = true; | ||||
| }; | ||||
| // 查看详情 | ||||
| const seeDetails = async (row) => { | ||||
|   dialogTitle.value = '详情'; | ||||
|   setDialogForm(row); | ||||
|   formDisabled.value = true; | ||||
|   dialogFormVisible.value = true; | ||||
| }; | ||||
| // 编辑操作 | ||||
| const handleEdit = (row) => { | ||||
|   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 delSeed(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 seedSave(param); | ||||
|         } else { | ||||
|           response = await seedSave(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> | ||||
| @ -0,0 +1,7 @@ | ||||
| <template> | ||||
|   <div>使用监管概览,开发中...</div> | ||||
| </template> | ||||
| 
 | ||||
| <script setup></script> | ||||
| 
 | ||||
| <style lang="scss" scoped></style> | ||||
| @ -0,0 +1,434 @@ | ||||
| <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="seedName"> | ||||
|                 <el-input v-model="formInline.seedName" 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({ | ||||
|   seedName: '', | ||||
|   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: 'landName', label: '地块名称' }, | ||||
|   { prop: 'regionName', label: '所属行政区域' }, | ||||
|   { prop: 'gridName', 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 () => { | ||||
|   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> | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user