parent
b67a369631
commit
f20efdfae6
@ -1,34 +0,0 @@
|
||||
package ${basePackage}.frame.base;
|
||||
|
||||
public class FileUploadResponse extends BaseResponse {
|
||||
|
||||
private Long id;
|
||||
|
||||
private String url;
|
||||
|
||||
private String downloadUrl;
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getUrl() {
|
||||
return url;
|
||||
}
|
||||
|
||||
public void setUrl(String url) {
|
||||
this.url = url;
|
||||
}
|
||||
|
||||
public String getDownloadUrl() {
|
||||
return downloadUrl;
|
||||
}
|
||||
|
||||
public void setDownloadUrl(String downloadUrl) {
|
||||
this.downloadUrl = downloadUrl;
|
||||
}
|
||||
}
|
@ -0,0 +1,116 @@
|
||||
package ${basePackage}.module.system.ent;
|
||||
|
||||
import ${basePackage}.frame.excel.annotation.ColumnDescription;
|
||||
import ${basePackage}.frame.excel.annotation.ColumnName;
|
||||
import ${basePackage}.frame.excel.annotation.SheetName;
|
||||
import ${basePackage}.frame.base.BaseEntity;
|
||||
|
||||
/**
|
||||
* FILE - 文件
|
||||
*
|
||||
* @author author
|
||||
* @version 0.0.1
|
||||
* @since 2019-11-29
|
||||
*/
|
||||
@SheetName("文件")
|
||||
public class File extends BaseEntity {
|
||||
|
||||
/**
|
||||
* NAME - 文件名称
|
||||
*/
|
||||
@ColumnName("文件名称")
|
||||
@ColumnDescription("文件名称")
|
||||
private String name;
|
||||
/**
|
||||
* FILE_TYPE - 文件类型
|
||||
*/
|
||||
@ColumnName("文件类型")
|
||||
@ColumnDescription("文件类型")
|
||||
private String fileType;
|
||||
/**
|
||||
* ATTRIBUTE1 - 扩展属性1
|
||||
*/
|
||||
@ColumnName("扩展属性1")
|
||||
@ColumnDescription("扩展属性1")
|
||||
private String attribute1;
|
||||
/**
|
||||
* ATTRIBUTE2 - 扩展属性2
|
||||
*/
|
||||
@ColumnName("扩展属性2")
|
||||
@ColumnDescription("扩展属性2")
|
||||
private String attribute2;
|
||||
/**
|
||||
* LOCATION - 存放地址
|
||||
*/
|
||||
@ColumnName("存放地址")
|
||||
@ColumnDescription("存放地址")
|
||||
private String location;
|
||||
/**
|
||||
* URL - 访问地址
|
||||
*/
|
||||
@ColumnName("访问地址")
|
||||
@ColumnDescription("访问地址")
|
||||
private String url;
|
||||
/**
|
||||
* URL_DOWNLOAD - 下载地址
|
||||
*/
|
||||
@ColumnName("下载地址")
|
||||
@ColumnDescription("下载地址")
|
||||
private String urlDownload;
|
||||
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getFileType() {
|
||||
return this.fileType;
|
||||
}
|
||||
|
||||
public void setFileType(String fileType) {
|
||||
this.fileType = fileType;
|
||||
}
|
||||
|
||||
public String getAttribute1() {
|
||||
return this.attribute1;
|
||||
}
|
||||
|
||||
public void setAttribute1(String attribute1) {
|
||||
this.attribute1 = attribute1;
|
||||
}
|
||||
|
||||
public String getAttribute2() {
|
||||
return this.attribute2;
|
||||
}
|
||||
|
||||
public void setAttribute2(String attribute2) {
|
||||
this.attribute2 = attribute2;
|
||||
}
|
||||
|
||||
public String getLocation() {
|
||||
return this.location;
|
||||
}
|
||||
|
||||
public void setLocation(String location) {
|
||||
this.location = location;
|
||||
}
|
||||
|
||||
public String getUrl() {
|
||||
return this.url;
|
||||
}
|
||||
|
||||
public void setUrl(String url) {
|
||||
this.url = url;
|
||||
}
|
||||
|
||||
public String getUrlDownload() {
|
||||
return this.urlDownload;
|
||||
}
|
||||
|
||||
public void setUrlDownload(String urlDownload) {
|
||||
this.urlDownload = urlDownload;
|
||||
}
|
||||
}
|
@ -0,0 +1,51 @@
|
||||
package ${basePackage}.module.system.mgr;
|
||||
|
||||
import ${basePackage}.module.system.req.*;
|
||||
import ${basePackage}.module.system.rsp.*;
|
||||
import ${basePackage}.frame.base.Token;
|
||||
|
||||
/**
|
||||
* 文件
|
||||
*
|
||||
* @author wangbing
|
||||
* @version 0.0.1
|
||||
* @since 2017-01-01
|
||||
*/
|
||||
public interface FileManager {
|
||||
|
||||
/**
|
||||
* 插入
|
||||
*
|
||||
* @param request 请求对象
|
||||
* @param token 令牌
|
||||
* @return
|
||||
*/
|
||||
FileCreateResponse create(FileCreateRequest request, Token token);
|
||||
|
||||
/**
|
||||
* 逻辑删除
|
||||
*
|
||||
* @param request 请求对象
|
||||
* @param token 令牌
|
||||
* @return
|
||||
*/
|
||||
FileDeleteResponse delete(FileDeleteRequest request, Token token);
|
||||
|
||||
/**
|
||||
* 查询
|
||||
*
|
||||
* @param request 请求对象
|
||||
* @param token 令牌
|
||||
* @return
|
||||
*/
|
||||
FileFindResponse find(FileFindRequest request, Token token);
|
||||
|
||||
/**
|
||||
* 获得对象
|
||||
*
|
||||
* @param request 请求对象
|
||||
* @param token 令牌
|
||||
* @return
|
||||
*/
|
||||
FileGetResponse get(FileGetRequest request, Token token);
|
||||
}
|
@ -0,0 +1,142 @@
|
||||
package ${basePackage}.module.system.mgr;
|
||||
|
||||
import ${basePackage}.frame.utils.IDgenerator;
|
||||
import ${basePackage}.frame.utils.Message;
|
||||
import ${basePackage}.frame.base.ErrorType;
|
||||
import ${basePackage}.frame.base.Token;
|
||||
import ${basePackage}.frame.utils.MapperUtil;
|
||||
import ${basePackage}.frame.utils.ValidationUtil;
|
||||
import ${basePackage}.module.system.ent.File;
|
||||
import ${basePackage}.module.system.mpr.FileMapper;
|
||||
import ${basePackage}.module.system.req.*;
|
||||
import ${basePackage}.module.system.rsp.*;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import com.github.pagehelper.util.StringUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* FILE - 文件
|
||||
*
|
||||
* @author wangbing
|
||||
* @version 0.0.1
|
||||
* @since 2017-01-01
|
||||
*/
|
||||
@Transactional
|
||||
@Service
|
||||
public class FileManagerImpl implements FileManager {
|
||||
|
||||
@Autowired
|
||||
private FileMapper fileMapper;
|
||||
|
||||
/**
|
||||
* 插入
|
||||
*
|
||||
* @param request 请求对象
|
||||
* @param token 令牌
|
||||
* @return 响应
|
||||
*/
|
||||
public FileCreateResponse create(FileCreateRequest request, Token token) {
|
||||
FileCreateResponse response = new FileCreateResponse();
|
||||
|
||||
ValidationUtil.validate(request, response);
|
||||
if (response.hasError()) {
|
||||
return response;
|
||||
}
|
||||
|
||||
long id = IDgenerator.nextId();
|
||||
File entity = MapperUtil.map(request, File.class);
|
||||
entity.setId(id);
|
||||
|
||||
long result = fileMapper.insert(entity, token);
|
||||
if (1L != result) {
|
||||
response.addError(ErrorType.BUSINESS_ERROR, Message.CREATE_FAILURE);
|
||||
return response;
|
||||
}
|
||||
response.setId(id);
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
/**
|
||||
* 逻辑删除
|
||||
*
|
||||
* @param request 请求对象
|
||||
* @param token 令牌
|
||||
* @return 响应
|
||||
*/
|
||||
public FileDeleteResponse delete(FileDeleteRequest request, Token token) {
|
||||
FileDeleteResponse response = new FileDeleteResponse();
|
||||
|
||||
ValidationUtil.validate(request, response);
|
||||
if (response.hasError()) {
|
||||
return response;
|
||||
}
|
||||
|
||||
long result = fileMapper.delete(request, token);
|
||||
if (1L != result) {
|
||||
response.addError(ErrorType.BUSINESS_ERROR, Message.DELETE_FAILURE);
|
||||
return response;
|
||||
}
|
||||
response.setResult(result);
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询
|
||||
*
|
||||
* @param request 请求对象
|
||||
* @param token 令牌
|
||||
* @return 响应
|
||||
*/
|
||||
@Transactional(readOnly = true)
|
||||
public FileFindResponse find(FileFindRequest request, Token token) {
|
||||
FileFindResponse response = new FileFindResponse();
|
||||
|
||||
ValidationUtil.validate(request, response);
|
||||
if (response.hasError()) {
|
||||
return response;
|
||||
}
|
||||
|
||||
PageHelper.startPage(request.getPageNumber(), request.getPageSize());
|
||||
if (StringUtil.isNotEmpty(request.getSortKey())) {
|
||||
PageHelper.orderBy(request.getSortKey() + " " + request.getSortType());
|
||||
}
|
||||
PageInfo<File> pageInfo = new PageInfo<>(fileMapper.find(request, token));
|
||||
|
||||
response.setResult(pageInfo.getList());
|
||||
response.setTotalCount(pageInfo.getTotal());
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获得对象
|
||||
*
|
||||
* @param request 请求对象
|
||||
* @param token 令牌
|
||||
* @return 响应
|
||||
*/
|
||||
@Transactional(readOnly = true)
|
||||
public FileGetResponse get(FileGetRequest request, Token token) {
|
||||
FileGetResponse response = new FileGetResponse();
|
||||
|
||||
ValidationUtil.validate(request, response);
|
||||
if (response.hasError()) {
|
||||
return response;
|
||||
}
|
||||
|
||||
File po = fileMapper.get(request, token);
|
||||
|
||||
if (po != null) {
|
||||
response.setFile(po);
|
||||
} else {
|
||||
response.addError(ErrorType.BUSINESS_ERROR, Message.GET_FAILURE);
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
package ${basePackage}.module.system.mpr;
|
||||
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import ${basePackage}.module.system.ent.File;
|
||||
import ${basePackage}.module.system.req.*;
|
||||
import ${basePackage}.frame.base.Token;
|
||||
|
||||
/**
|
||||
* FILE - 文件
|
||||
*
|
||||
* @author author
|
||||
* @date 2019-11-29
|
||||
*/
|
||||
@Mapper
|
||||
public interface FileMapper {
|
||||
|
||||
/**
|
||||
* 插入
|
||||
*
|
||||
* @param request 请求对象
|
||||
* @param token 令牌
|
||||
* @return 返回数量
|
||||
*/
|
||||
long insert(@Param("request") File request, @Param("token") Token token);
|
||||
|
||||
/**
|
||||
* 批量插入
|
||||
*
|
||||
* @param request 请求对象
|
||||
* @param token 令牌
|
||||
* @return 返回数量
|
||||
*/
|
||||
long insertBatch(@Param("list") List<File> request, @Param("token") Token token);
|
||||
|
||||
/**
|
||||
* 逻辑删除
|
||||
*
|
||||
* @param request 请求对象
|
||||
* @param token 令牌
|
||||
* @return 返回数量
|
||||
*/
|
||||
long delete(@Param("request") FileDeleteRequest request, @Param("token") Token token);
|
||||
|
||||
/**
|
||||
* 查询
|
||||
*
|
||||
* @param request 请求对象
|
||||
* @param token 令牌
|
||||
* @return 返回对象
|
||||
*/
|
||||
List<File> find(@Param("request") FileFindRequest request, @Param("token") Token token);
|
||||
|
||||
/**
|
||||
* 获得对象
|
||||
*
|
||||
* @param request 请求对象
|
||||
* @param token 令牌
|
||||
* @return 返回对象
|
||||
*/
|
||||
File get(@Param("request") FileGetRequest request, @Param("token") Token token);
|
||||
}
|
@ -0,0 +1,161 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="${basePackage}.module.system.mpr.FileMapper">
|
||||
|
||||
<sql id="table">`SYSFILE`</sql>
|
||||
|
||||
<sql id="entityColumnList">
|
||||
`ID`,`NAME`,`FILE_TYPE`,`ATTRIBUTE1`,`ATTRIBUTE2`,`LOCATION`,`URL`,`URL_DOWNLOAD`,`ROW_VERSION`,`IS_DELETED`,`CREATE_BY`,`CREATE_TIME`,`LAST_UPDATE_BY`,`LAST_UPDATE_TIME`
|
||||
</sql>
|
||||
|
||||
<resultMap id="file" type="${basePackage}.module.system.ent.File">
|
||||
<result column="ID" jdbcType="BIGINT" property="id"/>
|
||||
<result column="NAME" jdbcType="VARCHAR" property="name"/>
|
||||
<result column="FILE_TYPE" jdbcType="VARCHAR" property="fileType"/>
|
||||
<result column="ATTRIBUTE1" jdbcType="VARCHAR" property="attribute1"/>
|
||||
<result column="ATTRIBUTE2" jdbcType="VARCHAR" property="attribute2"/>
|
||||
<result column="LOCATION" jdbcType="VARCHAR" property="location"/>
|
||||
<result column="URL" jdbcType="VARCHAR" property="url"/>
|
||||
<result column="URL_DOWNLOAD" jdbcType="VARCHAR" property="urlDownload"/>
|
||||
<result column="ROW_VERSION" jdbcType="BIGINT" property="rowVersion"/>
|
||||
<result column="IS_DELETED" jdbcType="BIT" property="isDeleted"/>
|
||||
<result column="CREATE_BY" jdbcType="BIGINT" property="createBy"/>
|
||||
<result column="CREATE_TIME" jdbcType="TIMESTAMP" property="createTime"/>
|
||||
<result column="LAST_UPDATE_BY" jdbcType="BIGINT" property="lastUpdateBy"/>
|
||||
<result column="LAST_UPDATE_TIME" jdbcType="TIMESTAMP" property="lastUpdateTime"/>
|
||||
</resultMap>
|
||||
|
||||
<select id="find" resultMap="file">
|
||||
SELECT
|
||||
<include refid="entityColumnList"/>
|
||||
FROM
|
||||
<include refid="table"/>
|
||||
WHERE
|
||||
`IS_DELETED` = 0
|
||||
<if test="request.name != null and request.name != ''">
|
||||
AND `NAME` = ${r"#"}{request.name}
|
||||
</if>
|
||||
<if test="request.fileType != null and request.fileType != ''">
|
||||
AND `FILE_TYPE` = ${r"#"}{request.fileType}
|
||||
</if>
|
||||
<if test="request.attribute1 != null and request.attribute1 != ''">
|
||||
AND `ATTRIBUTE1` = ${r"#"}{request.attribute1}
|
||||
</if>
|
||||
<if test="request.attribute2 != null and request.attribute2 != ''">
|
||||
AND `ATTRIBUTE2` = ${r"#"}{request.attribute2}
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<select id="search" resultMap="file">
|
||||
SELECT
|
||||
<include refid="entityColumnList"/>
|
||||
FROM
|
||||
<include refid="table"/>
|
||||
WHERE
|
||||
`IS_DELETED` = 0
|
||||
<if test="request.keyword != null and request.keyword != ''">
|
||||
1 = 2
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<insert id="insert">
|
||||
INSERT INTO
|
||||
<include refid="table"/>
|
||||
(
|
||||
<include refid="entityColumnList"/>
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
${r"#"}{request.id},
|
||||
${r"#"}{request.name,jdbcType=VARCHAR},
|
||||
${r"#"}{request.fileType,jdbcType=VARCHAR},
|
||||
${r"#"}{request.attribute1,jdbcType=VARCHAR},
|
||||
${r"#"}{request.attribute2,jdbcType=VARCHAR},
|
||||
${r"#"}{request.location,jdbcType=VARCHAR},
|
||||
${r"#"}{request.url,jdbcType=VARCHAR},
|
||||
${r"#"}{request.urlDownload,jdbcType=VARCHAR},
|
||||
0,
|
||||
0,
|
||||
${r"#"}{token.userId,jdbcType=NUMERIC},
|
||||
sysdate(),
|
||||
NULL,
|
||||
NULL
|
||||
)
|
||||
</insert>
|
||||
|
||||
<insert id="insertBatch">
|
||||
INSERT INTO
|
||||
<include refid="table"/>
|
||||
(
|
||||
<include refid="entityColumnList"/>
|
||||
)
|
||||
VALUES
|
||||
<foreach collection="list" item= "item" index ="index" separator=",">
|
||||
(
|
||||
${r"#"}{item.id},
|
||||
${r"#"}{item.name,jdbcType=VARCHAR},
|
||||
${r"#"}{item.fileType,jdbcType=VARCHAR},
|
||||
${r"#"}{item.attribute1,jdbcType=VARCHAR},
|
||||
${r"#"}{item.attribute2,jdbcType=VARCHAR},
|
||||
${r"#"}{item.location,jdbcType=VARCHAR},
|
||||
${r"#"}{item.url,jdbcType=VARCHAR},
|
||||
${r"#"}{item.urlDownload,jdbcType=VARCHAR},
|
||||
0,
|
||||
0,
|
||||
${r"#"}{token.userId,jdbcType=NUMERIC},
|
||||
sysdate(),
|
||||
NULL,
|
||||
NULL
|
||||
)
|
||||
</foreach >
|
||||
</insert>
|
||||
|
||||
<update id="delete">
|
||||
UPDATE
|
||||
<include refid="table"/>
|
||||
SET `IS_DELETED` = 1
|
||||
WHERE `IS_DELETED` = 0
|
||||
AND `ID` = ${r"#"}{request.id}
|
||||
</update>
|
||||
|
||||
<update id="update">
|
||||
UPDATE
|
||||
<include refid="table"/>
|
||||
SET
|
||||
`NAME` = ${r"#"}{request.name,jdbcType=VARCHAR},
|
||||
`FILE_TYPE` = ${r"#"}{request.fileType,jdbcType=VARCHAR},
|
||||
`ATTRIBUTE1` = ${r"#"}{request.attribute1,jdbcType=VARCHAR},
|
||||
`ATTRIBUTE2` = ${r"#"}{request.attribute2,jdbcType=VARCHAR},
|
||||
`LOCATION` = ${r"#"}{request.location,jdbcType=VARCHAR},
|
||||
`URL` = ${r"#"}{request.url,jdbcType=VARCHAR},
|
||||
`URL_DOWNLOAD` = ${r"#"}{request.urlDownload,jdbcType=VARCHAR},
|
||||
`ROW_VERSION` = `ROW_VERSION` + 1,
|
||||
`LAST_UPDATE_BY` = ${r"#"}{token.userId},
|
||||
`LAST_UPDATE_TIME` = sysdate()
|
||||
WHERE
|
||||
`IS_DELETED` = 0
|
||||
AND `ID` = ${r"#"}{request.id}
|
||||
AND `ROW_VERSION` = ${r"#"}{request.rowVersion}
|
||||
</update>
|
||||
|
||||
<select id="getAll" resultMap="file">
|
||||
SELECT
|
||||
<include refid="entityColumnList"/>
|
||||
FROM
|
||||
<include refid="table"/>
|
||||
WHERE
|
||||
`IS_DELETED` = 0
|
||||
</select>
|
||||
|
||||
<select id="get" resultMap="file">
|
||||
SELECT
|
||||
<include refid="entityColumnList"/>
|
||||
FROM
|
||||
<include refid="table"/>
|
||||
WHERE
|
||||
`IS_DELETED` = 0
|
||||
AND `ID` = ${r"#"}{request.id}
|
||||
</select>
|
||||
</mapper>
|
@ -0,0 +1,116 @@
|
||||
package ${basePackage}.module.system.req;
|
||||
|
||||
import ${basePackage}.frame.validation.Dict;
|
||||
import ${basePackage}.frame.base.BaseRequest;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import org.hibernate.validator.constraints.Length;
|
||||
|
||||
/**
|
||||
* FileCreateRequest - 文件新增
|
||||
*
|
||||
* @author wangbing
|
||||
* @version 0.0.1
|
||||
* @since 2017-01-01
|
||||
*/
|
||||
public class FileCreateRequest extends BaseRequest {
|
||||
|
||||
/**
|
||||
* 文件名称
|
||||
*/
|
||||
@NotEmpty(message = "文件名称不能为空")
|
||||
@Length(min = 0, max = 255, message = "文件名称长度不合法(0-255)")
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 文件类型
|
||||
*/
|
||||
@Dict(name = "fileType")
|
||||
private String fileType;
|
||||
|
||||
/**
|
||||
* 扩展属性1
|
||||
*/
|
||||
@Length(min = 0, max = 50, message = "扩展属性1长度不合法(0-50)")
|
||||
private String attribute1;
|
||||
|
||||
/**
|
||||
* 扩展属性2
|
||||
*/
|
||||
@Length(min = 0, max = 50, message = "扩展属性2长度不合法(0-50)")
|
||||
private String attribute2;
|
||||
|
||||
/**
|
||||
* 存放地址
|
||||
*/
|
||||
@Length(min = 0, max = 500, message = "存放地址长度不合法(0-500)")
|
||||
private String location;
|
||||
|
||||
/**
|
||||
* 访问地址
|
||||
*/
|
||||
@Length(min = 0, max = 500, message = "访问地址长度不合法(0-500)")
|
||||
private String url;
|
||||
|
||||
/**
|
||||
* 下载地址
|
||||
*/
|
||||
@Length(min = 0, max = 500, message = "下载地址长度不合法(0-500)")
|
||||
private String urlDownload;
|
||||
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getFileType() {
|
||||
return this.fileType;
|
||||
}
|
||||
|
||||
public void setFileType(String fileType) {
|
||||
this.fileType = fileType;
|
||||
}
|
||||
|
||||
public String getAttribute1() {
|
||||
return this.attribute1;
|
||||
}
|
||||
|
||||
public void setAttribute1(String attribute1) {
|
||||
this.attribute1 = attribute1;
|
||||
}
|
||||
|
||||
public String getAttribute2() {
|
||||
return this.attribute2;
|
||||
}
|
||||
|
||||
public void setAttribute2(String attribute2) {
|
||||
this.attribute2 = attribute2;
|
||||
}
|
||||
|
||||
public String getLocation() {
|
||||
return this.location;
|
||||
}
|
||||
|
||||
public void setLocation(String location) {
|
||||
this.location = location;
|
||||
}
|
||||
|
||||
public String getUrl() {
|
||||
return this.url;
|
||||
}
|
||||
|
||||
public void setUrl(String url) {
|
||||
this.url = url;
|
||||
}
|
||||
|
||||
public String getUrlDownload() {
|
||||
return this.urlDownload;
|
||||
}
|
||||
|
||||
public void setUrlDownload(String urlDownload) {
|
||||
this.urlDownload = urlDownload;
|
||||
}
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
package ${basePackage}.module.system.req;
|
||||
|
||||
import ${basePackage}.frame.base.BaseUpdateRequest;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* FileDeleteRequest - 文件删除
|
||||
*
|
||||
* @author wangbing
|
||||
* @version 0.0.1
|
||||
* @since 2017-01-01
|
||||
*/
|
||||
public class FileDeleteRequest extends BaseUpdateRequest {
|
||||
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
@NotNull(message = "主键不能为空")
|
||||
private long id;
|
||||
|
||||
public long getId() {
|
||||
return this.id;
|
||||
}
|
||||
|
||||
public void setId(long id) {
|
||||
this.id = id;
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package ${basePackage}.module.system.req;
|
||||
|
||||
import ${basePackage}.frame.base.BaseRequest;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* FileDownloadRequest - 文件下载
|
||||
*
|
||||
* @author wangbing
|
||||
* @version 0.0.1
|
||||
* @since 2017-01-01
|
||||
*/
|
||||
public class FileDownloadRequest extends BaseRequest {
|
||||
|
||||
/**
|
||||
* 文件ID
|
||||
*/
|
||||
@NotNull(message = "文件ID不能为空")
|
||||
private Long fileId;
|
||||
|
||||
public Long getFileId() {
|
||||
return fileId;
|
||||
}
|
||||
|
||||
public void setFileId(Long fileId) {
|
||||
this.fileId = fileId;
|
||||
}
|
||||
}
|
@ -0,0 +1,67 @@
|
||||
package ${basePackage}.module.system.req;
|
||||
|
||||
import ${basePackage}.frame.base.BaseFindRequest;
|
||||
import ${basePackage}.frame.validation.Dict;
|
||||
|
||||
/**
|
||||
* FileRequest - 文件查询
|
||||
*
|
||||
* @author wangbing
|
||||
* @version 0.0.1
|
||||
* @since 2017-01-01
|
||||
*/
|
||||
public class FileFindRequest extends BaseFindRequest {
|
||||
|
||||
/**
|
||||
* 文件名称
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 文件类型
|
||||
*/
|
||||
@Dict(name = "fileType")
|
||||
private String fileType;
|
||||
|
||||
/**
|
||||
* 扩展属性1
|
||||
*/
|
||||
private String attribute1;
|
||||
|
||||
/**
|
||||
* 扩展属性2
|
||||
*/
|
||||
private String attribute2;
|
||||
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getFileType() {
|
||||
return this.fileType;
|
||||
}
|
||||
|
||||
public void setFileType(String fileType) {
|
||||
this.fileType = fileType;
|
||||
}
|
||||
|
||||
public String getAttribute1() {
|
||||
return this.attribute1;
|
||||
}
|
||||
|
||||
public void setAttribute1(String attribute1) {
|
||||
this.attribute1 = attribute1;
|
||||
}
|
||||
|
||||
public String getAttribute2() {
|
||||
return this.attribute2;
|
||||
}
|
||||
|
||||
public void setAttribute2(String attribute2) {
|
||||
this.attribute2 = attribute2;
|
||||
}
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package ${basePackage}.module.system.req;
|
||||
|
||||
import ${basePackage}.frame.base.BaseRequest;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* FileDownloadRequest - 文件下载
|
||||
*
|
||||
* @author wangbing
|
||||
* @version 0.0.1
|
||||
* @since 2017-01-01
|
||||
*/
|
||||
public class FileGetRequest extends BaseRequest {
|
||||
|
||||
/**
|
||||
* 文件ID
|
||||
*/
|
||||
@NotNull(message = "文件ID不能为空")
|
||||
private Long id;
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
package ${basePackage}.module.system.req;
|
||||
|
||||
import ${basePackage}.frame.base.BaseRequest;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import javax.validation.constraints.Pattern;
|
||||
|
||||
/**
|
||||
* FileUploadRequest - 文件上传
|
||||
*
|
||||
* @author wangbing
|
||||
* @version 0.0.1
|
||||
* @since 2017-01-01
|
||||
*/
|
||||
public class FileUploadRequest extends BaseRequest {
|
||||
|
||||
/**
|
||||
* 文件名称(包含.)
|
||||
*/
|
||||
@NotEmpty(message = "文件名不能为空")
|
||||
@Pattern(regexp = ".*\\.*$", message = "文件后缀错误")
|
||||
private String fileName;
|
||||
|
||||
/**
|
||||
* 文件体(base64)
|
||||
*/
|
||||
private String dataBase64;
|
||||
/**
|
||||
* 文件体(字节数组)
|
||||
*/
|
||||
private byte dataBytes;
|
||||
|
||||
public String getFileName() {
|
||||
return fileName;
|
||||
}
|
||||
|
||||
public void setFileName(String fileName) {
|
||||
this.fileName = fileName;
|
||||
}
|
||||
|
||||
public String getDataBase64() {
|
||||
return dataBase64;
|
||||
}
|
||||
|
||||
public void setDataBase64(String dataBase64) {
|
||||
this.dataBase64 = dataBase64;
|
||||
}
|
||||
|
||||
public byte getDataBytes() {
|
||||
return dataBytes;
|
||||
}
|
||||
|
||||
public void setDataBytes(byte dataBytes) {
|
||||
this.dataBytes = dataBytes;
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package ${basePackage}.module.system.rsp;
|
||||
|
||||
import ${basePackage}.frame.base.BaseResponse;
|
||||
|
||||
/**
|
||||
* FileCreateResponse - 文件
|
||||
*
|
||||
* @author wangbing
|
||||
* @version 0.0.1
|
||||
* @since 2017-01-01
|
||||
*/
|
||||
public class FileCreateResponse extends BaseResponse {
|
||||
|
||||
/**
|
||||
* ID
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package ${basePackage}.module.system.rsp;
|
||||
|
||||
import ${basePackage}.frame.base.BaseResponse;
|
||||
|
||||
/**
|
||||
* FileDeleteResponse - 文件
|
||||
*
|
||||
* @author wangbing
|
||||
* @version 0.0.1
|
||||
* @since 2017-01-01
|
||||
*/
|
||||
public class FileDeleteResponse extends BaseResponse {
|
||||
|
||||
/**
|
||||
* 删除数目
|
||||
*/
|
||||
private Long result;
|
||||
|
||||
public Long getResult() {
|
||||
return this.result;
|
||||
}
|
||||
|
||||
public void setResult(Long result) {
|
||||
this.result = result;
|
||||
}
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
package ${basePackage}.module.system.rsp;
|
||||
|
||||
import ${basePackage}.module.system.ent.File;
|
||||
import ${basePackage}.frame.base.BaseResponse;
|
||||
|
||||
/**
|
||||
* FileDownloadResponse - 文件下载
|
||||
*
|
||||
* @author wangbing
|
||||
* @version 0.0.1
|
||||
* @since 2017-01-01
|
||||
*/
|
||||
public class FileDownloadResponse extends BaseResponse {
|
||||
|
||||
/**
|
||||
* 文件
|
||||
*/
|
||||
private File file;
|
||||
/**
|
||||
* 文件base64字符串
|
||||
*/
|
||||
private String base64;
|
||||
|
||||
public File getFile() {
|
||||
return this.file;
|
||||
}
|
||||
|
||||
public void setFile(File file) {
|
||||
this.file = file;
|
||||
}
|
||||
|
||||
public String getBase64() {
|
||||
return base64;
|
||||
}
|
||||
|
||||
public void setBase64(String base64) {
|
||||
this.base64 = base64;
|
||||
}
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package ${basePackage}.module.system.rsp;
|
||||
|
||||
import ${basePackage}.frame.base.BaseFindResponse;
|
||||
import ${basePackage}.module.system.ent.File;
|
||||
|
||||
/**
|
||||
* FileFindResponse - 文件
|
||||
*
|
||||
* @author wangbing
|
||||
* @version 0.0.1
|
||||
* @since 2017-01-01
|
||||
*/
|
||||
public class FileFindResponse extends BaseFindResponse<File> {
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package ${basePackage}.module.system.rsp;
|
||||
|
||||
import ${basePackage}.module.system.ent.File;
|
||||
import ${basePackage}.frame.base.BaseResponse;
|
||||
|
||||
/**
|
||||
* FileGetResponse - 文件
|
||||
*
|
||||
* @author wangbing
|
||||
* @version 0.0.1
|
||||
* @since 2017-01-01
|
||||
*/
|
||||
public class FileGetResponse extends BaseResponse {
|
||||
|
||||
/**
|
||||
* 文件
|
||||
*/
|
||||
private File file;
|
||||
|
||||
public File getFile() {
|
||||
return this.file;
|
||||
}
|
||||
|
||||
public void setFile(File file) {
|
||||
this.file = file;
|
||||
}
|
||||
}
|
@ -0,0 +1,50 @@
|
||||
package ${basePackage}.module.system.rsp;
|
||||
|
||||
import ${basePackage}.frame.base.BaseResponse;
|
||||
|
||||
/**
|
||||
* FileUploadResponse - 文件上传
|
||||
*
|
||||
* @author wangbing
|
||||
* @version 0.0.1
|
||||
* @since 2017-01-01
|
||||
*/
|
||||
public class FileUploadResponse extends BaseResponse {
|
||||
|
||||
/**
|
||||
* 文件ID
|
||||
*/
|
||||
private Long id;
|
||||
/**
|
||||
* 文件访问URL
|
||||
*/
|
||||
private String url;
|
||||
/**
|
||||
* 文件ID
|
||||
*/
|
||||
private String urlDownload;
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getUrl() {
|
||||
return url;
|
||||
}
|
||||
|
||||
public void setUrl(String url) {
|
||||
this.url = url;
|
||||
}
|
||||
|
||||
public String getUrlDownload() {
|
||||
return urlDownload;
|
||||
}
|
||||
|
||||
public void setUrlDownload(String urlDownload) {
|
||||
this.urlDownload = urlDownload;
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
/*
|
||||
Target : MYSQL
|
||||
Author
|
||||
Date: 2019-11-29
|
||||
*/
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for FILE - 文件
|
||||
-- ----------------------------
|
||||
|
||||
CREATE TABLE `SYSFILE` (
|
||||
`ID` BIGINT(20) NOT NULL COMMENT '主键',
|
||||
`NAME` VARCHAR(250) NOT NULL COMMENT '文件名称',
|
||||
`FILE_TYPE` VARCHAR(10) COMMENT '文件类型',
|
||||
`ATTRIBUTE1` VARCHAR(50) COMMENT '扩展属性1',
|
||||
`ATTRIBUTE2` VARCHAR(50) COMMENT '扩展属性2',
|
||||
`LOCATION` VARCHAR(500) COMMENT '存放地址',
|
||||
`URL` VARCHAR(500) COMMENT '访问地址',
|
||||
`URL_DOWNLOAD` VARCHAR(500) COMMENT '下载地址',
|
||||
`ROW_VERSION` BIGINT(20) NOT NULL DEFAULT 0 COMMENT '行版本',
|
||||
`IS_DELETED` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否已删除',
|
||||
`CREATE_BY` BIGINT(20) NOT NULL COMMENT '创建用户',
|
||||
`CREATE_TIME` DATETIME NOT NULL COMMENT '创建时间',
|
||||
`LAST_UPDATE_BY` BIGINT(20) DEFAULT NULL COMMENT '最后更新用户',
|
||||
`LAST_UPDATE_TIME` DATETIME DEFAULT NULL COMMENT '最后更新时间',
|
||||
PRIMARY KEY (`ID`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='文件';
|
@ -0,0 +1,249 @@
|
||||
<div id="app" v-cloak>
|
||||
<el-card class="box-card search">
|
||||
<el-form :inline="true" :model="vm" ref="vm" label-position="left" label-width="90px">
|
||||
<el-form-item label="文件名称" prop="name">
|
||||
<el-input v-model="vm.name" clearable size="small" placeholder="请输入文件名称"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="文件类型" prop="fileType">
|
||||
<el-input-dict v-model="vm.fileType" clearable size="small" placeholder="请输入文件类型" dict-name="fileType" ></el-input-dict>
|
||||
</el-form-item>
|
||||
<el-form-item label="扩展属性1" prop="attribute1">
|
||||
<el-input v-model="vm.attribute1" clearable size="small" placeholder="请输入扩展属性1"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="扩展属性2" prop="attribute2">
|
||||
<el-input v-model="vm.attribute2" clearable size="small" placeholder="请输入扩展属性2"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" size="small" icon="el-icon-search" @click="onSearch">搜索</el-button>
|
||||
<el-button type="warning" size="small" icon="el-icon-refresh-left" @click="onReset('vm')">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
|
||||
<el-card class="box-card">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-button type="success" size="small" icon="el-icon-plus" @click="onCreate">新增</el-button>
|
||||
|
||||
<el-button type="warning" size="small" icon="el-icon-download" @click="onExport">导出</el-button>
|
||||
|
||||
<el-dialog class="form" :title="form.title" :visible.sync="form.dialog">
|
||||
<el-form :model="form" :inline="true" :rules="formRules" ref="form" label-position="left" label-width="90px">
|
||||
<el-form-item label="文件名称" prop="name">
|
||||
<el-input v-model="form.name" clearable size="small" placeholder="请输入文件名称"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="文件类型" prop="fileType">
|
||||
<el-input-dict v-model="form.fileType" clearable size="small" placeholder="请输入文件类型" dict-name="fileType" ></el-input-dict>
|
||||
</el-form-item>
|
||||
<el-form-item label="扩展属性1" prop="attribute1">
|
||||
<el-input v-model="form.attribute1" clearable size="small" placeholder="请输入扩展属性1"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="扩展属性2" prop="attribute2">
|
||||
<el-input v-model="form.attribute2" clearable size="small" placeholder="请输入扩展属性2"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="存放地址" prop="location">
|
||||
<el-input v-model="form.location" clearable size="small" placeholder="请输入存放地址"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="访问地址" prop="url">
|
||||
<el-input v-model="form.url" clearable size="small" placeholder="请输入访问地址"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="下载地址" prop="urlDownload">
|
||||
<el-input v-model="form.urlDownload" clearable size="small" placeholder="请输入下载地址"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button size="small" @click="form.dialog = false">取 消</el-button>
|
||||
<el-button size="small" type="primary" @click="onSave">保存</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-button-group style="float: right;">
|
||||
<el-tooltip effect="dark" content="Excel模板下载" placement="bottom">
|
||||
<el-button size="small" icon="el-icon-date" @click="onTemplate"></el-button>
|
||||
</el-tooltip>
|
||||
|
||||
<el-tooltip effect="dark" content="Excel导入" placement="bottom">
|
||||
<el-button size="small" icon="el-icon-upload2" @click="onImport"></el-button>
|
||||
</el-tooltip>
|
||||
|
||||
<el-tooltip effect="dark" content="批量删除" placement="bottom">
|
||||
<el-button size="small" icon="el-icon-delete" @click="onBitchDelete"></el-button>
|
||||
</el-tooltip>
|
||||
|
||||
<el-tooltip effect="dark" content="刷新" placement="bottom">
|
||||
<el-button size="small" icon="el-icon-refresh" @click="onFind"></el-button>
|
||||
</el-tooltip>
|
||||
</el-button-group>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-table
|
||||
style="margin-top: 10px"
|
||||
@selection-change="onSelectionChange"
|
||||
empty-text="无数据"
|
||||
:data="result"
|
||||
size="mini"
|
||||
style="width: 100%">
|
||||
<el-table-column
|
||||
align="center"
|
||||
type="selection"
|
||||
width="40">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="id"
|
||||
label="主键"
|
||||
width="140">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="name"
|
||||
label="文件名称">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="fileType"
|
||||
label="文件类型">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="location"
|
||||
label="存放地址">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="createTime"
|
||||
width="140"
|
||||
label="创建时间">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
fixed="right"
|
||||
width="120"
|
||||
label="操作">
|
||||
<template slot-scope="scope">
|
||||
<el-dropdown size="mini" split-button type="primary" @click="onCommand(['edit',scope.row])"
|
||||
@command="onCommand">
|
||||
<i class="el-icon-edit"></i>编辑
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="['delete',scope.row]" icon="el-icon-delete">删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<el-pagination
|
||||
background
|
||||
v-if="vm.totalCount > vm.pageSize"
|
||||
style="margin-top: 10px"
|
||||
@current-change="onPage"
|
||||
:current-page="vm.pageNumber"
|
||||
:page-size="vm.pageSize"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="vm.totalCount">
|
||||
</el-pagination>
|
||||
</el-card>
|
||||
</div>
|
||||
<script>
|
||||
var app = new Vue({
|
||||
mixins: [mixin],
|
||||
el: "#app",
|
||||
data: {
|
||||
module: 'system',
|
||||
target: 'file',
|
||||
vm: {//条件及分页参数
|
||||
name: "",
|
||||
fileType: "",
|
||||
attribute1: "",
|
||||
attribute2: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
sortKey:'CREATE_TIME',
|
||||
sortType:'DESC'
|
||||
},
|
||||
form: {//待提交表单
|
||||
title: "",
|
||||
dialog: false,
|
||||
id: '',
|
||||
name: "",
|
||||
fileType: "",
|
||||
attribute1: "",
|
||||
attribute2: "",
|
||||
location: "",
|
||||
url: "",
|
||||
urlDownload: "",
|
||||
rowVersion: ""
|
||||
},
|
||||
formRules: {
|
||||
name: [
|
||||
{required: true, message: '文件名称不能为空', trigger: 'blur'},
|
||||
{min: 1, max: 255, message: '文件名称长度在 1 到 255 个字符', trigger: 'blur'}
|
||||
],
|
||||
fileType: [
|
||||
],
|
||||
attribute1: [
|
||||
{min: 1, max: 50, message: '扩展属性1长度在 1 到 50 个字符', trigger: 'blur'}
|
||||
],
|
||||
attribute2: [
|
||||
{min: 1, max: 50, message: '扩展属性2长度在 1 到 50 个字符', trigger: 'blur'}
|
||||
],
|
||||
location: [
|
||||
{min: 1, max: 500, message: '存放地址长度在 1 到 500 个字符', trigger: 'blur'}
|
||||
],
|
||||
url: [
|
||||
{min: 1, max: 500, message: '访问地址长度在 1 到 500 个字符', trigger: 'blur'}
|
||||
],
|
||||
urlDownload: [
|
||||
{min: 1, max: 500, message: '下载地址长度在 1 到 500 个字符', trigger: 'blur'}
|
||||
],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onCreate: function () {
|
||||
this.form.title = "文件新增";
|
||||
this.form.dialog = true;
|
||||
this.form.id = "";
|
||||
this.form.name = "";
|
||||
this.form.fileType = "";
|
||||
this.form.attribute1 = "";
|
||||
this.form.attribute2 = "";
|
||||
this.form.location = "";
|
||||
this.form.url = "";
|
||||
this.form.urlDownload = "";
|
||||
},
|
||||
onCommand: function (arg) {
|
||||
const cmd = arg[0];
|
||||
const item = arg[1];
|
||||
switch (cmd) {
|
||||
case "edit":
|
||||
this.form.title = "文件编辑";
|
||||
this.form.dialog = true;
|
||||
this.form.id = item.id;
|
||||
this.form.name = item.name;
|
||||
this.form.fileType = item.fileType;
|
||||
this.form.attribute1 = item.attribute1;
|
||||
this.form.attribute2 = item.attribute2;
|
||||
this.form.location = item.location;
|
||||
this.form.url = item.url;
|
||||
this.form.urlDownload = item.urlDownload;
|
||||
this.form.rowVersion = item.rowVersion;
|
||||
break;
|
||||
case "delete":
|
||||
this.onDelete(item);
|
||||
break;
|
||||
default:
|
||||
this.w("未找到对应的命令");
|
||||
break;
|
||||
}
|
||||
},
|
||||
},
|
||||
mounted: function () {
|
||||
this.onFind();
|
||||
},
|
||||
})
|
||||
</script>
|
Loading…
Reference in new issue