<template>
<div>
<span class="left">
<vxe-button @click="add" status="primary">新增用户</vxe-button>
<vxe-modal
v-model="value5"
width="500"
show-footer
show-close
height="300"
@confirm="mode === 'add' ? addComfirm() : exitComfirm(exitData)"
>
<template #title>
<span>{{ mode === 'add' ? '新增用户' : '编辑用户' }}</span>
</template>
<template #default>
<vxe-form
:ref="'form'"
:rules="rules"
:data="formData1"
title-width="80"
>
<vxe-form-item title="名称" field="name" :item-render="{}">
<template #default="{ data }">
<vxe-input
v-model.trim="data.name"
placeholder="请输入名称"
clearable
></vxe-input>
</template>
</vxe-form-item>
<vxe-form-item title="年龄" field="age" :item-render="{}">
<template #default="{ data }">
<vxe-input
v-model.trim="data.age"
placeholder="请输入年龄"
></vxe-input>
</template>
</vxe-form-item>
<vxe-form-item title="手机号" field="phoneNumber" :item-render="{}">
<template #default="{ data }">
<vxe-input
v-model="data.phoneNumber"
placeholder="请输入手机号"
></vxe-input>
</template>
</vxe-form-item>
</vxe-form>
</template>
</vxe-modal>
</span>
<vxe-table
border
show-header-overflow
show-overflow
:align="allAlign"
:row-config="{ isHover: true }"
:data="tableData"
>
<vxe-column type="seq" title="序号" width="60"></vxe-column>
<vxe-column field="name" title="姓名"></vxe-column>
<vxe-column field="phoneNumber" title="手机号"></vxe-column>
<vxe-column field="age" title="年龄"></vxe-column>
<vxe-column title="操作">
<template slot-scope="scope">
<vxe-button
status="warning"
content="编辑用户"
@click="exit(scope.row)"
></vxe-button>
<vxe-button
status="danger"
content="删除用户"
@click="confirmEvent(scope.row.id)"
></vxe-button>
</template>
</vxe-column>
</vxe-table>
</div>
</template>
<script>
import VXETable from 'vxe-table'
import { getList, addList, updateList, delList } from '../api/user'
export default {
data() {
return {
exitIndex: '',
exitData: '',
mode: 'add',
rules: {
name: [
{
required: true,
message: '请输入用户名',
trigger: 'change'
},
{ min: 2, max: 5, message: '长度在 2 到 5 个字符' }
],
age: [
{
required: true,
message: '请输入年龄',
trigger: 'change'
}
],
phoneNumber: [
{ required: true, message: '请输入手机号' },
{
pattern: /^(?:(?:\+|00)86)?1[3-9]\d{9}$/,
message: '请输入正确的手机号格式',
trigger: 'change'
}
]
},
allAlign: null,
value5: false,
tableData: JSON.parse(localStorage.getItem('data')) || [
{
id: 10001,
name: 'Test1',
phoneNumber: '13342561458',
age: 28
},
{
id: 10002,
name: 'Test2',
phoneNumber: '13342561416',
age: 22
},
{
id: 10003,
name: 'Test3',
phoneNumber: '13315561416',
age: 32
},
{
id: 10004,
name: 'Test4',
phoneNumber: '13315561418',
age: 24
},
{
id: 10004,
name: 'Test4',
phoneNumber: '13315561415',
age: 24
},
{
id: '10004',
name: 'Test4',
phoneNumber: '13315561415',
age: 24
}
],
formData1: {
name: '',
phoneNumber: '',
age: ''
},
loading2: false
}
},
watch: {
tableData: {
deep: true,
handler(newValue) {
localStorage.setItem('data', JSON.stringify(newValue))
}
}
},
created() {
this.getData()
},
methods: {
async getData() {
const res = await getList()
console.log(res)
this.tableData = res
},
add() {
this.value5 = true
this.mode = 'add'
this.formData1 = {}
},
exit(data) {
this.exitData = data
this.value5 = true
this.mode = 'exit'
this.formData1 = {
name: data.name,
phoneNumber: data.phoneNumber,
age: data.age
}
},
async addComfirm() {
if (
this.formData1.name === '' &&
this.formData1.age === '' &&
this.formData1.phoneNumber === ''
) {
VXETable.modal.message({ content: '未正确输入', status: 'error' })
} else {
await addList({
id: Date.now(),
name: this.formData1.name,
phoneNumber: this.formData1.phoneNumber,
age: this.formData1.age
})
this.getData()
VXETable.modal.message({ content: '添加用户成功', status: 'success' })
this.formData1 = {}
}
},
confirmEvent(id) {
VXETable.modal.confirm('您确定要删除吗?').then(async (type) => {
await delList(id)
VXETable.modal.message({ content: '删除成功', status: 'success' })
this.getData()
})
},
delUser(id) {
console.log(id)
this.tableData = this.tableData.filter((item) => item.id !== id)
},
async exitComfirm(exitData) {
this.exitIndex = this.tableData.findIndex((item) => {
return item.id === exitData.id
})
console.log({
id: this.exitData.id,
name: this.formData1.name,
age: this.formData1.age,
phoneNumber: this.formData1.phoneNumber
})
await updateList({
id: this.exitData.id,
name: this.formData1.name,
age: this.formData1.age,
phoneNumber: this.formData1.phoneNumber
})
this.getData()
this.formData1 = {}
}
}
}
</script>
<style scoped>
.left {
display: flex;
margin-bottom: 30px;
}
::v-deep .vxe-input--inner {
width: 250px;
}
</style>