This commit is contained in:
shijing 2022-06-22 16:02:49 +08:00
parent a0c61a83da
commit 1ac0d23016
18 changed files with 1110 additions and 473 deletions

View File

@ -5,7 +5,7 @@ NODE_ENV = development
VUE_APP_TITLE = '曲阳金隅安全智能管控平台' VUE_APP_TITLE = '曲阳金隅安全智能管控平台'
# 接口地址 # 接口地址
VUE_APP_API_BASEURL = http://49.232.14.174:2226/api VUE_APP_API_BASEURL = http://1.203.161.103:2800/api
#VUE_APP_API_BASEURL = http://127.0.0.1:8000/api #VUE_APP_API_BASEURL = http://127.0.0.1:8000/api
# 本地端口 # 本地端口

View File

@ -173,12 +173,13 @@ export default {
}, },
user: { user: {
list: { list: {
url: `${config.API_URL}/system/user`, url: `${config.API_URL}/system/user/`,
name: "获取用户列表", name: "获取用户列表",
req: async function(params){ req: async function(params){
return await http.get(this.url, params); return await http.get(this.url, params);
} }
}, },
create: { create: {
url: `${config.API_URL}/system/user/`, url: `${config.API_URL}/system/user/`,
name: "新增用户", name: "新增用户",
@ -200,7 +201,7 @@ export default {
req: async function(id){ req: async function(id){
return await http.delete(`${config.API_URL}/system/user/${id}/`); return await http.delete(`${config.API_URL}/system/user/${id}/`);
} }
}, }
}, },
post: { post: {
list: { list: {
@ -264,5 +265,98 @@ export default {
} }
} }
}, },
task: {
list: {
url: `${config.API_URL}/system/ptask/`,
name: "定时任务列表",
req: async function(data){
return await http.get(this.url, data);
}
},
item: {
name: "定时任务详情",
req: async function(id){
return await http.get( `${config.API_URL}/system/ptask/${id}/`);
}
},
create: {
url: `${config.API_URL}/system/ptask/`,
name: "创建定时任务",
req: async function(data){
return await http.post(this.url,data);
}
},
update: {
name: "更新定时任务",
req: async function(id, data){
return await http.put(
`${config.API_URL}/system/ptask/${id}/`,
data
);
}
},
updateToggle: {
name: "修改启用禁用状态",
req: async function(id, data){
return await http.put(
`${config.API_URL}/system/ptask/${id}/toggle/`,
data
);
}
},
delete: {
name: "删除定时任务",
req: async function(id){
return await http.delete(`${config.API_URL}/system/ptask/${id}/`);
}
},
deletes: {
url: `${config.API_URL}/system/ptask/deletes/`,
name: "批量删除定时任务",
req: async function(data){
return await http.post(this.url,data);
}
},
runOnce: {
name: "执行一次",
req: async function(data){
return await http.post(`${config.API_URL}/system/ptask/${id}/run_once/`,data);
}
},
result: {
url: `${config.API_URL}/system/ptask_result/`,
name: "任务执行结果列表",
req: async function(data){
return await http.get(this.url, data);
}
},
resultItem: {
name: "任务执行结果详情",
req: async function(id){
return await http.get( `${config.API_URL}/system/ptask_result/${id}/`);
}
},
},
userPost:{
list: {
url: `${config.API_URL}/system/user_post/`,
name: "用户/岗位关系",
req: async function(params){
return await http.get(this.url, params);
}
},
create: {
url: `${config.API_URL}/system/user_post/`,
name: "新增用户/岗位关系",
req: async function(data){
return await http.post(this.url,data);
}
},
delete: {
name: "删除用户/岗位关系",
req: async function(id){
return await http.delete(`${config.API_URL}/system/user_post/${id}/`);
}
}
}
} }

View File

@ -172,7 +172,7 @@ export default {
} }
} }
}, },
customfield:{ field:{
list: { list: {
url: `${config.API_URL}/wf/customfield/`, url: `${config.API_URL}/wf/customfield/`,
name: "字段列表", name: "字段列表",

View File

@ -122,6 +122,16 @@ const routes = [
"icon": "el-icon-menu", "icon": "el-icon-menu",
}, },
"component": "wf/ticket" "component": "wf/ticket"
},
{
"name": "configuration",
"path": "/wf/configuration",
"meta": {
"title": "工单",
"icon": "el-icon-menu",
"hidden":true
},
"component": "wf/configuration"
}, },
] ]
}, },
@ -359,7 +369,7 @@ const routes = [
}, },
"component": "ops/log_request" "component": "ops/log_request"
}, },
{ /*{
"name": "monitor", "name": "monitor",
"path": "/ops/monitor", "path": "/ops/monitor",
"meta": { "meta": {
@ -367,7 +377,7 @@ const routes = [
"icon": "el-icon-fold", "icon": "el-icon-fold",
}, },
"component": "ops/monitor" "component": "ops/monitor"
}, },*/
] ]
}, },
] ]

View File

@ -93,7 +93,7 @@
<el-col :md="12" :sm="24"> <el-col :md="12" :sm="24">
<el-form-item label="性别"> <el-form-item label="性别">
<el-radio-group v-model="form.gender"> <el-radio-group v-model="form.gender">
<el-radio label="男" size="large" ></el-radio> <el-radio label="男" size="large"></el-radio>
<el-radio label="女" size="large"></el-radio> <el-radio label="女" size="large"></el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
@ -110,6 +110,50 @@
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
<!--drag-sort -->
<sc-form-table v-model="userPostForm.list" :addTemplate="addTemplate" placeholder="暂无数据">
<el-table-column prop="val" label="名称" min-width="150">
<template #default="scope">
<span v-if="scope.row.id">{{scope.row.name}}</span>
<el-input v-else v-model="scope.row.name" placeholder="名称"></el-input>
</template>
</el-table-column>
<el-table-column prop="time" label="部门" min-width="150">
<template #default="scope">
<span v-if="scope.row.id">{{scope.row.dept}}</span>
<el-cascader
v-else
v-model="scope.row.dept"
:options="group"
:props="groupsProps"
:show-all-levels="false"
clearable
style="width: 100%"
@change="handleChange"
></el-cascader>
</template>
</el-table-column>
<el-table-column prop="type" label="岗位" min-width="150">
<template #default="scope">
<span v-if="scope.row.id">{{scope.row.post}}</span>
<el-select v-else v-model="scope.row.post" placeholder="请选择所在岗位">
<el-option v-for="item in postOptions" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column prop="val" label="排序" min-width="80">
<template #default="scope">
<span v-if="scope.row.id">{{scope.row.sort}}</span>
<el-input v-else v-model="scope.row.sort" placeholder="请输入内容"></el-input>
</template>
</el-table-column>
<el-table-column prop="open" label="操作" width="80" align="center">
<template #default="scope">
<el-button v-if="scope.row.id" text type="danger" size="small" @click="userPostDel(scope.row.id)">删除</el-button>
<el-button v-else text type="primary" size="small" @click="createUserPost(scope.row)">添加</el-button>
</template>
</el-table-column>
</sc-form-table>
</el-main> </el-main>
<el-footer v-if="mode!=='show'"> <el-footer v-if="mode!=='show'">
<el-button <el-button
@ -147,6 +191,45 @@
emits: ["success", "closed"], emits: ["success", "closed"],
data() { data() {
return { return {
addTemplate: {
name: '',
sort: '',
user: '',
post: "",
dept: "",
},
userPostForm: {
title: "用户/岗位关系",
list: [
{
id:'1001',
name: "关系1",
sort: "1",
user: "石静",
post: "岗位",
dept: "部门",
},
{
name: '',
sort: '',
user: '',
post: "",
dept: "",
}
]
},
typeDic: [
{
label: "全局",
value: "0"
},
{
label: "局部",
value: "1"
}
],
loading: false, loading: false,
mode: "add", mode: "add",
titleMap: { titleMap: {
@ -189,20 +272,20 @@
}*/ }*/
], ],
}, },
addTemplate: { addForm: {
label: "", name: "",
prop: "", sort: "",
width: "100", user: "",
hide: false, post: "",
sortable: false, dept: [],
fixed: false,
filters: [],
}, },
depts: [], groupsProps: {
deptsProps: {
value: "id", value: "id",
checkStrictly: true multiple: false,
checkStrictly: true,
}, },
group: [],
postOptions: [],
selectionFilters: [], selectionFilters: [],
filtersAddTemplate: { filtersAddTemplate: {
text: "", text: "",
@ -212,18 +295,65 @@
}; };
}, },
mounted() { mounted() {
this.getPosts();
this.getGroup();
this.getUserPostList();
}, },
methods: { methods: {
getPosts(){
this.$API.system.post.list.req({page:0}).then(res=>{
if(res.err_msg){
this.$message.error(res.err_msg)
}else{
this.postOptions = res;
}
})
},
//
async getGroup() {
let res = await this.$API.system.dept.list.req({page: 0});
let postList = res;
this.group = res;
let posts = [];
postList.forEach(item => {
let obj = new Object();
obj.id = item.id;
obj.sort = item.sort;
obj.label = item.name;
obj.type = item.type;
obj.parent = item.parent;
obj.create_time = item.create_time;
posts.push(obj)
});
let obj = posts.reduce((res, v) => (res[v.id] = v , res), {});//Object
let arr = [];
for (let item of posts) {
// debugger;
if (item.parent == null) {
arr.push(item);
continue
}
let parent = obj[item.parent];
parent.children = parent.children ? parent.children : [];
parent.children.push(item);
}
this.group = arr;
},
// //
open(mode) { open(mode) {
this.mode = mode; this.mode = mode;
this.visible = true; this.visible = true;
return this; return this;
}, },
closeDrawer(){ closeDrawer() {
this.visible = false; this.visible = false;
this.$emit('closed'); this.$emit('closed');
}, },
handleChange(value) {
debugger;
console.log(value);
console.log(this.addForm.parent);
},
// //
submit() { submit() {
debugger; debugger;
@ -232,6 +362,7 @@
if (valid) { if (valid) {
debugger; debugger;
this.isSaveing = true; this.isSaveing = true;
this.addForm.dept = this.addForm.dept[1];
if (this.mode === 'add') { if (this.mode === 'add') {
debugger; debugger;
this.$API.hrm.employee.create.req(this.form) this.$API.hrm.employee.create.req(this.form)
@ -257,6 +388,17 @@
this.isSaveing = false; this.isSaveing = false;
return err return err
}) })
this.$API.hrm.employee.update.req(this.form.id, this.form)
.then(res => {
this.isSaveing = false;
this.visible = false;
this.$emit("success", this.form, this.mode);
this.$message.success("操作成功");
return res
}).catch(err => {
this.isSaveing = false;
return err
})
} }
} }
@ -274,6 +416,49 @@
this.selectionFilters = filters; this.selectionFilters = filters;
this.setFiltersVisible = true; this.setFiltersVisible = true;
}, },
/////
//
getUserPostList(){
this.$API.system.userPost.list.req().then(res=>{
if(res.err_msg){
this.$message.error(res.err_msg)
}else{
this.userPostForm.list=res.results;
}
})
},
//
createUserPost(row){
debugger;
console.log(row);
this.isSaveing = true;
row.dept = row.dept.slice(-1)[0];
row.user = this.form.id;
this.$API.system.userPost.create.req(row).then(res=>{
if(res.err_msg){
this.$message.error(res.err_msg)
}else{
this.userPostForm.list=res.results;
}
})
},
//
userPostDel(id){
this.$confirm(`确定删除该岗位关系吗?`, '提示', {
type: 'warning',
confirmButtonText: '删除',
confirmButtonClass: 'el-button--danger'
}).then(() => {
this.$API.system.userPost.delete.req(id).then(res=>{
if(res.err_msg){
this.$message.error(res.err_msg)
}else{
this.$message.success("操作成功");
}
})
})
},
}, },
}; };
</script> </script>

