From 92b78ab3c81ea29fc72825b9308b2b848d56bb70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A5=87=E6=B7=BC=EF=BC=88piexlmax?= <303176530@qq.com> Date: Wed, 7 Jun 2023 14:28:29 +0800 Subject: [PATCH 01/16] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3fde94ce..ceabaafe 100644 --- a/README.md +++ b/README.md @@ -77,8 +77,8 @@ Gin-vue-admin 是一套为快速研发准备的一整套前后端分离架构式 Gin-vue-admin 的成长离不开大家的支持,如果你愿意为 gin-vue-admin 贡献代码或提供建议,请阅读以下内容。 #### 1.2.1 Issue 规范 -- issue 仅用于提交 Bug 或 Feature 以及设计相关的内容,其它内容可能会被直接关闭。如果你在使用时产生了疑问,请到 Slack 或 [Gitter](https://gitter.im/ElemeFE/element) 里咨询。 - +- issue 仅用于提交 Bug 或 Feature 以及设计相关的内容,其它内容可能会被直接关闭。 + - 在提交 issue 之前,请搜索相关内容是否已被提出。 #### 1.2.2 Pull Request 规范 From d2d7b22a8f3ab684b25da10b2d92e663ec5a51dc Mon Sep 17 00:00:00 2001 From: piexlMax Date: Thu, 8 Jun 2023 22:57:23 +0800 Subject: [PATCH 02/16] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=8C=96=E4=BB=A3=E7=A0=81=E5=9B=BE=E7=89=87=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../autocode_template/server/model.go.tpl | 2 + .../autocode_template/web/form.vue.tpl | 8 +- .../autocode_template/web/table.vue.tpl | 14 ++ web/src/components/chooseImg/index.vue | 4 +- .../components/selectImage/selectImage.vue | 238 ++++++++++++++++++ web/src/utils/image.js | 3 + web/src/view/person/person.vue | 40 +-- .../autoCode/component/fieldDialog.vue | 59 +++-- web/src/view/systemTools/autoCode/index.vue | 12 +- 9 files changed, 323 insertions(+), 57 deletions(-) create mode 100644 web/src/components/selectImage/selectImage.vue diff --git a/server/resource/autocode_template/server/model.go.tpl b/server/resource/autocode_template/server/model.go.tpl index 0e03f052..670577f9 100644 --- a/server/resource/autocode_template/server/model.go.tpl +++ b/server/resource/autocode_template/server/model.go.tpl @@ -13,6 +13,8 @@ type {{.StructName}} struct { {{.FieldName}} string `json:"{{.FieldJson}}" form:"{{.FieldJson}}" gorm:"column:{{.ColumnName}};type:enum({{.DataTypeLong}});comment:{{.Comment}};"` {{- else if ne .FieldType "string" }} {{.FieldName}} *{{.FieldType}} `json:"{{.FieldJson}}" form:"{{.FieldJson}}" gorm:"column:{{.ColumnName}};comment:{{.Comment}};{{- if .DataTypeLong -}}size:{{.DataTypeLong}};{{- end -}}"` + {{- else if qe .FieldType "picture" }} + {{.FieldName}} string `json:"{{.FieldJson}}" form:"{{.FieldJson}}" gorm:"column:{{.ColumnName}};comment:{{.Comment}};{{- if .DataTypeLong -}}size:{{.DataTypeLong}};{{- end -}}"` {{- else }} {{.FieldName}} {{.FieldType}} `json:"{{.FieldJson}}" form:"{{.FieldJson}}" gorm:"column:{{.ColumnName}};comment:{{.Comment}};{{- if .DataTypeLong -}}size:{{.DataTypeLong}};{{- end -}}"` {{- end }} {{- end }} diff --git a/server/resource/autocode_template/web/form.vue.tpl b/server/resource/autocode_template/web/form.vue.tpl index eb8a9445..08d5212f 100644 --- a/server/resource/autocode_template/web/form.vue.tpl +++ b/server/resource/autocode_template/web/form.vue.tpl @@ -30,7 +30,10 @@ {{- end }} - + {{- if eq .FieldType "picture" }} + + {{- end }} + {{- end }} 保存 @@ -59,6 +62,9 @@ import { getDictFunc } from '@/utils/format' import { useRoute, useRouter } from "vue-router" import { ElMessage } from 'element-plus' import { ref, reactive } from 'vue' +{{- if eq .FieldType "picture" }} +import SelectImage from '@/components/selectImage/selectImage.vue' +{{- end }} const route = useRoute() const router = useRouter() diff --git a/server/resource/autocode_template/web/table.vue.tpl b/server/resource/autocode_template/web/table.vue.tpl index 06982818..3bbf98a1 100644 --- a/server/resource/autocode_template/web/table.vue.tpl +++ b/server/resource/autocode_template/web/table.vue.tpl @@ -109,6 +109,12 @@ + {{- else if eq .FieldType "picture" }} + + + {{- else }} {{- end }} @@ -161,6 +167,9 @@ + {{- end }} + {{- if eq .FieldType "picture" }} + {{- end }} {{- end }} @@ -191,6 +200,11 @@ import { get{{.StructName}}List } from '@/api/{{.PackageName}}' +{{- if eq .FieldType "picture" }} +// 图片选择组件 +import SelectImage from '@/components/selectImage/selectImage.vue' +{{- end }} + // 全量引入格式化工具 请按需保留 import { getDictFunc, formatDate, formatBoolean, filterDict } from '@/utils/format' import { ElMessage, ElMessageBox } from 'element-plus' diff --git a/web/src/components/chooseImg/index.vue b/web/src/components/chooseImg/index.vue index b806c31e..ee991c1e 100644 --- a/web/src/components/chooseImg/index.vue +++ b/web/src/components/chooseImg/index.vue @@ -31,7 +31,7 @@
+ + diff --git a/web/src/utils/image.js b/web/src/utils/image.js index 6e0d1e84..8716b70c 100644 --- a/web/src/utils/image.js +++ b/web/src/utils/image.js @@ -90,3 +90,6 @@ export default class ImageCompress { return new Blob([ab], { type: mimeString, lastModifiedDate: new Date() }) } } + +const path = import.meta.env.VITE_BASE_API + '/' +export const getUrl = (url) => url && url.slice(0, 4) !== 'http' ? path + url : url diff --git a/web/src/view/person/person.vue b/web/src/view/person/person.vue index ddfcb07d..8e432198 100644 --- a/web/src/view/person/person.vue +++ b/web/src/view/person/person.vue @@ -4,25 +4,7 @@
-
- - - - - 重新上传 -
+

