Browse Source

Merge branch 'gva_gormv2_dev' into develop

main
奇淼(piexlmax 3 years ago
committed by GitHub
parent
commit
1e69881a5e
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 88
      .docker-compose/shell/server-handle.sh
  2. 11
      dockerfile_server
  3. 132
      server/config.docker.yaml
  4. 5
      server/main.go
  5. 82
      web/src/view/systemTools/autoCode/component/previewCodeDialg.vue

88
.docker-compose/shell/server-handle.sh

@ -1,88 +0,0 @@
#! /bin/bash
rm -f ./config.yaml
# 生成config.yaml文件, 用于docker-compose的使用
touch ./config.yaml
filename="./config.yaml"
cat>"${filename}"<<EOF
# Gin-Vue-Admin Global Configuration
# jwt configuration
jwt:
signing-key: 'qmPlus'
expires-time: 604800
buffer-time: 86400
# zap logger configuration
zap:
level: 'info'
format: 'console'
prefix: '[GIN-VUE-ADMIN]'
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: '177.7.0.14: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: 'public' # Change to "develop" to skip authentication for development mode
addr: 8888
db-type: 'mysql'
oss-type: 'local'
use-multipoint: false
# captcha configuration
captcha:
key-long: 6
img-width: 240
img-height: 80
# mysql connect configuration
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'
# qiniu configuration (请自行七牛申请对应的 公钥 私钥 bucket 和 域名地址)
qiniu:
zone: 'ZoneHuadong'
bucket: 'qm-plus-img'
img-path: 'http://qmplusimg.henrongyi.top'
use-https: false
access-key: '25j8dYBZ2wuiy0yhwShytjZDTX662b8xiFguwxzZ'
secret-key: 'pgdbqEsf7ooZh7W3xokP833h3dZ_VecFXPDeG5JY'
use-cdn-domains: false
EOF

11
dockerfile_server

@ -5,13 +5,6 @@ ENV GOPROXY=https://goproxy.io,direct
WORKDIR /go/src/gin-vue-admin WORKDIR /go/src/gin-vue-admin
COPY server/ ./ COPY server/ ./
RUN cat ./config.yaml
COPY .docker-compose/shell/server-handle.sh .
RUN ls -al
RUN sh ./server-handle.sh
RUN rm -f server-handle.sh
RUN cat ./config.yaml
RUN go env && go mod tidy && go build -o server . RUN go env && go mod tidy && go build -o server .
FROM alpine:latest FROM alpine:latest
@ -20,9 +13,9 @@ 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/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.docker.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 ./server -c config.docker.yaml

132
server/config.docker.yaml

@ -0,0 +1,132 @@
# Gin-Vue-Admin Global Configuration
# jwt configuration
jwt:
signing-key: 'qmPlus'
expires-time: 604800
buffer-time: 86400
# zap logger configuration
zap:
level: 'info'
format: 'console'
prefix: '[GIN-VUE-ADMIN]'
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: '177.7.0.14: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: 'public' # 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
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
server-initialize: /initialize
server-model: /model
server-request: /model/request/
server-router: /router
server-service: /service
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'
# 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: 'gin-vue-admin'
# 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: "log2" , compareField: "created_at", interval: "2160h" }
]

5
server/main.go

@ -6,6 +6,11 @@ import (
"gin-vue-admin/initialize" "gin-vue-admin/initialize"
) )
//go:generate go env -w GO111MODULE=on
//go:generate go env -w GOPROXY=https://goproxy.cn,direct
//go:generate go mod tidy
//go:generate go mod download
// @title Swagger Example API // @title Swagger Example API
// @version 0.0.1 // @version 0.0.1
// @description This is a sample Server pets // @description This is a sample Server pets

82
web/src/view/systemTools/autoCode/component/previewCodeDialg.vue

@ -1,37 +1,65 @@
<template> <template>
<div class="previewCode"> <div class="previewCode">
<div class="previewCodeTool">
<p>操作栏</p>
<el-button @click="selectText">全选</el-button>
<el-button @click="copy">复制</el-button>
</div>
<el-tabs v-model="activeName"> <el-tabs v-model="activeName">
<el-tab-pane v-for="(item,key) in previewCode" :key="key" :label="key" :name="key">
<div :id="key" style="background:#fff;padding:0 20px" />
<el-tab-pane :label="key" :name="key" v-for="(item, key) in previewCode" :key="key">
<div class="tab-info" :id="key"></div>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
</template> </template>
<script> <script>
import marked from 'marked'
import hljs from 'highlight.js'
import marked from "marked";
import hljs from "highlight.js";
// import 'highlight.js/styles/atelier-cave-light.css'; // import 'highlight.js/styles/atelier-cave-light.css';
import 'highlight.js/styles/atelier-plateau-light.css'
import "highlight.js/styles/atelier-plateau-light.css";
export default { export default {
props: { props: {
previewCode: { previewCode: {
type: Object, type: Object,
default() { default() {
return {}
}
}
return {};
},
},
}, },
data() { data() {
return { return {
activeName: ''
}
activeName: "",
};
},
methods: {
selectText() {
const element = document.getElementById(this.activeName);
if (document.body.createTextRange) {
let range = document.body.createTextRange();
range.moveToElementText(element);
range.select();
} else if (window.getSelection) {
let selection = window.getSelection();
let range = document.createRange();
range.selectNodeContents(element);
selection.removeAllRanges();
selection.addRange(range);
} else {
alert("none");
}
},
copy() {
this.selectText();
document.execCommand("copy");
this.$message.success("复制成功");
},
}, },
mounted() { mounted() {
marked.setOptions({ marked.setOptions({
renderer: new marked.Renderer(), renderer: new marked.Renderer(),
highlight: function(code) {
return hljs.highlightAuto(code).value
highlight: function (code) {
return hljs.highlightAuto(code).value;
}, },
pedantic: false, pedantic: false,
gfm: true, gfm: true,
@ -40,15 +68,31 @@ export default {
sanitize: false, sanitize: false,
smartLists: true, smartLists: true,
smartypants: false, smartypants: false,
xhtml: false
}
)
xhtml: false,
});
for (const key in this.previewCode) { for (const key in this.previewCode) {
if (this.activeName === '') {
this.activeName = key
if (this.activeName == "") {
this.activeName = key;
} }
document.getElementById(key).innerHTML = marked(this.previewCode[key])
document.getElementById(key).innerHTML = marked(this.previewCode[key]);
} }
},
};
</script>
<style lang="scss">
.previewCode {
.previewCodeTool {
display: flex;
align-items: center;
padding: 5px 0;
margin-top: -40px;
}
.tab-info {
height: 50vh;
background: #fff;
padding: 0 20px;
overflow-y: scroll;
} }
} }
</script>
</style>
Loading…
Cancel
Save