View File

@ -27,13 +27,14 @@
<el-table-column label="排序" prop="sort" min-width="200"></el-table-column> <el-table-column label="排序" prop="sort" min-width="200"></el-table-column>
<el-table-column label="操作" fixed="right" align="center" width="200"> <el-table-column label="操作" fixed="right" align="center" width="200">
<template #default="scope"> <template #default="scope">
<el-button type="text" size="small" @click="editDept(scope.row, scope.$index)">编辑</el-button> <el-button text type="primary" size="small" @click="editMenu(scope.row, scope.$index)">编辑</el-button>
<el-divider direction="vertical"></el-divider> <el-divider direction="vertical"></el-divider>
<el-popconfirm title="确定删除吗?" @confirm="delDept(scope.row, scope.$index)"> <el-button text type="danger" size="small" @click="delMenu(scope.row.id)">删除</el-button>
<!--<el-popconfirm title="确定删除吗?" @confirm="delMenu(scope.row, scope.$index)">
<template #reference> <template #reference>
<el-button type="text" size="small">删除</el-button> <el-button type="text" size="small">删除</el-button>
</template> </template>
</el-popconfirm> </el-popconfirm>-->
</template> </template>
</el-table-column> </el-table-column>
</scTable> </scTable>
@ -53,15 +54,6 @@
</el-form-item> </el-form-item>
<el-form-item label="标识"> <el-form-item label="标识">
<el-input v-model="codes" clearable style="width: 90%;"></el-input> <el-input v-model="codes" clearable style="width: 90%;"></el-input>
<!--<el-button class="formAddButton" type="primary" icon="el-icon-plus" @click="addCodes"></el-button>
<div v-if="codesLimited" style="display: flex">
<el-input v-model="codes" clearable style="width: 50%;flex: 1"></el-input>
<div style="width: 50%;display: inline-block;position: relative;flex: 1">
<el-button class="formSaveButton" type="success" icon="el-icon-check" @click="saveCodes"></el-button>
<el-button class="formDelButton" type="danger" icon="el-icon-close" @click="delCodes"></el-button>
</div>
</div>-->
</el-form-item> </el-form-item>
<el-form-item label="父级"> <el-form-item label="父级">
<el-cascader <el-cascader
@ -73,11 +65,9 @@
style="width: 100%" style="width: 100%"
@change="handleChange" @change="handleChange"
></el-cascader> ></el-cascader>
<!--<el-input v-model="addForm.parent" clearable></el-input>-->
</el-form-item> </el-form-item>
<el-form-item label="排序"> <el-form-item label="排序">
<el-input-number v-model="addForm.sort" controls-position="right" :min="1" <el-input-number v-model="addForm.sort" controls-position="right" :min="1" style="width: 100%;"></el-input-number>
style="width: 100%;"></el-input-number>
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
@ -209,7 +199,7 @@
this.codes = '' this.codes = ''
}, },
// //
editDept(row) { editMenu(row) {
// debugger; // debugger;
this.type = 'edit'; this.type = 'edit';
this.addForm.id = row.id; this.addForm.id = row.id;
@ -243,36 +233,34 @@
return data return data
}, },
// //
delDept(row) { delMenu(id) {
var id = row.id; this.$confirm(`确定删除吗?`, '提示', {
var res = this.$API.system.permDel.delete(id); type: 'warning',
if (res.code == 200) { confirmButtonText: '删除',
this.$refs.table.refresh(); confirmButtonClass: 'el-button--danger'
this.$message.success("删除成功") }).then(() => {
} else { this.$API.system.permission.delete.req(id).then(res=>{
this.$alert(res.message, "提示", {type: 'error'}) if(res.err_msg){
} this.$message.error(res.err_msg);
this.$refs.table.refresh()
}else{
this.$message.success("操作成功");
}
});
})
}, },
submitHandle() { submitHandle() {
let that = this; let that = this;
debugger;
console.log(this.addForm.parent);
debugger;
if (this.addForm.parent !== null) { if (this.addForm.parent !== null) {
this.addForm.parent = this.addForm.parent[this.addForm.parent.length - 1]; this.addForm.parent = this.addForm.parent[this.addForm.parent.length - 1];
} else { } else {
this.addForm.parent = "" this.addForm.parent = ""
} }
debugger;
console.log(this.codes);
if(this.codes.indexOf(','>-1)){ if(this.codes.indexOf(','>-1)){
this.addForm.codes = this.codes.split(','); this.addForm.codes = this.codes.split(',');
}else{ }else{
this.addForm.codes.push(this.codes) this.addForm.codes.push(this.codes)
} }
debugger;
console.log(this.addForm.codes);
this.$refs.addForm.validate((valid) => { this.$refs.addForm.validate((valid) => {
debugger; debugger;
if (valid) { if (valid) {
@ -283,11 +271,15 @@
} else { } else {
res = this.$API.system.permission.update.req(that.addForm.id, that.addForm); res = this.$API.system.permission.update.req(that.addForm.id, that.addForm);
} }
this.isSaveing = false;
this.limitedVisible = false;
this.$refs.table.refresh();
console.log(res); console.log(res);
debugger; debugger;
if(res.err_msg){
this.$message.error(res.err_msg)
}else{
this.isSaveing = false;
this.limitedVisible = false;
this.$refs.table.refresh();
}
} }
}) })
}, },
@ -297,7 +289,8 @@
}, },
// //
upsearch() { upsearch() {
let params = {search:this.search.keyword};
this.$refs.table.queryData(params);
}, },
// //
handleSaveSuccess(data, mode) { handleSaveSuccess(data, mode) {

View File

@ -138,5 +138,5 @@
</script> </script>
<style scoped> <style scoped>
.treeMain {height:280px;overflow: auto;border: 1px solid #dcdfe6;margin-bottom: 10px;} .treeMain {width: 100%;height:280px;overflow: auto;border: 1px solid #dcdfe6;margin-bottom: 10px;}
</style> </style>

View File

@ -25,7 +25,7 @@
<el-divider direction="vertical"></el-divider> <el-divider direction="vertical"></el-divider>
<el-popconfirm title="确定删除吗?" @confirm="delDept(scope.row, scope.$index)"> <el-popconfirm title="确定删除吗?" @confirm="delDept(scope.row, scope.$index)">
<template #reference> <template #reference>
<el-button type="text" size="small">删除</el-button> <el-button text type="danger" size="small">删除</el-button>
</template> </template>
</el-popconfirm> </el-popconfirm>
</template> </template>
@ -192,20 +192,17 @@
}, },
// //
delDept(row){ delDept(row){
var id = row.id; let id = row.id;
var res = this.$API.system.dept.delete.req(id); let res = this.$API.system.dept.delete.req(id);
if(res.code == 200){ if(res.err_msg){
this.$message.error(res.err_msg)
}else{
this.$refs.table.refresh(); this.$refs.table.refresh();
this.$message.success("删除成功") this.$message.success("删除成功")
}else{
this.$alert(res.message, "提示", {type: 'error'})
} }
}, },
submitHandle(){ submitHandle(){
let that = this; let that = this;
debugger;
console.log(this.addForm.parent);
debugger;
this.addForm.parent = this.addForm.parent!==null?this.addForm.parent[0]?this.addForm.parent[0]:'':''; this.addForm.parent = this.addForm.parent!==null?this.addForm.parent[0]?this.addForm.parent[0]:'':'';
this.$refs.addForm.validate( (valid) => { this.$refs.addForm.validate( (valid) => {
debugger; debugger;
@ -217,11 +214,15 @@
}else{ }else{
res = this.$API.system.dept.update.req(that.addForm.id,that.addForm); res = this.$API.system.dept.update.req(that.addForm.id,that.addForm);
} }
this.isSaveing = false;
this.limitedVisible = false;
this.$refs.table.refresh();
console.log(res); console.log(res);
debugger; debugger;
if(res.err_msg){
this.$message.error(res.err_msg)
}else{
this.isSaveing = false;
this.limitedVisible = false;
this.$refs.table.refresh();
}
} }
}) })
}, },

