前端普通增删改查
index.vue
C
<script setup lang="ts">
import Soure from './components/Soure.vue';
import Table from './components/Table.vue';
import { UserText } from './composables/UserText';
const {tableData, GetList} = UserText();
</script>
<template>
<Soure @submit="GetList"></Soure>
<Table :data="tableData"></Table>
</template>Dialog.vue
C
<template>
<el-dialog
v-model="localVisible"
:title="title"
width="500"
:close-on-click-modal="false"
:before-close="Cancel"
>
<el-form :model="localFormData" label-width="80px">
<el-form-item label="名字">
<el-input v-model="localFormData.name" />
</el-form-item>
<el-form-item label="密码">
<el-input v-model="localFormData.passworded" />
</el-form-item>
<el-form-item label="状态">
<el-switch
:model-value=" localFormData.iStatus === 1"
@update:model-value="(val: boolean) => localFormData.iStatus = val ? 1 : 0" />
{{ localFormData.iStatus }}
</el-form-item>
<el-form-item label="备注">
<el-input v-model="localFormData.memo" />
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker
v-model="localFormData.create_time"
type="datetime"
placeholder="Select date and time"
/>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="Cancel">取消</el-button>
<el-button @click="reset">重置</el-button>
<el-button type="primary" @click="submitForm">
提交
</el-button>
</div>
</template>
</el-dialog>
</template>
<script lang="ts" setup>
import {computed,watch,ref,onMounted} from 'vue'
import { UserText } from '../composables/UserText';
const { ToDialogForm,baseForm } = UserText();
import cloneDeep from 'lodash/cloneDeep';
const prop = defineProps<{
"visible":any,
"formdata":any,
}>()
const emit = defineEmits(["close","submit"])
const localVisible = ref(false);
const title = ref("新增");
const localFormData = ref(cloneDeep(baseForm));
const Cancel = () =>{
//发送到父页面,visible 变成false
emit("close",false);
}
console.log("localVisible",localVisible);
watch(()=>prop.visible,(val)=>{
localVisible.value = val;
},{ immediate: true })
watch(()=>prop.formdata,(val)=>{
localFormData.value = val;
},{ immediate: true })
const reset =()=>{
localFormData.value = cloneDeep(baseForm);
}
const submitForm =()=>{
//发送到父页面接受
emit("submit",localFormData.value);
}
// 组件挂载完成后执行
onMounted(() => {
localVisible.value=prop.visible;
})
</script>Soure.vue
C
<template>
<el-form :inline="true" :model="formData" class="demo-form-inline">
<el-form-item label="姓名">
<el-input v-model="formData.name" placeholder="搜索名字" clearable />
</el-form-item>
<el-form-item label="状态">
<el-select v-model="formData.iStatus" placeholder="请选择" style="width: 100px;">
<el-option label="请选择" :value="3" >请选择</el-option>
<el-option label="停用" :value="0" >停用</el-option>
<el-option label="启动" :value="1" >启动</el-option>
</el-select>
</el-form-item>
<el-form-item label="备注">
<el-input v-model="formData.memo" placeholder="备注" clearable />
</el-form-item>
<el-form-item >
<el-button type="primary" @click="reset" plain>重置</el-button>
</el-form-item>
<el-form-item >
<el-button type="primary" @click="onSubmit">搜索</el-button>
</el-form-item>
</el-form>
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import { UserText } from '../composables/UserText';
import cloneDeep from 'lodash/cloneDeep';
const {baseForm} = UserText();
baseForm.iStatus = 3;
const formData = ref(cloneDeep(baseForm));
const emit = defineEmits(["submit"])
const onSubmit = () => {
console.log(formData.value)
emit('submit',formData.value);
}
const reset =()=>{
formData.value = cloneDeep(baseForm);
}
</script>Table.vue
C
<template>
<el-row>
<el-col :span="2">
<el-button type="primary" @click="add" >新增</el-button>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-table :data="tableData" border style="width: 100%" max-height="400" >
<el-table-column prop="name" label="名称" header-align="center" align="center" />
<el-table-column prop="iStatus" label="状态" header-align="center" align="center" >
<template #default="scope" >
<el-switch
:model-value="scope.row.iStatus === 1"
@update:model-value="(val: boolean) => EditIStatus(scope.row, val)"
class="ml-2"
style="--el-switch-on-color: #13ce66; "
/>
</template>
</el-table-column>
<el-table-column prop="memo" label="备注" header-align="center" />
<el-table-column prop="create_time" label="创建时间" header-align="center" align="center" />
<el-table-column label="操作" header-align="center" >
<template #default="scope" >
<div style="display: flex;justify-content: center;width: 100%;">
<el-button @click=" Edit(scope.row) " type="success" size="small">编辑</el-button>
<el-button @click="del(scope.row ) " type="danger" size="small">删除</el-button>
</div>
</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
<el-row justify="end">
<el-col :span="12"><el-pagination background layout="prev, pager, next" :total="1000" /></el-col>
</el-row>
<Dialog @close="DialogCancel" @submit="Submit" :formdata="ToDialogForm" :visible="dialogVisible"></Dialog>
</template>
<script lang="ts" setup>
import Dialog from './Dialog.vue';
import { UserText } from '../composables/UserText';
import { watch ,onMounted} from 'vue';
const {add,cloneDeep,tableData,DialogCancel,ToDialogForm,GetList,baseForm,dialogVisible,Submit,EditIStatus, Edit,del} = UserText();
const prop = defineProps<{
"data":any
}>()
watch(()=>prop.data,(newVal)=>{
tableData.value = prop.data
},{immediate:true})
onMounted(()=>{
const baseFormCloneDeep = cloneDeep(baseForm);
baseFormCloneDeep.iStatus = 3;
GetList(baseFormCloneDeep);
})
</script>UserText.ts
C
import { userApi } from "@/api/user/user";
import { ref } from "vue";
import { ElMessage, ElMessageBox } from 'element-plus'
import cloneDeep from 'lodash/cloneDeep';
export function UserText(){
const baseForm = {
id: 0,
name: "",
passworded: "",
iStatus: 1,
memo: "",
create_time: ""
}
const tableData = ref([{
id: 5,
name: "12111",
passworded: "啊手动阀手动阀",
iStatus: 1,
memo: "sdfsdfasdfasgfdgsdf",
create_time: "2026-07-18T03:59:18"
}
])
const ToDialogForm = ref({});
const dialogVisible = ref(false);
const EditIStatus = async (row:any,val:any) => {
const soureIstates = row.iStatus;
try{
await userApi.EditIStatus({id:row.id,status:(val?1:0)});
ElMessage.success("操作成功");
row.iStatus = val?1:0;
}catch(error){
row.iStatus = soureIstates;
}
}
const Edit = (row:any) => {
dialogVisible.value = true;
ToDialogForm.value = cloneDeep(row);
}
const add = () => {
dialogVisible.value = true;
ToDialogForm.value = cloneDeep(baseForm);
}
const del =async (row:any) => {
try{
await userApi.del(row);
ElMessage.success("操作成功");
}catch{}
}
const DialogCancel = (params:boolean) =>{
dialogVisible.value = params;
}
const Submit= async(obj:any)=>{
try{
if(obj.id === 0){
await userApi.add(obj);
}else{
await userApi.Edit(obj);
}
ElMessage.success("操作成功")
dialogVisible.value = false;
const baseFormItm = cloneDeep(baseForm);
baseFormItm.iStatus = 3
GetList(baseFormItm);
}catch(error){}
}
const GetList =async(pareams:any)=>{
try{
console.log("搜索列表:",pareams);
tableData.value = await userApi.getList(pareams)as any;
// ElMessage.success("操作成功")
}catch(error){}
}
return{
tableData,
ToDialogForm,
dialogVisible,
baseForm,
GetList,
EditIStatus,
Edit,
del,
add,
Submit,
cloneDeep,
DialogCancel,
}
}userApi.ts
C
import request from "@/util/request"
export const userApi = {
getList: (params: any) => request.post("/user/list", params),
add: (params: any) => request.post("/user/add", params),
del: (params: any) => request.post("/user/del", params),
Edit: (params: any) => request.post("/user/Edit", params),
EditIStatus: (params: any) => request.post("/user/EditIStatus", params),
}