提交 79fb552a 编写于 作者: Mr.奇淼('s avatar Mr.奇淼(

Merge branch 'gva_workflow' of https://github.com/flipped-aurora/gin-vue-admin into gva_workflow

...@@ -49,8 +49,6 @@ system: ...@@ -49,8 +49,6 @@ system:
addr: 8888 addr: 8888
db-type: 'mysql' db-type: 'mysql'
oss-type: 'local' oss-type: 'local'
config-env: 'GVA_CONFIG'
need-init-data: true
use-multipoint: false use-multipoint: false
# captcha configuration # captcha configuration
...@@ -70,36 +68,6 @@ mysql: ...@@ -70,36 +68,6 @@ mysql:
max-open-conns: 10 max-open-conns: 10
log-mode: false log-mode: false
# sqlite connect configuration (sqlite需要gcc支持 windows用户需要自行安装gcc)
sqlite:
path: 'db.db'
max-idle-conns: 10
max-open-conns: 10
logger: true
# Sqlserver connect configuration
sqlserver:
path: 'localhost:9930'
db-name: 'gorm'
username: 'gorm'
password: 'LoremIpsum86'
max-idle-conns: 10
max-open-conns: 10
logger: true
# Postgresql connect configuration
postgresql:
host: '127.0.0.1'
port: '9920'
config: 'sslmode=disable TimeZone=Asia/Shanghai'
db-name: 'gorm'
username: 'gorm'
password: 'gorm'
max-idle-conns: 10
max-open-conns: 10
prefer-simple-protocol: true
logger: false
# local configuration # local configuration
local: local:
path: 'uploads/file' path: 'uploads/file'
......
...@@ -12,7 +12,8 @@ ...@@ -12,7 +12,8 @@
[English](./README-en.md) | 简体中文 [English](./README-en.md) | 简体中文
[国内仓库地址](https://gitee.com/FLIPPED-AURORA/gin-vue-admin) [gitee地址](https://gitee.com/pixelmax/gin-vue-admin)
[github地址](https://github.com/flipped-aurora/gin-vue-admin)
# 项目文档 # 项目文档
[在线文档](https://www.gin-vue-admin.com/) : https://www.gin-vue-admin.com/ [在线文档](https://www.gin-vue-admin.com/) : https://www.gin-vue-admin.com/
......
...@@ -12,6 +12,7 @@ RUN sh ./server-handle.sh ...@@ -12,6 +12,7 @@ RUN sh ./server-handle.sh
RUN rm -f server-handle.sh RUN rm -f server-handle.sh
RUN cat ./config.yaml RUN cat ./config.yaml
RUN go build -o gva cmd/main.go
RUN go env && go build -o server . RUN go env && go build -o server .
...@@ -20,24 +21,11 @@ LABEL MAINTAINER="SliverHorn@sliver_horn@qq.com" ...@@ -20,24 +21,11 @@ LABEL MAINTAINER="SliverHorn@sliver_horn@qq.com"
WORKDIR /go/src/gin-vue-admin WORKDIR /go/src/gin-vue-admin
COPY --from=0 /go/src/gin-vue-admin/gva ./
COPY --from=0 /go/src/gin-vue-admin/server ./ COPY --from=0 /go/src/gin-vue-admin/server ./
COPY --from=0 /go/src/gin-vue-admin/config.yaml ./ COPY --from=0 /go/src/gin-vue-admin/config.yaml ./
COPY --from=0 /go/src/gin-vue-admin/resource ./resource COPY --from=0 /go/src/gin-vue-admin/resource ./resource
EXPOSE 8888 EXPOSE 8888
ENTRYPOINT ./server ENTRYPOINT ./gva initdb && ./server
# 根据Dockerfile生成Docker镜像
# docker build -t gva-server:1.0 .
#- 根据Docker镜像启动Docker容器
# - 后台运行
# - ```
# docker run -d -p 8888:8888 --name gva-server-v1 gva-server:1.0
# ```
# - 以可交互模式运行, Ctrl + p + q
# - ```
# docker run -it -p 8888:8888 --name gva-server-v1 gva-server:1.0
# ```
\ No newline at end of file
FROM golang:alpine as builder FROM golang:alpine
# 设置go mod proxy 国内代理 ENV GO111MODULE=on
# 设置golang path ENV GOPROXY=https://goproxy.io,direct
ENV GOPROXY=https://goproxy.cn,https://goproxy.io,direct \
GO111MODULE=on \ WORKDIR /go/src/gin-vue-admin
CGO_ENABLED=1
WORKDIR /ginvue
RUN go env -w GOPROXY=https://goproxy.cn,https://goproxy.io,direct
COPY . . COPY . .
RUN go env && go list && go build -o app main.go RUN go env && go build -o server .
FROM alpine:latest
LABEL MAINTAINER="SliverHorn@sliver_horn@qq.com"
WORKDIR /go/src/gin-vue-admin
COPY --from=0 /go/src/gin-vue-admin/server ./
COPY --from=0 /go/src/gin-vue-admin/config.yaml ./
COPY --from=0 /go/src/gin-vue-admin/resource ./resource
EXPOSE 8888 EXPOSE 8888
ENTRYPOINT /ginvue/app
# 根据Dockerfile生成Docker镜像 ENTRYPOINT ./server
# docker build -t ginvue .
# 根据Docker镜像启动Docker容器
# docker run -itd -p 8888:8888 --name ginvue ginvue
...@@ -32,7 +32,9 @@ clean: ...@@ -32,7 +32,9 @@ clean:
@if [ -f ${GVA} ] ; then rm ${GVA} ; fi @if [ -f ${GVA} ] ; then rm ${GVA} ; fi
help: help:
@echo "make - 生成gva终端工具,初始化数据后删除gva终端工具" @echo "make - 构建gva终端工具并初始化数据,初始化数据后删除gva终端工具,启动server项目"
@echo "make gva - 构建gva终端工具"
@echo "make initdb - 如果有gva终端工具就初始化数据,初始化数据后删除gva终端工具,没有则不会执行"
@echo "make linux-build - 编译 Go 代码, 生成Linux系统的二进制文件" @echo "make linux-build - 编译 Go 代码, 生成Linux系统的二进制文件"
@echo "make windows-build - 编译 Go 代码, 生成Windows系统的exe文件" @echo "make windows-build - 编译 Go 代码, 生成Windows系统的exe文件"
@echo "make mac-build - 编译 Go 代码, 生成Mac系统的二进制文件" @echo "make mac-build - 编译 Go 代码, 生成Mac系统的二进制文件"
......
package v1
import (
"fmt"
"gin-vue-admin/global/response"
"gin-vue-admin/model"
"gin-vue-admin/service"
"gin-vue-admin/utils"
"github.com/gin-gonic/gin"
)
// @Tags workflow
// @Summary 注册工作流
// @Produce application/json
// @Param data body model.SysWorkflow true "注册工作流接口"
// @Success 200 {string} string "{"success":true,"data":{},"msg":"注册成功"}"
// @Router /workflow/createWorkFlow [post]
func CreateWorkFlow(c *gin.Context) {
var wk model.SysWorkflow
_ = c.ShouldBindJSON(&wk)
WKVerify := utils.Rules{
"WorkflowNickName": {utils.NotEmpty()},
"WorkflowName": {utils.NotEmpty()},
"WorkflowDescription": {utils.NotEmpty()},
"WorkflowStepInfo": {utils.NotEmpty()},
}
WKVerifyErr := utils.Verify(wk, WKVerify)
if WKVerifyErr != nil {
response.FailWithMessage(WKVerifyErr.Error(), c)
return
}
err := service.Create(wk)
if err != nil {
response.FailWithMessage(fmt.Sprintf("获取失败:%v", err), c)
} else {
response.OkWithMessage("获取成功", c)
}
}
...@@ -9,7 +9,7 @@ import ( ...@@ -9,7 +9,7 @@ import (
var Apis = []model.SysApi{ var Apis = []model.SysApi{
{gorm.Model{ID: 1, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/base/login", "用户登录", "base", "POST"}, {gorm.Model{ID: 1, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/base/login", "用户登录", "base", "POST"},
{gorm.Model{ID: 2, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/base/register", "用户注册", "base", "POST"}, {gorm.Model{ID: 2, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/user/register", "用户注册", "user", "POST"},
{gorm.Model{ID: 3, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/api/createApi", "创建api", "api", "POST"}, {gorm.Model{ID: 3, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/api/createApi", "创建api", "api", "POST"},
{gorm.Model{ID: 4, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/api/getApiList", "获取api列表", "api", "POST"}, {gorm.Model{ID: 4, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/api/getApiList", "获取api列表", "api", "POST"},
{gorm.Model{ID: 5, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/api/getApiById", "获取api详细信息", "api", "POST"}, {gorm.Model{ID: 5, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/api/getApiById", "获取api详细信息", "api", "POST"},
......
...@@ -7,7 +7,7 @@ import ( ...@@ -7,7 +7,7 @@ import (
var Carbines = []gormadapter.CasbinRule{ var Carbines = []gormadapter.CasbinRule{
{PType: "p", V0: "888", V1: "/base/login", V2: "POST"}, {PType: "p", V0: "888", V1: "/base/login", V2: "POST"},
{PType: "p", V0: "888", V1: "/base/register", V2: "POST"}, {PType: "p", V0: "888", V1: "/user/register", V2: "POST"},
{PType: "p", V0: "888", V1: "/api/createApi", V2: "POST"}, {PType: "p", V0: "888", V1: "/api/createApi", V2: "POST"},
{PType: "p", V0: "888", V1: "/api/getApiList", V2: "POST"}, {PType: "p", V0: "888", V1: "/api/getApiList", V2: "POST"},
{PType: "p", V0: "888", V1: "/api/getApiById", V2: "POST"}, {PType: "p", V0: "888", V1: "/api/getApiById", V2: "POST"},
...@@ -74,7 +74,7 @@ var Carbines = []gormadapter.CasbinRule{ ...@@ -74,7 +74,7 @@ var Carbines = []gormadapter.CasbinRule{
{PType: "p", V0: "888", V1: "/simpleUploader/checkFileMd5", V2: "GET"}, {PType: "p", V0: "888", V1: "/simpleUploader/checkFileMd5", V2: "GET"},
{PType: "p", V0: "888", V1: "/simpleUploader/mergeFileMd5", V2: "GET"}, {PType: "p", V0: "888", V1: "/simpleUploader/mergeFileMd5", V2: "GET"},
{PType: "p", V0: "8881", V1: "/base/login", V2: "POST"}, {PType: "p", V0: "8881", V1: "/base/login", V2: "POST"},
{PType: "p", V0: "8881", V1: "/base/register", V2: "POST"}, {PType: "p", V0: "8881", V1: "/user/register", V2: "POST"},
{PType: "p", V0: "8881", V1: "/api/createApi", V2: "POST"}, {PType: "p", V0: "8881", V1: "/api/createApi", V2: "POST"},
{PType: "p", V0: "8881", V1: "/api/getApiList", V2: "POST"}, {PType: "p", V0: "8881", V1: "/api/getApiList", V2: "POST"},
{PType: "p", V0: "8881", V1: "/api/getApiById", V2: "POST"}, {PType: "p", V0: "8881", V1: "/api/getApiById", V2: "POST"},
...@@ -111,7 +111,7 @@ var Carbines = []gormadapter.CasbinRule{ ...@@ -111,7 +111,7 @@ var Carbines = []gormadapter.CasbinRule{
{PType: "p", V0: "8881", V1: "/customer/customer", V2: "GET"}, {PType: "p", V0: "8881", V1: "/customer/customer", V2: "GET"},
{PType: "p", V0: "8881", V1: "/customer/customerList", V2: "GET"}, {PType: "p", V0: "8881", V1: "/customer/customerList", V2: "GET"},
{PType: "p", V0: "9528", V1: "/base/login", V2: "POST"}, {PType: "p", V0: "9528", V1: "/base/login", V2: "POST"},
{PType: "p", V0: "9528", V1: "/base/register", V2: "POST"}, {PType: "p", V0: "9528", V1: "/user/register", V2: "POST"},
{PType: "p", V0: "9528", V1: "/api/createApi", V2: "POST"}, {PType: "p", V0: "9528", V1: "/api/createApi", V2: "POST"},
{PType: "p", V0: "9528", V1: "/api/getApiList", V2: "POST"}, {PType: "p", V0: "9528", V1: "/api/getApiList", V2: "POST"},
{PType: "p", V0: "9528", V1: "/api/getApiById", V2: "POST"}, {PType: "p", V0: "9528", V1: "/api/getApiById", V2: "POST"},
......
...@@ -37,14 +37,12 @@ func InitMysqlTables(db *gorm.DB) { ...@@ -37,14 +37,12 @@ func InitMysqlTables(db *gorm.DB) {
model.ExaFile{}, model.ExaFile{},
model.ExaCustomer{}, model.ExaCustomer{},
model.SysBaseMenu{}, model.SysBaseMenu{},
model.SysWorkflow{},
model.SysAuthority{}, model.SysAuthority{},
model.JwtBlacklist{}, model.JwtBlacklist{},
model.ExaFileChunk{}, model.ExaFileChunk{},
model.SysDictionary{}, model.SysDictionary{},
model.ExaSimpleUploader{}, model.ExaSimpleUploader{},
model.SysOperationRecord{}, model.SysOperationRecord{},
model.SysWorkflowStepInfo{},
model.SysDictionaryDetail{}, model.SysDictionaryDetail{},
model.SysBaseMenuParameter{}, model.SysBaseMenuParameter{},
model.ExaFileUploadAndDownload{}, model.ExaFileUploadAndDownload{},
...@@ -88,13 +86,11 @@ func InitPostgresqlTables(db *gorm.DB) { ...@@ -88,13 +86,11 @@ func InitPostgresqlTables(db *gorm.DB) {
model.ExaFile{}, model.ExaFile{},
model.ExaCustomer{}, model.ExaCustomer{},
model.SysBaseMenu{}, model.SysBaseMenu{},
model.SysWorkflow{},
model.SysAuthority{}, model.SysAuthority{},
model.JwtBlacklist{}, model.JwtBlacklist{},
model.ExaFileChunk{}, model.ExaFileChunk{},
model.ExaSimpleUploader{}, model.ExaSimpleUploader{},
model.SysOperationRecord{}, model.SysOperationRecord{},
model.SysWorkflowStepInfo{},
model.SysDictionaryDetail{}, model.SysDictionaryDetail{},
model.SysBaseMenuParameter{}, model.SysBaseMenuParameter{},
model.ExaFileUploadAndDownload{}, model.ExaFileUploadAndDownload{},
......
...@@ -29,7 +29,7 @@ func RunWindowsServer() { ...@@ -29,7 +29,7 @@ func RunWindowsServer() {
fmt.Printf(` fmt.Printf(`
欢迎使用 Gin-Vue-Admin 欢迎使用 Gin-Vue-Admin
当前版本:V2.3.3 当前版本:V2.3.4
默认自动化文档地址:http://127.0.0.1%s/swagger/index.html 默认自动化文档地址:http://127.0.0.1%s/swagger/index.html
默认前端文件运行地址:http://127.0.0.1:8080 默认前端文件运行地址:http://127.0.0.1:8080
`, address) `, address)
......
...@@ -54,5 +54,5 @@ require ( ...@@ -54,5 +54,5 @@ require (
gopkg.in/ini.v1 v1.55.0 // indirect gopkg.in/ini.v1 v1.55.0 // indirect
gopkg.in/yaml.v2 v2.3.0 // indirect gopkg.in/yaml.v2 v2.3.0 // indirect
gorm.io/driver/mysql v0.3.0 gorm.io/driver/mysql v0.3.0
gorm.io/gorm v1.20.1 gorm.io/gorm v1.20.5
) )
...@@ -29,8 +29,6 @@ func MysqlTables(db *gorm.DB) { ...@@ -29,8 +29,6 @@ func MysqlTables(db *gorm.DB) {
model.SysBaseMenu{}, model.SysBaseMenu{},
model.SysBaseMenuParameter{}, model.SysBaseMenuParameter{},
model.JwtBlacklist{}, model.JwtBlacklist{},
model.SysWorkflow{},
model.SysWorkflowStepInfo{},
model.SysDictionary{}, model.SysDictionary{},
model.SysDictionaryDetail{}, model.SysDictionaryDetail{},
model.ExaFileUploadAndDownload{}, model.ExaFileUploadAndDownload{},
...@@ -39,6 +37,10 @@ func MysqlTables(db *gorm.DB) { ...@@ -39,6 +37,10 @@ func MysqlTables(db *gorm.DB) {
model.ExaSimpleUploader{}, model.ExaSimpleUploader{},
model.ExaCustomer{}, model.ExaCustomer{},
model.SysOperationRecord{}, model.SysOperationRecord{},
model.WorkflowProcess{},
model.WorkflowNode{},
model.WorkflowEdge{},
model.WorkflowPoint{},
) )
if err != nil { if err != nil {
global.GVA_LOG.Error("register table failed", zap.Any("err", err)) global.GVA_LOG.Error("register table failed", zap.Any("err", err))
...@@ -84,4 +86,4 @@ func gormConfig(mod bool) *gorm.Config { ...@@ -84,4 +86,4 @@ func gormConfig(mod bool) *gorm.Config {
DisableForeignKeyConstraintWhenMigrating: true, DisableForeignKeyConstraintWhenMigrating: true,
} }
} }
} }
\ No newline at end of file
...@@ -32,7 +32,6 @@ func Routers() *gin.Engine { ...@@ -32,7 +32,6 @@ func Routers() *gin.Engine {
router.InitApiRouter(ApiGroup) // 注册功能api路由 router.InitApiRouter(ApiGroup) // 注册功能api路由
router.InitFileUploadAndDownloadRouter(ApiGroup) // 文件上传下载功能路由 router.InitFileUploadAndDownloadRouter(ApiGroup) // 文件上传下载功能路由
router.InitSimpleUploaderRouter(ApiGroup) // 断点续传(插件版) router.InitSimpleUploaderRouter(ApiGroup) // 断点续传(插件版)
router.InitWorkflowRouter(ApiGroup) // 工作流相关路由
router.InitCasbinRouter(ApiGroup) // 权限相关路由 router.InitCasbinRouter(ApiGroup) // 权限相关路由
router.InitJwtRouter(ApiGroup) // jwt相关路由 router.InitJwtRouter(ApiGroup) // jwt相关路由
router.InitSystemRouter(ApiGroup) // system相关路由 router.InitSystemRouter(ApiGroup) // system相关路由
......
package model
import (
"gorm.io/gorm"
)
// 工作流属性表
type SysWorkflow struct {
gorm.Model
WorkflowNickName string `json:"workflowNickName" gorm:"comment:工作流中文名称"` // 工作流名称
WorkflowName string `json:"workflowName" gorm:"comment:工作流英文名称"` // 工作流英文id
WorkflowDescription string `json:"workflowDescription" gorm:"comment:工作流描述"` // 工作流描述
WorkflowStepInfo []SysWorkflowStepInfo `json:"workflowStep" gorm:"comment:工作流步骤"` // 工作流步骤
}
// 工作流状态表
type SysWorkflowStepInfo struct {
gorm.Model
SysWorkflowID uint `json:"workflowID" gorm:"comment:所属工作流ID"` // 所属工作流ID
IsStart bool `json:"isStart" gorm:"comment:是否是开始流节点"` // 是否是开始流节点
StepName string `json:"stepName" gorm:"comment:工作流节点名称"` // 工作流名称
StepNo float64 `json:"stepNo" gorm:"comment:步骤id (第几步)"` // 步骤id (第几步)
StepAuthorityID string `json:"stepAuthorityID" gorm:"comment:操作者级别id"` // 操作者级别id
IsEnd bool `json:"isEnd" gorm:"comment:是否是完结流节点"` // 是否是完结流节点
}
package model
import "gorm.io/gorm"
// 工作流流转表
type SysWorkFlowProcess struct {
gorm.Model
ApplicationID uint `json:"applicationID" gorm:"comment:当前工作流所属申请的ID"` // 当前工作流所属申请的ID
CurrentNode string `json:"currentNode" gorm:"comment:当前进度节点"` // 当前进度节点
HistoricalNode string `json:"historicalNode" gorm:"comment:上一个进度节点"` // 上一个进度节点
CurrentUser string `json:"currentUser" gorm:"comment:当前进度操作人"` // 当前进度操作人
HistoricalUser string `json:"historicalUser" gorm:"comment:上一个进度的操作人"` // 上一个进度的操作人
State bool `json:"state" gorm:"comment:是否是正在进行的状态"` // 状态 是否是正在进行的状态
}
package model
type WorkflowProcess struct {
ID string `json:"id" gorm:"comment:流程标识;primaryKey"`
Name string `json:"name" gorm:"comment:流程名称"`
Category string `json:"category" gorm:"comment:分类"`
Clazz string `json:"clazz" gorm:"comment:类型"`
Label string `json:"label" gorm:"comment:流程标题"`
HideIcon bool `json:"hideIcon" gorm:"comment:是否隐藏图标"`
Nodes []WorkflowNode `json:"nodes"` // 流程节点数据
Edges []WorkflowEdge `json:"edges"` // 流程链接数据
}
type WorkflowNode struct {
ID string `json:"id" gorm:"comment:节点id;primaryKey"`
WorkflowProcessID string `json:"-" gorm:"comment:流程标识"`
Clazz string `json:"clazz" gorm:"comment:节点类型"`
Label string `json:"label" gorm:"comment:节点名称"`
Type string `json:"type" gorm:"comment:图标类型"`
Shape string `json:"shape" gorm:"comment:形状"`
X float64 `json:"y" gorm:"comment:x位置"`
Y float64 `json:"x" gorm:"comment:y位置"`
WaitState string `json:"waitState" gorm:"comment:等待属性"`
StateValue string `json:"stateValue" gorm:"comment:等待值"`
To string `json:"to" gorm:"comment:收件人"`
Subject string `json:"subject" gorm:"comment:标题"`
Content string `json:"content" gorm:"comment:内容"`
Cycle string `json:"cycle" gorm:"comment:循环时间"`
Duration string `json:"duration" gorm:"comment:持续时间"`
HideIcon bool `json:"hideIcon" gorm:"comment:是否隐藏图标"`
}
type WorkflowEdge struct {
ID string `json:"id" gorm:"comment:唯一标识;primaryKey"`
WorkflowProcessID string `json:"-" gorm:"comment:流程标识"`
Clazz string `json:"clazz" gorm:"comment:类型(线)"`
Source string `json:"source" gorm:"comment:起点节点"`
Target string `json:"target" gorm:"comment:目标节点"`
SourceAnchor int `json:"sourceAnchor" gorm:"comment:起点"`
TargetAnchor int `json:"targetAnchor" gorm:"comment:目标点"`
Shape string `json:"shape" gorm:"comment:形状"`
StartPoint WorkflowPoint `json:"startPoint"` // 起点信息
EndPoint WorkflowPoint `json:"endPoint"` // 终点信息
Label string `json:"label" gorm:"comment:标题"`
HideIcon bool `json:"hideIcon" gorm:"comment:隐藏图标"`
ConditionExpression string `json:"conditionExpression" gorm:"comment:条件标识"`
Seq string `json:"seq" gorm:"comment:序号"`
Reverse bool `json:"reverse" gorm:"comment:是否反向"`
}
type WorkflowPoint struct {
ID string `json:"-" gorm:"comment:唯一标识;primaryKey"`
WorkflowEdgeID string `json:"-"`
X float64 `json:"x"`
Y float64 `json:"y"`
Index int `json:"index"`
}
package router
import (
"gin-vue-admin/api/v1"
"gin-vue-admin/middleware"
"github.com/gin-gonic/gin"
)
func InitWorkflowRouter(Router *gin.RouterGroup) {
WorkflowRouter := Router.Group("workflow").Use(middleware.JWTAuth()).Use(middleware.CasbinHandler())
{
WorkflowRouter.POST("createWorkFlow", v1.CreateWorkFlow) // 创建工作流
}
}
package service
import (
"gin-vue-admin/global"
"gin-vue-admin/model"
)
// @title Create
// @description create a workflow, 创建工作流
// @auth (2020/04/05 20:22)
// @param wk model.SysWorkflow
// @return error
func Create(wk model.SysWorkflow) error {
err := global.GVA_DB.Create(&wk).Error
return err
}
...@@ -110,4 +110,4 @@ export const setUserInfo = (data) => { ...@@ -110,4 +110,4 @@ export const setUserInfo = (data) => {
method: 'put', method: 'put',
data: data data: data
}) })
} }
\ No newline at end of file
/* eslint-disable */ /* eslint-disable */
export default function(G6){ export default function(G6) {
G6.registerBehavior('deleteItem', { G6.registerBehavior('deleteItem', {
getEvents() { getEvents() {
return { return {
'keydown': 'onKeydown', 'keydown': 'onKeydown',
'canvas:mouseleave': 'onCanvasLeave', 'canvas:mouseleave': 'onCanvasLeave',
'canvas:mouseenter': 'onCanvasFocus', 'canvas:mouseenter': 'onCanvasFocus',
} }
}, },
onKeydown(e){ onKeydown(e) {
const items = this.graph.get('selectedItems'); const items = this.graph.get('selectedItems');
const focus = this.graph.get('focusGraphWrapper'); const focus = this.graph.get('focusGraphWrapper');
if(e.keyCode === 8 && items && items.length > 0 && focus){ if (e.keyCode === 46 && items && items.length > 0 && focus) {
if(this.graph.executeCommand) { if (this.graph.executeCommand) {
this.graph.executeCommand('delete', {}); this.graph.executeCommand('delete', {});
}else{ } else {
this.graph.remove(items[0]); this.graph.remove(items[0]);
}
this.graph.set('selectedItems', []);
this.graph.emit('afteritemselected', []);
}
if (e.ctrlKey == true && e.keyCode == 90) { //Ctrl+z
e.returnvalue = false;
if (this.graph.executeCommand) {
this.graph.executeCommand('undo', {});
}
}
if (e.ctrlKey == true && e.keyCode == 89) { //Ctrl+y
e.returnvalue = false;
if (this.graph.executeCommand) {
this.graph.executeCommand('redo', {});
}
}
},
onCanvasLeave(e) {
this.graph.set('focusGraphWrapper', false);
},
onCanvasFocus() {
this.graph.set('focusGraphWrapper', true);
} }
this.graph.set('selectedItems',[]); });
this.graph.emit('afteritemselected',[]); }
} \ No newline at end of file
},
onCanvasLeave(e){
this.graph.set('focusGraphWrapper',false);
},
onCanvasFocus(){
this.graph.set('focusGraphWrapper',true);
}
});
}
...@@ -66,7 +66,7 @@ Vue.prototype.$echarts = echarts; ...@@ -66,7 +66,7 @@ Vue.prototype.$echarts = echarts;
console.log(` console.log(`
欢迎使用 Gin-Vue-Admin 欢迎使用 Gin-Vue-Admin
当前版本:V2.3.3 当前版本:V2.3.4
默认自动化文档地址:http://127.0.0.1%s/swagger/index.html 默认自动化文档地址:http://127.0.0.1%s/swagger/index.html
默认前端文件运行地址:http://127.0.0.1:8080 默认前端文件运行地址:http://127.0.0.1:8080
`) `)
\ No newline at end of file
...@@ -20,7 +20,7 @@ export default { ...@@ -20,7 +20,7 @@ export default {
data () { data () {
return { return {
lang: "zh", lang: "zh",
demoData: {}, demoData: {"nodes":[{"clazz":"start","label":"发起请假","type":"start-node","shape":"start-node","x":110,"y":195,"id":"start1603681292875","style":{}},{"clazz":"parallelGateway","label":"会签","type":"parallel-gateway-node","shape":"parallel-gateway-node","x":228,"y":195,"id":"parallelGateway1603681296419","style":{}},{"clazz":"userTask","label":"审批人1","type":"user-task-node","shape":"user-task-node","x":372,"y":84,"id":"userTask1603681299962","style":{},"assignValue":1,"assignType":"user"},{"clazz":"userTask","label":"审批人2","type":"user-task-node","shape":"user-task-node","x":370,"y":321,"id":"userTask1603681302372","style":{},"assignValue":2,"assignType":"user"},{"clazz":"parallelGateway","label":"会签结果检测","type":"parallel-gateway-node","shape":"parallel-gateway-node","x":519,"y":195,"id":"parallelGateway1603681338222","style":{}},{"clazz":"end","label":"请假失败","type":"end-node","shape":"end-node","x":704,"y":317,"id":"end1603681358043","style":{}},{"clazz":"end","label":"请假成功","type":"end-node","shape":"end-node","x":706.5,"y":55.5,"id":"end1603681360882","style":{}}],"edges":[{"id":"flow1603681320738","clazz":"flow","source":"parallelGateway1603681296419","target":"userTask1603681299962","sourceAnchor":0,"targetAnchor":3,"shape":"flow-polyline-round","style":{},"startPoint":{"x":228,"y":169,"index":0},"endPoint":{"x":321.5,"y":84,"index":3}},{"id":"flow1603681321969","clazz":"flow","source":"parallelGateway1603681296419","target":"userTask1603681302372","sourceAnchor":2,"targetAnchor":3,"shape":"flow-polyline-round","style":{},"startPoint":{"x":228,"y":221,"index":2},"endPoint":{"x":319.5,"y":321,"index":3}},{"id":"flow1603681323274","clazz":"flow","source":"start1603681292875","target":"parallelGateway1603681296419","sourceAnchor":1,"targetAnchor":3,"shape":"flow-polyline-round","style":{},"startPoint":{"x":138,"y":195,"index":1},"endPoint":{"x":202,"y":195,"index":3},"label":"发起","conditionExpression":"complete"},{"id":"flow1603681341777","clazz":"flow","source":"userTask1603681299962","target":"parallelGateway1603681338222","sourceAnchor":1,"targetAnchor":3,"shape":"flow-polyline-round","style":{},"startPoint":{"x":422.5,"y":84,"index":1},"endPoint":{"x":493,"y":195,"index":3}},{"id":"flow1603681343425","clazz":"flow","source":"userTask1603681302372","target":"parallelGateway1603681338222","sourceAnchor":1,"targetAnchor":3,"shape":"flow-polyline-round","style":{},"startPoint":{"x":420.5,"y":321,"index":1},"endPoint":{"x":493,"y":195,"index":3}},{"id":"flow1603681362913","clazz":"flow","source":"parallelGateway1603681338222","target":"end1603681360882","sourceAnchor":0,"targetAnchor":2,"shape":"flow-polyline-round","style":{},"startPoint":{"x":519,"y":169,"index":0},"endPoint":{"x":678.5,"y":55.5,"index":2},"conditionExpression":"complete","label":"所有人同意"},{"id":"flow1603681392729","clazz":"flow","source":"parallelGateway1603681338222","target":"end1603681358043","sourceAnchor":2,"targetAnchor":2,"shape":"flow-polyline-round","style":{},"startPoint":{"x":519,"y":221,"index":2},"endPoint":{"x":676,"y":317,"index":2},"conditionExpression":"reject","label":"任何一人拒绝"}],"combos":[],"groups":[]},
users: [], users: [],
authorities:[], authorities:[],
groups: [{id:'1',name:'组1'},{id:'2',name:'组2'},{id:'3',name:'组3'}], groups: [{id:'1',name:'组1'},{id:'2',name:'组2'},{id:'3',name:'组3'}],
...@@ -31,6 +31,7 @@ export default { ...@@ -31,6 +31,7 @@ export default {
save(){ save(){
console.log(this.$refs['wfd'].graph.save()) console.log(this.$refs['wfd'].graph.save())
console.log(this.$refs['wfd'].processModel) console.log(this.$refs['wfd'].processModel)
console.log(JSON.stringify(this.$refs['wfd'].graph.save()))
}, },
saveXML(){ saveXML(){
console.log(this.$refs['wfd'].graph.saveXML()) console.log(this.$refs['wfd'].graph.saveXML())
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册