统一message,统一模板

This commit is contained in:
xiangheng
2024-06-03 22:20:15 +08:00
parent 6966b3f4a4
commit 3ea0b9ad5d
14 changed files with 106 additions and 113 deletions

View File

@@ -179,7 +179,7 @@ export default defineComponent({
.catch((err) => { .catch((err) => {
console.error(err) console.error(err)
err.target && (this.activeStep = err.target) err.target && (this.activeStep = err.target)
err.msg && this.$message.error(err.msg) err.message && this.$message.error(err.message)
}) })
}, },

View File

@@ -191,13 +191,13 @@ export default {
if (haveMoreChildNode) { if (haveMoreChildNode) {
// 如果都是网关就可以,等优化 // 如果都是网关就可以,等优化
return reject({ return reject({
msg: '流程设计-一个节点只能有一个子节点,可以有多个网关' message: '流程设计-一个节点只能有一个子节点,可以有多个网关'
}) })
} }
// if (data.nodes.length != data.edges.length + 1) { // if (data.nodes.length != data.edges.length + 1) {
// return reject({ // return reject({
// msg: "流程设计-节点之间必须连线,可以清理多余的节点",//不是很重要 // message: "流程设计-节点之间必须连线,可以清理多余的节点",//不是很重要
// }); // });
// } // }
// 检查开始节点和结束节点是否存在 // 检查开始节点和结束节点是否存在
@@ -205,7 +205,7 @@ export default {
const findEndNode = nodes.filter((item) => item.type == 'bpmn:endEvent') const findEndNode = nodes.filter((item) => item.type == 'bpmn:endEvent')
if (findStartNode.length != 1 || findEndNode.length != 1) { if (findStartNode.length != 1 || findEndNode.length != 1) {
return reject({ return reject({
msg: '流程设计-流程必须有且只有一个开始节点和结束节点' message: '流程设计-流程必须有且只有一个开始节点和结束节点'
}) })
} }

View File

@@ -113,8 +113,8 @@ export default defineComponent({
visible.value = false visible.value = false
emit('change') emit('change')
} }
if (response.code == RequestCodeEnum.FAILED && response.msg) { if (response.code == RequestCodeEnum.FAILED && response.message) {
feedback.msgError(response.msg) feedback.msgError(response.message)
} }
} }
const handleError = (event: any, file: any) => { const handleError = (event: any, file: any) => {

View File

@@ -49,7 +49,7 @@ const axiosHooks: AxiosHooks = {
if (!isTransformResponse) { if (!isTransformResponse) {
return response.data return response.data
} }
const { code, data, msg } = response.data const { code, data, message } = response.data
switch (code) { switch (code) {
case RequestCodeEnum.SUCCESS: case RequestCodeEnum.SUCCESS:
return data return data
@@ -64,7 +64,7 @@ const axiosHooks: AxiosHooks = {
case RequestCodeEnum.NO_PERMISSTION: case RequestCodeEnum.NO_PERMISSTION:
case RequestCodeEnum.FAILED: case RequestCodeEnum.FAILED:
case RequestCodeEnum.SYSTEM_ERROR: case RequestCodeEnum.SYSTEM_ERROR:
msg && feedback.msgError(msg) message && feedback.msgError(message)
return Promise.reject(data) return Promise.reject(data)
case RequestCodeEnum.TOKEN_INVALID: case RequestCodeEnum.TOKEN_INVALID:

View File

@@ -33,5 +33,5 @@ export interface AxiosHooks {
export interface ResponseData<T = any> { export interface ResponseData<T = any> {
code: number code: number
data: T data: T
msg: string message: string
} }

View File

@@ -179,7 +179,7 @@ const handleSubmit = async () => {
feedback.msgSuccess('操作成功') feedback.msgSuccess('操作成功')
emit('success') emit('success')
}).catch((err) => { }).catch((err) => {
feedback.msgError(err.msg) feedback.msgError(err.message)
}) })
} catch (error) {} } catch (error) {}
}) })

View File

