Browse Source

样式细节调整 (#726)

增加健康检查

样式细节调整

规范化插件js模式

增加k8s yaml文件 (#734)
main
奇淼(piexlmax 3 years ago
committed by GitHub
parent
commit
f56ff1a38f
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 148
      deployment/server/gva-server-configmap.yaml
  2. 68
      deployment/server/gva-server-deployment.yaml
  3. 21
      deployment/server/gva-server-service.yaml
  4. 32
      deployment/web/gva-web-configmap.yaml
  5. 51
      deployment/web/gva-web-deploymemt.yaml
  6. 21
      deployment/web/gva-web-service.yaml
  7. 2
      server/Dockerfile
  8. 6
      server/initialize/router.go
  9. 12
      server/resource/template/web/table.vue.tpl
  10. 3
      server/service/system/sys_authority.go
  11. 14
      web/src/components/warningBar/warningBar.vue
  12. 4
      web/src/core/gin-vue-admin.js
  13. 5
      web/src/directive/auth.js
  14. 15
      web/src/main.js
  15. 191
      web/src/style/element_visiable.scss
  16. 180
      web/src/style/main.scss
  17. 12
      web/src/view/example/customer/customer.vue
  18. 14
      web/src/view/example/excel/excel.vue
  19. 12
      web/src/view/example/upload/upload.vue
  20. 53
      web/src/view/login/index.vue
  21. 15
      web/src/view/superAdmin/api/api.vue
  22. 6
      web/src/view/superAdmin/authority/authority.vue
  23. 20
      web/src/view/superAdmin/dictionary/sysDictionary.vue
  24. 12
      web/src/view/superAdmin/dictionary/sysDictionaryDetail.vue
  25. 28
      web/src/view/superAdmin/menu/menu.vue
  26. 22
      web/src/view/superAdmin/operation/sysOperationRecord.vue
  27. 14
      web/src/view/superAdmin/user/user.vue
  28. 24
      web/src/view/systemTools/autoCode/index.vue
  29. 14
      web/src/view/systemTools/autoCodeAdmin/index.vue
  30. 6
      web/yarn.lock

148
deployment/server/gva-server-configmap.yaml

@ -0,0 +1,148 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: config.yaml
annotations:
flipped-aurora/gin-vue-admin: backend
github: "https://github.com/flipped-aurora/gin-vue-admin.git"
app.kubernetes.io/version: 0.0.1
labels:
app: gva-server
version: gva-vue3
data:
config.yaml: |
# github.com/flipped-aurora/gin-vue-admin/server Global Configuration
# jwt configuration
jwt:
signing-key: 'qmPlus'
expires-time: 604800
buffer-time: 86400
# zap logger configuration
zap:
level: 'info'
format: 'console'
prefix: '[github.com/flipped-aurora/gin-vue-admin/server]'
director: 'log'
link-name: 'latest_log'
show-line: true
encode-level: 'LowercaseColorLevelEncoder'
stacktrace-key: 'stacktrace'
log-in-console: true
# redis configuration
redis:
db: 0
addr: '127.0.0.1:6379'
password: ''
# email configuration
email:
to: 'xxx@qq.com'
port: 465
from: 'xxx@163.com'
host: 'smtp.163.com'
is-ssl: true
secret: 'xxx'
nickname: 'test'
# casbin configuration
casbin:
model-path: './resource/rbac_model.conf'
# system configuration
system:
env: 'develop' # Change to "develop" to skip authentication for development mode
addr: 8888
db-type: 'mysql'
oss-type: 'local' # 控制oss选择走本期还是 七牛等其他仓 自行增加其他oss仓可以在 server/utils/upload/upload.go 中 NewOss函数配置
use-multipoint: false
# captcha configuration
captcha:
key-long: 6
img-width: 240
img-height: 80
# mysql connect configuration
# 未初始化之前请勿手动修改数据库信息!!!如果一定要手动初始化请看(https://www.github.com/flipped-aurora/gin-vue-admin/server.com/docs/first)
mysql:
path: ''
config: ''
db-name: ''
username: ''
password: ''
max-idle-conns: 10
max-open-conns: 100
log-mode: false
log-zap: ""
# local configuration
local:
path: 'uploads/file'
# autocode configuration
autocode:
transfer-restart: true
root: ""
server: /server
server-api: /api/v1/autocode
server-initialize: /initialize
server-model: /model/autocode
server-request: /model/autocode/request/
server-router: /router/autocode
server-service: /service/autocode
web: /web/src
web-api: /api
web-flow: /view
web-form: /view
web-table: /view
# qiniu configuration (请自行七牛申请对应的 公钥 私钥 bucket 和 域名地址)
qiniu:
zone: 'ZoneHuaDong'
bucket: ''
img-path: ''
use-https: false
access-key: ''
secret-key: ''
use-cdn-domains: false
# aliyun oss configuration
aliyun-oss:
endpoint: 'yourEndpoint'
access-key-id: 'yourAccessKeyId'
access-key-secret: 'yourAccessKeySecret'
bucket-name: 'yourBucketName'
bucket-url: 'yourBucketUrl'
base-path: 'yourBasePath'
# tencent cos configuration
tencent-cos:
bucket: 'xxxxx-10005608'
region: 'ap-shanghai'
secret-id: 'xxxxxxxx'
secret-key: 'xxxxxxxx'
base-url: 'https://gin.vue.admin'
path-prefix: 'github.com/flipped-aurora/gin-vue-admin/server'
# excel configuration
excel:
dir: './resource/excel/'
# timer task db clear table
Timer:
start: true
spec: "@daily" # 定时任务详细配置参考 https://pkg.go.dev/github.com/robfig/cron/v3
detail: [
# tableName: 需要清理的表名
# compareField: 需要比较时间的字段
# interval: 时间间隔, 具体配置详看 time.ParseDuration() 中字符串表示 且不能为负数
# 2160h = 24 * 30 * 3 -> 三个月
{ tableName: "sys_operation_records" , compareField: "created_at", interval: "2160h" },
{ tableName: "jwt_blacklists" , compareField: "created_at", interval: "168h" }
#{ tableName: "log2" , compareField: "created_at", interval: "2160h" }
]

68
deployment/server/gva-server-deployment.yaml

@ -0,0 +1,68 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: gva-server
annotations:
flipped-aurora/gin-vue-admin: backend
github: "https://github.com/flipped-aurora/gin-vue-admin.git"
app.kubernetes.io/version: 0.0.1
labels:
app: gva-server
version: gva-vue3
spec:
replicas: 1
selector:
matchLabels:
app: gva-server
version: gva-vue3
template:
metadata:
labels:
app: gva-server
version: gva-vue3
spec:
containers:
- name: gin-vue-admin-container
image: registry.cn-hangzhou.aliyuncs.com/gin-vue-admin/server:40fc3aa6
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8888
name: http
volumeMounts:
- mountPath: /go/src/github.com/flipped-aurora/gin-vue-admin/server/config.yaml
name: config
subPath: config.yaml
- mountPath: /etc/localtime
name: localtime
resources:
limits:
cpu: 1000m
memory: 2000Mi
requests:
cpu: 100m
memory: 200Mi
# readinessProbe:
# httpGet:
# path: /ready
# port: http
# initialDelaySeconds: 20
# periodSeconds: 10
# successThreshold: 1
# failureThreshold: 3
# livenessProbe:
# httpGet:
# path: /health
# port: http
# initialDelaySeconds: 20
# periodSeconds: 10
# successThreshold: 1
# failureThreshold: 3
#imagePullSecrets:
# - name: docker-registry
volumes:
- name: localtime
hostPath:
path: /etc/localtime
- name: config
configMap:
name: config.yaml

21
deployment/server/gva-server-service.yaml

@ -0,0 +1,21 @@
apiVersion: v1
kind: Service
metadata:
name: gva-server
annotations:
flipped-aurora/gin-vue-admin: backend
github: "https://github.com/flipped-aurora/gin-vue-admin.git"
app.kubernetes.io/version: 0.0.1
labels:
app: gva-server
version: gva-vue3
spec:
selector:
app: gva-server
version: gva-vue3
ports:
- port: 8888
name: http
targetPort: 8888
type: ClusterIP
# type: NodePort

32
deployment/web/gva-web-configmap.yaml

@ -0,0 +1,32 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: my.conf
data:
my.conf: |
server {
listen 8080;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root /usr/share/nginx/html;
add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
try_files $uri $uri/ /index.html;
}
location /api {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
rewrite ^/api/(.*)$ /$1 break; #重写
proxy_pass http://gva-server:8888; # 设置代理服务器的协议和地址
}
location /api/swagger/index.html {
proxy_pass http://gva-server:8888/swagger/index.html;
}
}

51
deployment/web/gva-web-deploymemt.yaml

@ -0,0 +1,51 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: gva-web
annotations:
flipped-aurora/gin-vue-admin: ui
github: "https://github.com/flipped-aurora/gin-vue-admin.git"
app.kubernetes.io/version: 0.0.1
labels:
app: gva-web
version: gva-vue3
spec:
replicas: 1
selector:
matchLabels:
app: gva-web
version: gva-vue3
template:
metadata:
labels:
app: gva-web
version: gva-vue3
spec:
containers:
- name: gin-vue-admin-nginx-container
image: registry.cn-hangzhou.aliyuncs.com/gin-vue-admin/web:40fc3aa6
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
name: http
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 10
periodSeconds: 10
successThreshold: 1
failureThreshold: 3
resources:
limits:
cpu: 500m
memory: 1000Mi
requests:
cpu: 100m
memory: 100Mi
volumeMounts:
- mountPath: /etc/nginx/conf.d/
name: nginx-config
volumes:
- name: nginx-config
configMap:
name: my.conf

21
deployment/web/gva-web-service.yaml

@ -0,0 +1,21 @@
apiVersion: v1
kind: Service
metadata:
name: gva-web
annotations:
flipped-aurora/gin-vue-admin: ui
github: "https://github.com/flipped-aurora/gin-vue-admin.git"
app.kubernetes.io/version: 0.0.1
labels:
app: gva-web
version: gva-vue3
spec:
type: NodePort
# type: ClusterIP
ports:
- name: http
port: 8080
targetPort: 8080
selector:
app: gva-web
version: gva-vue3

2
server/Dockerfile

@ -1,4 +1,4 @@
FROM golang:alpine
FROM golang:alpine as builder
WORKDIR /go/src/github.com/flipped-aurora/gin-vue-admin/server
COPY . .

6
server/initialize/router.go

@ -41,6 +41,12 @@ func Routers() *gin.Engine {
exampleRouter := router.RouterGroupApp.Example
autocodeRouter := router.RouterGroupApp.Autocode
PublicGroup := Router.Group("")
{
// 健康监测
PublicGroup.GET("/health", func(c *gin.Context) {
c.JSON(200, "ok")
})
}
{
systemRouter.InitBaseRouter(PublicGroup) // 注册基础功能路由 不做鉴权
systemRouter.InitInitRouter(PublicGroup) // 自动初始化相关

12
server/resource/template/web/table.vue.tpl

@ -37,7 +37,7 @@
<el-button size="mini" type="primary" @click="onDelete">确定</el-button>
</div>
<template #reference>
<el-button icon="el-icon-delete" size="mini" style="margin-left: 10px;">删除</el-button>
<el-button icon="el-icon-delete" size="mini" style="margin-left: 10px;" :disabled="!multipleSelection.length">删除</el-button>
</template>
</el-popover>
</div>
@ -50,24 +50,24 @@
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" />
<el-table-column align="center" label="日期" width="180">
<el-table-column align="left" label="日期" width="180">
<template #default="scope">{{ "{{ formatDate(scope.row.CreatedAt) }}" }}</template>
</el-table-column>
{{- range .Fields}}
{{- if .DictType}}
<el-table-column align="center" label="{{.FieldDesc}}" prop="{{.FieldJson}}" width="120">
<el-table-column align="left" label="{{.FieldDesc}}" prop="{{.FieldJson}}" width="120">
<template #default="scope">
{{"{{"}} filterDict(scope.row.{{.FieldJson}},"{{.DictType}}") {{"}}"}}
</template>
</el-table-column>
{{- else if eq .FieldType "bool" }}
<el-table-column align="center" label="{{.FieldDesc}}" prop="{{.FieldJson}}" width="120">
<el-table-column align="left" label="{{.FieldDesc}}" prop="{{.FieldJson}}" width="120">
<template #default="scope">{{"{{"}} formatBoolean(scope.row.{{.FieldJson}}) {{"}}"}}</template>
</el-table-column> {{- else }}
<el-table-column align="center" label="{{.FieldDesc}}" prop="{{.FieldJson}}" width="120" />
<el-table-column align="left" label="{{.FieldDesc}}" prop="{{.FieldJson}}" width="120" />
{{- end }}
{{- end }}
<el-table-column align="center" label="按钮组">
<el-table-column align="left" label="按钮组">
<template #default="scope">
<el-button type="text" icon="el-icon-edit" size="small" class="table-button" @click="update{{.StructName}}(scope.row)">变更</el-button>
<el-button type="text" icon="el-icon-delete" size="mini" @click="deleteRow(scope.row)">删除</el-button>

3
server/service/system/sys_authority.go

@ -121,7 +121,8 @@ func (authorityService *AuthorityService) DeleteAuthority(auth *system.SysAuthor
func (authorityService *AuthorityService) GetAuthorityInfoList(info request.PageInfo) (err error, list interface{}, total int64) {
limit := info.PageSize
offset := info.PageSize * (info.Page - 1)
db := global.GVA_DB
db := global.GVA_DB.Model(&system.SysAuthority{})
err = db.Where("parent_id = 0").Count(&total).Error
var authority []system.SysAuthority
err = db.Limit(limit).Offset(offset).Preload("DataAuthorityId").Where("parent_id = 0").Find(&authority).Error
if len(authority) > 0 {

14
web/src/components/warningBar/warningBar.vue

@ -1,5 +1,7 @@
<template>
<div class="warning-bar">
<div
class="warning-bar"
>
<el-icon>
<warning-filled />
</el-icon>
@ -19,7 +21,7 @@ export default {
title: {
type: String,
default: ''
}
},
}
}
</script>
@ -30,14 +32,16 @@ export default {
padding: 6px 14px;
display: flex;
align-items: center;
border-radius: 2px;
.el-icon{
font-size: 18px;
color: #ED6A0C;
}
margin-bottom: 22px;
margin-bottom: 12px;
span{
color:#5D5D5E;
line-height: 22px;
color:#F67207;
margin-left: 8px;
line-height: 18px;
}
}
</style>

4
web/src/core/gin-vue-admin.js

@ -5,7 +5,8 @@
// 加载网站配置文件夹
import { register } from './global'
export const run = function(app) {
export default {
install: (app) => {
register(app)
console.log(`
欢迎使用 Gin-Vue-Admin
@ -15,4 +16,5 @@ export const run = function(app) {
默认前端文件运行地址:http://127.0.0.1:${import.meta.env.VITE_CLI_PORT}
如果项目让您获得了收益希望您能请团队喝杯可乐:https://www.gin-vue-admin.com/docs/coffee
`)
}
}

5
web/src/directive/auth.js

@ -1,6 +1,7 @@
// 权限按钮展示指令
import { store } from '@/store'
export const auth = (app) => {
export default {
install: (app) => {
app.directive('auth', {
// 当被绑定的元素插入到 DOM 中时……
mounted: function(el, binding) {
@ -36,4 +37,6 @@ export const auth = (app) => {
}
}
})
}
}

15
web/src/main.js

@ -1,22 +1,25 @@
import { createApp } from 'vue'
import 'element-plus/dist/index.css'
import './style/element_visiable.scss'
import ElementPlus from 'element-plus'
import zhCn from 'element-plus/es/locale/lang/zh-cn'
// 引入gin-vue-admin前端初始化相关内容
import './core/gin-vue-admin'
// 引入封装的router
import router from '@/router/index'
import { run } from '@/core/gin-vue-admin.js'
import run from '@/core/gin-vue-admin.js'
import auth from '@/directive/auth'
import '@/permission'
import { store } from '@/store/index'
import { auth } from '@/directive/auth'
import App from './App.vue'
const app = createApp(App)
run(app)
auth(app)
app.config.productionTip = false
app.use(store).use(router).use(ElementPlus, { locale: zhCn }).mount('#app')
app.use(run)
.use(auth)
.use(store)
.use(router)
.use(ElementPlus, { locale: zhCn }).mount('#app')
export default app

191
web/src/style/element_visiable.scss

@ -1,21 +1,192 @@
/* 改变主题色变量 */
$--color-primary: #1890ff;
#app{
.el-button{
font-weight: 400;
border-radius: 2px;
}
}
.el-dialog{
border-radius: 2px;
}
::-webkit-scrollbar-track-piece {
background-color: #f8f8f8;
}
::-webkit-scrollbar {
width: 9px;
height: 9px;
}
::-webkit-scrollbar-thumb {
background-color: #dddddd;
background-clip: padding-box;
min-height: 28px;
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background-color: #bbb;
}
.el-button--primary {
--el-button-font-color: #ffffff;
--el-button-background-color: #4D70FF;
--el-button-border-color: #4D70FF;
--el-button-hover-color: #0d84ff;
--el-button-active-font-color: #e6e6e6;
--el-button-active-background-color: #0d84ff;
--el-button-active-border-color: #0d84ff;
}
.el-button--primary {
--el-button-font-color: #ffffff;
--el-button-background-color: #4D70FF;
--el-button-border-color: #4D70FF;
--el-button-hover-color: #0d84ff;
--el-button-active-font-color: #e6e6e6;
--el-button-active-background-color: #0d84ff;
--el-button-active-border-color: #0d84ff;
}
:root {
--el-color-primary: #4D70FF;
}
.gva-search-box {
.el-collapse {
border: none;
.el-collapse-item__header,
.el-collapse-item__wrap {
border-bottom: none;
}
}
padding: 24px;
padding-bottom: 2px;
background-color: #fff;
border-radius: 2px;
margin-bottom: 12px;
.el-form {
.el-form-item {
padding-right: 28px;
}
}
}
.gva-form-box {
padding: 24px;
background-color: #fff;
border-radius: 2px;
}
///* 改变 icon 字体路径变量必需 */
//$--font-path: '~element-ui/lib/theme-chalk/fonts';
//
//
//
//@import "~element-ui/packages/theme-chalk/src/index";
//
.gva-table-box {
padding: 24px;
background-color: #fff;
border-radius: 2px;
}
:export {
colorPrimary: $--color-primary
.gva-pagination {
display: flex;
justify-content: flex-end;
.el-pagination__editor {
.el-input__inner {
height: 32px;
}
}
.el-pagination__total {
line-height: 32px !important;
}
.btn-prev {
padding-right: 6px;
display: inline-flex;
justify-content: center;
align-items: center;
width: 32px;
height: 32px;
}
.number {
display: inline-flex;
justify-content: center;
align-items: center;
width: 32px;
height: 32px;
}
.btn-quicknext {
display: inline-flex;
justify-content: center;
align-items: center;
width: 32px;
height: 32px;
}
.btn-next {
padding-left: 6px;
width: 32px;
height: 32px;
display: inline-flex;
justify-content: center;
align-items: center;
}
.active {
background: #4D70FF;
border-radius: 2px;
color: #ffffff !important;
}
.el-pager li.active+li {
border-left: 1px solid #ddd !important;
}
.el-pagination__sizes {
.el-input {
.el-input__suffix {
margin-top: 2px;
}
}
}
.el-pagination__jump {
.el-pagination__editor {}
}
}
.el-button--mini {
min-height: 32px;
}
.el-button {
padding: 8px 16px;
border-radius: 2px;
&.el-button--text {
padding: 8px 0;
}
}
.el-dialog {
padding: 12px;
.el-dialog__body {
padding: 12px 6px;
}
.el-dialog__header {
.el-dialog__title {
font-size: 14px;
font-weight: 500;
}
padding: 2px 20px 12px 20px;
border-bottom: 1px solid #E4E4E4;
}
.el-dialog__headerbtn {
top: 16px;
}
.el-dialog__footer {
margin-top: -12px;
padding: 0 0 16px 0;
.dialog-footer {
.el-button {
padding-left: 24px;
padding-right: 24px;
}
.el-button+.el-button {
margin-left: 30px;
}
}
}
}

180
web/src/style/main.scss

@ -1368,183 +1368,3 @@ $mainHight: 100vh;
.justify-content-flex-end {
justify-content: flex-end;
}
::-webkit-scrollbar-track-piece {
background-color: #f8f8f8;
}
::-webkit-scrollbar {
width: 9px;
height: 9px;
}
::-webkit-scrollbar-thumb {
background-color: #dddddd;
background-clip: padding-box;
min-height: 28px;
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background-color: #bbb;
}
.el-button--primary {
--el-button-font-color: #ffffff;
--el-button-background-color: #4D70FF;
--el-button-border-color: #4D70FF;
--el-button-hover-color: #0d84ff;
--el-button-active-font-color: #e6e6e6;
--el-button-active-background-color: #0d84ff;
--el-button-active-border-color: #0d84ff;
}
.el-button--primary {
--el-button-font-color: #ffffff;
--el-button-background-color: #4D70FF;
--el-button-border-color: #4D70FF;
--el-button-hover-color: #0d84ff;
--el-button-active-font-color: #e6e6e6;
--el-button-active-background-color: #0d84ff;
--el-button-active-border-color: #0d84ff;
}
:root {
--el-color-primary: #4D70FF;
}
.gva-search-box {
.el-collapse {
border: none;
.el-collapse-item__header,
.el-collapse-item__wrap {
border-bottom: none;
}
}
padding: 24px;
padding-bottom: 2px;
background-color: #fff;
border-radius: 2px;
margin-bottom: 12px;
.el-form {
.el-form-item {
padding-right: 28px;
}
}
}
.gva-form-box {
padding: 24px;
background-color: #fff;
border-radius: 2px;
}
.gva-table-box {
padding: 24px;
background-color: #fff;
border-radius: 2px;
}
.gva-pagination {
display: flex;
justify-content: flex-end;
.el-pagination__editor {
.el-input__inner {
height: 32px;
}
}
.el-pagination__total {
line-height: 32px !important;
}
.btn-prev {
padding-right: 6px;
display: inline-flex;
justify-content: center;
align-items: center;
width: 32px;
height: 32px;
}
.number {
display: inline-flex;
justify-content: center;
align-items: center;
width: 32px;
height: 32px;
}
.btn-quicknext {
display: inline-flex;
justify-content: center;
align-items: center;
width: 32px;
height: 32px;
}
.btn-next {
padding-left: 6px;
width: 32px;
height: 32px;
display: inline-flex;
justify-content: center;
align-items: center;
}
.active {
background: #4D70FF;
border-radius: 2px;
color: #ffffff !important;
}
.el-pager li.active+li {
border-left: 1px solid #ddd !important;
}
.el-pagination__sizes {
.el-input {
.el-input__suffix {
margin-top: 2px;
}
}
}
.el-pagination__jump {
.el-pagination__editor {}
}
}
.el-button--mini {
min-height: 32px;
}
.el-button {
padding: 8px 16px;
border-radius: 2px;
&.el-button--text {
padding: 8px 0;
}
}
.el-dialog {
padding: 12px;
.el-dialog__body {
padding: 12px 6px;
}
.el-dialog__header {
.el-dialog__title {
font-size: 14px;
font-weight: 500;
}
padding: 2px 20px 12px 20px;
border-bottom: 1px solid #E4E4E4;
}
.el-dialog__headerbtn {
top: 16px;
}
.el-dialog__footer {
margin-top: -12px;
padding: 0 0 16px 0;
.dialog-footer {
.el-button {
padding-left: 24px;
padding-right: 24px;
}
.el-button+.el-button {
margin-left: 30px;
}
}
}
}

12
web/src/view/example/customer/customer.vue

@ -1,5 +1,6 @@
<template>
<div>
<warning-bar title="在资源权限中将此角色的资源权限清空 或者不包含创建者的角色 即可屏蔽此客户资源的显示" />
<div class="gva-table-box">
<div class="gva-btn-list">
<el-button size="mini" type="primary" icon="el-icon-plus" @click="openDialog">新增</el-button>
@ -12,15 +13,15 @@
row-key="ID"
>
<el-table-column type="selection" width="55" />
<el-table-column align="center" label="接入日期" width="180">
<el-table-column align="left" label="接入日期" width="180">
<template #default="scope">
<span>{{ formatDate(scope.row.CreatedAt) }}</span>
</template>
</el-table-column>
<el-table-column align="center" label="姓名" prop="customerName" width="120" />
<el-table-column align="center" label="电话" prop="customerPhoneData" width="120" />
<el-table-column align="center" label="接入人ID" prop="sysUserId" width="120" />
<el-table-column align="center" label="按钮组" min-width="160">
<el-table-column align="left" label="姓名" prop="customerName" width="120" />
<el-table-column align="left" label="电话" prop="customerPhoneData" width="120" />
<el-table-column align="left" label="接入人ID" prop="sysUserId" width="120" />
<el-table-column align="left" label="按钮组" min-width="160">
<template #default="scope">
<el-button size="small" type="text" icon="el-icon-edit" @click="updateCustomer(scope.row)">变更</el-button>
<el-popover :visible="scope.row.visible" placement="top" width="160">
@ -36,7 +37,6 @@
</template>
</el-table-column>
</el-table>
<warning-bar style="margin-top:12px;" title="在资源权限中将此角色的资源权限清空 或者不包含创建者的角色 即可屏蔽此客户资源的显示" />
<div class="gva-pagination">
<el-pagination
:current-page="page"

14
web/src/view/example/excel/excel.vue

@ -16,18 +16,18 @@
<el-button class="excel-btn" size="mini" type="success" icon="el-icon-download" @click="downloadExcelTemplate()">下载模板</el-button>
</div>
<el-table :data="tableData" row-key="ID">
<el-table-column align="center" label="ID" min-width="100" prop="ID" />
<el-table-column align="center" show-overflow-tooltip label="路由Name" min-width="160" prop="name" />
<el-table-column align="center" show-overflow-tooltip label="路由Path" min-width="160" prop="path" />
<el-table-column align="center" label="是否隐藏" min-width="100" prop="hidden">
<el-table-column align="left" label="ID" min-width="100" prop="ID" />
<el-table-column align="left" show-overflow-tooltip label="路由Name" min-width="160" prop="name" />
<el-table-column align="left" show-overflow-tooltip label="路由Path" min-width="160" prop="path" />
<el-table-column align="left" label="是否隐藏" min-width="100" prop="hidden">
<template #default="scope">
<span>{{ scope.row.hidden?"隐藏":"显示" }}</span>
</template>
</el-table-column>
<el-table-column align="center" label="父节点" min-width="90" prop="parentId" />
<el-table-column align="center" label="排序" min-width="70" prop="sort" />
<el-table-column align="center" label="文件路径" min-width="360" prop="component" />
<el-table-column align="left" label="父节点" min-width="90" prop="parentId" />
<el-table-column align="left" label="排序" min-width="70" prop="sort" />
<el-table-column align="left" label="文件路径" min-width="360" prop="component" />
</el-table>
</div>
</div>

12
web/src/view/example/upload/upload.vue

@ -23,19 +23,19 @@
</div>
<el-table :data="tableData">
<el-table-column align="center" label="预览" width="100">
<el-table-column align="left" label="预览" width="100">
<template #default="scope">
<CustomPic pic-type="file" :pic-src="scope.row.url" />
</template>
</el-table-column>
<el-table-column align="center" label="日期" prop="UpdatedAt" width="180">
<el-table-column align="left" label="日期" prop="UpdatedAt" width="180">
<template #default="scope">
<div>{{ formatDate(scope.row.UpdatedAt) }}</div>
</template>
</el-table-column>
<el-table-column align="center" label="文件名" prop="name" width="180" />
<el-table-column align="center" label="链接" prop="url" min-width="300" />
<el-table-column align="center" label="标签" prop="tag" width="100">
<el-table-column align="left" label="文件名" prop="name" width="180" />
<el-table-column align="left" label="链接" prop="url" min-width="300" />
<el-table-column align="left" label="标签" prop="tag" width="100">
<template #default="scope">
<el-tag
:type="scope.row.tag === 'jpg' ? 'primary' : 'success'"
@ -43,7 +43,7 @@
>{{ scope.row.tag }}</el-tag>
</template>
</el-table-column>
<el-table-column align="center" label="操作" width="160">
<el-table-column align="left" label="操作" width="160">
<template #default="scope">
<el-button size="small" icon="el-icon-download" type="text" @click="downloadFile(scope.row)">下载</el-button>
<el-button size="small" icon="el-icon-delete" type="text" @click="deleteFile(scope.row)">删除</el-button>

53
web/src/view/login/index.vue

@ -3,10 +3,19 @@
<div class="login_panle">
<div class="login_panle_form">
<div class="login_panle_form_title">
<img class="login_panle_form_title_logo" :src="$GIN_VUE_ADMIN.appLogo" alt>
<img
class="login_panle_form_title_logo"
:src="$GIN_VUE_ADMIN.appLogo"
alt
/>
<p class="login_panle_form_title_p">{{ $GIN_VUE_ADMIN.appName }}</p>
</div>
<el-form ref="loginForm" :model="loginForm" :rules="rules" @keyup.enter="submitForm">
<el-form
ref="loginForm"
:model="loginForm"
:rules="rules"
@keyup.enter="submitForm"
>
<el-form-item prop="username">
<el-input v-model="loginForm.username" placeholder="请输入用户名">
<template #suffix>
@ -21,7 +30,10 @@
placeholder="请输入密码"
>
<template #suffix>
<i :class="'el-input__icon el-icon-' + lock" @click="changeLock" />
<i
:class="'el-input__icon el-icon-' + lock"
@click="changeLock"
/>
</template>
</el-input>
</el-form-item>
@ -33,12 +45,24 @@
style="width: 60%"
/>
<div class="vPic">
<img v-if="picPath" :src="picPath" alt="请输入验证码" @click="loginVerify()">
<img
v-if="picPath"
:src="picPath"
alt="请输入验证码"
@click="loginVerify()"
/>
</div>
</el-form-item>
<el-form-item>
<el-button type="primary" style="width: 46%" @click="checkInit">前往初始化</el-button>
<el-button type="primary" style="width: 46%;margin-left:8%" @click="submitForm"> </el-button>
<el-button type="primary" style="width: 46%" @click="checkInit"
>前往初始化</el-button
>
<el-button
type="primary"
style="width: 46%; margin-left: 8%"
@click="submitForm"
> </el-button
>
</el-form-item>
</el-form>
</div>
@ -46,24 +70,25 @@
<div class="login_panle_foot">
<div class="links">
<a href="http://doc.henrongyi.top/">
<img src="@/assets/docs.png" class="link-icon">
<img src="@/assets/docs.png" class="link-icon" />
</a>
<a href="https://www.yuque.com/flipped-aurora/">
<img src="@/assets/yuque.png" class="link-icon">
<img src="@/assets/yuque.png" class="link-icon" />
</a>
<a href="https://github.com/flipped-aurora/gin-vue-admin">
<img src="@/assets/github.png" class="link-icon">
<img src="@/assets/github.png" class="link-icon" />
</a>
<a href="https://space.bilibili.com/322210472">
<img src="@/assets/video.png" class="link-icon">
<img src="@/assets/video.png" class="link-icon" />
</a>
</div>
<div class="copyright">Copyright &copy; {{ curYear }} 💖 flipped-aurora</div>
<div class="copyright">
Copyright &copy; {{ curYear }} 💖 flipped-aurora
</div>
</div>
</div>
</div>
</template>
<script>
import { mapActions } from 'vuex'
import { captcha } from '@/api/user'
@ -161,8 +186,12 @@ export default {
}
}
}
</script>
<style lang="scss" scoped>
@import "@/style/newLogin.scss";
</style>

15
web/src/view/superAdmin/api/api.vue

@ -29,7 +29,6 @@
</div>
<div class="gva-table-box">
<div class="gva-btn-list">
<el-button size="mini" type="primary" icon="el-icon-plus" @click="openDialog('addApi')">新增</el-button>
<el-popover v-model:visible="deleteVisible" placement="top" width="160">
<p>确定要删除吗</p>
@ -38,7 +37,7 @@
<el-button size="mini" type="primary" @click="onDelete">确定</el-button>
</div>
<template #reference>
<el-button icon="el-icon-delete" size="mini" style="margin-left: 10px;">删除</el-button>
<el-button icon="el-icon-delete" size="mini" :disabled="!apis.length" style="margin-left: 10px;">删除</el-button>
</template>
</el-popover>
</div>
@ -47,11 +46,11 @@
type="selection"
width="55"
/>
<el-table-column align="center" label="id" min-width="60" prop="ID" sortable="custom" />
<el-table-column align="center" label="API路径" min-width="150" prop="path" sortable="custom" />
<el-table-column align="center" label="API分组" min-width="150" prop="apiGroup" sortable="custom" />
<el-table-column align="center" label="API简介" min-width="150" prop="description" sortable="custom" />
<el-table-column align="center" label="请求" min-width="150" prop="method" sortable="custom">
<el-table-column align="left" label="id" min-width="60" prop="ID" sortable="custom" />
<el-table-column align="left" label="API路径" min-width="150" prop="path" sortable="custom" />
<el-table-column align="left" label="API分组" min-width="150" prop="apiGroup" sortable="custom" />
<el-table-column align="left" label="API简介" min-width="150" prop="description" sortable="custom" />
<el-table-column align="left" label="请求" min-width="150" prop="method" sortable="custom">
<template #default="scope">
<div>
{{ scope.row.method }} / {{ methodFiletr(scope.row.method) }}
@ -59,7 +58,7 @@
</template>
</el-table-column>
<el-table-column align="center" fixed="right" label="操作" width="200">
<el-table-column align="left" fixed="right" label="操作" width="200">
<template #default="scope">
<el-button
icon="el-icon-edit"

6
web/src/view/superAdmin/authority/authority.vue

@ -1,5 +1,6 @@
<template>
<div class="authority">
<warning-bar title="注:右上角头像下拉可切换角色" />
<div class="gva-table-box">
<div class="gva-btn-list">
<el-button size="mini" type="primary" icon="el-icon-plus" @click="addAuthority('0')">新增角色</el-button>
@ -11,8 +12,8 @@
style="width: 100%"
>
<el-table-column label="角色ID" min-width="180" prop="authorityId" />
<el-table-column align="center" label="角色名称" min-width="180" prop="authorityName" />
<el-table-column align="center" label="操作" width="460">
<el-table-column align="left" label="角色名称" min-width="180" prop="authorityName" />
<el-table-column align="left" label="操作" width="460">
<template #default="scope">
<el-button
icon="el-icon-setting"
@ -47,7 +48,6 @@
</template>
</el-table-column>
</el-table>
<warning-bar title="注:右上角头像下拉可切换角色" style="margin-top:12px;" />
</div>
<!-- 新增角色弹窗 -->
<el-dialog v-model="dialogFormVisible" :title="dialogTitle">

20
web/src/view/superAdmin/dictionary/sysDictionary.vue

@ -1,5 +1,8 @@
<template>
<div>
<warning-bar
title="获取字典且缓存方法已在前端utils/dictionary 已经封装完成 不必自己书写 使用方法查看文件内注释"
/>
<div class="gva-search-box">
<el-form :inline="true" :model="searchInfo">
<el-form-item label="字典名(中)">
@ -35,21 +38,21 @@
row-key="ID"
>
<el-table-column type="selection" width="55" />
<el-table-column align="center" label="日期" width="180">
<el-table-column align="left" label="日期" width="180">
<template #default="scope">{{ formatDate(scope.row.CreatedAt) }}</template>
</el-table-column>
<el-table-column align="center" label="字典名(中)" prop="name" width="160" />
<el-table-column align="left" label="字典名(中)" prop="name" width="160" />
<el-table-column align="center" label="字典名(英)" prop="type" width="120" />
<el-table-column align="left" label="字典名(英)" prop="type" width="120" />
<el-table-column align="center" label="状态" prop="status" width="120">
<el-table-column align="left" label="状态" prop="status" width="120">
<template #default="scope">{{ formatBoolean(scope.row.status) }}</template>
</el-table-column>
<el-table-column align="center" label="描述" prop="desc" width="280" />
<el-table-column align="left" label="描述" prop="desc" width="280" />
<el-table-column align="center" label="按钮组">
<el-table-column align="left" label="按钮组">
<template #default="scope">
<el-button size="mini" icon="el-icon-document" type="text" @click="toDetile(scope.row)">详情</el-button>
<el-button size="mini" icon="el-icon-edit" type="text" @click="updateSysDictionary(scope.row)">变更</el-button>
@ -66,10 +69,7 @@
</template>
</el-table-column>
</el-table>
<warning-bar
title="获取字典且缓存方法已在前端utils/dictionary 已经封装完成 不必自己书写 使用方法查看文件内注释"
style="margin-top:12px"
/>
<div class="gva-pagination">
<el-pagination
:current-page="page"

12
web/src/view/superAdmin/dictionary/sysDictionaryDetail.vue

@ -32,21 +32,21 @@
row-key="ID"
>
<el-table-column type="selection" width="55" />
<el-table-column align="center" label="日期" width="180">
<el-table-column align="left" label="日期" width="180">
<template #default="scope">{{ formatDate(scope.row.CreatedAt) }}</template>
</el-table-column>
<el-table-column align="center" label="展示值" prop="label" width="120" />
<el-table-column align="left" label="展示值" prop="label" width="120" />
<el-table-column align="center" label="字典值" prop="value" width="120" />
<el-table-column align="left" label="字典值" prop="value" width="120" />
<el-table-column align="center" label="启用状态" prop="status" width="120">
<el-table-column align="left" label="启用状态" prop="status" width="120">
<template #default="scope">{{ formatBoolean(scope.row.status) }}</template>
</el-table-column>
<el-table-column align="center" label="排序标记" prop="sort" width="120" />
<el-table-column align="left" label="排序标记" prop="sort" width="120" />
<el-table-column align="center" label="按钮组">
<el-table-column align="left" label="按钮组">
<template #default="scope">
<el-button size="small" type="text" icon="el-icon-edit" @click="updateSysDictionaryDetail(scope.row)">变更</el-button>
<el-popover :visible="scope.row.visible" placement="top" width="160">

28
web/src/view/superAdmin/menu/menu.vue

@ -7,29 +7,29 @@
<!-- 由于此处菜单跟左侧列表一一对应所以不需要分页 pageSize默认999 -->
<el-table :data="tableData" row-key="ID">
<el-table-column align="center" label="ID" min-width="100" prop="ID" />
<el-table-column align="center" label="路由Name" show-overflow-tooltip min-width="160" prop="name" />
<el-table-column align="center" label="路由Path" show-overflow-tooltip min-width="160" prop="path" />
<el-table-column align="center" label="是否隐藏" min-width="100" prop="hidden">
<el-table-column align="left" label="ID" min-width="100" prop="ID" />
<el-table-column align="left" label="路由Name" show-overflow-tooltip min-width="160" prop="name" />
<el-table-column align="left" label="路由Path" show-overflow-tooltip min-width="160" prop="path" />
<el-table-column align="left" label="是否隐藏" min-width="100" prop="hidden">
<template #default="scope">
<span>{{ scope.row.hidden?"隐藏":"显示" }}</span>
</template>
</el-table-column>
<el-table-column align="center" label="父节点" min-width="90" prop="parentId" />
<el-table-column align="center" label="排序" min-width="70" prop="sort" />
<el-table-column align="center" label="文件路径" min-width="360" prop="component" />
<el-table-column align="center" label="展示名称" min-width="120" prop="authorityName">
<el-table-column align="left" label="父节点" min-width="90" prop="parentId" />
<el-table-column align="left" label="排序" min-width="70" prop="sort" />
<el-table-column align="left" label="文件路径" min-width="360" prop="component" />
<el-table-column align="left" label="展示名称" min-width="120" prop="authorityName">
<template #default="scope">
<span>{{ scope.row.meta.title }}</span>
</template>
</el-table-column>
<el-table-column align="center" label="图标" min-width="140" prop="authorityName">
<el-table-column align="left" label="图标" min-width="140" prop="authorityName">
<template #default="scope">
<i :class="`el-icon-${scope.row.meta.icon}`" />
<span>{{ scope.row.meta.icon }}</span>
</template>
</el-table-column>
<el-table-column align="center" fixed="right" label="操作" width="300">
<el-table-column align="left" fixed="right" label="操作" width="300">
<template #default="scope">
<el-button
size="mini"
@ -138,7 +138,7 @@
@click="addParameter(form)"
>新增菜单参数</el-button>
<el-table :data="form.parameters" style="width: 100%">
<el-table-column align="center" prop="type" label="参数类型" width="180">
<el-table-column align="left" prop="type" label="参数类型" width="180">
<template #default="scope">
<el-select v-model="scope.row.type" placeholder="请选择">
<el-option key="query" value="query" label="query" />
@ -146,21 +146,21 @@
</el-select>
</template>
</el-table-column>
<el-table-column align="center" prop="key" label="参数key" width="180">
<el-table-column align="left" prop="key" label="参数key" width="180">
<template #default="scope">
<div>
<el-input v-model="scope.row.key" />
</div>
</template>
</el-table-column>
<el-table-column align="center" prop="value" label="参数值">
<el-table-column align="left" prop="value" label="参数值">
<template #default="scope">
<div>
<el-input v-model="scope.row.value" />
</div>
</template>
</el-table-column>
<el-table-column align="center">
<el-table-column align="left">
<template #default="scope">
<div>
<el-button

22
web/src/view/superAdmin/operation/sysOperationRecord.vue

@ -27,7 +27,7 @@
<el-button size="mini" type="primary" @click="onDelete">确定</el-button>
</div>
<template #reference>
<el-button icon="el-icon-delete" size="mini" style="margin-left: 10px;">删除</el-button>
<el-button icon="el-icon-delete" size="mini" style="margin-left: 10px;" :disabled="!multipleSelection.length">删除</el-button>
</template>
</el-popover>
</div>
@ -39,26 +39,26 @@
row-key="ID"
@selection-change="handleSelectionChange"
>
<el-table-column align="center" type="selection" width="55" />
<el-table-column align="center" label="操作人" width="140">
<el-table-column align="left" type="selection" width="55" />
<el-table-column align="left" label="操作人" width="140">
<template #default="scope">
<div>{{ scope.row.user.userName }}({{ scope.row.user.nickName }})</div>
</template>
</el-table-column>
<el-table-column align="center" label="日期" width="180">
<el-table-column align="left" label="日期" width="180">
<template #default="scope">{{ formatDate(scope.row.CreatedAt) }}</template>
</el-table-column>
<el-table-column align="center" label="状态码" prop="status" width="120">
<el-table-column align="left" label="状态码" prop="status" width="120">
<template #default="scope">
<div>
<el-tag type="success">{{ scope.row.status }}</el-tag>
</div>
</template>
</el-table-column>
<el-table-column align="center" label="请求IP" prop="ip" width="120" />
<el-table-column align="center" label="请求方法" prop="method" width="120" />
<el-table-column align="center" label="请求路径" prop="path" width="240" />
<el-table-column align="center" label="请求" prop="path" width="80">
<el-table-column align="left" label="请求IP" prop="ip" width="120" />
<el-table-column align="left" label="请求方法" prop="method" width="120" />
<el-table-column align="left" label="请求路径" prop="path" width="240" />
<el-table-column align="left" label="请求" prop="path" width="80">
<template #default="scope">
<div>
<el-popover v-if="scope.row.body" placement="top-start" trigger="hover">
@ -74,7 +74,7 @@
</div>
</template>
</el-table-column>
<el-table-column align="center" label="响应" prop="path" width="80">
<el-table-column align="left" label="响应" prop="path" width="80">
<template #default="scope">
<div>
<el-popover v-if="scope.row.resp" placement="top-start" trigger="hover">
@ -89,7 +89,7 @@
</div>
</template>
</el-table-column>
<el-table-column align="center" label="按钮组">
<el-table-column align="left" label="按钮组">
<template #default="scope">
<el-popover :visible="scope.row.visible" placement="top" width="160">
<p>确定要删除吗</p>

14
web/src/view/superAdmin/user/user.vue

@ -1,19 +1,20 @@
<template>
<div>
<warning-bar title="注:右上角头像下拉可切换角色" />
<div class="gva-table-box">
<div class="gva-btn-list">
<el-button size="mini" type="primary" icon="el-icon-plus" @click="addUser">新增用户</el-button>
</div>
<el-table :data="tableData">
<el-table-column align="center" label="头像" min-width="50">
<el-table-column align="left" label="头像" min-width="50">
<template #default="scope">
<CustomPic style="margin-top:8px" :pic-src="scope.row.headerImg" />
</template>
</el-table-column>
<el-table-column align="center" label="UUID" min-width="250" prop="uuid" />
<el-table-column align="center" label="用户名" min-width="150" prop="userName" />
<el-table-column align="center" label="昵称" min-width="150" prop="nickName" />
<el-table-column align="center" label="用户角色" min-width="150">
<el-table-column align="left" label="UUID" min-width="250" prop="uuid" />
<el-table-column align="left" label="用户名" min-width="150" prop="userName" />
<el-table-column align="left" label="昵称" min-width="150" prop="nickName" />
<el-table-column align="left" label="用户角色" min-width="150">
<template #default="scope">
<el-cascader
v-model="scope.row.authorityIds"
@ -27,7 +28,7 @@
/>
</template>
</el-table-column>
<el-table-column align="center" label="操作" min-width="150">
<el-table-column align="left" label="操作" min-width="150">
<template #default="scope">
<el-popover :visible="scope.row.visible" placement="top" width="160">
<p>确定要删除此用户吗</p>
@ -42,7 +43,6 @@
</template>
</el-table-column>
</el-table>
<warning-bar title="注:右上角头像下拉可切换角色" style="margin-top:12px;" />
<div class="gva-pagination">
<el-pagination
:current-page="page"

24
web/src/view/systemTools/autoCode/index.vue

@ -85,18 +85,18 @@
<el-button size="mini" type="primary" @click="editAndAddField()">新增Field</el-button>
</div>
<el-table :data="form.fields">
<el-table-column align="center" type="index" label="序列" width="100" />
<el-table-column align="center" prop="fieldName" label="Field名" />
<el-table-column align="center" prop="fieldDesc" label="中文名" />
<el-table-column align="center" prop="fieldJson" label="FieldJson" />
<el-table-column align="center" prop="fieldType" label="Field数据类型" width="130" />
<el-table-column align="center" prop="dataType" label="数据库字段类型" width="130" />
<el-table-column align="center" prop="dataTypeLong" label="数据库字段长度" width="130" />
<el-table-column align="center" prop="columnName" label="数据库字段" width="130" />
<el-table-column align="center" prop="comment" label="数据库字段描述" width="130" />
<el-table-column align="center" prop="fieldSearchType" label="搜索条件" width="130" />
<el-table-column align="center" prop="dictType" label="字典" width="130" />
<el-table-column align="center" label="操作" width="300">
<el-table-column align="left" type="index" label="序列" width="100" />
<el-table-column align="left" prop="fieldName" label="Field名" />
<el-table-column align="left" prop="fieldDesc" label="中文名" />
<el-table-column align="left" prop="fieldJson" label="FieldJson" />
<el-table-column align="left" prop="fieldType" label="Field数据类型" width="130" />
<el-table-column align="left" prop="dataType" label="数据库字段类型" width="130" />
<el-table-column align="left" prop="dataTypeLong" label="数据库字段长度" width="130" />
<el-table-column align="left" prop="columnName" label="数据库字段" width="130" />
<el-table-column align="left" prop="comment" label="数据库字段描述" width="130" />
<el-table-column align="left" prop="fieldSearchType" label="搜索条件" width="130" />
<el-table-column align="left" prop="dictType" label="字典" width="130" />
<el-table-column align="left" label="操作" width="300">
<template #default="scope">
<el-button
size="mini"

14
web/src/view/systemTools/autoCodeAdmin/index.vue

@ -9,14 +9,14 @@
type="selection"
width="55"
/>
<el-table-column align="center" label="id" width="60" prop="ID" />
<el-table-column align="center" label="日期" width="180">
<el-table-column align="left" label="id" width="60" prop="ID" />
<el-table-column align="left" label="日期" width="180">
<template #default="scope">{{ formatDate(scope.row.CreatedAt) }}</template>
</el-table-column>
<el-table-column align="center" label="结构体名" min-width="150" prop="structName" />
<el-table-column align="center" label="结构体描述" min-width="150" prop="structCNName" />
<el-table-column align="center" label="表名称" min-width="150" prop="tableName" />
<el-table-column align="center" label="回滚标记" min-width="150" prop="flag">
<el-table-column align="left" label="结构体名" min-width="150" prop="structName" />
<el-table-column align="left" label="结构体描述" min-width="150" prop="structCNName" />
<el-table-column align="left" label="表名称" min-width="150" prop="tableName" />
<el-table-column align="left" label="回滚标记" min-width="150" prop="flag">
<template #default="scope">
<el-tag
v-if="scope.row.flag"
@ -36,7 +36,7 @@
</el-tag>
</template>
</el-table-column>
<el-table-column align="center" label="操作" min-width="180">
<el-table-column align="left" label="操作" min-width="180">
<template #default="scope">
<div>
<el-button size="mini" type="text" :disabled="scope.row.flag === 1" @click="rollback(scope.row)">回滚</el-button>

6
web/yarn.lock

@ -1083,10 +1083,10 @@
"@babel/helper-validator-identifier" "^7.14.9"
to-fast-properties "^2.0.0"
"@element-plus/icons@^0.0.11":
"@element-plus/icons@0.0.11", "@element-plus/icons@^0.0.11":
version "0.0.11"
resolved "https://registry.nlark.com/@element-plus/icons/download/@element-plus/icons-0.0.11.tgz#9b187c002774548b911850d17fa5fc2f9a515f57"
integrity sha1-mxh8ACd0VIuRGFDRf6X8L5pRX1c=
resolved "https://registry.yarnpkg.com/@element-plus/icons/-/icons-0.0.11.tgz#9b187c002774548b911850d17fa5fc2f9a515f57"
integrity sha512-iKQXSxXu131Ai+I9Ymtcof9WId7kaXvB1+WRfAfpQCW7UiAMYgdNDqb/u0hgTo2Yq3MwC4MWJnNuTBEpG8r7+A==
"@hapi/address@2.x.x":
version "2.1.4"

Loading…
Cancel
Save