{{ userStore.userInfo.nickName }} @@ -129,8 +111,6 @@ - - diff --git a/server/service/example/exa_file_upload_download.go b/server/service/example/exa_file_upload_download.go index 35a410e8..15ccd824 100644 --- a/server/service/example/exa_file_upload_download.go +++ b/server/service/example/exa_file_upload_download.go @@ -94,15 +94,15 @@ func (e *FileUploadAndDownloadService) UploadFile(header *multipart.FileHeader, if uploadErr != nil { panic(err) } + s := strings.Split(header.Filename, ".") + f := example.ExaFileUploadAndDownload{ + Url: filePath, + Name: header.Filename, + Tag: s[len(s)-1], + Key: key, + } if noSave == "0" { - s := strings.Split(header.Filename, ".") - f := example.ExaFileUploadAndDownload{ - Url: filePath, - Name: header.Filename, - Tag: s[len(s)-1], - Key: key, - } return f, e.Upload(f) } - return + return f, nil } diff --git a/server/service/system/sys_auto_code.go b/server/service/system/sys_auto_code.go index 32c060a9..1e71e3f5 100644 --- a/server/service/system/sys_auto_code.go +++ b/server/service/system/sys_auto_code.go @@ -144,6 +144,9 @@ func (autoCodeService *AutoCodeService) PreviewTemp(autoCode system.AutoCodeStru if autoCode.Fields[i].FieldType == "picture" { autoCode.HasPic = true } + if autoCode.Fields[i].FieldType == "file" { + autoCode.HasFile = true + } } dataList, _, needMkdir, err := autoCodeService.getNeedList(&autoCode) if err != nil { @@ -237,6 +240,9 @@ func (autoCodeService *AutoCodeService) CreateTemp(autoCode system.AutoCodeStruc if autoCode.Fields[i].FieldType == "picture" { autoCode.HasPic = true } + if autoCode.Fields[i].FieldType == "file" { + autoCode.HasFile = true + } } // 增加判断: 重复创建struct if autoCode.AutoMoveFile && AutoCodeHistoryServiceApp.Repeat(autoCode.BusinessDB, autoCode.StructName, autoCode.Package) { diff --git a/web/src/components/selectFile/selectFile.vue b/web/src/components/selectFile/selectFile.vue new file mode 100644 index 00000000..faa7a8ce --- /dev/null +++ b/web/src/components/selectFile/selectFile.vue @@ -0,0 +1,74 @@ + + + + + diff --git a/web/src/components/selectImage/selectImage.vue b/web/src/components/selectImage/selectImage.vue index af65ae2d..4ce2c8be 100644 --- a/web/src/components/selectImage/selectImage.vue +++ b/web/src/components/selectImage/selectImage.vue @@ -89,15 +89,13 @@ const page = ref(1) const total = ref(0) const pageSize = ref(20) -const props = defineProps({ +defineProps({ modelValue: { type: String, default: '' }, }) -console.log(props) - const emits = defineEmits(['update:modelValue']) // 分页 diff --git a/web/src/view/systemTools/autoCode/component/fieldDialog.vue b/web/src/view/systemTools/autoCode/component/fieldDialog.vue index f3d741b2..7492b9f9 100644 --- a/web/src/view/systemTools/autoCode/component/fieldDialog.vue +++ b/web/src/view/systemTools/autoCode/component/fieldDialog.vue @@ -172,20 +172,14 @@ const typeOptions = ref([ label: '单图片(字符串)', value: 'picture', }, + { + label: '文件(json字符串)', + value: 'file', + }, { label: '多图片(开发中)', value: 'pictures', disabled: true - }, - { - label: '文件(开发中)', - value: 'file', - disabled: true - }, - { - label: '多文件(开发中)', - value: 'files', - disabled: true } ]) const rules = ref({ From 09fc200d55732c6d5320b7596ca7fda1816b6a9c Mon Sep 17 00:00:00 2001 From: qk winter Date: Fri, 9 Jun 2023 22:11:25 +0800 Subject: [PATCH 07/16] Update clamis.go (#1450) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加了GetUserName方法 --- server/utils/clamis.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/server/utils/clamis.go b/server/utils/clamis.go index 76f5509f..08916003 100644 --- a/server/utils/clamis.go +++ b/server/utils/clamis.go @@ -72,3 +72,17 @@ func GetUserInfo(c *gin.Context) *systemReq.CustomClaims { return waitUse } } + +// GetUserName 从Gin的Context中获取从jwt解析出来的用户名 +func GetUserName(c *gin.Context) string { + if claims, exists := c.Get("claims"); !exists { + if cl, err := GetClaims(c); err != nil { + return "" + } else { + return cl.Username + } + } else { + waitUse := claims.(*systemReq.CustomClaims) + return waitUse.Username + } +} From 66aece580f4a4ba4ab89659e55f506a2dc1f2477 Mon Sep 17 00:00:00 2001 From: piexlMax Date: Sat, 10 Jun 2023 14:50:15 +0800 Subject: [PATCH 08/16] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=8C=96=E4=BB=A3=E7=A0=81=E6=96=87=E4=BB=B6=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=20bugFixed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/resource/autocode_template/web/table.vue.tpl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/resource/autocode_template/web/table.vue.tpl b/server/resource/autocode_template/web/table.vue.tpl index 5f6cf7b6..ff2ad591 100644 --- a/server/resource/autocode_template/web/table.vue.tpl +++ b/server/resource/autocode_template/web/table.vue.tpl @@ -476,7 +476,7 @@ const enterDialog = async () => { } }) } -{{if eq .FieldType "file"}} +{{if .HasFile }} const downloadFile = (url) => { window.open(getUrl(url), '_blank') } @@ -484,7 +484,7 @@ const downloadFile = (url) => { From 40e3555d13cf347b7d24758abd33416d32a16ef9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=A9=AC?= Date: Sat, 10 Jun 2023 17:27:52 +0800 Subject: [PATCH 10/16] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=20(#1439)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 点击重置按钮时表格未刷新; 修复点击重置按钮时,筛选项被清空,但是下方表格未刷新的问题; * fix: 未限制输入范围导致的报错; 后端使用了int类型,未限制输入会导致输入过大的数字时报错; * fix: 未限制输入类型; 使用文本框会导致输入内容的类型未被限制,后端使用了int类型,输入非数字字符时会导致json绑定错误; * feat: 添加创建时间验证规则; 后端仅在开始时间和结束时间同时有值时才进行搜索,所以前端会出现只选择一项内容时,搜索结果不符合预期的问题。添加验证规则使搜索结果符合预期。 * feat: 优化创建时间搜索项; 选择开始时间后,自动禁用结束时间中早于开始时间的选项;选择结束时间后,自动禁用开始时间中晚于结束时间的选项;增加校验规则,校验开始时间是否早于结束时间;点击搜索按钮时如果未通过校验则不进行搜索; * fix: 角色id输入非数字字符时点击提交按钮后变为NaN; * fix: 角色ID输入超大数字时报错; 后端使用int,输入的数字溢出会导致报错,所以限制输入长度; * feat: 时间类型的选项增加验证规则; 选择开始时间后,自动禁用结束时间中早于开始时间的选项;选择结束时间后,自动禁用开始时间中晚于结束时间的选项;增加校验规则,校验开始时间是否早于结束时间;点击搜索按钮时如果未通过校验则不进行搜索; * fix: 补全搜索form的ref引用; * feat: 添加时间类型的搜索范围提示; 时间类型的搜索范围是开始时间(包含)至结束时间(不包含),为避免歧义,增加相关提示; * feat: 将"时间"修改为"日期"确保字段名称一致性; * feat: 将列名称从"按钮组"修改为更友好的"操作"; * feat: 将dialog标题修改为更友好的内容; * fix: 使用了计算值的属性没有进行绑定; * fix: 必填字段可以只填写空格; --------- Co-authored-by: 奇淼(piexlmax <303176530@qq.com> --- .../autocode_template/web/table.vue.tpl | 93 +++++++++++++++---- web/src/view/example/customer/customer.vue | 2 +- .../view/superAdmin/authority/authority.vue | 11 +-- .../superAdmin/dictionary/sysDictionary.vue | 4 +- .../dictionary/sysDictionaryDetail.vue | 9 +- .../operation/sysOperationRecord.vue | 2 +- 6 files changed, 87 insertions(+), 34 deletions(-) diff --git a/server/resource/autocode_template/web/table.vue.tpl b/server/resource/autocode_template/web/table.vue.tpl index ff2ad591..b72fa8d6 100644 --- a/server/resource/autocode_template/web/table.vue.tpl +++ b/server/resource/autocode_template/web/table.vue.tpl @@ -1,11 +1,19 @@