@@ -47,7 +47,6 @@ export function {{{.ModuleName}}}_edit(data: Record<string, any>) {
// {{{.FunctionName}}}删除 // {{{.FunctionName}}}删除
export function {{{.ModuleName}}}_delete({{{ .PrimaryKey }}}: number | string) { export function {{{.ModuleName}}}_delete({{{ .PrimaryKey }}}: number | string) {
return request.post({ url: '/{{{.ModuleName}}}/del', { {{{ .PrimaryKey }}} } })
return request({ return request({
url: '/{{{.ModuleName}}}/del', url: '/{{{.ModuleName}}}/del',
method: "POST", method: "POST",

View File

@@ -43,11 +43,11 @@
onShow onShow
} from "@dcloudio/uni-app"; } from "@dcloudio/uni-app";
import { import {
useDictOptions useDictData
} from "@/api/dict.js"; } from "@/hooks/useDictOptions";
import { import {
{{{ .ModuleName }}}_detail {{{ .ModuleName }}}_detail
} from "@/api/{{{ .ModuleName }}}.js"; } from "@/api/{{{ .ModuleName }}}";
import { import {
@@ -57,7 +57,10 @@
} from "@/utils/utils"; } from "@/utils/utils";
let form = ref({}); let form = ref({});
{{{- if ge (len .DictFields) 1 }}}
{{{- $dictSize := sub (len .DictFields) 1 }}}
const { dictData } = useDictData([{{{- range .DictFields }}}'{{{ . }}}'{{{- if ne (index $.DictFields $dictSize) . }}},{{{- end }}}{{{- end }}}])
{{{- end }}}
onLoad((e) => { onLoad((e) => {
console.log("onLoad", e); console.log("onLoad", e);
getDetails(e.id); getDetails(e.id);
@@ -67,18 +70,22 @@
getDetails(form.value.id); getDetails(form.value.id);
} }
}); });
onPullDownRefresh(() => {
getDetails(form.value.id);
});
function getDetails(id) { function getDetails(id) {
{{{ .ModuleName }}}_detail(id).then((res) => { {{{ .ModuleName }}}_detail(id).then((res) => {
uni.stopPullDownRefresh();
if (res.code == 200) { if (res.code == 200) {
if (res?.result) { if (res?.data) {
form.value = res?.result form.value = res?.data
} }
} else { } else {
toast(res.message); toast(res.message);
} }
}) })
.catch((err) => { .catch((err) => {
uni.stopPullDownRefresh();
toast(err.message||"网络错误"); toast(err.message||"网络错误");
}); });
} }

View File

@@ -11,7 +11,11 @@
{{{- else if eq .HtmlType "textarea" }}} {{{- else if eq .HtmlType "textarea" }}}
<uv-textarea v-model="form.{{{ (toCamelCase .GoField) }}}" border="surround"></uv-textarea> <uv-textarea v-model="form.{{{ (toCamelCase .GoField) }}}" border="surround"></uv-textarea>
{{{- else if or (eq .HtmlType "checkbox") (eq .HtmlType "radio") (eq .HtmlType "select")}}} {{{- else if or (eq .HtmlType "checkbox") (eq .HtmlType "radio") (eq .HtmlType "select")}}}
{{{- if ne .DictType "" }}}
<x-picker v-model="form.{{{ (toCamelCase .GoField) }}}" valueKey="value" labelKey="name" :columns="dictData.{{{ .DictType }}}"></x-picker> <x-picker v-model="form.{{{ (toCamelCase .GoField) }}}" valueKey="value" labelKey="name" :columns="dictData.{{{ .DictType }}}"></x-picker>
{{{- else }}}
请选择字典生成代码
{{{- end }}}
{{{- end }}} {{{- end }}}
</uv-form-item> </uv-form-item>
{{{- end }}} {{{- end }}}
@@ -35,11 +39,14 @@
import { import {
{{{ .ModuleName }}}_detail, {{{ .ModuleName }}}_detail,
{{{ .ModuleName }}}_edit {{{ .ModuleName }}}_edit
} from "@/api/{{{ .ModuleName }}}.js"; } from "@/api/{{{ .ModuleName }}}";
import { import {
toast, toast,
alert alert
} from "@/utils/utils"; } from "@/utils/utils";
import {
useDictData
} from "@/hooks/useDictOptions";
let formRef = ref(); let formRef = ref();
let form = ref({ let form = ref({

View File

@@ -65,8 +65,8 @@ import {
onReachBottom, onReachBottom,
onPageScroll, onPageScroll,
} from "@dcloudio/uni-app"; } from "@dcloudio/uni-app";
import { {{{ .ModuleName }}}_list } from "@/api/{{{ .ModuleName }}}.js"; import { {{{ .ModuleName }}}_list } from "@/api/{{{ .ModuleName }}}";
import { usePaging } from "@/utils/usePaging"; import { usePaging } from "@/hooks/usePaging";
import { toPath } from "@/utils/utils"; import { toPath } from "@/utils/utils";
const queryParams = reactive({ const queryParams = reactive({
key: "", key: "",

View File

@@ -1,32 +1,20 @@
<!-- 产品分组IMEISIm卡1、2安装位置在线状态 ,启用状态-->
<template> <template>
<view class="page-content"> <view class="page-content">
<uv-form labelPosition="left" labelWidth="80" :model="form" ref="formRef"> <uv-form labelPosition="left" labelWidth="80" :model="form" ref="formRef">
<uv-form-item label="在线状态" prop="status" borderBottom> {{{- range .Columns }}}
<x-picker valueKey="value" labelKey="label" :columns="dictData.devices_status" {{{- if eq .IsQuery 1 }}}
v-model="form.status"></x-picker> <uv-form-item label="{{{ .ColumnComment }}}" prop="{{{ (toCamelCase .GoField) }}}" borderBottom>
</uv-form-item> {{{- if eq .HtmlType "datetime" }}}
<x-date-range v-model:startTime="form.{{{ (toCamelCase .GoField) }}}Start"
v-model:endTime="form.{{{ (toCamelCase .GoField) }}}End"></x-date-range>
<uv-form-item label="位置" prop="placedName" borderBottom> {{{- else if or (eq .HtmlType "select") (eq .HtmlType "radio") }}}
<uv-input v-model="form.placedName"> </uv-input> <x-picker v-model="form.{{{ (toCamelCase .GoField) }}}" valueKey="value" labelKey="name" :columns="dictData.{{{ .DictType }}}"></x-picker>
</uv-form-item> {{{- else if eq .HtmlType "input" }}}
<uv-input v-model="form.{{{ (toCamelCase .GoField) }}}"> </uv-input>
<uv-form-item label="开始时间" prop="startTime" borderBottom> {{{- end }}}
<uv-input v-model="form.startTime" :readonly="true" placeholder="请选择时间"
@click="startTimePicker.open()"> </uv-input>
<uv-datetime-picker ref="startTimePicker" :minDate="minDate" :maxDate="maxDate" :value="form.startTime"
mode="datetime" @confirm="startTimeConfirm">
</uv-datetime-picker>
</uv-form-item>
<uv-form-item label="结束时间" prop="endTime" borderBottom>
<uv-input v-model="form.endTime" :readonly="true" placeholder="请选择时间"
@click="endTimePicker.open()"> </uv-input>
<uv-datetime-picker ref="endTimePicker" :minDate="minDate" :maxDate="maxDate" :value="form.endTime" mode="datetime"
@confirm="endTimeConfirm">
</uv-datetime-picker>
</uv-form-item> </uv-form-item>
{{{- end }}}
{{{- end }}}
<uv-button type="primary" text="搜索" customStyle="margin-top: 20rpx" @click="submit"></uv-button> <uv-button type="primary" text="搜索" customStyle="margin-top: 20rpx" @click="submit"></uv-button>
</uv-form> </uv-form>
@@ -34,7 +22,7 @@
</template> </template>
<script setup> <script setup>
import dayjs from 'dayjs'
import { import {
onLoad onLoad
} from "@dcloudio/uni-app"; } from "@dcloudio/uni-app";
@@ -50,34 +38,26 @@
} from "@/utils/utils"; } from "@/utils/utils";
import { import {
useDictData useDictData
} from "@/methods/useDictOptions"; } from "@/hooks/useDictOptions";
const startTimePicker = ref();
const endTimePicker = ref();
const { {{{- if ge (len .DictFields) 1 }}}
dictData {{{- $dictSize := sub (len .DictFields) 1 }}}
} = useDictData(["devices_status"]); const { dictData } = useDictData([{{{- range .DictFields }}}'{{{ . }}}'{{{- if ne (index $.DictFields $dictSize) . }}},{{{- end }}}{{{- end }}}])
{{{- end }}}
let formRef = ref(); let formRef = ref();
let form = ref({ let form = ref({
{{{- range .Columns }}}
location: "", {{{- if .IsQuery }}}
{{{- if eq .HtmlType "datetime" }}}
placedName: "", {{{ (toCamelCase .GoField) }}}Start: '',
status: "", {{{ (toCamelCase .GoField) }}}End: '',
startTime: '', {{{- else }}}
endTime: '', {{{ (toCamelCase .GoField) }}}: '',
{{{- end }}}
{{{- end }}}
{{{- end }}}
}); });
let minDate = dayjs('2022-01-01 00:00:00').valueOf()
let maxDate = dayjs().endOf('month').valueOf()
function startTimeConfirm(e) {
form.value.startTime = dayjs(e.value).format('YYYY-MM-DD HH:mm:ss')
}
function endTimeConfirm(e) {
form.value.endTime = dayjs(e.value).format('YYYY-MM-DD HH:mm:ss')
}
function submit() { function submit() {
console.log("submit", form.value); console.log("submit", form.value);

View File

@@ -223,7 +223,7 @@ func (tu templateUtil) GetFilePaths(tplCodeMap map[string]string, ModuleName str
"vue/index.vue.tpl": strings.Join([]string{"admin/src/views/", ModuleName, "/index.vue"}, ""), // "admin/src/views/%s/index.vue", "vue/index.vue.tpl": strings.Join([]string{"admin/src/views/", ModuleName, "/index.vue"}, ""), // "admin/src/views/%s/index.vue",
"vue/index-tree.vue.tpl": strings.Join([]string{"admin/src/views/", ModuleName, "/index-tree.vue"}, ""), // "admin/src/views/%s/index-tree.vue", "vue/index-tree.vue.tpl": strings.Join([]string{"admin/src/views/", ModuleName, "/index-tree.vue"}, ""), // "admin/src/views/%s/index-tree.vue",
"uniapp/api.ts.tpl": strings.Join([]string{"uniapp/src/api/", ModuleName, ".ts"}, ""), "uniapp/api.ts.tpl": strings.Join([]string{"uniapp/api/", ModuleName, ".ts"}, ""),
"uniapp/edit.vue.tpl": strings.Join([]string{"uniapp/pages/", ModuleName, "/edit.vue"}, ""), "uniapp/edit.vue.tpl": strings.Join([]string{"uniapp/pages/", ModuleName, "/edit.vue"}, ""),
"uniapp/index.vue.tpl": strings.Join([]string{"uniapp/pages/", ModuleName, "/index.vue"}, ""), "uniapp/index.vue.tpl": strings.Join([]string{"uniapp/pages/", ModuleName, "/index.vue"}, ""),
"uniapp/search.vue.tpl": strings.Join([]string{"uniapp/pages/", ModuleName, "/search.vue"}, ""), "uniapp/search.vue.tpl": strings.Join([]string{"uniapp/pages/", ModuleName, "/search.vue"}, ""),

View File

@@ -16,46 +16,46 @@ import (
// RespType 响应类型 // RespType 响应类型
type RespType struct { type RespType struct {
code int code int
msg string message string
data interface{} data interface{}
} }
// Response 响应格式结构 // Response 响应格式结构
type Response struct { type Response struct {
Code int `json:"code"` Code int `json:"code"`
Msg string `json:"msg"` Message string `json:"message"`
Data interface{} `json:"data"` Data interface{} `json:"data"`
} }
var ( var (
Success = RespType{code: 200, msg: "成功"} Success = RespType{code: 200, message: "成功"}
Failed = RespType{code: 300, msg: "失败"} Failed = RespType{code: 300, message: "失败"}
ParamsValidError = RespType{code: 310, msg: "参数校验错误"} ParamsValidError = RespType{code: 310, message: "参数校验错误"}
ParamsTypeError = RespType{code: 311, msg: "参数类型错误"} ParamsTypeError = RespType{code: 311, message: "参数类型错误"}
RequestMethodError = RespType{code: 312, msg: "请求方法错误"} RequestMethodError = RespType{code: 312, message: "请求方法错误"}
AssertArgumentError = RespType{code: 313, msg: "断言参数错误"} AssertArgumentError = RespType{code: 313, message: "断言参数错误"}
LoginAccountError = RespType{code: 330, msg: "登录账号或密码错误"} LoginAccountError = RespType{code: 330, message: "登录账号或密码错误"}
LoginDisableError = RespType{code: 331, msg: "登录账号已被禁用了"} LoginDisableError = RespType{code: 331, message: "登录账号已被禁用了"}
TokenEmpty = RespType{code: 332, msg: "token参数为空"} TokenEmpty = RespType{code: 332, message: "token参数为空"}
TokenInvalid = RespType{code: 333, msg: "token参数无效"} TokenInvalid = RespType{code: 333, message: "token参数无效"}
NoPermission = RespType{code: 403, msg: "无相关权限"} NoPermission = RespType{code: 403, message: "无相关权限"}
Request404Error = RespType{code: 404, msg: "请求接口不存在"} Request404Error = RespType{code: 404, message: "请求接口不存在"}
Request405Error = RespType{code: 405, msg: "请求方法不允许"} Request405Error = RespType{code: 405, message: "请求方法不允许"}
SystemError = RespType{code: 500, msg: "系统错误"} SystemError = RespType{code: 500, message: "系统错误"}
) )
// Error 实现error方法 // Error 实现error方法
func (rt RespType) Error() string { func (rt RespType) Error() string {
return strconv.Itoa(rt.code) + ":" + rt.msg return strconv.Itoa(rt.code) + ":" + rt.message
} }
// Make 以响应类型生成信息 // Make 以响应类型生成信息
func (rt RespType) Make(msg string) RespType { func (rt RespType) Make(message string) RespType {
rt.msg = msg rt.message = message
return rt return rt
} }
@@ -72,7 +72,7 @@ func (rt RespType) Code() int {
// Msg 获取msg // Msg 获取msg
func (rt RespType) Msg() string { func (rt RespType) Msg() string {
return rt.msg return rt.message
} }
// Data 获取data // Data 获取data
@@ -90,7 +90,7 @@ func Result(c *gin.Context, resp RespType, data interface{}) {
} }
c.JSON(http.StatusOK, Response{ c.JSON(http.StatusOK, Response{
Code: resp.code, Code: resp.code,
Msg: resp.msg, Message: resp.message,
Data: data, Data: data,
}) })
} }
@@ -110,9 +110,9 @@ func Ok(c *gin.Context) {
} }
// OkWithMsg 正常响应附带msg // OkWithMsg 正常响应附带msg
func OkWithMsg(c *gin.Context, msg string) { func OkWithMsg(c *gin.Context, message string) {
resp := Success resp := Success
resp.msg = msg resp.message = message
Result(c, resp, []string{}) Result(c, resp, []string{})
} }
@@ -137,8 +137,8 @@ func Fail(c *gin.Context, resp RespType) {
} }
// FailWithMsg 错误响应附带msg // FailWithMsg 错误响应附带msg
func FailWithMsg(c *gin.Context, resp RespType, msg string) { func FailWithMsg(c *gin.Context, resp RespType, message string) {
resp.msg = msg resp.message = message
respLogger(resp, "Request FailWithMsg: url=[%s], resp=[%+v]", c.Request.URL.Path, resp) respLogger(resp, "Request FailWithMsg: url=[%s], resp=[%+v]", c.Request.URL.Path, resp)
Result(c, resp, []string{}) Result(c, resp, []string{})
} }
@@ -218,10 +218,10 @@ func CheckMysqlErr(err error) (e error) {
} }
// CheckErrDBNotRecord 校验数据库记录不存在的错误 // CheckErrDBNotRecord 校验数据库记录不存在的错误
func CheckErrDBNotRecord(err error, msg string) (e error) { func CheckErrDBNotRecord(err error, message string) (e error) {
if err != nil && errors.Is(err, gorm.ErrRecordNotFound) { if err != nil && errors.Is(err, gorm.ErrRecordNotFound) {
core.Logger.WithOptions(zap.AddCallerSkip(1)).Infof("记录不存在: err=[%+v]", err) core.Logger.WithOptions(zap.AddCallerSkip(1)).Infof("记录不存在: err=[%+v]", err)
return SystemError.Make(msg) return SystemError.Make(message)
} }
return return
} }

View File

@@ -27,10 +27,10 @@ func GetExcelColumnName(columnNumber int) string {
// //
// 需要在传入的结构体中的字段加上tagexcel:"title:列头名称;index:列下标(从0开始);" // 需要在传入的结构体中的字段加上tagexcel:"title:列头名称;index:列下标(从0开始);"
// //
// @param list 要导出的数据 // list 要导出的数据
// @param sheet 文档 // sheet 文档
// @param title 标题 // title 标题
// @param changeHead map[string]string{"Id": "账号", "Name": "真实姓名"} // changeHead map[string]string{"Id": "账号", "Name": "真实姓名"}
func NormalDynamicExport(list interface{}, sheet string, title string, changeHead map[string]string) (file *excelize.File, err error) { func NormalDynamicExport(list interface{}, sheet string, title string, changeHead map[string]string) (file *excelize.File, err error) {
e := ExcelInit() e := ExcelInit()
err = ExportExcel(sheet, title, list, changeHead, e) err = ExportExcel(sheet, title, list, changeHead, e)