重构部分页面的弹窗逻辑

This commit is contained in:
sc 2021-07-09 14:35:15 +08:00
parent 7c575c01cf
commit 4f547ab2f4
10 changed files with 282 additions and 257 deletions

View File

@ -32,7 +32,7 @@
</el-main> </el-main>
</el-container> </el-container>
<save-dialog ref="saveDialog"></save-dialog> <save-dialog ref="saveDialog" @success="handleSuccess"></save-dialog>
</template> </template>
@ -51,6 +51,7 @@
} }
}, },
methods: { methods: {
//
add(){ add(){
this.$refs.saveDialog.show() this.$refs.saveDialog.show()
}, },
@ -93,6 +94,17 @@
// //
selectionChange(selection){ selectionChange(selection){
this.selection = selection; this.selection = selection;
},
//
handleSuccess(data, mode){
if(mode=='add'){
data.id = new Date().getTime()
this.$refs.table.tableData.unshift(data)
}else if(mode=='edit'){
this.$refs.table.tableData.filter(item => item.id===data.id ).forEach(item => {
Object.assign(item, data)
})
}
} }
} }
} }

View File

@ -1,6 +1,6 @@
<template> <template>
<el-dialog :title="titleMap[mode]" v-model="visible" :width="500" destroy-on-close> <el-dialog :title="titleMap[mode]" v-model="visible" :width="500" destroy-on-close>
<el-form :model="form" :rules="rules" :disabled="mode=='show'" ref="dialogForm" label-width="100px" label-position="left"> <el-form :model="form" :rules="rules" ref="dialogForm" label-width="100px" label-position="left">
<el-form-item label="应用标识" prop="appId"> <el-form-item label="应用标识" prop="appId">
<el-input v-model="form.appId" clearable></el-input> <el-input v-model="form.appId" clearable></el-input>
</el-form-item> </el-form-item>
@ -19,7 +19,7 @@
</el-checkbox-group> </el-checkbox-group>
</el-form-item> </el-form-item>
<el-form-item label="授权至" prop="exp"> <el-form-item label="授权至" prop="exp">
<el-date-picker v-model="form.exp" type="datetime" placeholder="选择日期时间"></el-date-picker> <el-date-picker v-model="form.exp" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择日期时间"></el-date-picker>
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
@ -31,6 +31,7 @@
<script> <script>
export default { export default {
emits: ['success'],
data() { data() {
return { return {
mode: "add", mode: "add",
@ -38,7 +39,6 @@
add: '新增APP', add: '新增APP',
edit: '编辑APP' edit: '编辑APP'
}, },
//
form: { form: {
id:"", id:"",
appId: "", appId: "",
@ -47,7 +47,6 @@
type: [], type: [],
exp: "" exp: ""
}, },
//
rules: { rules: {
appId:[ appId:[
{required: true, message: '请输入应用标识'} {required: true, message: '请输入应用标识'}
@ -59,15 +58,14 @@
{required: true, message: '请输入秘钥'} {required: true, message: '请输入秘钥'}
], ],
type:[ type:[
{required: true, message: '请选择类型范围'} {required: true, message: '请选择类型范围', trigger: 'change'}
], ],
exp:[ exp:[
{required: true, message: '请选择授权到期日期'} {required: true, message: '请选择授权到期日期', trigger: 'change'}
] ]
}, },
visible: false, visible: false,
isSaveing: false, isSaveing: false
pData: {}
} }
}, },
methods: { methods: {
@ -85,12 +83,8 @@
var res = await this.$API.user.save.post(this.form); var res = await this.$API.user.save.post(this.form);
this.isSaveing = false; this.isSaveing = false;
if(res.code == 200){ if(res.code == 200){
this.$emit('success', this.form, this.mode)
this.visible = false; this.visible = false;
if(this.mode == 'add'){
//
}else if(this.mode == 'edit'){
Object.assign(this.pData, this.form)
}
this.$message.success("操作成功") this.$message.success("操作成功")
}else{ }else{
this.$alert(res.message, "提示", {type: 'error'}) this.$alert(res.message, "提示", {type: 'error'})
@ -100,7 +94,6 @@
}, },
// //
setData(data){ setData(data){
this.pData = data
this.form.id = data.id this.form.id = data.id
this.form.appId = data.appId this.form.appId = data.appId
this.form.appName = data.appName this.form.appName = data.appName

View File

@ -1,7 +1,7 @@
<template> <template>
<el-container> <el-container>
<el-aside width="220px"> <el-aside width="220px">
<el-tree ref="category" class="menu" node-key="label" :data="category" :default-expanded-keys="['系统日志']" current-node-key="系统日志" :highlight-current="true" :expand-on-click-node="false" @node-click="dicClick"> <el-tree ref="category" class="menu" node-key="label" :data="category" :default-expanded-keys="['系统日志']" current-node-key="系统日志" :highlight-current="true" :expand-on-click-node="false">
</el-tree> </el-tree>
</el-aside> </el-aside>
<el-container> <el-container>

View File

@ -35,21 +35,9 @@
</el-main> </el-main>
</el-container> </el-container>
<el-dialog :title="titleMap[saveMode]" v-model="saveDialogVisible" :width="500" destroy-on-close> <save-dialog ref="saveDialog" @success="handleSaveSuccess"></save-dialog>
<save-dialog ref="saveDialog" :mode="saveMode"></save-dialog>
<template #footer>
<el-button @click="saveDialogVisible=false" > </el-button>
<el-button v-if="saveMode!='show'" type="primary" @click="saveForm()" :loading="isSaveing"> </el-button>
</template>
</el-dialog>
<el-dialog title="角色权限设置" v-model="permissionDialogVisible" :width="500" destroy-on-close>
<permission-dialog ref="permissionDialog"></permission-dialog> <permission-dialog ref="permissionDialog"></permission-dialog>
<template #footer>
<el-button @click="permissionDialogVisible=false" > </el-button>
<el-button type="primary" @click="savePermission()" :loading="isPermissionSaveing"> </el-button>
</template>
</el-dialog>
</template> </template>
@ -69,45 +57,27 @@
selection: [], selection: [],
search: { search: {
keyword: null keyword: null
}, }
saveDialogVisible: false,
saveMode: 'add',
titleMap: {
add: "新增",
edit: "编辑",
show: "查看"
},
isSaveing: false,
//
permissionDialogVisible: false,
isPermissionSaveing: false
} }
}, },
methods: { methods: {
// //
add(){ add(){
this.saveMode = 'add'; this.$refs.saveDialog.show()
this.saveDialogVisible = true;
}, },
// //
table_edit(row){ table_edit(row){
this.saveMode = 'edit'; this.$refs.saveDialog.show('edit')
this.saveDialogVisible = true;
this.$nextTick(() => {
//ID
this.$refs.saveDialog.setData(row) this.$refs.saveDialog.setData(row)
})
}, },
// //
table_show(row){ table_show(row){
this.saveMode = 'show'; this.$refs.saveDialog.show('show')
this.saveDialogVisible = true;
this.$nextTick(() => {
//ID
this.$refs.saveDialog.setData(row) this.$refs.saveDialog.setData(row)
}) },
//
permission(){
this.$refs.permissionDialog.show()
}, },
// //
async table_del(row, index){ async table_del(row, index){
@ -140,36 +110,40 @@
}) })
}, },
//
saveForm(){
this.$refs.saveDialog.submit(async (formData) => {
this.isSaveing = true;
var res = await this.$API.user.save.post(formData);
this.isSaveing = false;
if(res.code == 200){
// OR /
this.saveDialogVisible = false;
this.$message.success("操作成功")
}else{
this.$alert(res.message, "提示", {type: 'error'})
}
})
},
// //
selectionChange(selection){ selectionChange(selection){
this.selection = selection; this.selection = selection;
}, },
//
permission(){
this.permissionDialogVisible = true;
},
savePermission(){
this.$message.success("操作成功")
this.permissionDialogVisible = false;
},
// //
upsearch(){ upsearch(){
},
//ID
filterTree(id){
var target = null;
function filter(tree){
tree.forEach(item => {
if(item.id == id){
target = item
}
if(item.children){
filter(item.children)
}
})
}
filter(this.$refs.table.tableData)
return target
},
//
handleSaveSuccess(data, mode){
//
//this.$refs.table.tableData.refresh()
if(mode=='add'){
data.id = new Date().getTime()
this.$refs.table.tableData.unshift(data)
}else if(mode=='edit'){
Object.assign(this.filterTree(data.id), data)
}
} }
} }
} }