View File

@ -384,11 +384,11 @@
async delDic(row,index){ async delDic(row,index){
var delId = row.id; var delId = row.id;
var res = await this.$API.system.dict.delete.req(delId); var res = await this.$API.system.dict.delete.req(delId);
if(res.code == 200){ if(res.err.msg){
this.$message.error(res.err.msg)
}else{
this.$refs.table.tableData.splice(index, 1); this.$refs.table.tableData.splice(index, 1);
this.$message.success("删除成功") this.$message.success("删除成功")
}else{
this.$alert(res.message, "提示", {type: 'error'})
} }
}, },

View File

@ -39,11 +39,22 @@
<scTable ref="table2" :apiObj="apiObj2" row-key="id" stripe :hidePagination="true"> <scTable ref="table2" :apiObj="apiObj2" row-key="id" stripe :hidePagination="true">
<el-table-column type="selection" width="50"></el-table-column> <el-table-column type="selection" width="50"></el-table-column>
<el-table-column label="" type="index"></el-table-column> <el-table-column label="" type="index"></el-table-column>
<el-table-column label="权限范围" prop="filter_recipient" width="150"></el-table-column> <el-table-column label="权限范围" prop="data_range" min-width="80">
<el-table-column label="关联岗位" prop="filter_area_level" width="150"></el-table-column> <template #default="scope">{{options[scope.row.data_range]}}</template>
<el-table-column label="关联角色" prop="can_handle" width="80"></el-table-column> </el-table-column>
<el-table-column label="关联岗位" prop="post" min-width="80">
<template #default="scope">{{scope.row.post_.name}}</template>
</el-table-column>
<el-table-column label="关联角色" prop="role" min-width="80">
<template #default="scope">{{scope.row.role_.name}}</template>
</el-table-column>
<el-table-column label="创建时间" prop="create_time" min-width="80">
<template #default="scope">{{scope.row.create_time}}</template>
</el-table-column>
<el-table-column label="操作" fixed="right" align="right"> <el-table-column label="操作" fixed="right" align="right">
<template #default="scope"> <template #default="scope">
<el-button type="warning" link size="small" @click="postRoleEdit(scope.row)">编辑
</el-button>
<el-button type="warning" link size="small" @click="postRoleDel(scope.row)">删除 <el-button type="warning" link size="small" @click="postRoleDel(scope.row)">删除
</el-button> </el-button>
</template> </template>
@ -54,7 +65,7 @@
</el-container> </el-container>
<save-dialog v-if="dialog.save" ref="saveDialog" @success="handleSaveSuccess" <save-dialog v-if="dialog.save" ref="saveDialog" @success="handleSaveSuccess"
@closed="dialog.save=false"></save-dialog> @closed="dialog.save=false"></save-dialog>
<save-role-dialog v-if="dialog.roleSave" ref="saveDialog" @success="handleSaveSuccess" <save-role-dialog v-if="dialog.roleSave" ref="saveRoleDialog" @success="handleSaveRoleSuccess"
@closed="dialog.roleSave=false"></save-role-dialog> @closed="dialog.roleSave=false"></save-role-dialog>
</template> </template>
@ -77,13 +88,23 @@
roleSave: false, roleSave: false,
}, },
selection: [], selection: [],
postId:'',
options: {
10: "全部",
20: "自定义",
30: "同级及以下",
40: "本级及以下",
50: "本级",
60: "仅本人"
},
} }
}, },
methods: { methods: {
rowClick(row) { rowClick(row) {
var params = { let params = {
event_cate: row.id post: row.id
}; };
this.postId = row.id;
this.$refs.table2.reload(params) this.$refs.table2.reload(params)
}, },
// //
@ -118,7 +139,7 @@
this.$message.success("操作成功") this.$message.success("操作成功")
}, },
// //
handleSaveSuccess(data, mode) { handleSaveSuccess(data, mode) {
// //
if (mode == 'add') { if (mode == 'add') {
@ -130,10 +151,20 @@
// //
// this.$refs.table.refresh() // this.$refs.table.refresh()
}, },
//
handleSaveRoleSuccess() {
this.$refs.table2.refresh()
},
addPostRole(){ addPostRole(){
this.dialog.roleSave = true; this.dialog.roleSave = true;
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.saveDialog.open() this.$refs.saveRoleDialog.open("add").setData({postId:this.postId})
})
},
postRoleEdit(row){
this.dialog.roleSave = true;
this.$nextTick(() => {
this.$refs.saveRoleDialog.open("edit").setData(row)
}) })
}, },
delPostRole(){ delPostRole(){
@ -142,15 +173,24 @@
closed(){ closed(){
this.dialog.save = false; this.dialog.save = false;
this.dialog.roleSave = false; this.dialog.roleSave = false;
this.postId = '';
this.$refs.table2.refresh();
}, },
postRoleDel(){ postRoleDel(row){
this.$confirm(`确定删除选中的岗位关系吗?如果删除项中含有子集将会被一并删除`, '提示', { this.$confirm(`确定删除选中的岗位关系吗?`, '提示', {
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
const loading = this.$loading(); this.$API.system.postrole.delete.req(row.id).then(res=>{
this.$refs.table.refresh(); if(res.err_msg){
loading.close(); this.$message.error(res.err_msg)
this.$message.success("操作成功") }else{
const loading = this.$loading();
this.$refs.table2.refresh();
loading.close();
this.$message.success("操作成功")
}
})
}).catch(() => { }).catch(() => {
}) })

View File

@ -117,10 +117,20 @@ export default {
methods: { methods: {
// //
open(mode = "add"){ open(mode = "add"){
debugger;
this.mode = mode; this.mode = mode;
this.visible = true; this.visible = true;
return this; return this;
}, },
//
setData(data) {
debugger;
if(data.postId){
this.form.post=data.postId;
}else{
Object.assign(this.form, data);
}
},
// //
async submit() { async submit() {
var valid = await this.$refs.form.validate().catch(() => {}); var valid = await this.$refs.form.validate().catch(() => {});
@ -146,10 +156,7 @@ export default {
return err; return err;
} }
}, },
//
setData(data) {
Object.assign(this.form, data);
},
getPosts(){ getPosts(){
this.$API.system.post.list.req({page:0}).then(res=>{ this.$API.system.post.list.req({page:0}).then(res=>{
if(res.err_msg){ if(res.err_msg){

View File

@ -126,7 +126,7 @@
}, },
// //
async getGroup() { async getGroup() {
var res = await this.$API.system.dept.list.req({page: 0}); let res = await this.$API.system.permission.list.req({page: 0});
let postList = res; let postList = res;
let posts = []; let posts = [];
postList.forEach(item => { postList.forEach(item => {
@ -169,25 +169,28 @@
console.log(this.menu.list); console.log(this.menu.list);
},*/ },*/
submitHandle(){ submitHandle(){
debugger;
let that = this; let that = this;
debugger;
this.addForm.perms = this.menu.checked; this.addForm.perms = this.menu.checked;
this.$refs.addForm.validate( (valid) => { this.$refs.addForm.validate( (valid) => {
debugger;
if (valid) { if (valid) {
this.isSaveing = true; this.isSaveing = true;
var res; let res;
if(this.type==='add'){ if(this.type==='add'){
res = this.$API.system.role.create.req(that.addForm); res = this.$API.system.role.create.req(that.addForm);
}else{ }else{
res = this.$API.system.role.update.req(that.addForm.id,that.addForm); res = this.$API.system.role.update.req(that.addForm.id,that.addForm);
} }
this.isSaveing = false;
this.limitedVisible = false;
this.$refs.table.refresh();
console.log(res); console.log(res);
debugger; debugger;
if(res.err_msg){
this.$message.error(res.err_msg);
}else{
this.isSaveing = false;
this.limitedVisible = false;
this.$refs.table.refresh();
}
} }
}) })
}, },
@ -195,11 +198,13 @@
// //
roleEdit(row){ roleEdit(row){
this.type='edit'; this.type='edit';
this.limitedVisible = true; this.menu.checked = '[]';
this.addForm.id=row.id; this.addForm.id=row.id;
this.addForm.name=row.name; this.addForm.name=row.name;
this.addForm.code=row.code; this.addForm.code=row.code;
this.menu.checked = row.perms;
this.addForm.description=row.description; this.addForm.description=row.description;
this.limitedVisible = true;
}, },
// //
@ -250,5 +255,5 @@
} }
</script> </script>
<style scoped> <style scoped>
.treeMain {height:280px;overflow: auto;border: 1px solid #dcdfe6;margin-bottom: 10px;} .treeMain {width: 100%;height:280px;overflow: auto;border: 1px solid #dcdfe6;margin-bottom: 10px;}
</style> </style>

View File

@ -0,0 +1,220 @@
<template>
<el-main>
<el-row :gutter="15">
<el-col :xl="6" :lg="6" :md="8" :sm="12" :xs="24" v-for="item in list" :key="item.id">
<el-card class="task task-item" shadow="hover">
<h2>{{item.title}}</h2>
<ul>
<li>
<h4>执行类</h4>
<p>{{item.handler}}</p>
</li>
<li>
<h4>定时规则</h4>
<p>{{item.cron}}</p>
</li>
</ul>
<div class="bottom">
<div class="state">
<el-tag v-if="item.state=='1'" size="mini">准备就绪</el-tag>
<el-tag v-if="item.state=='-1'" size="mini" type="info">停用</el-tag>
</div>
<div class="handler">
<el-popconfirm title="确定立即执行吗?" @confirm="run(item)">
<template #reference>
<el-button type="primary" icon="el-icon-caret-right" size="mini" circle></el-button>
</template>
</el-popconfirm>
<el-dropdown trigger="click">
<el-button type="primary" icon="el-icon-more" size="mini" circle plain></el-button>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item @click="editTask(item)">编辑</el-dropdown-item>
<el-dropdown-item @click="logs(item)">日志</el-dropdown-item>
<el-dropdown-item @click="delTask(item)" divided>删除</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</div>
</div>
</el-card>
</el-col>
<el-col :xl="6" :lg="6" :md="8" :sm="12" :xs="24">
<el-card class="task task-add" shadow="none" @click="addTask">
<i class="el-icon-plus"></i>
<p>添加计划任务</p>
</el-card>
</el-col>
</el-row>
</el-main>
<el-dialog :title="titleMap[mode]" v-model="visible" destroy-on-close>
<el-form :model="form" :rules="rules" ref="addForm" label-width="100px" label-position="left">
<el-form-item label="任务标题" prop="name">
<el-input v-model="form.name" placeholder="计划任务标题" clearable></el-input>
</el-form-item>
<el-form-item label="执行任务" prop="task">
<el-input v-model="form.task" placeholder="执行任务" clearable></el-input>
</el-form-item>
<el-form-item label="定时间隔">
<el-input v-model="form.interval" placeholder="请输入定时间隔" clearable></el-input>
</el-form-item>
<el-form-item label="定时命令">
<el-input v-model="form.crontab" placeholder="请输入定时命令" clearable></el-input>
</el-form-item>
<el-form-item label="定时规则">
<el-input v-model="form.args" placeholder="请输入Cron定时规则" clearable></el-input>
</el-form-item>
<el-form-item label="定时规则">
<el-input v-model="form.kwargs" placeholder="请输入Cron定时规则" clearable></el-input>
</el-form-item>
<!--<el-form-item label="是否启用">
<el-switch v-model="form.used" active-value="1" inactive-value="-1"></el-switch>
</el-form-item>-->
</el-form>
<template #footer>
<el-button @click="visible=false" > </el-button>
<el-button type="primary" :loading="isSaving" @click="submit()"> </el-button>
</template>
</el-dialog>
<el-drawer title="计划任务日志" v-model="logsVisible" :size="600" direction="rtl" destroy-on-close>
<logs></logs>
</el-drawer>
</template>
<script>
import logs from './taskLogs'
export default {
name: 'task',
components: {
logs
},
data() {
return {
list: [
{
id: "1",
title: "清理服务器缓存",
handler: "cleanUpCacheHandler",
cron: "59 59 23 * * ? *",
state: "1"
}
],
mode: "add",
editId:null,
titleMap: {
add: '新增计划任务',
edit: '编辑计划任务'
},
form: {
name: "",
task: "",
interval: "",
crontab: "",
args: "",
kwargs: "",
},
rules: {
name:[
{required: true, message: '请填写任务名称'}
],
task:[
{required: true, message: '请填写任务内容'}
]
},
visible: false,
isSaving: false,
logsVisible: false,
}
},
mounted() {
this.getList();
},
methods: {
getList(){
this.$API.system.task.list.req().then(res=>{
if(res.err_msg){
this.message.error(res.err_msg)
}else{
debugger;
this.list.concat(res.results)
}
})
},
addTask(){
this.visible = true;
this.mode = 'add';
},
editTask(item){
this.visible = true;
this.mode = 'edit';
this.editId = item.id;
Object.assign(this.form, item);
},
//
submit(){
this.$refs.addForm.validate((valid) => {
if (valid) {
this.isSaveing = true;
let res = null;
if(this.mode==='add'){
res = this.$API.system.task.create.req(this.form);
}else{
res = this.$API.system.task.update.req(this.editId,this.form);
}
if(res.err_msg){
this.message.error(res.err_msg)
}else{
this.getList();
this.isSaveing = false;
this.visible = false;
this.$message.success("操作成功");
}
}
})
},
delTask(task){
this.$confirm(`确认删除 ${task.title} 计划任务吗?`,'提示', {
type: 'warning',
confirmButtonText: '删除',
confirmButtonClass: 'el-button--danger'
}).then(() => {
this.$API.system.task.delete.req(task.id).then(res=>{
if(res.err_msg){
this.message.error(res.err_msg)
}else{
this.list.splice(this.list.findIndex(item => item.id === task.id), 1);
this.getList();
this.$message.success("操作成功");
}
})
}).catch(() => {
//
})
},
logs(){
this.logsVisible = true
},
run(task){
this.$API.system.task.runOnce.req(task.id).then(res=>{
})
this.$message.success(`已成功执行计划任务:${task.title}`)
}
}
}
</script>
<style scoped>
.task {height: 210px;}
.task-item h2 {font-size: 15px;color: #3c4a54;padding-bottom:15px;}
.task-item li {list-style-type:none;margin-bottom: 10px;}
.task-item li h4 {font-size: 12px;font-weight: normal;color: #999;}
.task-item li p {margin-top: 5px;}
.task-item .bottom {border-top: 1px solid #EBEEF5;text-align: right;padding-top:10px;display: flex;justify-content: space-between;align-items: center;}
.task-add {display: flex;flex-direction: column;align-items: center;justify-content: center;text-align: center;cursor: pointer;color: #999;}
.task-add:hover {color: #409EFF;}
.task-add i {font-size: 30px;}
.task-add p {font-size: 12px;margin-top: 20px;}
</style>

View File

@ -0,0 +1,99 @@
<template>
<el-container>
<el-main style="padding:0 20px;">
<scTable ref="table" :data="data" stripe>
<el-table-column label="执行时间" prop="time" width="200"></el-table-column>
<el-table-column label="执行结果" prop="state" width="100">
<template #default="scope">
<span v-if="scope.row.state==200" style="color: #67C23A;"><i class="el-icon-success"></i> 成功</span>
<span v-else style="color: #F56C6C;"><i class="el-icon-error"></i> 异常</span>
</template>
</el-table-column>
<el-table-column label="执行日志" prop="logs" width="100" fixed="right">
<template #default="scope">
<el-button size="mini" @click="show(scope.row)" type="text">日志</el-button>
</template>
</el-table-column>
</scTable>
</el-main>
</el-container>
<el-drawer title="日志" v-model="logsVisible" :size="500" direction="rtl" destroy-on-close>
<el-main style="padding:0 20px 20px 20px;">
<pre style="font-size: 12px;color: #999;padding:20px;background: #333;font-family: consolas;line-height: 1.5;overflow: auto;">{{demoLog}}</pre>
</el-main>
</el-drawer>
</template>
<script>
export default {
data() {
return {
logsVisible: false,
demoLog: `2021-07-07 12:35:00 [com.xxl.job.core.thread.JobThread#run]-[124]-[Thread-308]
----------- xxl-job job execute start -----------
----------- Param:
2021-07-07 12:35:00 [com.heronshn.reservation.jobhandler.AqshMasterDataSendHandler#execute]-[31]-[Thread-308] aqshMasterDataSendHandler start
2021-07-07 12:35:00 [com.heronshn.reservation.data.service.impl.AqshVehicleServiceImpl#send]-[42]-[Thread-308] send 45
2021-07-07 12:35:00 [com.heronshn.reservation.data.service.impl.AqshVehicleServiceImpl#send]-[45]-[Thread-308] webapi http://127.0.0.1:48080
2021-07-07 12:35:00 [com.heronshn.reservation.jobhandler.AqshMasterDataSendHandler#execute]-[33]-[Thread-308] aqshMasterDataSendHandler vehicle end
2021-07-07 12:35:00 [com.heronshn.reservation.jobhandler.AqshMasterDataSendHandler#execute]-[35]-[Thread-308] aqshMasterDataSendHandler stop
2021-07-07 12:35:00 [com.xxl.job.core.thread.JobThread#run]-[158]-[Thread-308]
----------- xxl-job job execute end(finish) -----------
----------- ReturnT:ReturnT [code=200, msg=null, content=null]
2021-07-07 12:35:00 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[176]-[Thread-10]
----------- xxl-job job callback finish.
[Load Log Finish]`,
data: [
{
time: "2021-07-07 00:00:00",
state: "500",
logs: ""
},
{
time: "2021-07-06 00:00:00",
state: "200",
logs: ""
},
{
time: "2021-07-05 00:00:00",
state: "200",
logs: ""
},
{
time: "2021-07-04 00:00:00",
state: "200",
logs: ""
},
{
time: "2021-07-03 00:00:00",
state: "200",
logs: ""
},
{
time: "2021-07-02 00:00:00",
state: "200",
logs: ""
},
{
time: "2021-07-01 00:00:00",
state: "200",
logs: ""
}
]
}
},
mounted() {
},
methods: {
show(){
this.logsVisible = true;
}
}
}
</script>
<style>
</style>

View File

@ -39,12 +39,6 @@
:disabled="selection.length == 0" :disabled="selection.length == 0"
@click="batch_del" @click="batch_del"
></el-button> ></el-button>
<!--<el-button
type="primary"
plain
:disabled="selection.length == 0"
>分配角色
</el-button>-->
<el-button <el-button
type="primary" type="primary"
plain plain
@ -84,22 +78,6 @@
label="ID" label="ID"
prop="id" prop="id"
></el-table-column> ></el-table-column>
<!--<el-table-column
label="头像"
width="80"
column-key="filterAvatar"
:filters="[
{ text: '已上传', value: '1' },
{ text: '未上传', value: '0' },
]"
>
<template #default="scope">
<el-avatar
:src="getImgUrl(scope.row.avatar)"
size="small"
></el-avatar>
</template>
</el-table-column>-->
<el-table-column <el-table-column
label="姓名" label="姓名"
prop="name" prop="name"
@ -134,7 +112,7 @@
@confirm="table_del(scope.row, scope.$index)" @confirm="table_del(scope.row, scope.$index)"
> >
<template #reference> <template #reference>
<el-button type="text" size="small"> <el-button text type="danger" size="small">
删除 删除
</el-button> </el-button>
</template> </template>
@ -178,16 +156,6 @@
clearable clearable
></el-input> ></el-input>
</el-form-item> </el-form-item>
<!--<el-form-item label="所属部门">
<el-cascader
v-model="addForm.belong_dept"
:options="group"
:props="groupsProps"
:show-all-levels="false"
clearable
style="width: 100%"
></el-cascader>
</el-form-item>-->
<el-form-item label="是否在用"> <el-form-item label="是否在用">
<el-switch v-model="addForm.is_active" /> <el-switch v-model="addForm.is_active" />
</el-form-item> </el-form-item>
@ -321,8 +289,8 @@
// //
async table_del(row) { async table_del(row) {
let res = await this.$API.system.user.delete.req(row.id); let res = await this.$API.system.user.delete.req(row.id);
if (res.err.msg) { if (res.err_msg) {
this.$alert(res.message, "提示", {type: "error"}); this.$message.error(res.err_msg);
} else { } else {
this.$refs.table.refresh(); this.$refs.table.refresh();
this.$message.success("删除成功"); this.$message.success("删除成功");
@ -384,9 +352,7 @@
debugger; debugger;
this.$refs.addForm.validate(async (valid) => { this.$refs.addForm.validate(async (valid) => {
if (valid) { if (valid) {
debugger;
this.isSaveing = true; this.isSaveing = true;
// this.addForm.belong_dept = this.addForm.belong_dept[this.addForm.belong_dept.length - 1];
let res; let res;
if(this.type==='add'){ if(this.type==='add'){
res = await this.$API.system.user.create.req(this.addForm); res = await this.$API.system.user.create.req(this.addForm);
@ -394,12 +360,11 @@
res = await this.$API.system.user.update.req(this.addForm.id,this.addForm); res = await this.$API.system.user.update.req(this.addForm.id,this.addForm);
} }
this.isSaveing = false; this.isSaveing = false;
if(res.code == 200){ if(res.err_msg){
this.visible = false; this.$message(res.err_msg);
this.$message.success("操作成功")
}else{ }else{
this.visible = false; this.limitedVisible = false;
this.$alert(res.message, "提示", {type: 'error'}); this.$message.success("操作成功")
} }
}else{ }else{
return false; return false;

View File

@ -1,120 +1,129 @@
<template> <template>
<el-main class="nopadding"> <el-container>
<el-button type="primary" icon="el-icon-plus" @click="handleAdd"></el-button> <el-header>
<el-table ref="table" :data="list" row-key="id" stripe> <div class="left-panel">
<el-table-column type="index" width="50"/> <el-button type="primary" icon="el-icon-plus" @click="handleAdd"></el-button>
<el-table-column label="字段标识" prop="field_key"></el-table-column>
<el-table-column label="字段名称" prop="field_name"></el-table-column>
<el-table-column label="字段类型" prop="field_type"></el-table-column>
<el-table-column label="顺序ID" prop="sort"></el-table-column>
<el-table-column label="字段描述" prop="description"></el-table-column>
<el-table-column label="创建时间" prop="create_time"></el-table-column>
<el-table-column label="操作" fixed="right" align="right" width="120">
<template #default="scope">
<el-button type="text" size="small" @click="handleEdit(scope.row)">编辑</el-button>
<el-popconfirm title="确定删除吗?">
<template #reference>
<el-button type="text" size="small">删除</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<el-dialog
v-model="dialogVisible"
:title="titleMap[type]">
<el-form
ref="Form"
:model="addForm"
label-width="80px"
label-position="right"
:rules="rule">
<el-form-item label="字段标识" prop="field_key">
<el-input v-model="addForm.field_key" placeholder="字段标识"/>
</el-form-item>
<el-form-item label="字段名称" prop="field_name">
<el-input v-model="addForm.field_name" placeholder="字段名称"/>
</el-form-item>
<el-form-item label="字段描述" prop="description">
<el-input v-model="addForm.description" placeholder="字段描述"/>
</el-form-item>
<el-form-item label="占位符" prop="placeholder">
<el-input v-model="addForm.placeholder" placeholder="占位符"/>
</el-form-item>
<el-form-item label="展示标签" prop="field_type">
<el-select style="width: 100%" v-model="addForm.field_type" placeholder="请选择">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="字段标签" v-show="addForm.field_type=='select'||addForm.field_type=='selects'">
<el-input v-model="addForm.label" placeholder="选项类型"/>
</el-form-item>
<el-form-item label="选项" v-show="addForm.field_type=='select'||addForm.field_type=='selects'">
<el-button @click.prevent="addDomain" style="border: none;">
<i class="el-icon-circle-plus-outline"></i>
<span style="font-size:14px;">添加</span>
</el-button>
<el-row v-for="(domain, $index) in choiceOption" :key='$index+1' style="margin-bottom: 10px">
<el-col :span="10">
<template>
<el-form-item label="id">
<el-input type="number" v-model="domain.id" auto-complete="off" placeholder="id为整数"></el-input>
</el-form-item>
</template>
</el-col>
<el-col :span="10">
<template>
<el-form-item label="name">
<el-input v-model="domain.name" auto-complete="off"></el-input>
</el-form-item>
</template>
</el-col>
<el-col :span="3" style="text-align: center" v-if="$index!==0">
<i
class="el-icon-remove-outline"
style="color: red;font-size: 16px;"
@click.prevent="removeDomain($index,'1')"
></i>
</el-col>
</el-row>
</el-form-item>
<el-form-item label="顺序ID">
<el-input v-model="addForm.sort" type="number" placeholder="顺序"/>
</el-form-item>
<el-form-item label="默认值">
<el-input v-model="addForm.default_value" placeholder="默认值"/>
</el-form-item>
<el-form-item label="模板">
<el-input v-model="addForm.field_template" placeholder="你有一个待办工单:{title}"/>
</el-form-item>
<el-form-item label="是否隐藏">
<el-radio-group v-model="addForm.is_hidden">
<el-radio :label="false">显示</el-radio>
<el-radio :label="true">隐藏</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<div style="text-align: right">
<el-button type="danger" @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="submitHandle('Form')">确认</el-button>
</div> </div>
</el-dialog> </el-header>
</el-main> <el-main class="nopadding">
<scTable ref="table" :apiObj="apiObj" row-key="id" stripe highlightCurrentRow>
<el-table-column type="index" width="50"/>
<el-table-column label="字段标识" prop="field_key"></el-table-column>
<el-table-column label="字段名称" prop="field_name"></el-table-column>
<el-table-column label="字段类型" prop="field_type"></el-table-column>
<el-table-column label="顺序ID" prop="sort"></el-table-column>
<el-table-column label="字段描述" prop="description"></el-table-column>
<el-table-column label="创建时间" prop="create_time"></el-table-column>
<el-table-column label="操作" fixed="right" align="right" width="120">
<template #default="scope">
<el-button type="text" size="small" @click="handleEdit(scope.row)">编辑</el-button>
<el-popconfirm title="确定删除吗?">
<template #reference>
<el-button type="text" size="small">删除</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</scTable>
<el-dialog
v-model="dialogVisible"
:title="titleMap[type]">
<el-form
ref="Form"
:model="addForm"
label-width="80px"
label-position="right"
:rules="rule">
<el-form-item label="字段标识" prop="field_key">
<el-input v-model="addForm.field_key" placeholder="字段标识"/>
</el-form-item>
<el-form-item label="字段名称" prop="field_name">
<el-input v-model="addForm.field_name" placeholder="字段名称"/>
</el-form-item>
<el-form-item label="字段描述" prop="description">
<el-input v-model="addForm.description" placeholder="字段描述"/>
</el-form-item>
<el-form-item label="占位符" prop="placeholder">
<el-input v-model="addForm.placeholder" placeholder="占位符"/>
</el-form-item>
<el-form-item label="展示标签" prop="field_type">
<el-select style="width: 100%" v-model="addForm.field_type" placeholder="请选择">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="字段标签" v-show="addForm.field_type=='select'||addForm.field_type=='selects'">
<el-input v-model="addForm.label" placeholder="选项类型"/>
</el-form-item>
<el-form-item label="选项" v-show="addForm.field_type=='select'||addForm.field_type=='selects'">
<el-button @click.prevent="addDomain" style="border: none;">
<i class="el-icon-circle-plus-outline"></i>
<span style="font-size:14px;">添加</span>
</el-button>
<el-row v-for="(domain, $index) in choiceOption" :key='$index+1' style="margin-bottom: 10px">
<el-col :span="10">
<template>
<el-form-item label="id">
<el-input type="number" v-model="domain.id" auto-complete="off"
placeholder="id为整数"></el-input>
</el-form-item>
</template>
</el-col>
<el-col :span="10">
<template>
<el-form-item label="name">
<el-input v-model="domain.name" auto-complete="off"></el-input>
</el-form-item>
</template>
</el-col>
<el-col :span="3" style="text-align: center" v-if="$index!==0">
<i
class="el-icon-remove-outline"
style="color: red;font-size: 16px;"
@click.prevent="removeDomain($index,'1')"
></i>
</el-col>
</el-row>
</el-form-item>
<el-form-item label="顺序ID">
<el-input v-model="addForm.sort" type="number" placeholder="顺序"/>
</el-form-item>
<el-form-item label="默认值">
<el-input v-model="addForm.default_value" placeholder="默认值"/>
</el-form-item>
<el-form-item label="模板">
<el-input v-model="addForm.field_template" placeholder="你有一个待办工单:{title}"/>
</el-form-item>
<el-form-item label="是否隐藏">
<el-radio-group v-model="addForm.is_hidden">
<el-radio :label="false">显示</el-radio>
<el-radio :label="true">隐藏</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<div style="text-align: right">
<el-button type="danger" @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="submitHandle('Form')">确认</el-button>
</div>
</el-dialog>
</el-main>
</el-container>
</template> </template>
<script> <script>
export default { export default {
name: "field", name: "field",
data(){ data() {
return{ return {
id:sessionStorage.getItem('jinYuWorkflowId'), apiObj: this.$API.wf.field.list,
list:null, id: sessionStorage.getItem('jinYuWorkflowId'),
list: null,
type: "add", type: "add",
titleMap: { titleMap: {
add: '新增', add: '新增',
@ -132,7 +141,7 @@
default_value: '', default_value: '',
field_template: '', field_template: '',
field_choice: [], field_choice: [],
is_hidden:false, is_hidden: false,
}, },
// //
rules: { rules: {
@ -140,14 +149,14 @@
{required: true, message: '请输入工作流名称'} {required: true, message: '请输入工作流名称'}
] ]
}, },
choiceOption:[{id:null,name:""}], choiceOption: [{id: null, name: ""}],
labels:[{ labels: [{
label: '常规', label: '常规',
value: 'name' value: 'name'
},{ }, {
label: '名称|id', label: '名称|id',
value: 'name|id' value: 'name|id'
},{ }, {
label: '人员选择', label: '人员选择',
value: 'user' value: 'user'
}], }],
@ -175,15 +184,15 @@
}, { }, {
value: 'textarea', value: 'textarea',
label: '文本域' label: '文本域'
},{ }, {
value: 'file', value: 'file',
label: '附件' label: '附件'
}], }],
editId:null, editId: null,
dialogVisible:false, dialogVisible: false,
} }
}, },
mounted(){ mounted() {
this.list = [ this.list = [
{ {
id: "5001", id: "5001",
@ -208,26 +217,26 @@
]; ];
this.getList(); this.getList();
}, },
methods:{ methods: {
// //
addDomain() { addDomain() {
this.choiceOption.push({id:null,name:""}) this.choiceOption.push({id: null, name: ""})
}, },
// //
removeDomain(index) { removeDomain(index) {
this.choiceOption.splice(index, 1) this.choiceOption.splice(index, 1)
}, },
handleAdd(){ handleAdd() {
this.type = 'add'; this.type = 'add';
this.dialogVisible = true; this.dialogVisible = true;
}, },
submitHandle() { submitHandle() {
let that = this,choiceArr = []; let that = this, choiceArr = [];
debugger; debugger;
this.$refs.Form.validate((valid) => { this.$refs.Form.validate((valid) => {
if (valid) { if (valid) {
if(that.choiceOption[0]&&that.choiceOption[0].name!==''&&that.choiceOption[0].name!==null&&that.choiceOption[0].name!==undefined){ if (that.choiceOption[0] && that.choiceOption[0].name !== '' && that.choiceOption[0].name !== null && that.choiceOption[0].name !== undefined) {
that.choiceOption.forEach((item)=>{ that.choiceOption.forEach((item) => {
let obj = new Object(); let obj = new Object();
obj.id = parseInt(item.id); obj.id = parseInt(item.id);
obj.name = item.name; obj.name = item.name;
@ -244,9 +253,9 @@
} else { } else {
res = that.$API.wf.customfield.update.req(that.editId, that.addForm); res = that.$API.wf.customfield.update.req(that.editId, that.addForm);
} }
if(res.err_msg){ if (res.err_msg) {
this.$message.error(res.err_msg) this.$message.error(res.err_msg)
}else{ } else {
that.isSaveing = false; that.isSaveing = false;
that.limitedVisible = false; that.limitedVisible = false;
that.$refs.table.refresh(); that.$refs.table.refresh();
@ -255,19 +264,19 @@
} }
}) })
}, },
handleEdit(row){ handleEdit(row) {
this.type = 'edit'; this.type = 'edit';
this.editId = row.id; this.editId = row.id;
this.dialogVisible = true; this.dialogVisible = true;
this.addForm = Object.assign({}, row); this.addForm = Object.assign({}, row);
}, },
async getList(){ async getList() {
let res = await this.$API.wf.getCustomfields.get(this.id); let res = await this.$API.wf.getCustomfields.get(this.id);
console.log(res); console.log(res);
this.list = res; this.list = res;
}, },
}, },
} }
</script> </script>
<style scoped> <style scoped>

View File

@ -1,186 +1,194 @@
<template> <template>
<el-main class="nopadding"> <el-container>
<el-button type="primary" icon="el-icon-plus" @click="handleAdd"></el-button> <el-header>
<el-table ref="table" :data="list" row-key="id" stripe> <div class="left-panel">
<el-table-column type="index" width="50"/> <el-button type="primary" icon="el-icon-plus" @click="handleAdd"></el-button>
<el-table-column label="名称" prop="name"></el-table-column>
<el-table-column label="是否隐藏">
<template #default="scope">
<span v-if="scope.row.is_hidde"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="顺序ID" prop="sort"></el-table-column>
<el-table-column label="类型">
<template #default="scope">
<el-tag effect="plain" v-if="scope.row.type==0">
普通类型
</el-tag>
<el-tag effect="plain" v-if="scope.row.type==1">
初始状态
</el-tag>
<el-tag effect="plain" v-if="scope.row.type==2">
结束状态
</el-tag>
</template>
</el-table-column>
<el-table-column label="参与人类型">
<template #default="scope">{{ options_[scope.row.participant_type] }}</template>
</el-table-column>
<el-table-column label="创建时间" prop="create_time"></el-table-column>
<el-table-column label="操作" fixed="right" align="right" width="120">
<template #default="scope">
<el-button type="text" size="small" @click="handleEdit(scope.row)">编辑</el-button>
<el-popconfirm title="确定删除吗?">
<template #reference>
<el-button type="text" size="small">删除</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<el-dialog
v-model="dialogVisible"
:title="titleMap[type]"
>
<el-form
ref="Form"
:model="addForm"
label-width="100px"
label-position="right"
:rules="rule"
>
<el-form-item label="名称" prop="name">
<el-input v-model="addForm.name" placeholder="名称"/>
</el-form-item>
<el-form-item
label="是否隐藏"
prop="is_hidden"
label-width="120px"
>
<el-switch v-model="addForm.is_hidden"></el-switch>
</el-form-item>
<el-form-item label="状态顺序" prop="sort">
<el-input v-model="addForm.sort" type="number" placeholder="状态顺序"/>
</el-form-item>
<el-form-item label="状态类型" prop="type">
<el-select style="width: 100%" v-model="addForm.type" placeholder="请选择">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item
label="允许撤回"
prop="enable_retreat"
label-width="120px"
>
<el-switch v-model="addForm.enable_retreat"></el-switch>
</el-form-item>
<el-form-item label="参与者类型" prop="participant_type">
<el-select style="width: 100%" v-model="addForm.participant_type" placeholder="请选择" @change="typeChange">
<el-option
v-for="item in typeoptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="参与者" prop="participant" v-if="addForm.participant_type==1">
<el-select style="width: 100%" v-model="participant" placeholder="请选择参与者">
<el-option v-for="item in staffs" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="参与者" prop="participant" v-if="addForm.participant_type==2">
<el-select style="width: 100%" v-model="participants" multiple placeholder="请选择参与者">
<el-option v-for="item in staffs" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="参与者" prop="participant" v-if="addForm.participant_type==7">
<el-select style="width: 100%" v-model="participant" placeholder="请选择字段">
<el-option v-for="item in fieldList" :key="item.id" :label="item.field_name"
:value="item.field_key">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="分配方式" prop="participant" v-if="addForm.participant_type==2">
<el-select style="width: 100%" v-model="addForm.distribute_type" placeholder="请选择分配方式">
<el-option label="主动接单" value="1"></el-option>
<el-option label="直接处理" value="2"></el-option>
<el-option label="随机分配" value="3"></el-option>
<el-option label="全部处理" value="4"></el-option>
</el-select>
</el-form-item>
<el-form-item label="角色" prop="participant" v-if="addForm.participant_type==4">
<el-select style="width: 100%" v-model="participants" multiple placeholder="请选择角色">
<el-option v-for="item in roles" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="过滤策略" prop="participant" v-if="addForm.participant_type==4">
<el-select style="width: 100%" v-model="addForm.filter_policy" placeholder="请选择过滤策略">
<el-option label="无" value="0"></el-option>
<el-option label="和工单同属以及上级部门" value="1"></el-option>
<el-option label="和创建人同属以及上级部门" value="2"></el-option>
<el-option label="和上步处理人同属以及上级部门" value="3"></el-option>
</el-select>
</el-form-item>
<el-form-item label="代码选择" prop="participant" v-if="addForm.participant_type==9">
<el-select style="width: 100%" v-model="participants" placeholder="请选择代码">
<el-option v-for="item in codes" :key="item.func" :label="item.name" :value="item.func">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="抄送给" prop="participant">
<el-select style="width: 100%" v-model="addForm.participant_cc" multiple placeholder="请选择抄送给谁">
<el-option v-for="item in staffs" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="字段状态">
<el-button @click="addWordStateChange">添加修改</el-button>
<el-row v-for="(item,$index) in stateChange" :key="item+$index" style="margin-top: 2px">
<el-col :span="11">
<el-select style="width: 100%" v-model="item.name" placeholder="请选择字段">
<el-option v-for="item in fieldList" :key="item.id" :label="item.field_name"
:value="item.field_key">
</el-option>
</el-select>
</el-col>
<el-col :span="1" style="height: 1px;"></el-col>
<el-col :span="8">
<el-select style="width: 100%" v-model="item.value" placeholder="请选择状态">
<el-option
v-for="item in state_fields"
:label="item.label"
:value="item.value"
:key="item.value"
></el-option>
</el-select>
</el-col>
<el-col :span="2" style="text-align: center" v-if="$index!==0">
<i
class="el-icon-remove-outline"
style="color: red;font-size: 16px;"
@click.prevent="removeStateChange($index)"
></i>
</el-col>
</el-row>
</el-form-item>
</el-form>
<div style="text-align: right">
<el-button type="danger" @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="submitHandle('Form')">确认</el-button>
</div> </div>
</el-dialog> </el-header>
</el-main> <el-main class="nopadding">
<el-table ref="table" :apiObj="apiObj" row-key="id" stripe highlightCurrentRow>
<el-table-column type="index" width="50"/>
<el-table-column label="名称" prop="name"></el-table-column>
<el-table-column label="是否隐藏">
<template #default="scope">
<span v-if="scope.row.is_hidde"></span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="顺序ID" prop="sort"></el-table-column>
<el-table-column label="类型">
<template #default="scope">
<el-tag effect="plain" v-if="scope.row.type==0">
普通类型
</el-tag>
<el-tag effect="plain" v-if="scope.row.type==1">
初始状态
</el-tag>
<el-tag effect="plain" v-if="scope.row.type==2">
结束状态
</el-tag>
</template>
</el-table-column>
<el-table-column label="参与人类型">
<template #default="scope">{{ options_[scope.row.participant_type] }}</template>
</el-table-column>
<el-table-column label="创建时间" prop="create_time"></el-table-column>
<el-table-column label="操作" fixed="right" align="right" width="120">
<template #default="scope">
<el-button type="text" size="small" @click="handleEdit(scope.row)">编辑</el-button>
<el-popconfirm title="确定删除吗?">
<template #reference>
<el-button type="text" size="small">删除</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<el-dialog
v-model="dialogVisible"
:title="titleMap[type]"
>
<el-form
ref="Form"
:model="addForm"
label-width="100px"
label-position="right"
:rules="rule"
>
<el-form-item label="名称" prop="name">
<el-input v-model="addForm.name" placeholder="名称"/>
</el-form-item>
<el-form-item
label="是否隐藏"
prop="is_hidden"
label-width="120px"
>
<el-switch v-model="addForm.is_hidden"></el-switch>
</el-form-item>
<el-form-item label="状态顺序" prop="sort">
<el-input v-model="addForm.sort" type="number" placeholder="状态顺序"/>
</el-form-item>
<el-form-item label="状态类型" prop="type">
<el-select style="width: 100%" v-model="addForm.type" placeholder="请选择">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item
label="允许撤回"
prop="enable_retreat"
label-width="120px"
>
<el-switch v-model="addForm.enable_retreat"></el-switch>
</el-form-item>
<el-form-item label="参与者类型" prop="participant_type">
<el-select style="width: 100%" v-model="addForm.participant_type" placeholder="请选择"
@change="typeChange">
<el-option
v-for="item in typeoptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="参与者" prop="participant" v-if="addForm.participant_type==1">
<el-select style="width: 100%" v-model="participant" placeholder="请选择参与者">
<el-option v-for="item in staffs" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="参与者" prop="participant" v-if="addForm.participant_type==2">
<el-select style="width: 100%" v-model="participants" multiple placeholder="请选择参与者">
<el-option v-for="item in staffs" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="参与者" prop="participant" v-if="addForm.participant_type==7">
<el-select style="width: 100%" v-model="participant" placeholder="请选择字段">
<el-option v-for="item in fieldList" :key="item.id" :label="item.field_name"
:value="item.field_key">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="分配方式" prop="participant" v-if="addForm.participant_type==2">
<el-select style="width: 100%" v-model="addForm.distribute_type" placeholder="请选择分配方式">
<el-option label="主动接单" value="1"></el-option>
<el-option label="直接处理" value="2"></el-option>
<el-option label="随机分配" value="3"></el-option>
<el-option label="全部处理" value="4"></el-option>
</el-select>
</el-form-item>
<el-form-item label="角色" prop="participant" v-if="addForm.participant_type==4">
<el-select style="width: 100%" v-model="participants" multiple placeholder="请选择角色">
<el-option v-for="item in roles" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="过滤策略" prop="participant" v-if="addForm.participant_type==4">
<el-select style="width: 100%" v-model="addForm.filter_policy" placeholder="请选择过滤策略">
<el-option label="无" value="0"></el-option>
<el-option label="和工单同属以及上级部门" value="1"></el-option>
<el-option label="和创建人同属以及上级部门" value="2"></el-option>
<el-option label="和上步处理人同属以及上级部门" value="3"></el-option>
</el-select>
</el-form-item>
<el-form-item label="代码选择" prop="participant" v-if="addForm.participant_type==9">
<el-select style="width: 100%" v-model="participants" placeholder="请选择代码">
<el-option v-for="item in codes" :key="item.func" :label="item.name" :value="item.func">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="抄送给" prop="participant">
<el-select style="width: 100%" v-model="addForm.participant_cc" multiple placeholder="请选择抄送给谁">
<el-option v-for="item in staffs" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="字段状态">
<el-button @click="addWordStateChange">添加修改</el-button>
<el-row v-for="(item,$index) in stateChange" :key="item+$index" style="margin-top: 2px">
<el-col :span="11">
<el-select style="width: 100%" v-model="item.name" placeholder="请选择字段">
<el-option v-for="item in fieldList" :key="item.id" :label="item.field_name"
:value="item.field_key">
</el-option>
</el-select>
</el-col>
<el-col :span="1" style="height: 1px;"></el-col>
<el-col :span="8">
<el-select style="width: 100%" v-model="item.value" placeholder="请选择状态">
<el-option
v-for="item in state_fields"
:label="item.label"
:value="item.value"
:key="item.value"
></el-option>
</el-select>
</el-col>
<el-col :span="2" style="text-align: center" v-if="$index!==0">
<i
class="el-icon-remove-outline"
style="color: red;font-size: 16px;"
@click.prevent="removeStateChange($index)"
></i>
</el-col>
</el-row>
</el-form-item>
</el-form>
<div style="text-align: right">
<el-button type="danger" @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="submitHandle('Form')">确认</el-button>
</div>
</el-dialog>
</el-main>
</el-container>
</template> </template>
<script> <script>
@ -188,6 +196,7 @@
name: "state", name: "state",
data() { data() {
return { return {
apiObj: this.$API.wf.state.list,
id: sessionStorage.getItem('jinYuWorkflowId'), id: sessionStorage.getItem('jinYuWorkflowId'),
list: null, list: null,
type: "add", type: "add",
@ -266,17 +275,17 @@
value: 9, value: 9,
label: '代码获取' label: '代码获取'
}], }],
state_fields:[ state_fields: [
{ {
value: 1, value: 1,
label: '只读' label: '只读'
},{ }, {
value: 2, value: 2,
label: '必填' label: '必填'
},{ }, {
value: 3, value: 3,
label: '可选' label: '可选'
},{ }, {
value: 4, value: 4,
label: '隐藏' label: '隐藏'
}, },
@ -287,7 +296,7 @@
}, },
mounted() { mounted() {
debugger; debugger;
this.id=sessionStorage.getItem('jinYuWorkflowId'); this.id = sessionStorage.getItem('jinYuWorkflowId');
this.getList(); this.getList();
this.getUsers(); this.getUsers();
this.getRole(); this.getRole();
@ -303,18 +312,18 @@
this.stateChange.splice(index, 1) this.stateChange.splice(index, 1)
}, },
// //
async getUsers(){ async getUsers() {
let staffs = await this.$API.system.user.get({page:0}); let staffs = await this.$API.system.user.get({page: 0});
this.staffs = staffs; this.staffs = staffs;
}, },
// //
async getRole(){ async getRole() {
let roles = await this.$API.system.role.get({page:0}); let roles = await this.$API.system.role.get({page: 0});
this.roles = roles; this.roles = roles;
}, },
// //
async getField(){ async getField() {
let fieldList = await this.$API.wf.getCustomfields.get(this.id); let fieldList = await this.$API.wf.getCustomfields.get(this.id);
this.fieldList = fieldList; this.fieldList = fieldList;
}, },
handleAdd() { handleAdd() {
@ -342,9 +351,9 @@
} else { } else {
res = that.$API.wf.stateEdit.put(that.editId, that.addForm); res = that.$API.wf.stateEdit.put(that.editId, that.addForm);
} }
if(res.err_msg){ if (res.err_msg) {
that.isSaveing = false; that.isSaveing = false;
}else{ } else {
that.isSaveing = false; that.isSaveing = false;
that.dialogVisible = false; that.dialogVisible = false;
that.getList(); that.getList();

View File

@ -181,7 +181,7 @@
}else{ }else{
sessionStorage.setItem('jinYuWorkflowId',row.id); sessionStorage.setItem('jinYuWorkflowId',row.id);
} }
this.$router.push({path:'/workflow/configuration'}); this.$router.push({path:'/wf/configuration'});
}, },
// //