Compare commits

...

7 Commits

9 changed files with 135 additions and 548 deletions

View File

@ -10,7 +10,6 @@
"dependencies": {
"axios": "^0.20.0",
"clipboard": "^2.0.6",
"codemirror": "^6.0.0",
"core-js": "^3.6.5",
"element-ui": "^2.15.8",
"less": "^3.12.2",
@ -21,6 +20,7 @@
"signature_pad": "^3.0.0-beta.4",
"trim-canvas": "^0.1.2",
"vue": "^2.6.11",
"vue-codemirror": "^4.0.6",
"vue-esign": "^1.1.4",
"vue-router": "^3.4.3",
"vuedraggable": "^2.24.1",
@ -36,7 +36,6 @@
"babel-preset-env": "^1.7.0",
"style-resources-loader": "^1.3.2",
"vue-cli-plugin-style-resources-loader": "^0.1.4",
"vue-codemirror": "^6.0.0",
"vue-template-compiler": "^2.6.11"
},
"eslintConfig": {

View File

@ -1,15 +1,5 @@
import request from '@/api/request.js'
// 查询组织架构树
export function getOrgTree(param) {
return request({
url: 'oa/org/tree',
method: 'get',
params: param
})
}
// 查询系统角色
export function getRole() {
return request({
@ -17,15 +7,6 @@ export function getRole() {
method: 'get'
})
}
// 搜索人员
export function getUserByName(param) {
return request({
url: 'oa/org/tree/user/search',
method: 'get',
params: param
})
}
//获取采取树形控件的部门option
export function getDepartmentTree() {
return request({
@ -43,5 +24,5 @@ export function getUserTree(type,chooseId){
}
export default {
getOrgTree, getUserByName, getRole,getDepartmentTree,getUserTree
getRole,getDepartmentTree,getUserTree
}

View File

@ -1,70 +0,0 @@
import request from '@/api/request.js'
// 查询万能查询列表
export function listQuery(query) {
return request({
url: '/custom-query/uni/query',
method: 'get',
params: query
})
}
// 查询万能查询详细
export function getQuery(id) {
return request({
url: '/custom-query/uni/query/' + id,
method: 'get'
})
}
// 新增万能查询
export function addQuery(data) {
return request({
url: '/custom-query/uni/query',
method: 'post',
data: data
})
}
// 修改万能查询
export function updateQuery(data) {
return request({
url: '/custom-query/uni/query',
method: 'put',
data: data
})
}
// 删除万能查询
export function delQuery(id) {
return request({
url: '/custom-query/uni/query/' + id,
method: 'delete'
})
}
// 导出万能查询
export function exportQuery(query) {
return request({
url: '/custom-query/uni/query/export',
method: 'get',
params: query
})
}
// 获取条件
export function getQueryInfo(id) {
return request({
url: '/query/'+id,
method: 'get',
})
}
// 修改条件
export function editQueryInfo(data) {
return request({
url: '/query',
method: 'put',
data: data
})
}

View File

@ -0,0 +1,96 @@
<template>
<codemirror ref="codeEdit"
:options="cmOptions"
v-model="_value"
@input="inputChange"
class="code"/>
</template>
<script>
import { codemirror } from 'vue-codemirror'
// codemirror/theme/
import "vue-codemirror/node_modules/codemirror/lib/codemirror.css";
import 'vue-codemirror/node_modules/codemirror/theme/idea.css'
import 'vue-codemirror/node_modules/codemirror/theme/duotone-dark.css'
// codemirror/mode/
import "vue-codemirror/node_modules/codemirror/mode/javascript/javascript"; //
import "vue-codemirror/node_modules/codemirror/mode/sql/sql"; //
//
import 'vue-codemirror/node_modules/codemirror/addon/hint/javascript-hint.js';
// import 'vue-codemirror/node_modules/codemirror/addon/hint/show-hint.css';
import 'vue-codemirror/node_modules/codemirror/addon/hint/show-hint.js';
//
import 'vue-codemirror/node_modules/codemirror/addon/fold/foldcode'
import 'vue-codemirror/node_modules/codemirror/addon/fold/foldgutter'
import 'vue-codemirror/node_modules/codemirror/addon/fold/foldgutter.css'
import 'vue-codemirror/node_modules/codemirror/addon/fold/brace-fold'
import 'vue-codemirror/node_modules/codemirror/addon/fold/comment-fold'
import 'vue-codemirror/node_modules/codemirror/addon/fold/xml-fold.js';
import 'vue-codemirror/node_modules/codemirror/addon/fold/indent-fold.js';
import 'vue-codemirror/node_modules/codemirror/addon/fold/markdown-fold.js';
import 'vue-codemirror/node_modules/codemirror/addon/fold/comment-fold.js';
export default {
name: "CodeEdit",
components:{codemirror},
props:{
value:{
type:String,
default:"",
}
},
data(){
return {
code:"",
cmOptions:{
tabSize: 4, // tab
indentUnit: 2,
mode: 'javascript', //
theme: 'idea', //
lineNumbers: true, //
lineWrapping: true,//
styleActiveLine: true, //
highlightSelectionMatches: { showToken: /w/, annotateScrollbar: true }, //
line: true,
matchBrackets: true,
//
showCursorWhenSelecting: false,
hintOptions: {
//
completeSingle: false
},
foldGutter: true, //
extraKeys: { 'Ctrl': 'autocomplete' }, // keyMap
gutters: ['CodeMirror-linenumbers', "lock", "warn"],
},
}
},
computed:{
_value :{
get(){
return this.value;
},
set(val){
this.value = val;
}
}
},
mounted() {
this.$refs.codeEdit.codemirror.on("inputRead",(cm)=>{
cm.showHint();
})
this.$refs.codeEdit.codemirror.on("change", (cm) => {
this._value = cm.getValue()
this.$emit("input",this._value)
})
},
methods:{
}
}
</script>
<style scoped>
</style>

View File

@ -76,7 +76,6 @@ export default {
};
},
created() {
this.getRole();
},
methods: {
//
@ -89,6 +88,7 @@ export default {
},
//
showRolePicker() {
this.getRole();
this.visible = true;
},
//

View File

@ -33,12 +33,6 @@ const router = new Router({
component: () => import("@/views/admin/FormsPanel.vue"),
meta: {title: '表单列表', viewport: viewport}
},
{
path: "/query",
name: "query",
component: () => import("@/views/query/index.vue"),
meta: {title: '自定义查询', viewport: viewport}
},
{
path: "/admin/design",
name: "design",

View File

@ -2,17 +2,13 @@
<div style="text-align: center">
<!-- <h4>先选择本次登录人员的身份再进入相应的系统 😅</h4>-->
<h4>欢迎进入Spring Security 配套 Workflow工作流模块</h4>
<div v-if="!token">
<el-input v-model="username"/>
<el-button @click="getToken">登录</el-button>
</div>
<div class="work-panel">
<!-- <div class="user">-->
<!-- <el-button type="primary" round size="small" @click="showRolePicker()" icon="el-icon-user">选择本次登录者</el-button>-->
<!-- <div v-if="loginUser !== '' && loginUser !== null">-->
<!-- <span>{{ loginUser.name }}</span>-->
<!-- </div>-->
<!-- </div>-->
<div class="user">
<el-button type="primary" round size="small" @click="showRolePicker()" icon="el-icon-user">选择本次登录者</el-button>
<div v-if="token !== '' && token !== null">
<span>{{ loginUser.name }}</span>
</div>
</div>
<div class="panel">
<div class="panel-item" @click="to('/workSpace')">
<div>
@ -34,39 +30,21 @@
</div>
</div>
</div>
<!-- <test type="user" ref="orgPicker" :v-model="select" :value="select" @dengjie="dengjie"-->
<!-- @ok="selected"></test>-->
<user-picker title="请选择系统角色" :multiple="false" ref="userPicker" :v-model="select" @ok="selectedUser"/>
</div>
</template>
<script>
import Test from "@/components/common/Test";
import axios from "axios";
import UserPicker from "../components/common/UserPicker";
export default {
name: "Index",
components: {Test},
components: {UserPicker},
data() {
return {
token: localStorage.getItem("token"),
username: null,
select: [],
roleData: [
{
roleId: 1,
roleName: "角色名称",
}
],
deptData: [
{
deptId: 1,
deptName: "角色名称",
}
],
loginUser: {
id: 381496,
name: "clay",
@ -77,7 +55,6 @@ export default {
}
},
mounted() {
console.log(this.select)
let user = sessionStorage.getItem("user")
if (user !== null && user !== '') {
this.loginUser = JSON.parse(user)
@ -85,23 +62,15 @@ export default {
}
},
methods: {
getToken() {
// let item = localStorage.getItem("token");
// if (item != null) {
// return
// }
localStorage.clear()
axios.post(
// "http://security-react.mytwins.top/auth/login",
// getBaseUrl()+"/auth/login",
"http://gateway.mytwins.top/auth/login",
// "http://localhost:8000/auth/login",
"http://gateway.mytwins.top/auth/workflow/login",
// "http://localhost:8000/auth/workflow/login",
{
code: "string",
password: "926425",
// username: "admin",
username: this.username,
username: this.loginUser.id,
uuid: "string"
}
).then(res => {
@ -110,20 +79,27 @@ export default {
localStorage.setItem("token", this.token)
})
},
selectedUser(select) {
let userInfoList = []
for (let val of select) {
let userInfo = {
id: val.id,
name: val.name,
avatar: val.avatar,
}
this.loginUser = userInfo;
userInfoList.push(userInfo)
}
this.getToken()
this.select = userInfoList;
},
//
showRolePicker() {
this.$refs.orgPicker.visible = true
},
selected(select) {
this.select = select
this.loginUser = select.length > 0 ? select[0] : ''
this.showUserSelect = false
sessionStorage.setItem("user", JSON.stringify(this.loginUser))
localStorage.clear()
this.$refs.userPicker.showUserPicker()
},
to(path) {
if (this.loginUser === null || this.loginUser === '') {
if (this.token === null || this.token === '' || this.token === 'undefined') {
this.$message.warning("请先选择一个人员身份进行登录")
} else {
this.$router.push(path)

View File

@ -62,7 +62,7 @@
</div>
</el-form-item>
<el-form-item label="请求结果处理" prop="text">
<!-- <el-form-item label="请求结果处理" prop="text">-->
<div slot="label">
<span>请求结果处理</span>
<span style="margin-left: 20px">自定义脚本: </span>
@ -81,14 +81,14 @@
<div v-if="config.http.handlerByScript">
<div>
<span>请求成功😀</span>
<el-input type="textarea" v-model="config.http.success" :rows="3"></el-input>
<code-edit v-model="config.http.success"/>
</div>
<div>
<span>请求失败😥</span>
<el-input type="textarea" v-model="config.http.fail" :rows="3"></el-input>
<code-edit v-model="config.http.fail"/>
</div>
</div>
</el-form-item>
<!-- </el-form-item>-->
</div>
<div v-else-if="config.type === 'EMAIL'">
<el-form-item label="邮件主题" prop="text">
@ -108,15 +108,10 @@
</template>
<script>
//import { codemirror } from 'vue-codemirror'
// codemirror/theme/
//import 'codemirror/theme/idea.css'
// codemirror/mode/
//import "codemirror/mode/javascript/javascript.js"
import CodeEdit from "@/components/common/CodeEdit";
export default {
name: "TriggerNodeConfig",
components: {/*codemirror*/},
components: {CodeEdit},
props:{
config:{
type: Object,
@ -132,32 +127,6 @@ export default {
},
data() {
return {
cmOptions:{
tabSize: 4, // tab
indentUnit: 4,
styleActiveLine: true, //
lineNumbers: true, //
styleSelectedText: true,
line: true,
foldGutter: true, //
gutters: ['CodeMirror-linenumbers', "lock", "warn"],
highlightSelectionMatches: { showToken: /w/, annotateScrollbar: true }, //
mode:'javascript',
// hint.js options
hintOptions: {
//
completeSingle: false
},
// sublimeemacsvim
keyMap: 'sublime',
matchBrackets: true,
showCursorWhenSelecting: false,
// scrollbarStyle:null,
// readOnly:true, //
theme: 'material', // material
extraKeys: { 'Ctrl': 'autocomplete' }, // keyMap
lastLineBefore:0
}
}
},
methods: {
@ -172,12 +141,6 @@ export default {
delItem(items, index){
items.splice(index, 1)
},
onCmCodeChange(){
},
onCmReady(){
}
}
}
</script>

View File

@ -1,352 +0,0 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="名称" prop="uqName">
<el-input
v-model="queryParams.uqName"
placeholder="请输入名称"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="描述" prop="uqDescribe">
<el-input
v-model="queryParams.uqDescribe"
placeholder="请输入描述"
clearable
size="small"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker
v-model="daterangeCreateTime"
size="small"
style="width: 240px"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
>修改
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
>删除
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
>导出
</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="queryList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center"/>
<el-table-column type="index" width="50"></el-table-column>
<el-table-column label="名称" align="center" prop="uqName"/>
<el-table-column label="描述" align="center" prop="uqDescribe"/>
<el-table-column label="创建时间" align="center" prop="createTime">
<template slot-scope="scope">
<span>{{ scope.row.createTime }}</span>
</template>
</el-table-column>
<el-table-column label="更新时间" align="center" prop="updateTime">
<template slot-scope="scope">
<span>{{ scope.row.updateTime }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<span v-if="scope.row.isRelease===2">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
>修改</el-button>
<el-button
type="text"
size="small"
icon="el-icon-edit-outline"
@click="handleEditTable(scope.row)"
>设计</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button>
</span>
<span v-if="scope.row.isRelease===1">
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handRelease(scope.row.id)"
>撤销</el-button>
</span>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改万能查询对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="名称" prop="uqName">
<el-input v-model="form.uqName" placeholder="请输入名称"/>
</el-form-item>
<el-form-item label="描述" prop="uqDescribe">
<el-input v-model="form.uqDescribe" placeholder="请输入描述"/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {listQuery, getQuery, delQuery, addQuery, updateQuery, exportQuery, Release} from "@/api/query";
import {Message} from "element-ui";
export default {
name: "Query",
components: {},
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
queryList: [],
//
title: "",
//
open: false,
//
daterangeCreateTime: [],
//
queryParams: {
pageNum: 1,
pageSize: 10,
uqName: null,
uqDescribe: null,
type: 1
},
//
form: {},
//
rules: {
uqName: [
{required: true, message: "名称不能为空}", trigger: "blur"},
],
uqDescribe: [
{required: true, message: "描述不能为空}", trigger: "blur"},
],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询万能查询列表 */
getList() {
this.loading = true;
listQuery(this.queryParams).then(response => {
let data = response.data
this.queryList = data.rows;
this.total = data.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: null,
uqName: null,
uqDescribe: null,
};
// this.$refs['form'].resetFields()
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
handleEditTable(row) {
this.$router.push("/query/edit/" + row.id);
},
/** 发布与撤销 */
handRelease(id) {
let that = this
this.$confirm('是否确认撤销该查询?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
let data = {
id: id,
isRelease: 2
}
Release(data).then(res => {
Message({
message: res.msg,
type: 'success'
})
that.getList()
})
})
},
/** 重置按钮操作 */
resetQuery() {
this.daterangeCreateTime = [];
this.$refs.queryForm.resetFields()
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length !== 1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加自定义查询";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getQuery(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改自定义查询";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
this.form.type = 1
if (valid) {
if (this.form.id != null) {
updateQuery(this.form).then(response => {
Message({
message: "修改成功",
type: 'success'
})
this.open = false;
this.getList();
});
} else {
addQuery(this.form).then(response => {
Message({
message: "新增成功",
type: 'success'
})
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$confirm('是否确认删除自定义查询编号为"' + ids + '"的数据项?', "警告", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(function () {
return delQuery(ids);
}).then(() => {
this.getList();
this.msgSuccess("删除成功");
})
},
/** 导出按钮操作 */
handleExport() {
const queryParams = this.queryParams;
this.$confirm('是否确认导出所有自定义查询数据项?', "警告", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(function () {
return exportQuery(queryParams);
}).then(response => {
this.download(response.msg);
})
}
}
};
</script>