View File

@ -1,4 +1,5 @@
<template> <template>
<el-dialog title="角色权限设置" v-model="visible" :width="500" destroy-on-close>
<el-tabs tab-position="top"> <el-tabs tab-position="top">
<el-tab-pane label="菜单权限"> <el-tab-pane label="菜单权限">
<div class="treeMain"> <div class="treeMain">
@ -29,12 +30,20 @@
</el-form> </el-form>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
<template #footer>
<el-button @click="visible=false" > </el-button>
<el-button type="primary" :loading="isSaveing" @click="submit()"> </el-button>
</template>
</el-dialog>
</template> </template>
<script> <script>
export default { export default {
emits: ['success'],
data() { data() {
return { return {
visible: false,
isSaveing: false,
menu: { menu: {
list: [], list: [],
checked: ["test", "system", "user", "role"], checked: ["test", "system", "user", "role"],
@ -76,6 +85,19 @@
this.getType(); this.getType();
}, },
methods: { methods: {
show(){
this.visible = true;
this.form = this.$options.data().form
},
submit(){
this.isSaveing = true;
setTimeout(()=>{
this.isSaveing = false;
this.visible = false;
this.$message.success("操作成功")
this.$emit('success')
},1000)
},
async getMenu(){ async getMenu(){
var res = await this.$API.menu.list.get(); var res = await this.$API.menu.list.get();
this.menu.list = res.data; this.menu.list = res.data;

View File

@ -1,5 +1,6 @@
<template> <template>
<el-form :model="form" :rules="rules" :disabled="mode=='show'" ref="dialogForm" label-width="80px" label-position="top"> <el-dialog :title="titleMap[mode]" v-model="visible" :width="500" destroy-on-close>
<el-form :model="form" :rules="rules" :disabled="mode=='show'" ref="dialogForm" label-width="100px" label-position="top">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="上级角色" prop="parentId"> <el-form-item label="上级角色" prop="parentId">
@ -25,15 +26,26 @@
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
<template #footer>
<el-button @click="visible=false" > </el-button>
<el-button v-if="mode!='show'" type="primary" :loading="isSaveing" @click="submit()"> </el-button>
</template>
</el-dialog>
</template> </template>
<script> <script>
export default { export default {
props: { emits: ['success'],
mode: { type: String, default: "add" }
},
data() { data() {
return { return {
mode: "add",
titleMap: {
add: '新增',
edit: '编辑',
show: '查看'
},
visible: false,
isSaveing: false,
// //
form: { form: {
id:"", id:"",
@ -44,7 +56,7 @@
// //
rules: { rules: {
sort: [ sort: [
{required: true, message: '请输入排序'} {required: true, message: '请输入排序', trigger: 'change'}
], ],
label: [ label: [
{required: true, message: '请输入角色名称'} {required: true, message: '请输入角色名称'}
@ -65,18 +77,31 @@
this.getGroup() this.getGroup()
}, },
methods: { methods: {
//
show(mode='add'){
this.mode = mode;
this.visible = true;
this.form = this.$options.data().form
},
// //
async getGroup(){ async getGroup(){
var res = await this.$API.role.select.get(); var res = await this.$API.role.select.get();
this.groups = res.data; this.groups = res.data;
}, },
// //
submit(callback){ submit(){
this.$refs.dialogForm.validate((valid) => { this.$refs.dialogForm.validate(async (valid) => {
if (valid) { if (valid) {
callback(this.form) this.isSaveing = true;
var res = await this.$API.user.save.post(this.form);
this.isSaveing = false;
if(res.code == 200){
this.$emit('success', this.form, this.mode)
this.visible = false;
this.$message.success("操作成功")
}else{ }else{
return false; this.$alert(res.message, "提示", {type: 'error'})
}
} }
}) })
}, },

View File

@ -57,7 +57,7 @@
</el-row> </el-row>
</el-main> </el-main>
<save-dialog ref="saveDialog"></save-dialog> <save-dialog ref="saveDialog" @success="handleSuccess"></save-dialog>
<el-drawer title="计划任务日志" v-model="logsVisible" :size="600" direction="rtl" destroy-on-close> <el-drawer title="计划任务日志" v-model="logsVisible" :size="600" direction="rtl" destroy-on-close>
<logs></logs> <logs></logs>
@ -134,6 +134,17 @@
}, },
run(task){ run(task){
this.$message.success(`已成功执行计划任务:${task.title}`) this.$message.success(`已成功执行计划任务:${task.title}`)
},
//
handleSuccess(data, mode){
if(mode=='add'){
data.id = new Date().getTime()
this.list.push(data)
}else if(mode=='edit'){
this.list.filter(item => item.id===data.id ).forEach(item => {
Object.assign(item, data)
})
}
} }
} }
} }

View File

@ -32,7 +32,7 @@
<script> <script>
export default { export default {
inject: ['list'], emits: ['success'],
data() { data() {
return { return {
mode: "add", mode: "add",
@ -81,15 +81,7 @@
this.isSaveing = false; this.isSaveing = false;
this.visible = false; this.visible = false;
this.$message.success("操作成功") this.$message.success("操作成功")
if(this.mode == 'add'){ this.$emit('success', this.form, this.mode)
var newItem = {...this.form}
newItem.id = new Date().getTime()
this.list.push(newItem)
}else if(this.mode == 'edit'){
this.list.filter(item => item.id===this.form.id ).forEach(item => {
Object.assign(item, this.form)
})
}
},1000) },1000)
} }
}) })

View File

@ -55,13 +55,7 @@
</el-container> </el-container>
</el-container> </el-container>
<el-dialog :title="titleMap[saveMode]" v-model="saveDialogVisible" :width="500" destroy-on-close> <save-dialog ref="saveDialog" @success="handleSuccess"></save-dialog>
<save-dialog ref="saveDialog" :mode="saveMode"></save-dialog>
<template #footer>
<el-button @click="saveDialogVisible=false" > </el-button>
<el-button v-if="saveMode!='show'" type="primary" @click="saveForm()" :loading="isSaveing"> </el-button>
</template>
</el-dialog>
</template> </template>
@ -75,14 +69,6 @@
}, },
data() { data() {
return { return {
saveDialogVisible: false,
saveMode: 'add',
titleMap: {
add: "新增",
edit: "编辑",
show: "查看"
},
isSaveing: false,
showGrouploading: false, showGrouploading: false,
groupFilterText: '', groupFilterText: '',
group: [], group: [],
@ -104,27 +90,17 @@
methods: { methods: {
// //
add(){ add(){
this.saveMode = 'add'; this.$refs.saveDialog.show()
this.saveDialogVisible = true;
}, },
// //
table_edit(row){ table_edit(row){
this.saveMode = 'edit'; this.$refs.saveDialog.show('edit')
this.saveDialogVisible = true;
this.$nextTick(() => {
//ID
this.$refs.saveDialog.setData(row) this.$refs.saveDialog.setData(row)
})
}, },
// //
table_show(row){ table_show(row){
this.saveMode = 'show'; this.$refs.saveDialog.show('show')
this.saveDialogVisible = true;
this.$nextTick(() => {
//ID
this.$refs.saveDialog.setData(row) this.$refs.saveDialog.setData(row)
})
}, },
// //
async table_del(row, index){ async table_del(row, index){
@ -157,21 +133,6 @@
}) })
}, },
//
saveForm(){
this.$refs.saveDialog.submit(async (formData) => {
this.isSaveing = true;
var res = await this.$API.user.save.post(formData);
this.isSaveing = false;
if(res.code == 200){
// OR /
this.saveDialogVisible = false;
this.$message.success("操作成功")
}else{
this.$alert(res.message, "提示", {type: 'error'})
}
})
},
// //
selectionChange(selection){ selectionChange(selection){
this.selection = selection; this.selection = selection;
@ -199,6 +160,17 @@
// //
upsearch(){ upsearch(){
},
//
handleSuccess(data, mode){
if(mode=='add'){
data.id = new Date().getTime()
this.$refs.table.tableData.unshift(data)
}else if(mode=='edit'){
this.$refs.table.tableData.filter(item => item.id===data.id ).forEach(item => {
Object.assign(item, data)
})
}
} }
} }
} }

View File

@ -1,55 +1,65 @@
<template> <template>
<el-form :model="form" :rules="rules" :disabled="mode=='show'" ref="dialogForm" label-width="80px" label-position="top"> <el-dialog :title="titleMap[mode]" v-model="visible" :width="500" destroy-on-close>
<el-form :model="form" :rules="rules" :disabled="mode=='show'" ref="dialogForm" label-width="100px" label-position="top">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="24"> <el-col :span="24">
<el-form-item label="头像" prop="avatar"> <el-form-item label="头像" prop="avatar">
<sc-upload v-model="form.avatar" title="上传头像" :action="uploadUrl"></sc-upload> <sc-upload v-model="form.avatar" title="上传头像"></sc-upload>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="登录账号" prop="userName"> <el-form-item label="登录账号" prop="userName">
<el-input v-model="form.userName" clearable></el-input> <el-input v-model="form.userName" placeholder="用于登录系统" clearable></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="姓名" prop="name"> <el-form-item label="姓名" prop="name">
<el-input v-model="form.name" clearable></el-input> <el-input v-model="form.name" placeholder="请输入完整的真实姓名" clearable></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20" v-if="mode=='add'">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="登录密码" prop="password"> <el-form-item label="登录密码" prop="password">
<el-input v-model="form.password" clearable></el-input> <el-input type="password" v-model="form.password" clearable show-password></el-input>
<div v-if="mode=='edit'" class="el-form-item-msg">如不修改密码可为空</div>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="确认密码" prop="password2"> <el-form-item label="确认密码" prop="password2">
<el-input v-model="form.password2" clearable></el-input> <el-input type="password" v-model="form.password2" clearable show-password></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="24">
<el-form-item label="所属角色" prop="group"> <el-form-item label="所属角色" prop="group">
<el-cascader v-model="form.group" :options="groups" :props="groupsProps" :show-all-levels="false" clearable></el-cascader> <el-cascader v-model="form.group" :options="groups" :props="groupsProps" :show-all-levels="false" clearable style="width: 100%;"></el-cascader>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
<template #footer>
<el-button @click="visible=false" > </el-button>
<el-button v-if="mode!='show'" type="primary" :loading="isSaveing" @click="submit()"> </el-button>
</template>
</el-dialog>
</template> </template>
<script> <script>
export default { export default {
props: { emits: ['success'],
mode: { type: String, default: "add" }
},
data() { data() {
return { return {
uploadUrl: this.$API.demo.upload.url, mode: "add",
titleMap: {
add: '新增用户',
edit: '编辑用户',
show: '查看'
},
visible: false,
isSaveing: false,
// //
form: { form: {
id:"", id:"",
@ -71,17 +81,20 @@
], ],
password: [ password: [
{required: true, message: '请输入登录密码'}, {required: true, message: '请输入登录密码'},
{validator: () => { {validator: (rule, value, callback) => {
if (this.form.password2 !== '') { if (this.form.password2 !== '') {
this.$refs.dialogForm.validateField('password2'); this.$refs.dialogForm.validateField('password2');
} }
callback();
}} }}
], ],
password2: [ password2: [
{required: true, message: '请再次输入密码'}, {required: true, message: '请再次输入密码'},
{validator: (value, callback) => { {validator: (rule, value, callback) => {
if (value !== this.form.password) { if (value !== this.form.password) {
callback(new Error('两次输入密码不一致!')); callback(new Error('两次输入密码不一致!'));
}else{
callback();
} }
}} }}
], ],
@ -99,23 +112,34 @@
} }
}, },
mounted() { mounted() {
if(this.mode != 'add'){
this.rules.password = []
this.rules.password2 = []
}
this.getGroup() this.getGroup()
}, },
methods: { methods: {
//
show(mode='add'){
this.mode = mode;
this.visible = true;
this.form = this.$options.data().form
},
// //
async getGroup(){ async getGroup(){
var res = await this.$API.role.select.get(); var res = await this.$API.role.select.get();
this.groups = res.data; this.groups = res.data;
}, },
// //
submit(callback){ submit(){
this.$refs.dialogForm.validate((valid) => { this.$refs.dialogForm.validate(async (valid) => {
if (valid) { if (valid) {
callback(this.form) this.isSaveing = true;
var res = await this.$API.user.save.post(this.form);
this.isSaveing = false;
if(res.code == 200){
this.$emit('success', this.form, this.mode)
this.visible = false;
this.$message.success("操作成功")
}else{
this.$alert(res.message, "提示", {type: 'error'})
}
}else{ }else{
return false; return false;
} }