Commit 40852235 authored by dqjdda's avatar dqjdda
Browse files

Merge branch '2.4dev' into 2.3opt

parents 4681ca6e 776cee4b
<template> <template>
<el-dialog :append-to-body="true" :close-on-click-modal="false" :before-close="cancel" :visible.sync="dialog" :title="isAdd ? '新增' : '编辑'" width="500px"> <el-dialog :append-to-body="true" :close-on-click-modal="false" :before-close="cancel" :visible.sync="dialog" :title="isAdd ? '新增' : '编辑'" width="500px">
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px"> <el-form ref="form" :model="form" <#if isNotNullColumns??>:rules="rules"</#if> size="small" label-width="80px">
<#if columns??> <#if columns??>
<#list columns as column> <#list columns as column>
<#if column.changeColumnName != '${pkChangeColName}'> <#if column.formShow>
<el-form-item label="<#if column.columnComment != ''>${column.columnComment}<#else>${column.changeColumnName}</#if>" <#if column.columnKey = 'UNI'>prop="${column.changeColumnName}"</#if>> <el-form-item label="<#if column.remark != ''>${column.remark}<#else>${column.changeColumnName}</#if>" <#if column.istNotNull>prop="${column.changeColumnName}"</#if>>
<#if column.columnType != 'Timestamp'> <#if column.formType = 'Input'>
<el-input v-model="form.${column.changeColumnName}" style="width: 370px;"/> <el-input v-model="form.${column.changeColumnName}" style="width: 370px;"/>
<#else > <#elseif column.formType = 'Textarea'>
<el-input :rows="3" v-model="form.${column.changeColumnName}" type="textarea" style="width: 370px;"/>
<#elseif column.formType = 'Radio'>
<#if column.dictName??>
<el-radio v-for="item in dicts.${column.dictName}" :key="item.id" v-model="form.${column.changeColumnName}" :label="item.value">{{ item.label }}</el-radio>
<#else>
未设置字典,请手动设置 Radio
</#if>
<#elseif column.formType = 'Select'>
<#if column.dictName??>
<el-select v-model="form.${column.changeColumnName}" filterable placeholder="请选择">
<el-option
v-for="item in dicts.${column.dictName}"
:key="item.id"
:label="item.label"
:value="item.value"/>
</el-select>
<#else>
未设置字典,请手动设置 Select
</#if>
<#else>
<el-date-picker v-model="form.${column.changeColumnName}" type="datetime" style="width: 370px;"/> <el-date-picker v-model="form.${column.changeColumnName}" type="datetime" style="width: 370px;"/>
</#if> </#if>
</el-form-item> </el-form-item>
...@@ -29,7 +49,12 @@ export default { ...@@ -29,7 +49,12 @@ export default {
isAdd: { isAdd: {
type: Boolean, type: Boolean,
required: true required: true
}<#if hasDict>,
dicts: {
type: Object,
required: true
} }
</#if>
}, },
data() { data() {
return { return {
...@@ -42,13 +67,15 @@ export default { ...@@ -42,13 +67,15 @@ export default {
</#if> </#if>
}, },
rules: { rules: {
<#list columns as column> <#if isNotNullColumns??>
<#if column.columnKey = 'UNI'> <#list isNotNullColumns as column>
<#if column.istNotNull>
${column.changeColumnName}: [ ${column.changeColumnName}: [
{ required: true, message: 'please enter', trigger: 'blur' } { required: true, message: 'please enter', trigger: 'blur' }
]<#if (column_has_next)>,</#if> ]<#if column_has_next>,</#if>
</#if> </#if>
</#list> </#list>
</#if>
} }
} }
}, },
...@@ -57,10 +84,23 @@ export default { ...@@ -57,10 +84,23 @@ export default {
this.resetForm() this.resetForm()
}, },
doSubmit() { doSubmit() {
this.loading = true <#if isNotNullColumns??>
if (this.isAdd) { this.$refs['form'].validate((valid) => {
this.doAdd() if (valid) {
} else this.doEdit() this.loading = true
if (this.isAdd) {
this.doAdd()
} else this.doEdit()
} else {
return false
}
})
<#else>
this.loading = true
if (this.isAdd) {
this.doAdd()
} else this.doEdit()
</#if>
}, },
doAdd() { doAdd() {
add(this.form).then(res => { add(this.form).then(res => {
......
...@@ -9,6 +9,22 @@ ...@@ -9,6 +9,22 @@
<el-select v-model="query.type" clearable placeholder="类型" class="filter-item" style="width: 130px"> <el-select v-model="query.type" clearable placeholder="类型" class="filter-item" style="width: 130px">
<el-option v-for="item in queryTypeOptions" :key="item.key" :label="item.display_name" :value="item.key"/> <el-option v-for="item in queryTypeOptions" :key="item.key" :label="item.display_name" :value="item.key"/>
</el-select> </el-select>
<#if dateRanges??>
<#list dateRanges as column>
<#if column.queryType = 'DateRange'>
<el-date-picker
v-model="query.${column.changeColumnName}"
:default-time="['00:00:00','23:59:59']"
type="daterange"
range-separator=":"
class="el-range-editor--small filter-item"
style="height: 30.5px;width: 225px;"
value-format="yyyy-MM-dd HH:mm:ss"
start-placeholder="${column.changeColumnName}Start"
end-placeholder="${column.changeColumnName}End"/>
</#if>
</#list>
</#if>
<el-button class="filter-item" size="mini" type="success" icon="el-icon-search" @click="toQuery">搜索</el-button> <el-button class="filter-item" size="mini" type="success" icon="el-icon-search" @click="toQuery">搜索</el-button>
</#if> </#if>
<!-- 新增 --> <!-- 新增 -->
...@@ -31,18 +47,36 @@ ...@@ -31,18 +47,36 @@
icon="el-icon-download" icon="el-icon-download"
@click="download">导出</el-button> @click="download">导出</el-button>
</div> </div>
<!-- 多选删除 -->
<div v-permission="['admin','${changeClassName}:del']" style="display: inline-block;">
<el-button
:loading="delAllLoading"
:disabled="data.length === 0 || $refs.table.selection.length === 0"
class="filter-item"
size="mini"
type="danger"
icon="el-icon-delete"
@click="open">删除</el-button>
</div>
</div> </div>
<!--表单组件--> <!--表单组件-->
<eForm ref="form" :is-add="isAdd"/> <eForm ref="form" :is-add="isAdd" <#if hasDict>:dicts="dict"</#if>/>
<!--表格渲染--> <!--表格渲染-->
<el-table v-loading="loading" :data="data" size="small" style="width: 100%;"> <el-table v-loading="loading" ref="table" :data="data" size="small" style="width: 100%;">
<el-table-column type="selection" width="55"/>
<#if columns??> <#if columns??>
<#list columns as column> <#list columns as column>
<#if column.columnShow = 'true'> <#if column.columnShow>
<#if column.columnType != 'Timestamp'> <#if column.dictName??>
<el-table-column prop="${column.changeColumnName}" label="<#if column.columnComment != ''>${column.columnComment}<#else>${column.changeColumnName}</#if>"/> <el-table-column prop="${column.changeColumnName}" label="<#if column.remark != ''>${column.remark}<#else>${column.changeColumnName}</#if>">
<template slot-scope="scope">
{{ dict.label.${column.dictName}[scope.row.${column.changeColumnName}] }}
</template>
</el-table-column>
<#elseif column.columnType != 'Timestamp'>
<el-table-column prop="${column.changeColumnName}" label="<#if column.remark != ''>${column.remark}<#else>${column.changeColumnName}</#if>"/>
<#else> <#else>
<el-table-column prop="${column.changeColumnName}" label="<#if column.columnComment != ''>${column.columnComment}<#else>${column.changeColumnName}</#if>"> <el-table-column prop="${column.changeColumnName}" label="<#if column.remark != ''>${column.remark}<#else>${column.changeColumnName}</#if>">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ parseTime(scope.row.${column.changeColumnName}) }}</span> <span>{{ parseTime(scope.row.${column.changeColumnName}) }}</span>
</template> </template>
...@@ -83,7 +117,7 @@ ...@@ -83,7 +117,7 @@
<script> <script>
import checkPermission from '@/utils/permission' import checkPermission from '@/utils/permission'
import initData from '@/mixins/initData' import initData from '@/mixins/initData'
import { del, download${className} } from '@/api/${changeClassName}' import { del, download${className}, delAll } from '@/api/${changeClassName}'
<#if hasTimestamp> <#if hasTimestamp>
import { parseTime, downloadFile } from '@/utils/index' import { parseTime, downloadFile } from '@/utils/index'
</#if> </#if>
...@@ -91,14 +125,19 @@ import eForm from './form' ...@@ -91,14 +125,19 @@ import eForm from './form'
export default { export default {
components: { eForm }, components: { eForm },
mixins: [initData], mixins: [initData],
<#if hasDict>
dicts: [<#if hasDict??><#list dicts as dict>'${dict}'<#if dict_has_next>, </#if></#list></#if>],
</#if>
data() { data() {
return { return {
delLoading: false, delLoading: false, delAllLoading: false,
<#if hasQuery> <#if hasQuery>
queryTypeOptions: [ queryTypeOptions: [
<#if queryColumns??> <#if queryColumns??>
<#list queryColumns as column> <#list queryColumns as column>
{ key: '${column.changeColumnName}', display_name: '<#if column.columnComment != ''>${column.columnComment}<#else>${column.changeColumnName}</#if>' }<#if column_has_next>,</#if> <#if column.queryType != 'DateRange'>
{ key: '${column.changeColumnName}', display_name: '<#if column.remark != ''>${column.remark}<#else>${column.changeColumnName}</#if>' }<#if column_has_next>,</#if>
</#if>
</#list> </#list>
</#if> </#if>
] ]
...@@ -124,6 +163,16 @@ export default { ...@@ -124,6 +163,16 @@ export default {
const type = query.type const type = query.type
const value = query.value const value = query.value
if (type && value) { this.params[type] = value } if (type && value) { this.params[type] = value }
<#if dateRanges??>
<#list dateRanges as column>
<#if column.queryType = 'DateRange'>
if (query.${column.changeColumnName}) {
this.params['${column.changeColumnName}Start'] = query.${column.changeColumnName}[0]
this.params['${column.changeColumnName}End'] = query.${column.changeColumnName}[1]
}
</#if>
</#list>
</#if>
</#if> </#if>
return true return true
}, },
...@@ -171,6 +220,36 @@ export default { ...@@ -171,6 +220,36 @@ export default {
}).catch(() => { }).catch(() => {
this.downloadLoading = false this.downloadLoading = false
}) })
},
doDelete() {
this.delAllLoading = true
const data = this.$refs.table.selection
const ids = []
for (let i = 0; i < data.length; i++) {
ids.push(data[i].id)
}
delAll(ids).then(res => {
this.delAllLoading = false
this.init()
this.dleChangePage(ids.length)
this.$notify({
title: '删除成功',
type: 'success',
duration: 2500
})
}).catch(err => {
this.delAllLoading = false
console.log(err.response.data.message)
})
},
open() {
this.$confirm('你确定删除选中的数据吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.doDelete()
})
} }
} }
} }
......
...@@ -5,6 +5,9 @@ import org.junit.runner.RunWith; ...@@ -5,6 +5,9 @@ import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
import java.util.ArrayList;
import java.util.List;
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
@SpringBootTest @SpringBootTest
public class EladminSystemApplicationTests { public class EladminSystemApplicationTests {
...@@ -13,5 +16,8 @@ public class EladminSystemApplicationTests { ...@@ -13,5 +16,8 @@ public class EladminSystemApplicationTests {
public void contextLoads() { public void contextLoads() {
} }
public static void main(String[] args) {
}
} }
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
<mail.version>1.4.7</mail.version> <mail.version>1.4.7</mail.version>
<qiniu.version>[7.2.0, 7.2.99]</qiniu.version> <qiniu.version>[7.2.0, 7.2.99]</qiniu.version>
<alipay.version>3.1.0</alipay.version> <alipay.version>3.1.0</alipay.version>
<configuration.version>1.9</configuration.version>
</properties> </properties>
<dependencies> <dependencies>
...@@ -34,19 +33,6 @@ ...@@ -34,19 +33,6 @@
<version>${mail.version}</version> <version>${mail.version}</version>
</dependency> </dependency>
<!--模板引擎-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-configuration/commons-configuration -->
<dependency>
<groupId>commons-configuration</groupId>
<artifactId>commons-configuration</artifactId>
<version>${configuration.version}</version>
</dependency>
<!--七牛云存储--> <!--七牛云存储-->
<dependency> <dependency>
<groupId>com.qiniu</groupId> <groupId>com.qiniu</groupId>
......
package me.zhengjie.modules.tools.domain; package me.zhengjie.domain;
import lombok.Data; import lombok.Data;
import javax.persistence.*; import javax.persistence.*;
......
package me.zhengjie.modules.tools.domain; package me.zhengjie.domain;
import lombok.Data; import lombok.Data;
......
package me.zhengjie.modules.tools.domain; package me.zhengjie.domain;
import lombok.*; import lombok.*;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
......
package me.zhengjie.modules.tools.domain; package me.zhengjie.domain;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.CreationTimestamp; import org.hibernate.annotations.CreationTimestamp;
......
package me.zhengjie.modules.tools.domain; package me.zhengjie.domain;
import lombok.Data; import lombok.Data;
import javax.persistence.*; import javax.persistence.*;
......
package me.zhengjie.modules.tools.domain; package me.zhengjie.domain;
import lombok.Data; import lombok.Data;
import org.hibernate.annotations.UpdateTimestamp; import org.hibernate.annotations.UpdateTimestamp;
......
package me.zhengjie.modules.tools.domain; package me.zhengjie.domain;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
......
package me.zhengjie.modules.tools.domain.vo; package me.zhengjie.domain.vo;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
......
package me.zhengjie.modules.tools.domain.vo; package me.zhengjie.domain.vo;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
......
package me.zhengjie.modules.generator.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 列的数据信息
* @author Zheng Jie
* @date 2019-01-02
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ColumnInfo {
// 数据库字段名称
private Object columnName;
// 允许空值
private Object isNullable;
// 数据库字段类型
private Object columnType;
// 数据库字段注释
private Object columnComment;
// 数据库字段键类型
private Object columnKey;
// 额外的参数
private Object extra;
// 查询 1:模糊 2:精确
private String columnQuery;
// 是否在列表显示
private String columnShow;
}
package me.zhengjie.modules.tools.repository; package me.zhengjie.repository;
import me.zhengjie.modules.tools.domain.AlipayConfig; import me.zhengjie.domain.AlipayConfig;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
/** /**
......
package me.zhengjie.modules.tools.repository; package me.zhengjie.repository;
import me.zhengjie.modules.tools.domain.EmailConfig; import me.zhengjie.domain.EmailConfig;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
/** /**
......
package me.zhengjie.modules.tools.repository; package me.zhengjie.repository;
import me.zhengjie.modules.tools.domain.LocalStorage; import me.zhengjie.domain.LocalStorage;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
......
package me.zhengjie.modules.tools.repository; package me.zhengjie.repository;
import me.zhengjie.modules.tools.domain.Picture; import me.zhengjie.domain.Picture;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
......
package me.zhengjie.modules.tools.repository; package me.zhengjie.repository;
import me.zhengjie.modules.tools.domain.QiniuConfig; import me.zhengjie.domain.QiniuConfig;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
......
package me.zhengjie.modules.tools.repository; package me.zhengjie.repository;
import me.zhengjie.modules.tools.domain.QiniuContent; import me.zhengjie.domain.QiniuContent;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment