Compare commits

..

11 Commits

Author SHA1 Message Date
3cb88452dc 增量升级脚步语法错误修复 2020-12-15 19:40:39 +08:00
b6a3085083 2,4版本问题如果url中有包括中文(已编码),就报400 Bad Request #2069 2020-12-14 11:06:02 +08:00
8a7fc033cd demo示例设置展示列效果优化
系统设置菜单消失 #2079
Failed to execute 'getComputedStyle' on 'Window
升级代码生成器模板

1、支持自定义下拉树的生成
2、oracle下 三级联动配置了,导致生成报错
3、高级查询支持下拉搜索和下拉多选
4、树表单支持更多的控件生成
2020-12-11 20:06:21 +08:00
e0cf946d18 字典明细禁用样式
上传图片组件大小不一致问题
注册用户总是提示“手机验证码错误” #2081
接口测试支持更多请求方式
菜单删除确认按钮样式变形问题
示例模板优化TableInnerEditList.vue
当用户单租户多部门时存在未setTenant的BUG #2053
2020-12-09 17:44:15 +08:00
c5b33b6bd1 解决前端增加用户模块 密码的校验规则没有生效 #2063 2020-12-08 15:42:43 +08:00
aec00d9ba2 上传中文文件名转为拼音、Long类型精度丢失问题 issues/I24KXI、达梦数据库兼容修改 2020-12-06 17:46:10 +08:00
341830c5a0 2.4版本更新后子表onlChange方法不生效 #2059 2020-12-04 11:23:05 +08:00
ff45fe4858 解决性能监控(请求追踪、tomcat信息)菜单,打开报错的问题 2020-12-03 15:09:17 +08:00
c13ed675a7 单体和微服务启动类加注释 2020-12-02 20:13:45 +08:00
6917e91398 system微服务启动类更名,方便区分单机和微服务 2020-12-02 13:39:20 +08:00
18a5c247d8 解决QRTZ_*表区分大小写的问题 2020-12-02 13:27:49 +08:00
37 changed files with 394 additions and 77 deletions

View File

@ -15,7 +15,7 @@
@change="handleChange" @change="handleChange"
@preview="handlePreview" @preview="handlePreview"
:class="!isMultiple?'imgupload':''"> :class="!isMultiple?'imgupload':''">
<div style="width:104px;height:104px"> <div :style="{'width':(!isMultiple?'104px':'auto'),'height':(!isMultiple?'104px':'auto')}">
<img v-if="!isMultiple && picUrl" :src="getAvatarView()" style="width:100%;height:100%"/> <img v-if="!isMultiple && picUrl" :src="getAvatarView()" style="width:100%;height:100%"/>
<div v-else class="iconp"> <div v-else class="iconp">
<a-icon :type="uploadLoading ? 'loading' : 'plus'" /> <a-icon :type="uploadLoading ? 'loading' : 'plus'" />

View File

@ -864,6 +864,8 @@ export default {
trigger(name, event = {}) { trigger(name, event = {}) {
event.$target = this event.$target = this
event.$table = this.$refs.vxe event.$table = this.$refs.vxe
//online增强参数兼容
event.target = this
this.$emit(name, event) this.$emit(name, event)
}, },

View File

@ -149,6 +149,8 @@ export default {
packageEvent(name, event = {}) { packageEvent(name, event = {}) {
event.row = this.row event.row = this.row
event.column = this.column event.column = this.column
//online增强参数兼容
event.column['key'] = this.column['property']
event.cellTarget = this event.cellTarget = this
if (!event.type) { if (!event.type) {
event.type = name event.type = name

View File

@ -186,7 +186,12 @@
}, },
tabCallBack() { tabCallBack() {
this.$nextTick(() => { this.$nextTick(() => {
triggerWindowResizeEvent() //update-begin-author:taoyan date: 20201211 for:【新版】online报错 JT-100
setTimeout(()=>{
//省市区组件里面给window绑定了个resize事件 导致切换页面的时候触发了他的resize但是切换页面省市区组件还没被销毁前就触发了该事件导致控制台报错加个延迟
triggerWindowResizeEvent()
},20)
//update-end-author:taoyan date: 20201211 for:【新版】online报错 JT-100
}) })
}, },
editPage(key, action) { editPage(key, action) {

View File

@ -87,7 +87,7 @@
</div> </div>
<div :style="{ marginTop: '24px' }"> <div :style="{ marginTop: '24px' }">
<a-list :split="false"> <a-list :split="false">
<a-list-item slot="renderItem" slot-scope="item, index"> <a-list-item>
<a-tooltip slot="actions"> <a-tooltip slot="actions">
<template slot="title"> <template slot="title">
该设定仅 [顶部栏导航] 时有效 该设定仅 [顶部栏导航] 时有效
@ -101,19 +101,19 @@
<div slot="title">内容区域宽度</div> <div slot="title">内容区域宽度</div>
</a-list-item-meta> </a-list-item-meta>
</a-list-item> </a-list-item>
<a-list-item slot="renderItem" slot-scope="item, index"> <a-list-item>
<a-switch slot="actions" size="small" :defaultChecked="fixedHeader" @change="handleFixedHeader" /> <a-switch slot="actions" size="small" :defaultChecked="fixedHeader" @change="handleFixedHeader" />
<a-list-item-meta> <a-list-item-meta>
<div slot="title">固定 Header</div> <div slot="title">固定 Header</div>
</a-list-item-meta> </a-list-item-meta>
</a-list-item> </a-list-item>
<a-list-item slot="renderItem" slot-scope="item, index"> <a-list-item>
<a-switch slot="actions" size="small" :disabled="!fixedHeader" :defaultChecked="autoHideHeader" @change="handleFixedHeaderHidden" /> <a-switch slot="actions" size="small" :disabled="!fixedHeader" :defaultChecked="autoHideHeader" @change="handleFixedHeaderHidden" />
<a-list-item-meta> <a-list-item-meta>
<div slot="title" :style="{ textDecoration: !fixedHeader ? 'line-through' : 'unset' }">下滑时隐藏 Header</div> <div slot="title" :style="{ textDecoration: !fixedHeader ? 'line-through' : 'unset' }">下滑时隐藏 Header</div>
</a-list-item-meta> </a-list-item-meta>
</a-list-item> </a-list-item>
<a-list-item slot="renderItem" slot-scope="item, index"> <a-list-item>
<a-switch slot="actions" size="small" :disabled="(layoutMode === 'topmenu')" :checked="dataFixSiderbar" @change="handleFixSiderbar" /> <a-switch slot="actions" size="small" :disabled="(layoutMode === 'topmenu')" :checked="dataFixSiderbar" @change="handleFixSiderbar" />
<a-list-item-meta> <a-list-item-meta>
<div slot="title" :style="{ textDecoration: layoutMode === 'topmenu' ? 'line-through' : 'unset' }">固定侧边菜单</div> <div slot="title" :style="{ textDecoration: layoutMode === 'topmenu' ? 'line-through' : 'unset' }">固定侧边菜单</div>
@ -128,13 +128,13 @@
<h3 class="setting-drawer-index-title">其他设置</h3> <h3 class="setting-drawer-index-title">其他设置</h3>
<div> <div>
<a-list :split="false"> <a-list :split="false">
<a-list-item slot="renderItem" slot-scope="item, index"> <a-list-item>
<a-switch slot="actions" size="small" :defaultChecked="colorWeak" @change="onColorWeak" /> <a-switch slot="actions" size="small" :defaultChecked="colorWeak" @change="onColorWeak" />
<a-list-item-meta> <a-list-item-meta>
<div slot="title">色弱模式</div> <div slot="title">色弱模式</div>
</a-list-item-meta> </a-list-item-meta>
</a-list-item> </a-list-item>
<a-list-item slot="renderItem" slot-scope="item, index"> <a-list-item>
<a-switch slot="actions" size="small" :defaultChecked="multipage" @change="onMultipageWeak" /> <a-switch slot="actions" size="small" :defaultChecked="multipage" @change="onMultipageWeak" />
<a-list-item-meta> <a-list-item-meta>
<div slot="title">多页签模式</div> <div slot="title">多页签模式</div>

View File

@ -62,7 +62,7 @@
</div> </div>
<div class="table-operator"> <div class="table-operator">
<a-button type="primary" icon="plus" @click="() => $router.push({name: 'anime-add'})">新建</a-button> <a-button type="primary" icon="plus" @click="() => this.handleModalVisible(true)">新建</a-button>
<a-dropdown v-if="selectedRowKeys.length > 0"> <a-dropdown v-if="selectedRowKeys.length > 0">
<a-menu slot="overlay"> <a-menu slot="overlay">
<a-menu-item key="1"><a-icon type="delete" />删除</a-menu-item> <a-menu-item key="1"><a-icon type="delete" />删除</a-menu-item>
@ -111,7 +111,14 @@
</div> </div>
</template> </template>
</s-table> </s-table>
<a-modal title="新建规则" destroyOnClose :visible="visibleCreateModal" @ok="handleCreateModalOk" @cancel="handleCreateModalCancel">
<!---->
<a-form style="margin-top: 8px" :autoFormCreate="(form)=>{this.createForm = form}">
<a-form-item :labelCol="{ span: 5 }" :wrapperCol="{ span: 15 }" label="描述" fieldDecoratorId="description" :fieldDecoratorOptions="{rules: [{ required: true, message: '请输入至少五个字符的规则描述', min: 5 }]}">
<a-input placeholder="请输入" />
</a-form-item>
</a-form>
</a-modal>
</a-card> </a-card>
</template> </template>
@ -181,7 +188,8 @@
}, },
selectedRowKeys: [], selectedRowKeys: [],
selectedRows: [] selectedRows: [],
visibleCreateModal:false
} }
}, },
methods: { methods: {
@ -230,6 +238,16 @@
toggleAdvanced () { toggleAdvanced () {
this.advanced = !this.advanced this.advanced = !this.advanced
}, },
//添加逻辑
handleModalVisible(isVisible) {
this.visibleCreateModal = isVisible;
},
handleCreateModalCancel() {
this.visibleCreateModal = false;
},
handleCreateModalOk() {
this.visibleCreateModal = false;
},
}, },
watch: { watch: {
/* /*

View File

@ -1,10 +1,12 @@
<template> <template>
<a-card :bordered="false"> <a-card :bordered="false">
<a-row> <a-row style="margin-top: 20px">
<a-col :md="2" :sm="4"> <a-col :md="2" :sm="4">
<a-select defaultValue="POST" style="width: 90px" @change="handleChange" size="large"> <a-select defaultValue="POST" style="width: 90px" @change="handleChange" size="large">
<a-select-option value="POST">POST</a-select-option> <a-select-option value="POST">POST</a-select-option>
<!--<a-select-option value="GET">GET</a-select-option>--> <a-select-option value="GET">GET</a-select-option>
<a-select-option value="PUT">PUT</a-select-option>
<a-select-option value="DELETE">DELETE</a-select-option>
</a-select> </a-select>
</a-col> </a-col>
<a-col :md="22" :sm="20"> <a-col :md="22" :sm="20">
@ -19,7 +21,7 @@
<a-tabs defaultActiveKey="2"> <a-tabs defaultActiveKey="2">
<a-tab-pane tab="params" key="2"> <a-tab-pane tab="params" key="2">
<textarea style="width:100%;font-size: 16px;font-weight:500" :rows="13" @input="changeVal"> <textarea style="width:100%;font-size: 16px;font-weight:500" :rows="13" @blur="changeVal">
</textarea> </textarea>
</a-tab-pane> </a-tab-pane>
</a-tabs> </a-tabs>
@ -33,7 +35,7 @@
</a-card> </a-card>
</template> </template>
<script> <script>
import { postAction,getAction } from '@/api/manage' import { axios } from '@/utils/request'
import { ACCESS_TOKEN } from "@/store/mutation-types" import { ACCESS_TOKEN } from "@/store/mutation-types"
import Vue from 'vue' import Vue from 'vue'
export default { export default {
@ -49,28 +51,25 @@
methods: { methods: {
onSearch (value) { onSearch (value) {
let that = this let that = this
if(!value){
that.$message.error("请填写路径")
return false
}
this.resultJson = {}; this.resultJson = {};
if("POST"===this.requestMethod.toUpperCase()){ axios({
postAction(value,this.paramJson).then((res)=>{ url: value,
method: this.requestMethod,
data: this.paramJson
}).then((res) => {
console.log(res) console.log(res)
this.resultJson = res this.resultJson = res
}).catch((err) => { }).catch((err) => {
that.$message.error("请求异常:"+err) that.$message.error("请求异常:"+err)
}) })
}else {
getAction(value,this.paramJson).then((res)=>{
console.log(res)
this.resultJson = res;
}).catch((err) => {
that.$message.error("请求异常:"+err)
})
}
}, },
changeVal(e){ changeVal(e){
try { try {
let json = e.target.value; let json = e.target.value;
json = json.replace(/\n/g,"");
json = json.replace(/\s*/g,"");
if(json.indexOf(",}")>0){ if(json.indexOf(",}")>0){
json = json.replace(",}","}"); json = json.replace(",}","}");
} }

View File

@ -89,10 +89,10 @@
<a-popover title="自定义列" trigger="click" placement="leftBottom"> <a-popover title="自定义列" trigger="click" placement="leftBottom">
<template slot="content"> <template slot="content">
<a-checkbox-group @change="onColSettingsChange" v-model="settingColumns" :defaultValue="settingColumns"> <a-checkbox-group @change="onColSettingsChange" v-model="settingColumns" :defaultValue="settingColumns">
<a-row> <a-row style="width: 400px">
<template v-for="(item,index) in defColumns"> <template v-for="(item,index) in defColumns">
<template v-if="item.key!='rowIndex'&& item.dataIndex!='action'"> <template v-if="item.key!='rowIndex'&& item.dataIndex!='action'">
<a-col :span="12"><a-checkbox :value="item.dataIndex">{{ item.title }}</a-checkbox></a-col> <a-col :span="12"><a-checkbox :value="item.dataIndex"><j-ellipsis :value="item.title" :length="10"></j-ellipsis></a-checkbox></a-col>
</template> </template>
</template> </template>
</a-row> </a-row>
@ -118,10 +118,10 @@
<div slot="filterDropdown"> <div slot="filterDropdown">
<a-card> <a-card>
<a-checkbox-group @change="onColSettingsChange" v-model="settingColumns" :defaultValue="settingColumns"> <a-checkbox-group @change="onColSettingsChange" v-model="settingColumns" :defaultValue="settingColumns">
<a-row> <a-row style="width: 400px">
<template v-for="(item,index) in defColumns"> <template v-for="(item,index) in defColumns">
<template v-if="item.key!='rowIndex'&& item.dataIndex!='action'"> <template v-if="item.key!='rowIndex'&& item.dataIndex!='action'">
<a-col :span="12"><a-checkbox :value="item.dataIndex">{{ item.title }}</a-checkbox></a-col> <a-col :span="12"><a-checkbox :value="item.dataIndex"><j-ellipsis :value="item.title" :length="10"></j-ellipsis></a-checkbox></a-col>
</template> </template>
</template> </template>
</a-row> </a-row>

View File

@ -110,14 +110,15 @@
getAction('actuator/metrics/tomcat.sessions.active.current'), getAction('actuator/metrics/tomcat.sessions.active.current'),
getAction('actuator/metrics/tomcat.sessions.active.max'), getAction('actuator/metrics/tomcat.sessions.active.max'),
getAction('actuator/metrics/tomcat.sessions.rejected'), getAction('actuator/metrics/tomcat.sessions.rejected'),
getAction('actuator/metrics/tomcat.global.sent'), // 2.3.5.RELEASE 无此API
getAction('actuator/metrics/tomcat.global.request.max'), // getAction('actuator/metrics/tomcat.global.sent'),
getAction('actuator/metrics/tomcat.global.request'), // getAction('actuator/metrics/tomcat.global.request.max'),
// getAction('actuator/metrics/tomcat.global.request'),
// getAction('actuator/metrics/tomcat.threads.current'),
// getAction('actuator/metrics/tomcat.threads.config.max')
// 2.1.3.RELEASE 无此API // 2.1.3.RELEASE 无此API
//getAction('actuator/metrics/tomcat.servlet.request'), //getAction('actuator/metrics/tomcat.servlet.request'),
// getAction('actuator/metrics/tomcat.servlet.request.max'), // getAction('actuator/metrics/tomcat.servlet.request.max'),
getAction('actuator/metrics/tomcat.threads.current'),
getAction('actuator/metrics/tomcat.threads.config.max')
]).then((res) => { ]).then((res) => {
let tomcatInfo = [] let tomcatInfo = []
res.forEach((value, id) => { res.forEach((value, id) => {

View File

@ -58,6 +58,7 @@
:pagination="ipagination" :pagination="ipagination"
:loading="loading" :loading="loading"
@change="handleTableChange" @change="handleTableChange"
:rowClassName="getRowClassname"
> >
<span slot="action" slot-scope="text, record"> <span slot="action" slot-scope="text, record">
@ -200,8 +201,22 @@
this.screenWidth = 600; this.screenWidth = 600;
} }
}, },
//update--begin--autor:wangshuai-----date:20191204------for系统管理 数据字典禁用和正常区别开,添加背景颜色 teambition JT-22------
//增加样式方法返回值
getRowClassname(record){
if(record.status==0){
return "data-rule-invalid"
}
}
//update--end--autor:wangshuai-----date:20191204------for系统管理 数据字典禁用和正常区别开,添加背景颜色 teambition JT-22------
} }
} }
</script> </script>
<style scoped> <style lang="less" scoped>
//update--begin--autor:wangshuai-----date:20191204------for系统管理 数据字典禁用和正常区别开,添加背景颜色 teambition JT-22------
/deep/ .data-rule-invalid{
background: #f4f4f4;
color: #bababa;
}
//update--begin--autor:wangshuai-----date:20191204------for系统管理 数据字典禁用和正常区别开,添加背景颜色 teambition JT-22------
</style> </style>

View File

@ -53,7 +53,7 @@
</a-menu-item> </a-menu-item>
<a-menu-item> <a-menu-item>
<a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)"> <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)" placement="topLeft">
<a>删除</a> <a>删除</a>
</a-popconfirm> </a-popconfirm>
</a-menu-item> </a-menu-item>

View File

@ -28,7 +28,7 @@
<template v-if="!model.id"> <template v-if="!model.id">
<a-form-item label="登录密码" :labelCol="labelCol" :wrapperCol="wrapperCol" > <a-form-item label="登录密码" :labelCol="labelCol" :wrapperCol="wrapperCol" >
<a-input type="password" placeholder="请输入登录密码" v-decorator="[ 'password']" /> <a-input type="password" placeholder="请输入登录密码" v-decorator="[ 'password',validatorRules.password]" />
</a-form-item> </a-form-item>
<a-form-item label="确认密码" :labelCol="labelCol" :wrapperCol="wrapperCol" > <a-form-item label="确认密码" :labelCol="labelCol" :wrapperCol="wrapperCol" >

View File

@ -16,7 +16,7 @@
<template slot="title"> <template slot="title">
<span>您有多个租户请选择登录租户</span> <span>您有多个租户请选择登录租户</span>
</template> </template>
<a-avatar style="backgroundColor:#87d068" icon="gold" /> <a-avatar style="backgroundColor:#87d068" icon="gold" />
</a-tooltip> </a-tooltip>
<a-select @change="handleTenantChange" :class="{'valid-error':validate_status1=='error'}" placeholder="请选择登录租户" style="margin-left:10px;width: 80%"> <a-select @change="handleTenantChange" :class="{'valid-error':validate_status1=='error'}" placeholder="请选择登录租户" style="margin-left:10px;width: 80%">
@ -183,8 +183,8 @@
return false return false
} }
this.departResolve().then(()=>{ this.departResolve().then(()=>{
this.$store.dispatch('saveTenant', this.tenant_id);
if(this.isMultiTenant){ if(this.isMultiTenant){
this.$store.dispatch('saveTenant', this.tenant_id);
this.$emit('success') this.$emit('success')
}else{ }else{
this.$emit('success') this.$emit('success')

View File

@ -5364,6 +5364,18 @@ DROP TABLE IF EXISTS QRTZ_TRIGGERS;
DROP TABLE IF EXISTS QRTZ_JOB_DETAILS; DROP TABLE IF EXISTS QRTZ_JOB_DETAILS;
DROP TABLE IF EXISTS QRTZ_CALENDARS; DROP TABLE IF EXISTS QRTZ_CALENDARS;
drop table if exists qrtz_fired_triggers;
drop table if exists qrtz_paused_trigger_grps;
drop table if exists qrtz_scheduler_state;
drop table if exists qrtz_locks;
drop table if exists qrtz_simple_triggers;
drop table if exists qrtz_simprop_triggers;
drop table if exists qrtz_cron_triggers;
drop table if exists qrtz_blob_triggers;
drop table if exists qrtz_triggers;
drop table if exists qrtz_job_details;
drop table if exists qrtz_calendars;
CREATE TABLE QRTZ_JOB_DETAILS CREATE TABLE QRTZ_JOB_DETAILS
( (

View File

@ -23,7 +23,7 @@ CREATE TABLE `sys_third_account` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
ALTER TABLE `sys_user` ALTER TABLE `sys_user`
DROP COLUMN `third_id` DROP COLUMN `third_id`,
DROP COLUMN `third_type`; DROP COLUMN `third_type`;
update sys_permission set component = 'examples/list/UserList' where id = '05b3c82ddb2536a4a5ee1a4c46b5abef'; update sys_permission set component = 'examples/list/UserList' where id = '05b3c82ddb2536a4a5ee1a4c46b5abef';

View File

@ -76,6 +76,12 @@
<version>${commons.version}</version> <version>${commons.version}</version>
</dependency> </dependency>
<!-- 拼音库 -->
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>${pinyin4j.version}</version>
</dependency>
<!-- freemarker --> <!-- freemarker -->
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
@ -216,13 +222,6 @@
</exclusions> </exclusions>
</dependency> </dependency>
<!-- hutool工具类-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool-all.version}</version>
</dependency>
<!-- mini文件存储服务 --> <!-- mini文件存储服务 -->
<dependency> <dependency>
<groupId>io.minio</groupId> <groupId>io.minio</groupId>

View File

@ -1,5 +1,7 @@
package org.jeecg.common.util; package org.jeecg.common.util;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.pinyin.PinyinUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.constant.DataBaseConstant; import org.jeecg.common.constant.DataBaseConstant;
@ -16,10 +18,15 @@ import java.io.InputStream;
import java.sql.Connection; import java.sql.Connection;
import java.sql.DatabaseMetaData; import java.sql.DatabaseMetaData;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@Slf4j @Slf4j
public class CommonUtils { public class CommonUtils {
//中文正则
private static Pattern ZHONGWEN_PATTERN = Pattern.compile("[\u4e00-\u9fa5]");
public static String uploadOnlineImage(byte[] data,String basePath,String bizPath,String uploadType){ public static String uploadOnlineImage(byte[] data,String basePath,String bizPath,String uploadType){
String dbPath = null; String dbPath = null;
String fileName = "image" + Math.round(Math.random() * 100000000000L); String fileName = "image" + Math.round(Math.random() * 100000000000L);
@ -68,9 +75,28 @@ public class CommonUtils {
} }
//替换上传文件名字的特殊字符 //替换上传文件名字的特殊字符
fileName = fileName.replace("=","").replace(",","").replace("&","").replace("#", ""); fileName = fileName.replace("=","").replace(",","").replace("&","").replace("#", "");
//替换上传文件名字中的中文
if(ifContainChinese(fileName)){
fileName= PinyinUtil.getPinyin(fileName, StrUtil.EMPTY);
}
//替换上传文件名字中的空格
fileName=fileName.replaceAll("\\s","");
return fileName; return fileName;
} }
// java 判断字符串里是否包含中文字符
public static boolean ifContainChinese(String str) {
if(str.getBytes().length == str.length()){
return false;
}else{
Matcher m = ZHONGWEN_PATTERN.matcher(str);
if (m.find()) {
return true;
}
return false;
}
}
/** /**
* 统一全局上传 * 统一全局上传
* @Return: java.lang.String * @Return: java.lang.String
@ -129,7 +155,7 @@ public class CommonUtils {
String dbType = md.getDatabaseProductName().toLowerCase(); String dbType = md.getDatabaseProductName().toLowerCase();
if(dbType.indexOf("mysql")>=0) { if(dbType.indexOf("mysql")>=0) {
DB_TYPE = DataBaseConstant.DB_TYPE_MYSQL; DB_TYPE = DataBaseConstant.DB_TYPE_MYSQL;
}else if(dbType.indexOf("oracle")>=0) { }else if(dbType.indexOf("oracle")>=0 ||dbType.indexOf("dm")>=0) {
DB_TYPE = DataBaseConstant.DB_TYPE_ORACLE; DB_TYPE = DataBaseConstant.DB_TYPE_ORACLE;
}else if(dbType.indexOf("sqlserver")>=0||dbType.indexOf("sql server")>=0) { }else if(dbType.indexOf("sqlserver")>=0||dbType.indexOf("sql server")>=0) {
DB_TYPE = DataBaseConstant.DB_TYPE_SQLSERVER; DB_TYPE = DataBaseConstant.DB_TYPE_SQLSERVER;

View File

@ -6,8 +6,6 @@ import freemarker.template.Configuration;
import freemarker.template.Template; import freemarker.template.Template;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jeecgframework.codegenerate.generate.util.SimpleFormat; import org.jeecgframework.codegenerate.generate.util.SimpleFormat;
import java.io.StringWriter; import java.io.StringWriter;

View File

@ -1,9 +1,15 @@
package org.jeecg.config; package org.jeecg.config;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.actuate.trace.http.InMemoryHttpTraceRepository;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter; import org.springframework.web.filter.CorsFilter;
@ -11,6 +17,8 @@ import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;
/** /**
* Spring Boot 2.0 解决跨域问题 * Spring Boot 2.0 解决跨域问题
* *
@ -63,4 +71,29 @@ public class WebMvcConfiguration implements WebMvcConfigurer {
return new CorsFilter(urlBasedCorsConfigurationSource); return new CorsFilter(urlBasedCorsConfigurationSource);
} }
/**
* 添加Long转json精度丢失是配置
* @Return: void
*/
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
objectMapper.registerModule(simpleModule);
jackson2HttpMessageConverter.setObjectMapper(objectMapper);
converters.add(jackson2HttpMessageConverter);
}
/**
* SpringBootAdmin的Httptrace不见了
* https://blog.csdn.net/u013810234/article/details/110097201
*/
@Bean
public InMemoryHttpTraceRepository getInMemoryHttpTrace(){
return new InMemoryHttpTraceRepository();
}
} }

View File

@ -11,7 +11,7 @@ import org.jeecgframework.codegenerate.window.CodeWindow;
*/ */
public class JeecgOneGUI { public class JeecgOneGUI {
/** 详细使用手册: http://doc.jeecg.com/1275846 */ /** 详细使用手册: http://doc.jeecg.com/2043919 */
public static void main(String[] args) { public static void main(String[] args) {
new CodeWindow().pack(); new CodeWindow().pack();
} }

View File

@ -5,7 +5,6 @@ import org.apache.catalina.Context;
import org.apache.tomcat.util.scan.StandardJarScanner; import org.apache.tomcat.util.scan.StandardJarScanner;
import org.jeecg.common.util.oConvertUtils; import org.jeecg.common.util.oConvertUtils;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
@ -17,6 +16,9 @@ import org.springframework.core.env.Environment;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.UnknownHostException; import java.net.UnknownHostException;
/**
* 单体启动类(采用此类启动项目为单体模式)
*/
@Slf4j @Slf4j
@SpringBootApplication @SpringBootApplication
public class JeecgSystemApplication extends SpringBootServletInitializer { public class JeecgSystemApplication extends SpringBootServletInitializer {

View File

@ -889,8 +889,12 @@ public class SysUserController {
return result; return result;
} }
} }
if(null == code){
if (!smscode.equals(code)) { result.setMessage("手机验证码失效,请重新获取");
result.setSuccess(false);
return result;
}
if (!smscode.equals(code.toString())) {
result.setMessage("手机验证码错误"); result.setMessage("手机验证码错误");
result.setSuccess(false); result.setSuccess(false);
return result; return result;
@ -1039,7 +1043,7 @@ public class SysUserController {
if (oConvertUtils.isEmpty(token)) { if (oConvertUtils.isEmpty(token)) {
username = JwtUtil.getUserNameByToken(request); username = JwtUtil.getUserNameByToken(request);
} else { } else {
username = JwtUtil.getUsername(token); username = JwtUtil.getUsername(token);
} }
log.info(" ------ 通过令牌获取部分用户信息,当前用户: " + username); log.info(" ------ 通过令牌获取部分用户信息,当前用户: " + username);

View File

@ -76,12 +76,22 @@
<#-- ** 高级查询生成 * --> <#-- ** 高级查询生成 * -->
<#function superQueryFieldList po> <#function superQueryFieldList po>
<#assign superQuery_dictTable="">
<#assign superQuery_dictText="">
<#if po.dictTable?default("")?trim?length gt 1>
<#assign superQuery_dictTable="${po.dictTable}">
</#if>
<#if po.dictText?default("")?trim?length gt 1>
<#assign superQuery_dictText="${po.dictText}">
</#if>
<#if po.classType=="popup"> <#if po.classType=="popup">
<#return "{type:'${po.classType}',value:'${po.fieldName}',text:'${po.filedComment}', popup:{code:'${po.dictTable}',field:'${po.dictField?split(',')[0]}',orgFields:'${po.dictField?split(',')[0]}',destFields:'${po.dictText?split(',')[0]}'}}"> <#return "{type:'${po.classType}',value:'${po.fieldName}',text:'${po.filedComment}', popup:{code:'${po.dictTable}',field:'${po.dictField?split(',')[0]}',orgFields:'${po.dictField?split(',')[0]}',destFields:'${po.dictText?split(',')[0]}'}}">
<#elseif po.classType=="sel_user" || po.classType=="sel_depart" || po.classType=="datetime" || po.classType=="date" || po.classType=="pca" || po.classType=="switch"> <#elseif po.classType=="sel_user" || po.classType=="sel_depart" || po.classType=="datetime" || po.classType=="date" || po.classType=="pca" || po.classType=="switch">
<#return "{type:'${po.classType}',value:'${po.fieldName}',text:'${po.filedComment}'}"> <#return "{type:'${po.classType}',value:'${po.fieldName}',text:'${po.filedComment}'}">
<#else> <#else>
<#if po.dictTable?? && po.dictTable!="" && po.classType!="sel_tree" && po.classType!="cat_tree" && po.classType!="link_down"> <#if po.classType=="sel_search" || po.classType=="list_multi">
<#return "{type:'${po.classType}',value:'${po.fieldName}',text:'${po.filedComment}',dictTable:'${superQuery_dictTable}', dictText:'${superQuery_dictText}', dictCode:'${po.dictField}'}">
<#elseif po.dictTable?? && po.dictTable!="" && po.classType!="sel_tree" && po.classType!="cat_tree" && po.classType!="link_down">
<#return "{type:'${po.fieldDbType}',value:'${po.fieldName}',text:'${po.filedComment}',dictCode:'${po.dictTable},${po.dictText},${po.dictField}'}"> <#return "{type:'${po.fieldDbType}',value:'${po.fieldName}',text:'${po.filedComment}',dictCode:'${po.dictTable},${po.dictText},${po.dictField}'}">
<#elseif po.dictField?? && po.classType!="sel_tree" && po.classType!="cat_tree" && po.classType!="link_down"> <#elseif po.dictField?? && po.classType!="sel_tree" && po.classType!="cat_tree" && po.classType!="link_down">
<#return "{type:'${po.fieldDbType}',value:'${po.fieldName}',text:'${po.filedComment}',dictCode:'${po.dictField}'}"> <#return "{type:'${po.fieldDbType}',value:'${po.fieldName}',text:'${po.filedComment}',dictCode:'${po.dictField}'}">

View File

@ -31,7 +31,7 @@
<#list columns as po> <#list columns as po>
<#if po.isShow =='Y' && po.fieldName != 'id'> <#if po.isShow =='Y' && po.fieldName != 'id'>
<#assign form_field_dictCode=""> <#assign form_field_dictCode="">
<#if po.dictTable?default("")?trim?length gt 1> <#if po.dictTable?default("")?trim?length gt 1 && po.dictText?default("")?trim?length gt 1 && po.dictField?default("")?trim?length gt 1>
<#assign form_field_dictCode="${po.dictTable},${po.dictText},${po.dictField}"> <#assign form_field_dictCode="${po.dictTable},${po.dictText},${po.dictField}">
<#elseif po.dictField?default("")?trim?length gt 1> <#elseif po.dictField?default("")?trim?length gt 1>
<#assign form_field_dictCode="${po.dictField}"> <#assign form_field_dictCode="${po.dictField}">
@ -101,6 +101,24 @@
<j-editor v-decorator="['${po.fieldName}',{trigger:'input'}]" <#if po.readonly=='Y'>disabled</#if>/> <j-editor v-decorator="['${po.fieldName}',{trigger:'input'}]" <#if po.readonly=='Y'>disabled</#if>/>
<#elseif po.fieldDbType=='Blob'> <#elseif po.fieldDbType=='Blob'>
<a-input v-decorator="['${po.fieldName}String'${autoWriteRules(po)}]" placeholder="请输入${po.filedComment}" <#if po.readonly=='Y'>disabled</#if>></a-input> <a-input v-decorator="['${po.fieldName}String'${autoWriteRules(po)}]" placeholder="请输入${po.filedComment}" <#if po.readonly=='Y'>disabled</#if>></a-input>
<#elseif po.classType == 'sel_tree'>
<#assign form_tree_select = true>
<j-tree-select
ref="treeSelect"
placeholder="请选择${po.filedComment}"
v-decorator="['${po.fieldName}'${autoWriteRules(po)}]"
<#if po.dictText??>
<#if po.dictText?split(',')[2]?? && po.dictText?split(',')[0]??>
dict="${po.dictTable},${po.dictText?split(',')[2]},${po.dictText?split(',')[0]}"
<#elseif po.dictText?split(',')[1]??>
pidField="${po.dictText?split(',')[1]}"
<#elseif po.dictText?split(',')[3]??>
hasChildField="${po.dictText?split(',')[3]}"
</#if>
</#if>
pidValue="${po.dictField}"
<#if po.readonly=='Y'>disabled</#if>>
</j-tree-select>
<#else> <#else>
<a-input v-decorator="['${po.fieldName}'${autoWriteRules(po)}]" placeholder="请输入${po.filedComment}" <#if po.readonly=='Y'>disabled</#if> ></a-input> <a-input v-decorator="['${po.fieldName}'${autoWriteRules(po)}]" placeholder="请输入${po.filedComment}" <#if po.readonly=='Y'>disabled</#if> ></a-input>
</#if> </#if>

View File

@ -31,7 +31,7 @@
<#list columns as po> <#list columns as po>
<#if po.isShow =='Y' && po.fieldName != 'id'> <#if po.isShow =='Y' && po.fieldName != 'id'>
<#assign form_field_dictCode=""> <#assign form_field_dictCode="">
<#if po.dictTable?default("")?trim?length gt 1> <#if po.dictTable?default("")?trim?length gt 1 && po.dictText?default("")?trim?length gt 1 && po.dictField?default("")?trim?length gt 1>
<#assign form_field_dictCode="${po.dictTable},${po.dictText},${po.dictField}"> <#assign form_field_dictCode="${po.dictTable},${po.dictText},${po.dictField}">
<#elseif po.dictField?default("")?trim?length gt 1> <#elseif po.dictField?default("")?trim?length gt 1>
<#assign form_field_dictCode="${po.dictField}"> <#assign form_field_dictCode="${po.dictField}">
@ -106,6 +106,24 @@
<j-editor v-decorator="['${po.fieldName}',{trigger:'input'}]" <#if po.readonly=='Y'>disabled</#if>/> <j-editor v-decorator="['${po.fieldName}',{trigger:'input'}]" <#if po.readonly=='Y'>disabled</#if>/>
<#elseif po.fieldDbType=='Blob'> <#elseif po.fieldDbType=='Blob'>
<a-input v-decorator="['${po.fieldName}String'${autoWriteRules(po)}]" placeholder="请输入${po.filedComment}" <#if po.readonly=='Y'>disabled</#if>></a-input> <a-input v-decorator="['${po.fieldName}String'${autoWriteRules(po)}]" placeholder="请输入${po.filedComment}" <#if po.readonly=='Y'>disabled</#if>></a-input>
<#elseif po.classType == 'sel_tree'>
<#assign form_tree_select = true>
<j-tree-select
ref="treeSelect"
placeholder="请选择${po.filedComment}"
v-decorator="['${po.fieldName}'${autoWriteRules(po)}]"
<#if po.dictText??>
<#if po.dictText?split(',')[2]?? && po.dictText?split(',')[0]??>
dict="${po.dictTable},${po.dictText?split(',')[2]},${po.dictText?split(',')[0]}"
<#elseif po.dictText?split(',')[1]??>
pidField="${po.dictText?split(',')[1]}"
<#elseif po.dictText?split(',')[3]??>
hasChildField="${po.dictText?split(',')[3]}"
</#if>
</#if>
pidValue="${po.dictField}"
<#if po.readonly=='Y'>disabled</#if>>
</j-tree-select>
<#else> <#else>
<a-input v-decorator="['${po.fieldName}'${autoWriteRules(po)}]" placeholder="请输入${po.filedComment}" <#if po.readonly=='Y'>disabled</#if>></a-input> <a-input v-decorator="['${po.fieldName}'${autoWriteRules(po)}]" placeholder="请输入${po.filedComment}" <#if po.readonly=='Y'>disabled</#if>></a-input>
</#if> </#if>

View File

@ -32,7 +32,7 @@
<#list sub.colums as po> <#list sub.colums as po>
<#if po.isShow =='Y' && po.fieldName != 'id'> <#if po.isShow =='Y' && po.fieldName != 'id'>
<#assign form_field_dictCode=""> <#assign form_field_dictCode="">
<#if po.dictTable?default("")?trim?length gt 1> <#if po.dictTable?default("")?trim?length gt 1 && po.dictText?default("")?trim?length gt 1 && po.dictField?default("")?trim?length gt 1>
<#assign form_field_dictCode="${po.dictTable},${po.dictText},${po.dictField}"> <#assign form_field_dictCode="${po.dictTable},${po.dictText},${po.dictField}">
<#elseif po.dictField?default("")?trim?length gt 1> <#elseif po.dictField?default("")?trim?length gt 1>
<#assign form_field_dictCode="${po.dictField}"> <#assign form_field_dictCode="${po.dictField}">

View File

@ -182,6 +182,8 @@
ref="table" ref="table"
size="middle" size="middle"
rowKey="id" rowKey="id"
class="j-table-force-nowrap"
:scroll="{x:true}"
:columns="columns" :columns="columns"
:dataSource="dataSource" :dataSource="dataSource"
:pagination="ipagination" :pagination="ipagination"
@ -219,7 +221,7 @@
<a @click="handleAddChild(record)">添加下级</a> <a @click="handleAddChild(record)">添加下级</a>
</a-menu-item> </a-menu-item>
<a-menu-item> <a-menu-item>
<a-popconfirm title="确定删除吗?" @confirm="() => handleDeleteNode(record.id)"> <a-popconfirm title="确定删除吗?" @confirm="() => handleDeleteNode(record.id)" placement="topLeft">
<a>删除</a> <a>删除</a>
</a-popconfirm> </a-popconfirm>
</a-menu-item> </a-menu-item>

View File

@ -23,11 +23,17 @@
<#assign form_tree_select = false> <#assign form_tree_select = false>
<#assign form_switch=false> <#assign form_switch=false>
<#assign pidFieldName = ""> <#assign pidFieldName = "">
<#assign form_select_search = false>
<#assign form_cat_tree = false>
<#assign form_cat_back = "">
<#assign form_pca = false>
<#assign form_editor = false>
<#assign form_md = false>
<#assign form_sel_tree = false>
<#list columns as po> <#list columns as po>
<#if po.isShow =='Y'> <#if po.isShow =='Y'>
<#assign form_field_dictCode=""> <#assign form_field_dictCode="">
<#if po.dictTable?default("")?trim?length gt 1> <#if po.dictTable?default("")?trim?length gt 1 && po.dictText?default("")?trim?length gt 1 && po.dictField?default("")?trim?length gt 1>
<#assign form_field_dictCode="${po.dictTable},${po.dictText},${po.dictField}"> <#assign form_field_dictCode="${po.dictTable},${po.dictText},${po.dictField}">
<#elseif po.dictField?default("")?trim?length gt 1> <#elseif po.dictField?default("")?trim?length gt 1>
<#assign form_field_dictCode="${po.dictField}"> <#assign form_field_dictCode="${po.dictField}">
@ -87,10 +93,51 @@
<#elseif po.classType=='image'> <#elseif po.classType=='image'>
<#assign form_image = true> <#assign form_image = true>
<j-image-upload isMultiple <#if po.uploadnum??>:number=${po.uploadnum}</#if> v-decorator="['${po.fieldName}'${autoWriteRules(po)}]" <#if po.readonly=='Y'>disabled</#if>></j-image-upload> <j-image-upload isMultiple <#if po.uploadnum??>:number=${po.uploadnum}</#if> v-decorator="['${po.fieldName}'${autoWriteRules(po)}]" <#if po.readonly=='Y'>disabled</#if>></j-image-upload>
<#elseif po.classType=='sel_search'>
<#assign form_select_search = true>
<j-search-select-tag v-decorator="['${po.fieldName}'${autoWriteRules(po)}]" dict="${form_field_dictCode}" <#if po.readonly=='Y'>disabled</#if> />
<#elseif po.classType=='cat_tree'>
<#assign form_cat_tree = true>
<j-category-select v-decorator="['${po.fieldName}'${autoWriteRules(po)}]" pcode="${po.dictField?default("")}" placeholder="请选择${po.filedComment}" <#if po.dictText?default("")?trim?length gt 1>back="${po.dictText}" @change="handleCategoryChange"</#if> <#if po.readonly=='Y'>disabled</#if>/>
<#if po.dictText?default("")?trim?length gt 1>
<#assign form_cat_back = "${po.dictText}">
</#if>
<#elseif po.classType =='pca'>
<#assign form_pca=true>
<j-area-linkage type="cascader" v-decorator="['${po.fieldName}'${autoWriteRules(po)}]" placeholder="请输入省市区" <#if po.readonly=='Y'>disabled</#if> />
<#elseif po.classType=='umeditor'>
<#assign form_editor = true>
<j-editor v-decorator="['${po.fieldName}',{trigger:'input'}]" <#if po.readonly=='Y'>disabled</#if>/>
<#elseif po.classType =='markdown'>
<#assign form_md=true>
<j-markdown-editor v-decorator="['${po.fieldName}']" id="${po.fieldName}"></j-markdown-editor>
<#elseif po.classType == 'sel_tree'>
<#assign form_tree_select = true>
<j-tree-select
ref="treeSelect"
placeholder="请选择${po.filedComment}"
v-decorator="['${po.fieldName}'${autoWriteRules(po)}]"
<#if po.dictText??>
<#if po.dictText?split(',')[2]?? && po.dictText?split(',')[0]??>
dict="${po.dictTable},${po.dictText?split(',')[2]},${po.dictText?split(',')[0]}"
<#elseif po.dictText?split(',')[1]??>
pidField="${po.dictText?split(',')[1]}"
<#elseif po.dictText?split(',')[3]??>
hasChildField="${po.dictText?split(',')[3]}"
</#if>
</#if>
pidValue="${po.dictField}"
<#if po.readonly=='Y'>disabled</#if>>
</j-tree-select>
<#else> <#else>
<a-input v-decorator="['${po.fieldName}'${autoWriteRules(po)}]" placeholder="请输入${po.filedComment}" <#if po.readonly=='Y'>disabled</#if>></a-input> <a-input v-decorator="['${po.fieldName}'${autoWriteRules(po)}]" placeholder="请输入${po.filedComment}" <#if po.readonly=='Y'>disabled</#if>></a-input>
</#if> </#if>
</a-form-item> </a-form-item>
<#if form_cat_tree && form_cat_back?length gt 1>
<a-form-item v-show="false">
<a-input v-decorator="['${form_cat_back}']"></a-input>
</a-form-item>
</#if>
</#if> </#if>
</#list> </#list>
@ -131,7 +178,21 @@
<#if form_switch==true > <#if form_switch==true >
import JSwitch from '@/components/jeecg/JSwitch' import JSwitch from '@/components/jeecg/JSwitch'
</#if> </#if>
<#if form_select_search>
import JSearchSelectTag from '@/components/dict/JSearchSelectTag'
</#if>
<#if form_cat_tree>
import JCategorySelect from '@/components/jeecg/JCategorySelect'
</#if>
<#if form_pca>
import JAreaLinkage from '@comp/jeecg/JAreaLinkage'
</#if>
<#if form_editor>
import JEditor from '@/components/jeecg/JEditor'
</#if>
<#if form_md>
import JMarkdownEditor from '@/components/jeecg/JMarkdownEditor/index'
</#if>
export default { export default {
name: "${entityName}Modal", name: "${entityName}Modal",
components: { components: {
@ -160,8 +221,23 @@
JSwitch, JSwitch,
</#if> </#if>
<#if form_tree_select> <#if form_tree_select>
JTreeSelect JTreeSelect,
</#if> </#if>
<#if form_select_search>
JSearchSelectTag,
</#if>
<#if form_cat_tree>
JCategorySelect,
</#if>
<#if form_pca>
JAreaLinkage,
</#if>
<#if form_editor>
JEditor,
</#if>
<#if form_md>
JMarkdownEditor,
</#if>
}, },
data () { data () {
return { return {

View File

@ -31,7 +31,7 @@
<#list columns as po> <#list columns as po>
<#if po.isShow =='Y' && po.fieldName != 'id'> <#if po.isShow =='Y' && po.fieldName != 'id'>
<#assign form_field_dictCode=""> <#assign form_field_dictCode="">
<#if po.dictTable?default("")?trim?length gt 1> <#if po.dictTable?default("")?trim?length gt 1 && po.dictText?default("")?trim?length gt 1 && po.dictField?default("")?trim?length gt 1>
<#assign form_field_dictCode="${po.dictTable},${po.dictText},${po.dictField}"> <#assign form_field_dictCode="${po.dictTable},${po.dictText},${po.dictField}">
<#elseif po.dictField?default("")?trim?length gt 1> <#elseif po.dictField?default("")?trim?length gt 1>
<#assign form_field_dictCode="${po.dictField}"> <#assign form_field_dictCode="${po.dictField}">
@ -101,6 +101,24 @@
<j-editor v-decorator="['${po.fieldName}',{trigger:'input'}]" <#if po.readonly=='Y'>disabled</#if>/> <j-editor v-decorator="['${po.fieldName}',{trigger:'input'}]" <#if po.readonly=='Y'>disabled</#if>/>
<#elseif po.fieldDbType=='Blob'> <#elseif po.fieldDbType=='Blob'>
<a-input v-decorator="['${po.fieldName}String'${autoWriteRules(po)}]" placeholder="请输入${po.filedComment}" <#if po.readonly=='Y'>disabled</#if>></a-input> <a-input v-decorator="['${po.fieldName}String'${autoWriteRules(po)}]" placeholder="请输入${po.filedComment}" <#if po.readonly=='Y'>disabled</#if>></a-input>
<#elseif po.classType == 'sel_tree'>
<#assign form_tree_select = true>
<j-tree-select
ref="treeSelect"
placeholder="请选择${po.filedComment}"
v-decorator="['${po.fieldName}'${autoWriteRules(po)}]"
<#if po.dictText??>
<#if po.dictText?split(',')[2]?? && po.dictText?split(',')[0]??>
dict="${po.dictTable},${po.dictText?split(',')[2]},${po.dictText?split(',')[0]}"
<#elseif po.dictText?split(',')[1]??>
pidField="${po.dictText?split(',')[1]}"
<#elseif po.dictText?split(',')[3]??>
hasChildField="${po.dictText?split(',')[3]}"
</#if>
</#if>
pidValue="${po.dictField}"
<#if po.readonly=='Y'>disabled</#if>>
</j-tree-select>
<#else> <#else>
<a-input v-decorator="['${po.fieldName}'${autoWriteRules(po)}]" placeholder="请输入${po.filedComment}" <#if po.readonly=='Y'>disabled</#if>></a-input> <a-input v-decorator="['${po.fieldName}'${autoWriteRules(po)}]" placeholder="请输入${po.filedComment}" <#if po.readonly=='Y'>disabled</#if>></a-input>
</#if> </#if>

View File

@ -33,7 +33,7 @@
<#list sub.originalColumns as po> <#list sub.originalColumns as po>
<#if po.isShow =='Y' && po.fieldName != 'id'> <#if po.isShow =='Y' && po.fieldName != 'id'>
<#assign form_field_dictCode=""> <#assign form_field_dictCode="">
<#if po.dictTable?default("")?trim?length gt 1> <#if po.dictTable?default("")?trim?length gt 1 && po.dictText?default("")?trim?length gt 1 && po.dictField?default("")?trim?length gt 1>
<#assign form_field_dictCode="${po.dictTable},${po.dictText},${po.dictField}"> <#assign form_field_dictCode="${po.dictTable},${po.dictText},${po.dictField}">
<#elseif po.dictField?default("")?trim?length gt 1> <#elseif po.dictField?default("")?trim?length gt 1>
<#assign form_field_dictCode="${po.dictField}"> <#assign form_field_dictCode="${po.dictField}">

View File

@ -32,7 +32,7 @@
<#list columns as po> <#list columns as po>
<#if po.isShow =='Y' && po.fieldName != 'id'> <#if po.isShow =='Y' && po.fieldName != 'id'>
<#assign form_field_dictCode=""> <#assign form_field_dictCode="">
<#if po.dictTable?default("")?trim?length gt 1> <#if po.dictTable?default("")?trim?length gt 1 && po.dictText?default("")?trim?length gt 1 && po.dictField?default("")?trim?length gt 1>
<#assign form_field_dictCode="${po.dictTable},${po.dictText},${po.dictField}"> <#assign form_field_dictCode="${po.dictTable},${po.dictText},${po.dictField}">
<#elseif po.dictField?default("")?trim?length gt 1> <#elseif po.dictField?default("")?trim?length gt 1>
<#assign form_field_dictCode="${po.dictField}"> <#assign form_field_dictCode="${po.dictField}">
@ -107,6 +107,24 @@
<j-editor v-decorator="['${po.fieldName}',{trigger:'input'}]" <#if po.readonly=='Y'>disabled</#if>/> <j-editor v-decorator="['${po.fieldName}',{trigger:'input'}]" <#if po.readonly=='Y'>disabled</#if>/>
<#elseif po.fieldDbType=='Blob'> <#elseif po.fieldDbType=='Blob'>
<a-input v-decorator="['${po.fieldName}String'${autoWriteRules(po)}]" placeholder="请输入${po.filedComment}" <#if po.readonly=='Y'>disabled</#if>></a-input> <a-input v-decorator="['${po.fieldName}String'${autoWriteRules(po)}]" placeholder="请输入${po.filedComment}" <#if po.readonly=='Y'>disabled</#if>></a-input>
<#elseif po.classType == 'sel_tree'>
<#assign form_tree_select = true>
<j-tree-select
ref="treeSelect"
placeholder="请选择${po.filedComment}"
v-decorator="['${po.fieldName}'${autoWriteRules(po)}]"
<#if po.dictText??>
<#if po.dictText?split(',')[2]?? && po.dictText?split(',')[0]??>
dict="${po.dictTable},${po.dictText?split(',')[2]},${po.dictText?split(',')[0]}"
<#elseif po.dictText?split(',')[1]??>
pidField="${po.dictText?split(',')[1]}"
<#elseif po.dictText?split(',')[3]??>
hasChildField="${po.dictText?split(',')[3]}"
</#if>
</#if>
pidValue="${po.dictField}"
<#if po.readonly=='Y'>disabled</#if>>
</j-tree-select>
<#else> <#else>
<a-input v-decorator="['${po.fieldName}'${autoWriteRules(po)}]" placeholder="请输入${po.filedComment}" <#if po.readonly=='Y'>disabled</#if>></a-input> <a-input v-decorator="['${po.fieldName}'${autoWriteRules(po)}]" placeholder="请输入${po.filedComment}" <#if po.readonly=='Y'>disabled</#if>></a-input>
</#if> </#if>

View File

@ -19,7 +19,7 @@
<#list sub.colums as po> <#list sub.colums as po>
<#if po.isShow =='Y'> <#if po.isShow =='Y'>
<#assign form_field_dictCode=""> <#assign form_field_dictCode="">
<#if po.dictTable?default("")?trim?length gt 1> <#if po.dictTable?default("")?trim?length gt 1 && po.dictText?default("")?trim?length gt 1 && po.dictField?default("")?trim?length gt 1>
<#assign form_field_dictCode="${po.dictTable},${po.dictText},${po.dictField}"> <#assign form_field_dictCode="${po.dictTable},${po.dictText},${po.dictField}">
<#elseif po.dictField?default("")?trim?length gt 1> <#elseif po.dictField?default("")?trim?length gt 1>
<#assign form_field_dictCode="${po.dictField}"> <#assign form_field_dictCode="${po.dictField}">

View File

@ -31,7 +31,7 @@
<#list columns as po> <#list columns as po>
<#if po.isShow =='Y' && po.fieldName != 'id'> <#if po.isShow =='Y' && po.fieldName != 'id'>
<#assign form_field_dictCode=""> <#assign form_field_dictCode="">
<#if po.dictTable?default("")?trim?length gt 1> <#if po.dictTable?default("")?trim?length gt 1 && po.dictText?default("")?trim?length gt 1 && po.dictField?default("")?trim?length gt 1>
<#assign form_field_dictCode="${po.dictTable},${po.dictText},${po.dictField}"> <#assign form_field_dictCode="${po.dictTable},${po.dictText},${po.dictField}">
<#elseif po.dictField?default("")?trim?length gt 1> <#elseif po.dictField?default("")?trim?length gt 1>
<#assign form_field_dictCode="${po.dictField}"> <#assign form_field_dictCode="${po.dictField}">
@ -106,6 +106,24 @@
<j-editor v-decorator="['${po.fieldName}',{trigger:'input'}]" <#if po.readonly=='Y'>disabled</#if>/> <j-editor v-decorator="['${po.fieldName}',{trigger:'input'}]" <#if po.readonly=='Y'>disabled</#if>/>
<#elseif po.fieldDbType=='Blob'> <#elseif po.fieldDbType=='Blob'>
<a-input v-decorator="['${po.fieldName}String'${autoWriteRules(po)}]" placeholder="请输入${po.filedComment}" <#if po.readonly=='Y'>disabled</#if>></a-input> <a-input v-decorator="['${po.fieldName}String'${autoWriteRules(po)}]" placeholder="请输入${po.filedComment}" <#if po.readonly=='Y'>disabled</#if>></a-input>
<#elseif po.classType == 'sel_tree'>
<#assign form_tree_select = true>
<j-tree-select
ref="treeSelect"
placeholder="请选择${po.filedComment}"
v-decorator="['${po.fieldName}'${autoWriteRules(po)}]"
<#if po.dictText??>
<#if po.dictText?split(',')[2]?? && po.dictText?split(',')[0]??>
dict="${po.dictTable},${po.dictText?split(',')[2]},${po.dictText?split(',')[0]}"
<#elseif po.dictText?split(',')[1]??>
pidField="${po.dictText?split(',')[1]}"
<#elseif po.dictText?split(',')[3]??>
hasChildField="${po.dictText?split(',')[3]}"
</#if>
</#if>
pidValue="${po.dictField}"
<#if po.readonly=='Y'>disabled</#if>>
</j-tree-select>
<#else> <#else>
<a-input v-decorator="['${po.fieldName}'${autoWriteRules(po)}]" placeholder="请输入${po.filedComment}" <#if po.readonly=='Y'>disabled</#if>></a-input> <a-input v-decorator="['${po.fieldName}'${autoWriteRules(po)}]" placeholder="请输入${po.filedComment}" <#if po.readonly=='Y'>disabled</#if>></a-input>
</#if> </#if>

View File

@ -32,7 +32,7 @@
<#list sub.colums as po> <#list sub.colums as po>
<#if po.isShow =='Y' && po.fieldName != 'id'> <#if po.isShow =='Y' && po.fieldName != 'id'>
<#assign form_field_dictCode=""> <#assign form_field_dictCode="">
<#if po.dictTable?default("")?trim?length gt 1> <#if po.dictTable?default("")?trim?length gt 1 && po.dictText?default("")?trim?length gt 1 && po.dictField?default("")?trim?length gt 1>
<#assign form_field_dictCode="${po.dictTable},${po.dictText},${po.dictField}"> <#assign form_field_dictCode="${po.dictTable},${po.dictText},${po.dictField}">
<#elseif po.dictField?default("")?trim?length gt 1> <#elseif po.dictField?default("")?trim?length gt 1>
<#assign form_field_dictCode="${po.dictField}"> <#assign form_field_dictCode="${po.dictField}">

View File

@ -34,7 +34,7 @@
<#list columns as po> <#list columns as po>
<#if po.isShow =='Y' && po.fieldName != 'id'> <#if po.isShow =='Y' && po.fieldName != 'id'>
<#assign form_field_dictCode=""> <#assign form_field_dictCode="">
<#if po.dictTable?default("")?trim?length gt 1> <#if po.dictTable?default("")?trim?length gt 1 && po.dictText?default("")?trim?length gt 1 && po.dictField?default("")?trim?length gt 1>
<#assign form_field_dictCode="${po.dictTable},${po.dictText},${po.dictField}"> <#assign form_field_dictCode="${po.dictTable},${po.dictText},${po.dictField}">
<#elseif po.dictField?default("")?trim?length gt 1> <#elseif po.dictField?default("")?trim?length gt 1>
<#assign form_field_dictCode="${po.dictField}"> <#assign form_field_dictCode="${po.dictField}">
@ -109,6 +109,24 @@
<j-editor v-decorator="['${po.fieldName}',{trigger:'input'}]" <#if po.readonly=='Y'>disabled</#if>/> <j-editor v-decorator="['${po.fieldName}',{trigger:'input'}]" <#if po.readonly=='Y'>disabled</#if>/>
<#elseif po.fieldDbType=='Blob'> <#elseif po.fieldDbType=='Blob'>
<a-input v-decorator="['${po.fieldName}String'${autoWriteRules(po)}]" placeholder="请输入${po.filedComment}" <#if po.readonly=='Y'>disabled</#if>></a-input> <a-input v-decorator="['${po.fieldName}String'${autoWriteRules(po)}]" placeholder="请输入${po.filedComment}" <#if po.readonly=='Y'>disabled</#if>></a-input>
<#elseif po.classType == 'sel_tree'>
<#assign form_tree_select = true>
<j-tree-select
ref="treeSelect"
placeholder="请选择${po.filedComment}"
v-decorator="['${po.fieldName}'${autoWriteRules(po)}]"
<#if po.dictText??>
<#if po.dictText?split(',')[2]?? && po.dictText?split(',')[0]??>
dict="${po.dictTable},${po.dictText?split(',')[2]},${po.dictText?split(',')[0]}"
<#elseif po.dictText?split(',')[1]??>
pidField="${po.dictText?split(',')[1]}"
<#elseif po.dictText?split(',')[3]??>
hasChildField="${po.dictText?split(',')[3]}"
</#if>
</#if>
pidValue="${po.dictField}"
<#if po.readonly=='Y'>disabled</#if>>
</j-tree-select>
<#else> <#else>
<a-input v-decorator="['${po.fieldName}'${autoWriteRules(po)}]" placeholder="请输入${po.filedComment}" <#if po.readonly=='Y'>disabled</#if>></a-input> <a-input v-decorator="['${po.fieldName}'${autoWriteRules(po)}]" placeholder="请输入${po.filedComment}" <#if po.readonly=='Y'>disabled</#if>></a-input>
</#if> </#if>

View File

@ -17,18 +17,22 @@ import org.springframework.core.env.Environment;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.UnknownHostException; import java.net.UnknownHostException;
/**
* 微服务启动类采用此类启动项目为微服务模式
* 注意 需要先在naocs里面创建配置文件参考文档 http://doc.jeecg.com/2043906
*/
@Slf4j @Slf4j
@SpringBootApplication @SpringBootApplication
@EnableFeignClients(basePackages = {"org.jeecg"}) @EnableFeignClients(basePackages = {"org.jeecg"})
public class JeecgSystemApplication extends SpringBootServletInitializer { public class JeecgSystemCloudApplication extends SpringBootServletInitializer {
@Override @Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(JeecgSystemApplication.class); return application.sources(JeecgSystemCloudApplication.class);
} }
public static void main(String[] args) throws UnknownHostException { public static void main(String[] args) throws UnknownHostException {
ConfigurableApplicationContext application = SpringApplication.run(JeecgSystemApplication.class, args); ConfigurableApplicationContext application = SpringApplication.run(JeecgSystemCloudApplication.class, args);
Environment env = application.getEnvironment(); Environment env = application.getEnvironment();
String ip = InetAddress.getLocalHost().getHostAddress(); String ip = InetAddress.getLocalHost().getHostAddress();
String port = env.getProperty("server.port"); String port = env.getProperty("server.port");

View File

@ -36,7 +36,7 @@
<commons.version>2.6</commons.version> <commons.version>2.6</commons.version>
<aliyun-java-sdk-dysmsapi.version>1.0.0</aliyun-java-sdk-dysmsapi.version> <aliyun-java-sdk-dysmsapi.version>1.0.0</aliyun-java-sdk-dysmsapi.version>
<aliyun.oss.version>3.6.0</aliyun.oss.version> <aliyun.oss.version>3.6.0</aliyun.oss.version>
<shiro.version>1.7.0</shiro.version> <shiro.version>1.6.0</shiro.version>
<java-jwt.version>3.11.0</java-jwt.version> <java-jwt.version>3.11.0</java-jwt.version>
<shiro-redis.version>3.1.0</shiro-redis.version> <shiro-redis.version>3.1.0</shiro-redis.version>
<codegenerate.version>1.2.5</codegenerate.version> <codegenerate.version>1.2.5</codegenerate.version>
@ -45,6 +45,7 @@
<justauth-spring-boot-starter.version>1.3.2</justauth-spring-boot-starter.version> <justauth-spring-boot-starter.version>1.3.2</justauth-spring-boot-starter.version>
<dom4j.version>1.6.1</dom4j.version> <dom4j.version>1.6.1</dom4j.version>
<qiniu-java-sdk.version>7.2.23</qiniu-java-sdk.version> <qiniu-java-sdk.version>7.2.23</qiniu-java-sdk.version>
<pinyin4j.version>2.5.1</pinyin4j.version>
</properties> </properties>
<modules> <modules>