项目增删改查接口对接

This commit is contained in:
2025-10-13 10:16:46 +08:00
parent c575e75c77
commit 121a13fc56
2 changed files with 126 additions and 42 deletions

View File

@@ -4,6 +4,10 @@ import {programRequest} from '@/utils/api'
export const programAPI = { export const programAPI = {
// 登录 // 登录
list: (params) => programRequest.get('/program/list', {params}), list: (params) => programRequest.get('/program/list', {params}),
add: (data) => programRequest.post('/program', data),
update: (data) => programRequest.patch("/program", data),
delete: (id) => programRequest.delete(`/program/${id}`),
getOne: (id) => programRequest.get(`/program/${id}`),
} }
export default { export default {

View File

@@ -47,33 +47,33 @@
<!-- 筛选和操作 --> <!-- 筛选和操作 -->
<el-card class="filter-card"> <el-card class="filter-card">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="4"> <!-- <el-col :span="4">-->
<el-select v-model="queryParams.status" placeholder="选择状态" clearable> <!-- <el-select v-model="queryParams.status" placeholder="选择状态" clearable>-->
<el-option label="全部" value=""/> <!-- <el-option label="全部" value=""/>-->
<el-option label="待确认" value="pending"/> <!-- <el-option label="待确认" value="pending"/>-->
<el-option label="已确认" value="confirmed"/> <!-- <el-option label="已确认" value="confirmed"/>-->
<el-option label="已拒绝" value="rejected"/> <!-- <el-option label="已拒绝" value="rejected"/>-->
<el-option label="已取消" value="cancelled"/> <!-- <el-option label="已取消" value="cancelled"/>-->
</el-select> <!-- </el-select>-->
</el-col> <!-- </el-col>-->
<el-col :span="4"> <el-col :span="4">
<el-input v-model="queryParams.search" placeholder="搜索用户名或姓名" clearable/> <el-input v-model="queryParams.keyword" placeholder="搜索项目名称、项目公司或地址" clearable/>
</el-col> </el-col>
<el-col :span="4"> <!-- <el-col :span="4">-->
<el-date-picker <!-- <el-date-picker-->
v-model="dateRange" <!-- v-model="dateRange"-->
type="daterange" <!-- type="daterange"-->
range-separator="" <!-- range-separator="至"-->
start-placeholder="开始日期" <!-- start-placeholder="开始日期"-->
end-placeholder="结束日期" <!-- end-placeholder="结束日期"-->
format="YYYY-MM-DD" <!-- format="YYYY-MM-DD"-->
value-format="YYYY-MM-DD" <!-- value-format="YYYY-MM-DD"-->
/> <!-- />-->
</el-col> <!-- </el-col>-->
<el-row style="margin-left: 150px;" :gutter="10"> <el-row style="margin-left: 50px;" :gutter="10">
<el-col :span="12"> <el-col :span="12">
<el-button type="primary" @click="getList">搜索</el-button> <el-button type="primary" @click="getList">搜索</el-button>
</el-col> </el-col>
@@ -112,7 +112,7 @@
type="danger" type="danger"
plain plain
icon="Delete" icon="Delete"
:disabled="multiple" :disabled="single"
@click="handleDelete" @click="handleDelete"
>删除 >删除
</el-button> </el-button>
@@ -122,12 +122,14 @@
<el-table <el-table
:data="dataList" :data="dataList"
v-loading="loading" v-loading="loading"
@selection-change="handleSelectionChange"
stripe stripe
style="width: 100%" style="width: 100%"
> >
<el-table-column type="selection" width="55" align="center"/> <el-table-column type="selection" width="55" align="center"/>
<el-table-column prop="id" label="ID"/> <!-- <el-table-column prop="id" label="ID"/>-->
<el-table-column prop="name" label="项目名称"/> <el-table-column prop="name" label="项目名称"/>
<el-table-column prop="company" label="项目公司"/>
<el-table-column label="项目负责人"> <el-table-column label="项目负责人">
<template #default="scope"> <template #default="scope">
<el-tag>{{ scope.row.user.username }}</el-tag> <el-tag>{{ scope.row.user.username }}</el-tag>
@@ -142,7 +144,7 @@
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="300"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="300">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" icon="Document" @click="handleDetail(scope.row)">详情</el-button> <!-- <el-button link type="primary" icon="Document" @click="handleDetail(scope.row)">详情</el-button>-->
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)">修改</el-button> <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)">修改</el-button>
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)">删除</el-button> <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)">删除</el-button>
</template> </template>
@@ -165,7 +167,7 @@
<!-- 表单 --> <!-- 表单 -->
<el-dialog :title="title" v-model="open" width="500px" append-to-body> <el-dialog :title="title" v-model="open" width="500px" append-to-body>
<el-form ref="dictRef" :model="form" :rules="rules" label-width="80px"> <el-form ref="formRef" :model="form" :rules="rules" label-width="80px">
<el-form-item label="项目名称" prop="name"> <el-form-item label="项目名称" prop="name">
<el-input v-model="form.name" placeholder="请输入项目名称"/> <el-input v-model="form.name" placeholder="请输入项目名称"/>
</el-form-item> </el-form-item>
@@ -175,11 +177,26 @@
<el-form-item label="项目地点" prop="address"> <el-form-item label="项目地点" prop="address">
<el-input v-model="form.address" placeholder="请输入项目地点"/> <el-input v-model="form.address" placeholder="请输入项目地点"/>
</el-form-item> </el-form-item>
<el-form-item label="开始时间" prop="startDate"> <el-form-item label="结算方式" prop="paymentMethod">
<el-input v-model="form.startDate" placeholder="请选择开始时间"/> <el-input v-model="form.paymentMethod" placeholder="请输入结算方式"/>
</el-form-item> </el-form-item>
<el-form-item label="结束时间" prop="endDate"> <el-form-item label="项目时间" prop="dataRange">
<el-input v-model="form.endDate" placeholder="请选择结束时间"/> <el-date-picker
v-model="form.dataRange"
type="daterange"
range-separator=""
start-placeholder="开始时间"
end-placeholder="结束时间"
/>
</el-form-item>
<!-- <el-form-item label="开始时间" prop="startDate">-->
<!-- <el-input v-model="form.startDate" placeholder="请选择开始时间"/>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="结束时间" prop="endDate">-->
<!-- <el-input v-model="form.endDate" placeholder="请选择结束时间"/>-->
<!-- </el-form-item>-->
<el-form-item label="项目描述" prop="introduction">
<el-input v-model="form.introduction" placeholder="请输入项目简介"/>
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
@@ -195,10 +212,14 @@
<script setup> <script setup>
import {reactive, ref, toRefs} from "vue"; import {getCurrentInstance, reactive, ref, toRefs} from "vue";
import {Check, Money, Wallet} from "@element-plus/icons-vue"; import {Check, Money, Wallet} from "@element-plus/icons-vue";
import {ElMessage} from "element-plus"; import {ElMessage, ElMessageBox} from "element-plus";
import {programAPI} from "@/api/program"; import {programAPI} from "@/api/program";
import {useUserStore} from "@/stores/user";
const {proxy} = getCurrentInstance();
const userStore = useUserStore()
// 统计 // 统计
const stats = ref({ const stats = ref({
@@ -211,7 +232,6 @@ const dateRange = ref([])
const dataList = ref([]) const dataList = ref([])
const loading = ref(false) const loading = ref(false)
const single = ref(true); const single = ref(true);
const multiple = ref(true);
// 分页 // 分页
const pagination = ref({ const pagination = ref({
page: 1, page: 1,
@@ -226,19 +246,28 @@ const data = reactive({
queryParams: { queryParams: {
page: 1, page: 1,
size: 10, size: 10,
dictName: undefined, name: undefined,
dictType: undefined,
status: undefined, status: undefined,
search: undefined keyword: undefined
}, },
rules: { rules: {
dictName: [{required: true, message: "字典名称不能为空", trigger: "blur"}], name: [{required: true, message: "项目名称不能为空", trigger: "blur"}],
dictType: [{required: true, message: "字典类型不能为空", trigger: "blur"}] company: [{required: true, message: "公司不能为空", trigger: "blur"}],
address: [{required: true, message: "地址不能为空", trigger: "blur"}],
introduction: [{required: true, message: "简介不能为空", trigger: "blur"}],
paymentMethod: [{required: true, message: "结算方式不能为空", trigger: "blur"}],
dataRange: [{required: true, message: "时间不能为空", trigger: "blur"}],
}, },
}); });
const {queryParams, form, rules} = toRefs(data); const {queryParams, form, rules} = toRefs(data);
// TODO
const getStats = () => {
// programAPI.getStats().then(res => {
// stats.value = res.data.data.stats
// })
}
// 加载数据 // 加载数据
const getList = async () => { const getList = async () => {
@@ -246,7 +275,6 @@ const getList = async () => {
// api请求 // api请求
queryParams.value.page = pagination.value.page; queryParams.value.page = pagination.value.page;
queryParams.value.size = pagination.value.size; queryParams.value.size = pagination.value.size;
console.log(queryParams.value)
programAPI.list(queryParams.value).then(res => { programAPI.list(queryParams.value).then(res => {
// console.log(res) // console.log(res)
dataList.value = res.data.data.list dataList.value = res.data.data.list
@@ -259,9 +287,14 @@ const getList = async () => {
const resetFilters = () => { const resetFilters = () => {
queryParams.value = { queryParams.value = {
page: 1, page: 1,
size: 10 keyword: undefined
} }
dateRange.value = [] dateRange.value = []
getList()
}
const handleSelectionChange = (selection) => {
single.value = selection.length != 1;
} }
const handleAdd = () => { const handleAdd = () => {
@@ -271,11 +304,27 @@ const handleAdd = () => {
} }
const handleUpdate = (row) => { const handleUpdate = (row) => {
ElMessage.info('修改') programAPI.getOne(row.id).then(res => {
form.value = res.data.data
form.value.dataRange = [form.value.startDate, form.value.endDate]
title.value = "修改项目"
open.value = true;
})
} }
const handleDelete = (row) => { const handleDelete = (row) => {
ElMessage.info('删除') ElMessageBox.confirm('确定要删除吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
programAPI.delete(row.id).then(res => {
ElMessage.success('删除成功')
getList()
})
}).catch(() => {
ElMessage.info('已取消删除')
})
} }
// 查看详情 // 查看详情
@@ -283,7 +332,38 @@ const handleDetail = (row) => {
ElMessage.info('查看详情') ElMessage.info('查看详情')
} }
const submitForm = () => {
proxy.$refs["formRef"].validate(valid => {
if (valid) {
form.value.linkmanId = userStore.user.id
form.value.startDate = form.value.dataRange[0]
form.value.endDate = form.value.dataRange[1]
if (form.value.id != undefined) {
delete form.value.user;
delete form.value.dataRange;
programAPI.update(form.value).then(res => {
ElMessage.success('修改成功')
open.value = false
getList()
})
} else {
programAPI.add(form.value).then(res => {
ElMessage.success('添加成功')
open.value = false
getList()
})
}
}
})
}
const cancel = () => {
open.value = false
}
// 获取统计
getStats()
// 获取列表
getList(); getList();
</script> </script>