Merge branch 'master' into net6.0
This commit is contained in:
commit
8fd6bba2d1
167
ZR.Admin.WebApi/Controllers/Business/GendemoController.cs
Normal file
167
ZR.Admin.WebApi/Controllers/Business/GendemoController.cs
Normal file
@ -0,0 +1,167 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Infrastructure;
|
||||
using Infrastructure.Attribute;
|
||||
using Infrastructure.Enums;
|
||||
using Infrastructure.Model;
|
||||
using Mapster;
|
||||
using ZR.Model.Dto;
|
||||
using ZR.Model.Models;
|
||||
using ZR.Service.Business.IBusinessService;
|
||||
using ZR.Admin.WebApi.Extensions;
|
||||
using ZR.Admin.WebApi.Filters;
|
||||
using ZR.Common;
|
||||
using Infrastructure.Extensions;
|
||||
using System.Linq;
|
||||
|
||||
namespace ZR.Admin.WebApi.Controllers
|
||||
{
|
||||
/// <summary>
|
||||
/// 演示Controller
|
||||
///
|
||||
/// @author zz
|
||||
/// @date 2022-03-31
|
||||
/// </summary>
|
||||
[Verify]
|
||||
[Route("business/GenDemo")]
|
||||
public class GenDemoController : BaseController
|
||||
{
|
||||
/// <summary>
|
||||
/// 演示接口
|
||||
/// </summary>
|
||||
private readonly IGenDemoService _GenDemoService;
|
||||
|
||||
public GenDemoController(IGenDemoService GenDemoService)
|
||||
{
|
||||
_GenDemoService = GenDemoService;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查询演示列表
|
||||
/// </summary>
|
||||
/// <param name="parm"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("list")]
|
||||
[ActionPermissionFilter(Permission = "business:gendemo:list")]
|
||||
public IActionResult QueryGenDemo([FromQuery] GenDemoQueryDto parm)
|
||||
{
|
||||
var response = _GenDemoService.GetList(parm);
|
||||
return SUCCESS(response);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 查询演示详情
|
||||
/// </summary>
|
||||
/// <param name="Id"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{Id}")]
|
||||
[ActionPermissionFilter(Permission = "business:gendemo:query")]
|
||||
public IActionResult GetGenDemo(int Id)
|
||||
{
|
||||
var response = _GenDemoService.GetFirst(x => x.Id == Id);
|
||||
|
||||
return SUCCESS(response);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加演示
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPost]
|
||||
[ActionPermissionFilter(Permission = "business:gendemo:add")]
|
||||
[Log(Title = "演示", BusinessType = BusinessType.INSERT)]
|
||||
public IActionResult AddGenDemo([FromBody] GenDemoDto parm)
|
||||
{
|
||||
if (parm == null)
|
||||
{
|
||||
throw new CustomException("请求参数错误");
|
||||
}
|
||||
//从 Dto 映射到 实体
|
||||
var modal = parm.Adapt<GenDemo>().ToCreate(HttpContext);
|
||||
|
||||
var response = _GenDemoService.Insert(modal, it => new
|
||||
{
|
||||
it.Name,
|
||||
it.Icon,
|
||||
it.ShowStatus,
|
||||
it.Sex,
|
||||
it.Sort,
|
||||
it.Remark,
|
||||
it.BeginTime,
|
||||
it.EndTime,
|
||||
it.Feature,
|
||||
});
|
||||
return ToResponse(response);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新演示
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpPut]
|
||||
[ActionPermissionFilter(Permission = "business:gendemo:edit")]
|
||||
[Log(Title = "演示", BusinessType = BusinessType.UPDATE)]
|
||||
public IActionResult UpdateGenDemo([FromBody] GenDemoDto parm)
|
||||
{
|
||||
if (parm == null)
|
||||
{
|
||||
throw new CustomException("请求实体不能为空");
|
||||
}
|
||||
//从 Dto 映射到 实体
|
||||
var modal = parm.Adapt<GenDemo>().ToUpdate(HttpContext);
|
||||
|
||||
var response = _GenDemoService.Update(w => w.Id == modal.Id, it => new GenDemo()
|
||||
{
|
||||
//Update 字段映射
|
||||
Name = modal.Name,
|
||||
Icon = modal.Icon,
|
||||
ShowStatus = modal.ShowStatus,
|
||||
Sex = modal.Sex,
|
||||
Sort = modal.Sort,
|
||||
Remark = modal.Remark,
|
||||
BeginTime = modal.BeginTime,
|
||||
EndTime = modal.EndTime,
|
||||
Feature = modal.Feature,
|
||||
});
|
||||
|
||||
return ToResponse(response);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 删除演示
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpDelete("{ids}")]
|
||||
[ActionPermissionFilter(Permission = "business:gendemo:delete")]
|
||||
[Log(Title = "演示", BusinessType = BusinessType.DELETE)]
|
||||
public IActionResult DeleteGenDemo(string ids)
|
||||
{
|
||||
int[] idsArr = Tools.SpitIntArrary(ids);
|
||||
if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); }
|
||||
|
||||
var response = _GenDemoService.Delete(idsArr);
|
||||
|
||||
return ToResponse(response);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 导出演示
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Log(Title = "演示", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)]
|
||||
[HttpGet("export")]
|
||||
[ActionPermissionFilter(Permission = "business:gendemo:export")]
|
||||
public IActionResult Export([FromQuery] GenDemoQueryDto parm)
|
||||
{
|
||||
parm.PageSize = 10000;
|
||||
var list = _GenDemoService.GetList(parm).Result;
|
||||
|
||||
string sFileName = ExportExcel(list, "GenDemo", "演示");
|
||||
return SUCCESS(new { path = "/export/" + sFileName, fileName = sFileName });
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@ -139,7 +139,7 @@ namespace ZR.Admin.WebApi.Controllers
|
||||
return SUCCESS(new
|
||||
{
|
||||
url = file.AccessUrl,
|
||||
fileName,
|
||||
fileName = file.FileName,
|
||||
fileId = file.Id.ToString()
|
||||
});
|
||||
}
|
||||
|
||||
@ -9,6 +9,7 @@ using Infrastructure.Attribute;
|
||||
using Infrastructure.Enums;
|
||||
using Infrastructure;
|
||||
using ZR.Service.System.IService;
|
||||
using ZR.Common;
|
||||
|
||||
namespace ZR.Admin.WebApi.Controllers.System
|
||||
{
|
||||
@ -106,9 +107,10 @@ namespace ZR.Admin.WebApi.Controllers.System
|
||||
[HttpDelete("{id}")]
|
||||
[ActionPermissionFilter(Permission = "system:post:remove")]
|
||||
[Log(Title = "岗位删除", BusinessType = BusinessType.DELETE)]
|
||||
public IActionResult Delete(int id = 0)
|
||||
public IActionResult Delete(string id)
|
||||
{
|
||||
return ToResponse(ToJson(PostService.Delete(id)));
|
||||
int[] ids = Tools.SpitIntArrary(id);
|
||||
return ToResponse(ToJson(PostService.Delete(ids)));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@ -15,6 +15,8 @@ using ZR.Common;
|
||||
using ZR.Model.System.Dto;
|
||||
using ZR.Model.System;
|
||||
using ZR.Service.System.IService;
|
||||
using Infrastructure.Extensions;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace ZR.Admin.WebApi.Controllers.System
|
||||
{
|
||||
@ -27,6 +29,7 @@ namespace ZR.Admin.WebApi.Controllers.System
|
||||
private readonly ISysRoleService RoleService;
|
||||
private readonly ISysUserPostService UserPostService;
|
||||
private readonly ISysDeptService DeptService;
|
||||
private readonly ISysFileService FileService;
|
||||
private OptionsSetting OptionsSetting;
|
||||
private IWebHostEnvironment hostEnvironment;
|
||||
|
||||
@ -35,6 +38,7 @@ namespace ZR.Admin.WebApi.Controllers.System
|
||||
ISysRoleService roleService,
|
||||
ISysUserPostService postService,
|
||||
ISysDeptService deptService,
|
||||
ISysFileService sysFileService,
|
||||
IOptions<OptionsSetting> options,
|
||||
IWebHostEnvironment hostEnvironment)
|
||||
{
|
||||
@ -42,6 +46,7 @@ namespace ZR.Admin.WebApi.Controllers.System
|
||||
RoleService = roleService;
|
||||
UserPostService = postService;
|
||||
DeptService = deptService;
|
||||
FileService = sysFileService;
|
||||
OptionsSetting = options.Value;
|
||||
this.hostEnvironment = hostEnvironment;
|
||||
}
|
||||
@ -124,28 +129,17 @@ namespace ZR.Admin.WebApi.Controllers.System
|
||||
[HttpPost("Avatar")]
|
||||
[ActionPermissionFilter(Permission = "common")]
|
||||
[Log(Title = "修改头像", BusinessType = BusinessType.UPDATE, IsSaveRequestData = false)]
|
||||
public IActionResult Avatar([FromForm(Name = "picture")] IFormFile formFile)
|
||||
public async Task<IActionResult> Avatar([FromForm(Name = "picture")] IFormFile formFile)
|
||||
{
|
||||
LoginUser loginUser = Framework.JwtUtil.GetLoginUser(HttpContext);
|
||||
|
||||
if (formFile == null) throw new CustomException("请选择文件");
|
||||
|
||||
string fileExt = Path.GetExtension(formFile.FileName);
|
||||
string savePath = Path.Combine(hostEnvironment.WebRootPath, FileUtil.GetdirPath("uploads"));
|
||||
string fileName = FileUtil.HashFileName() + (fileExt.IsEmpty() ? ".png" : fileExt);
|
||||
SysFile file = await FileService.SaveFileToLocal(hostEnvironment.WebRootPath, fileName, "", HttpContext.GetName(), formFile);
|
||||
|
||||
if (!Directory.Exists(savePath)) { Directory.CreateDirectory(savePath); }
|
||||
|
||||
string fileName = FileUtil.HashFileName() + fileExt;
|
||||
string finalFilePath = savePath + fileName;
|
||||
|
||||
using (var stream = new FileStream(finalFilePath, FileMode.Create))
|
||||
{
|
||||
formFile.CopyTo(stream);
|
||||
}
|
||||
string accessUrl = $"{OptionsSetting.Upload.UploadUrl}/{FileUtil.GetdirPath("uploads")}{fileName}";
|
||||
|
||||
UserService.UpdatePhoto(new SysUser() { Avatar = accessUrl, UserId = loginUser.UserId });
|
||||
return SUCCESS(new { imgUrl = accessUrl });
|
||||
UserService.UpdatePhoto(new SysUser() { Avatar = file.AccessUrl, UserId = loginUser.UserId });
|
||||
return SUCCESS(new { imgUrl = file.AccessUrl });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -15,6 +15,7 @@ using ZR.Model.System;
|
||||
using ZR.Service.System.IService;
|
||||
using ZR.Tasks;
|
||||
using Snowflake.Core;
|
||||
using Infrastructure.Extensions;
|
||||
|
||||
namespace ZR.Admin.WebApi.Controllers
|
||||
{
|
||||
@ -62,14 +63,14 @@ namespace ZR.Admin.WebApi.Controllers
|
||||
/// </summary>
|
||||
/// <param name="id">编码</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{id}")]
|
||||
[HttpGet("get")]
|
||||
public IActionResult Get(string id)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(id))
|
||||
{
|
||||
return SUCCESS(_tasksQzService.GetId(id));
|
||||
}
|
||||
return SUCCESS(_tasksQzService.GetAll());
|
||||
return SUCCESS(null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -90,7 +91,10 @@ namespace ZR.Admin.WebApi.Controllers
|
||||
{
|
||||
throw new CustomException($"cron表达式不正确");
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(parm.ApiUrl) && parm.TaskType == 2)
|
||||
{
|
||||
throw new CustomException($"地址不能为空");
|
||||
}
|
||||
//从 Dto 映射到 实体
|
||||
var tasksQz = parm.Adapt<SysTasksQz>().ToCreate();
|
||||
var worker = new IdWorker(1, 1);
|
||||
@ -98,7 +102,13 @@ namespace ZR.Admin.WebApi.Controllers
|
||||
tasksQz.ID = worker.NextId().ToString();
|
||||
tasksQz.IsStart = false;
|
||||
tasksQz.Create_by = HttpContext.GetName();
|
||||
|
||||
tasksQz.TaskType = parm.TaskType;
|
||||
tasksQz.ApiUrl = parm.ApiUrl;
|
||||
if (parm.ApiUrl.IfNotEmpty() && parm.TaskType == 2)
|
||||
{
|
||||
tasksQz.AssemblyName = "ZR.Tasks";
|
||||
tasksQz.ClassName = "TaskScheduler.HttpResultfulJob";
|
||||
}
|
||||
return SUCCESS(_tasksQzService.Add(tasksQz));
|
||||
}
|
||||
|
||||
@ -125,7 +135,15 @@ namespace ZR.Admin.WebApi.Controllers
|
||||
throw new CustomException($"cron表达式不正确");
|
||||
}
|
||||
var tasksQz = _tasksQzService.GetFirst(m => m.ID == parm.ID);
|
||||
|
||||
if (string.IsNullOrEmpty(parm.ApiUrl) && parm.TaskType == 2)
|
||||
{
|
||||
throw new CustomException($"api地址不能为空");
|
||||
}
|
||||
if (parm.ApiUrl.IfNotEmpty() && parm.TaskType == 2)
|
||||
{
|
||||
parm.AssemblyName = "ZR.Tasks";
|
||||
parm.ClassName = "TaskScheduler.HttpResultfulJob";
|
||||
}
|
||||
if (tasksQz.IsStart)
|
||||
{
|
||||
throw new CustomException($"该任务正在运行中,请先停止在更新");
|
||||
@ -142,10 +160,12 @@ namespace ZR.Admin.WebApi.Controllers
|
||||
TriggerType = parm.TriggerType,
|
||||
IntervalSecond = parm.IntervalSecond,
|
||||
JobParams = parm.JobParams,
|
||||
Update_by = User.Identity.Name,
|
||||
Update_by = HttpContextExtension.GetName(HttpContext),
|
||||
Update_time = DateTime.Now,
|
||||
BeginTime = parm.BeginTime,
|
||||
EndTime = parm.EndTime
|
||||
EndTime = parm.EndTime,
|
||||
TaskType = parm.TaskType,
|
||||
ApiUrl = parm.ApiUrl,
|
||||
});
|
||||
if (response > 0)
|
||||
{
|
||||
|
||||
21
ZR.Admin.WebApi/Dockerfile
Normal file
21
ZR.Admin.WebApi/Dockerfile
Normal file
@ -0,0 +1,21 @@
|
||||
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
|
||||
#创建 /app文件夹
|
||||
WORKDIR /app
|
||||
#创建挂载目录,用于将程序部署在服务器本地
|
||||
#VOLUME /app
|
||||
#设置docker容器对外暴露端口
|
||||
EXPOSE 8888
|
||||
VOLUME /app/logs
|
||||
#COPY bin/Release/net5.0/publish/ app/
|
||||
COPY . app/
|
||||
|
||||
#设置容器内的时区,如果不设置,默认时区是标准时间比北京时间晚8个小时
|
||||
RUN echo "Asia/shanghai" > /etc/timezone
|
||||
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
|
||||
|
||||
# 复制发布文件到工作目录
|
||||
#COPY . app/
|
||||
WORKDIR /app
|
||||
|
||||
#等价于 dotnet ZR.Admin.WebApi.dll,如果不指定启动端口默认在docker里面启动端口是80端口
|
||||
ENTRYPOINT ["dotnet", "ZR.Admin.WebApi.dll", "--server.urls","http://*:8888"]
|
||||
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||
-->
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<DeleteExistingFiles>False</DeleteExistingFiles>
|
||||
<ExcludeApp_Data>False</ExcludeApp_Data>
|
||||
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
|
||||
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
|
||||
<LastUsedPlatform>Any CPU</LastUsedPlatform>
|
||||
<PublishProvider>FileSystem</PublishProvider>
|
||||
<PublishUrl>bin\Release\net6.0\publish\</PublishUrl>
|
||||
<WebPublishMethod>FileSystem</WebPublishMethod>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
552
ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt
Normal file
552
ZR.Admin.WebApi/wwwroot/CodeGenTemplate/v3/Vue.txt
Normal file
@ -0,0 +1,552 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<!-- :model属性用于表单验证使用 比如下面的el-form-item 的 prop属性用于对表单值进行验证操作 -->
|
||||
<el-form :model="queryParams" label-position="right" inline ref="queryRef" v-show="showSearch"
|
||||
@submit.prevent>
|
||||
|
||||
$foreach(column in genTable.Columns)
|
||||
$set(labelName = "")
|
||||
$set(columnName = "")
|
||||
$set(numLabel = "")
|
||||
$if(column.IsQuery == true)
|
||||
$set(columnName = column.CsharpFieldFl)
|
||||
$if(column.ColumnComment != "")
|
||||
$set(labelName = column.ColumnComment)
|
||||
$else
|
||||
$set(labelName = column.CsharpFieldFl)
|
||||
$end
|
||||
$if(column.CsharpType == "int" || column.CsharpType == "long")
|
||||
$set(numLabel = ".number")
|
||||
$end
|
||||
|
||||
$if(column.HtmlType == "datetime")
|
||||
<el-form-item label="$labelName">
|
||||
<el-date-picker v-model="dateRange${column.CsharpField}" style="width: 240px" type="daterange" range-separator="-"
|
||||
start-placeholder="开始日期" end-placeholder="结束日期" placeholder="请选择$labelName" :picker-options="{ firstDayOfWeek: 1}"></el-date-picker>
|
||||
</el-form-item>
|
||||
$elseif(column.HtmlType == "select" || column.HtmlType == "radio")
|
||||
<el-form-item label="${labelName}" prop="${columnName}">
|
||||
<el-select v-model="queryParams.${columnName}" placeholder="请选择${labelName}">
|
||||
<el-option v-for="item in ${columnName}Options" :key="item.dictValue" :label="item.dictLabel" :value="item.dictValue"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
$else
|
||||
<el-form-item label="${labelName}" prop="${columnName}">
|
||||
<el-input v-model${numLabel}="queryParams.${columnName}" placeholder="请输入${labelName}" />
|
||||
</el-form-item>
|
||||
$end
|
||||
$end
|
||||
$end
|
||||
|
||||
<el-form-item>
|
||||
<el-button icon="search" size="small" type="primary" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="refresh" size="small" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<!-- 工具区域 -->
|
||||
<el-row :gutter="10" class="mb8">
|
||||
$if(replaceDto.ShowBtnAdd)
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" size="small" v-hasPermi="['${replaceDto.PermissionPrefix}:add']" plain icon="plus" @click="handleAdd">新增</el-button>
|
||||
</el-col>
|
||||
$end
|
||||
$if(replaceDto.ShowBtnEdit)
|
||||
<el-col :span="1.5">
|
||||
<el-button type="success" size="small" :disabled="single" v-hasPermi="['${replaceDto.PermissionPrefix}:edit']" plain icon="edit" @click="handleUpdate">修改</el-button>
|
||||
</el-col>
|
||||
$end
|
||||
$if(replaceDto.ShowBtnDelete)
|
||||
<el-col :span="1.5">
|
||||
<el-button type="danger" size="small" :disabled="multiple" v-hasPermi="['${replaceDto.PermissionPrefix}:delete']" plain icon="delete" @click="handleDelete">删除</el-button>
|
||||
</el-col>
|
||||
$end
|
||||
$if(replaceDto.ShowBtnExport)
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" size="small" plain icon="download" @click="handleExport" v-hasPermi="['${replaceDto.PermissionPrefix}:export']">导出</el-button>
|
||||
</el-col>
|
||||
$end
|
||||
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<!-- 数据区域 -->
|
||||
<el-table :data="dataList" v-loading="loading" ref="table" border highlight-current-row @sort-change="sortChange" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="50" align="center"/>
|
||||
|
||||
$foreach(column in genTable.Columns)
|
||||
$set(labelName = "")
|
||||
$set(checkboxHtml = "")
|
||||
$set(showToolTipHtml = "")
|
||||
$set(columnName = column.CsharpFieldFl)
|
||||
$if(column.CsharpType == "string" || column.HtmlType == "datetime")
|
||||
$set(showToolTipHtml = " :show-overflow-tooltip=\"true\"")
|
||||
$end
|
||||
$if(column.ColumnComment != "")
|
||||
$set(labelName = column.ColumnComment)
|
||||
$else
|
||||
$set(labelName = column.CsharpFieldFl)
|
||||
$end
|
||||
$if(column.IsList == true)
|
||||
$if(column.HtmlType == "customInput" && column.IsPk == false)
|
||||
<el-table-column prop="${columnName}" label="${labelName}" width="90" sortable align="center">
|
||||
<template #default="scope">
|
||||
<span v-show="editIndex != scope.${index}index" @click="editCurrRow(scope.${index}index,'rowkeY')">{{scope.row.${columnName}}}</span>
|
||||
<el-input :id="scope.${index}index+'rowkeY'" size="mini" v-show="(editIndex == scope.${index}index)"
|
||||
v-model="scope.row.${columnName}" @blur="handleChangeSort(scope.row)"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
$elseif(column.HtmlType == "imageUpload")
|
||||
<el-table-column prop="${columnName}" label="${labelName}" align="center">
|
||||
<template #default="scope">
|
||||
<el-image class="table-td-thumb" fit="contain" :src="scope.row.${columnName}" :preview-src-list="[scope.row.${columnName}]">
|
||||
<div><i class="el-icon-document" /></div>
|
||||
</el-image>
|
||||
</template>
|
||||
</el-table-column>
|
||||
$elseif(column.HtmlType == "checkbox" || column.HtmlType == "select" || column.HtmlType == "radio")
|
||||
<el-table-column prop="${columnName}" label="${labelName}" align="center">
|
||||
<template #default="scope">
|
||||
$if(column.HtmlType == "checkbox")
|
||||
<dict-tag :options="${columnName}Options" :value="scope.row.${columnName} ? scope.row.${columnName}.split(',') : []" />
|
||||
$else
|
||||
<dict-tag :options="${columnName}Options" :value="scope.row.${columnName}" />
|
||||
$end
|
||||
</template>
|
||||
</el-table-column>
|
||||
$else
|
||||
<el-table-column prop="${columnName}" label="${labelName}" align="center"${showToolTipHtml} />
|
||||
$end
|
||||
$end
|
||||
$end
|
||||
|
||||
<el-table-column label="操作" align="center" width="140">
|
||||
<template #default="scope">
|
||||
$if(replaceDto.ShowBtnEdit)
|
||||
<el-button v-hasPermi="['${replaceDto.PermissionPrefix}:edit']" type="success" icon="edit" title="编辑"
|
||||
@click="handleUpdate(scope.row)"></el-button>
|
||||
$end
|
||||
$if(replaceDto.ShowBtnDelete)
|
||||
<el-button v-hasPermi="['${replaceDto.PermissionPrefix}:delete']" type="danger" icon="delete" title="删除"
|
||||
@click="handleDelete(scope.row)"></el-button>
|
||||
$end
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination class="mt10" background :total="total" :page="queryParams.pageNum" :limit="queryParams.pageSize" @pagination="getList" />
|
||||
|
||||
<!-- 添加或修改${genTable.functionName}对话框 -->
|
||||
<el-dialog :title="title" :lock-scroll="false" v-model="open" >
|
||||
<el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
|
||||
<el-row :gutter="20">
|
||||
|
||||
$foreach(column in genTable.Columns)
|
||||
$set(labelName = "")
|
||||
$set(labelDisabled = "")
|
||||
$set(columnName = column.CsharpFieldFl)
|
||||
$set(value = "item.dictValue")
|
||||
|
||||
$if(column.ColumnComment != "")
|
||||
$set(labelName = column.ColumnComment)
|
||||
$else
|
||||
$set(labelName = column.CsharpFieldFl)
|
||||
$end
|
||||
$if(column.IsPk == true)
|
||||
$set(labelDisabled = ":disabled=true")
|
||||
$end
|
||||
$if(column.CsharpType == "int" || column.CsharpType == "long")
|
||||
$set(value = "parseInt(item.dictValue)")
|
||||
$end
|
||||
|
||||
$if(column.IsInsert == false && column.IsEdit == false)
|
||||
<el-col :lg="12" v-if="opertype == 2">
|
||||
<el-form-item label="${labelName}">{{form.${columnName}}}</el-form-item>
|
||||
</el-col>
|
||||
$elseif(column.IsPK || column.IsIncrement)
|
||||
<el-col :lg="12">
|
||||
<el-form-item label="${labelName}" prop="${columnName}">
|
||||
$if(column.IsIncrement == false)
|
||||
<el-input-number v-model.number="form.${columnName}" controls-position="right" placeholder="请输入${labelName}" :disabled="title=='修改数据'"/>
|
||||
$else
|
||||
<span v-html="form.${columnName}"/>
|
||||
$end
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
$else
|
||||
$if(column.HtmlType == "inputNumber")
|
||||
<el-col :lg="12">
|
||||
<el-form-item label="${labelName}" prop="${columnName}">
|
||||
<el-input-number v-model.number="form.${columnName}" controls-position="right" placeholder="请输入${labelName}" ${labelDisabled}/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
$elseif(column.HtmlType == "datetime")
|
||||
<el-col :lg="12">
|
||||
<el-form-item label="${labelName}" prop="${columnName}">
|
||||
<el-date-picker v-model="form.${columnName}" type="datetime" placeholder="选择日期时间"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
$elseif(column.HtmlType == "imageUpload")
|
||||
<el-col :lg="24">
|
||||
<el-form-item label="${labelName}" prop="${columnName}">
|
||||
<UploadImage v-model="form.${columnName}" column="${columnName}" @success="handleUploadSuccess" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
$elseif(column.HtmlType == "fileUpload")
|
||||
<el-col :lg="24">
|
||||
<el-form-item label="${labelName}" prop="${columnName}">
|
||||
<UploadFile v-model="form.${columnName}" column="${columnName}" @success="handleUploadSuccess" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
$elseif(column.HtmlType == "radio")
|
||||
<el-col :lg="12">
|
||||
<el-form-item label="${labelName}" prop="${columnName}">
|
||||
<el-radio-group v-model="form.${columnName}">
|
||||
<el-radio v-for="item in ${columnName}Options" :key="item.dictValue" :label="${value}">{{item.dictLabel}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
$elseif(column.HtmlType == "textarea")
|
||||
<el-col :lg="24">
|
||||
<el-form-item label="${labelName}" prop="${columnName}">
|
||||
<el-input type="textarea" v-model="form.${columnName}" placeholder="请输入${labelName}"/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
$elseif(column.HtmlType == "editor")
|
||||
<el-col :lg="24">
|
||||
<el-form-item label="${labelName}" prop="${columnName}">
|
||||
<editor v-model="form.${columnName}" :min-height="200" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
$elseif(column.HtmlType == "select")
|
||||
<el-col :lg="12">
|
||||
<el-form-item label="${labelName}" prop="${columnName}">
|
||||
<el-select v-model="form.${columnName}" placeholder="请选择${labelName}">
|
||||
<el-option v-for="item in ${columnName}Options" :key="item.dictValue" :label="item.dictLabel" :value="${value}"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
$elseif(column.HtmlType == "checkbox")
|
||||
<el-col :lg="24">
|
||||
<el-form-item label="${labelName}" prop="${columnName}">
|
||||
<el-checkbox-group v-model="form.${columnName}Checked">
|
||||
<el-checkbox v-for="item in ${columnName}Options" :key="item.dictValue" :label="item.dictValue">{{item.dictLabel}}</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
$else
|
||||
<el-col :lg="12">
|
||||
<el-form-item label="${labelName}" prop="${columnName}">
|
||||
<el-input v-model="form.${columnName}" placeholder="请输入${labelName}" ${labelDisabled}/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
$end
|
||||
$end
|
||||
$end
|
||||
</el-row>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button type="text" @click="cancel">取 消</el-button>
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
<script>
|
||||
import {
|
||||
list${genTable.BusinessName},
|
||||
add${genTable.BusinessName},
|
||||
del${genTable.BusinessName},
|
||||
update${genTable.BusinessName},
|
||||
get${genTable.BusinessName},
|
||||
$if(replaceDto.ShowBtnExport)
|
||||
export${genTable.BusinessName},
|
||||
$end
|
||||
$if(showCustomInput)
|
||||
changeSort
|
||||
$end
|
||||
} from '@/api/${tool.FirstLowerCase(genTable.ModuleName)}/${tool.FirstLowerCase(genTable.BusinessName)}.js';
|
||||
|
||||
import { reactive, ref, toRefs, getCurrentInstance } from "vue";
|
||||
export default {
|
||||
name: "${genTable.BusinessName.ToLower()}",
|
||||
setup() {
|
||||
const { proxy } = getCurrentInstance();
|
||||
// 选中${replaceDto.FistLowerPk}数组数组
|
||||
const ids = ref([]);
|
||||
// 非单选禁用
|
||||
const single = ref(true);
|
||||
// 非多个禁用
|
||||
const multiple = ref(true);
|
||||
// 遮罩层
|
||||
const loading = ref(false);
|
||||
// 显示搜索条件
|
||||
const showSearch = ref(true);
|
||||
// 查询参数
|
||||
const queryParams = reactive({
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
sort: undefined,
|
||||
sortType: undefined,
|
||||
$foreach(item in genTable.Columns)
|
||||
$if(item.IsQuery == true)
|
||||
${item.CsharpFieldFl}: undefined,
|
||||
$end
|
||||
$end
|
||||
});
|
||||
// 弹出层标题
|
||||
const title = ref("");
|
||||
// 操作类型 1、add 2、edit
|
||||
const opertype = ref(0);
|
||||
// 是否显示弹出层
|
||||
const open = ref(false);
|
||||
// 表单参数
|
||||
const data = reactive({
|
||||
form: {},
|
||||
});
|
||||
const { form } = toRefs(data);
|
||||
// 总记录数
|
||||
const total = ref(0);
|
||||
const dataList = ref([]);
|
||||
const queryRef = ref(null);
|
||||
const formRef = ref(null);
|
||||
$foreach(item in genTable.Columns)
|
||||
$if((item.HtmlType == "radio" || item.HtmlType == "select" || item.HtmlType == "checkbox"))
|
||||
// ${item.ColumnComment}选项列表 格式 eg:{ dictLabel: '标签', dictValue: '0'}
|
||||
const ${item.CsharpFieldFl}Options = ref([]);
|
||||
$elseif(item.HtmlType == "datetime" && item.IsQuery == true)
|
||||
//${item.ColumnComment}时间范围
|
||||
const dateRange${item.CsharpField} = ref([]);
|
||||
$elseif(item.HtmlType == "customInput")
|
||||
const editIndex = ref(-1);
|
||||
$end
|
||||
$end
|
||||
|
||||
$set(index = 0)
|
||||
var dictParams = [
|
||||
$foreach(item in genTable.Columns)
|
||||
$if((item.HtmlType == "radio" || item.HtmlType == "select" || item.HtmlType == "checkbox") && item.DictType != "")
|
||||
{ dictType: "${item.DictType}", columnName: "${item.CsharpFieldFl}Options" },
|
||||
$set(index = index + 1)
|
||||
$end
|
||||
$end
|
||||
];
|
||||
$if(index > 0)
|
||||
proxy.getDicts(dictParams).then((response) => {
|
||||
response.data.forEach((element) => {
|
||||
proxy[element.columnName] = element.list;
|
||||
});
|
||||
});
|
||||
$end
|
||||
|
||||
// 表单规则校验
|
||||
const rules = reactive({
|
||||
$foreach(column in genTable.Columns)
|
||||
$if(column.IsRequired && column.IsIncrement == false)
|
||||
${column.CsharpFieldFl}: [
|
||||
{ required: true, message: "${column.ColumnComment}不能为空", trigger: $if(column.htmlType == "select")"change"$else"blur"$end
|
||||
$if(column.CsharpType == "int" || column.CsharpType == "long"), type: "number"$end }
|
||||
],
|
||||
$end
|
||||
$end
|
||||
});
|
||||
function getList(){
|
||||
$foreach(item in genTable.Columns)
|
||||
$if(item.HtmlType == "datetime" && item.IsQuery == true)
|
||||
proxy.addDateRange(queryParams, proxy.dateRange${item.CsharpField}, '${item.CsharpField}');
|
||||
$end
|
||||
$end
|
||||
loading.value = true;
|
||||
list${genTable.BusinessName}(queryParams).then(res => {
|
||||
if (res.code == 200) {
|
||||
dataList.value = res.data.result;
|
||||
total.value = res.data.totalNum;
|
||||
loading.value = false;
|
||||
}
|
||||
})
|
||||
}
|
||||
function cancel(){
|
||||
open.value = false;
|
||||
reset();
|
||||
}
|
||||
// 重置表单
|
||||
function reset() {
|
||||
proxy.resetForm("formRef");
|
||||
}
|
||||
|
||||
// 查询
|
||||
function handleQuery() {
|
||||
queryParams.pageNum = 1;
|
||||
getList();
|
||||
}
|
||||
// 添加
|
||||
function handleAdd() {
|
||||
reset();
|
||||
open.value = true;
|
||||
title.value = '添加';
|
||||
opertype.value = 1;
|
||||
}
|
||||
// 删除按钮操作
|
||||
function handleDelete(row) {
|
||||
const Ids = row.${replaceDto.FistLowerPk} || ids.value;
|
||||
|
||||
proxy.${confirm}confirm('是否确认删除参数编号为"' + Ids + '"的数据项?')
|
||||
.then(function () {
|
||||
//return del${genTable.BusinessName}(Ids);
|
||||
})
|
||||
.then(() => {
|
||||
handleQuery();
|
||||
proxy.${modal}modal.msgSuccess("删除成功");
|
||||
})
|
||||
.catch(() => {});
|
||||
}
|
||||
// 修改按钮操作
|
||||
function handleUpdate(row) {
|
||||
reset();
|
||||
const id = row.${replaceDto.FistLowerPk} || ids.value;
|
||||
get${genTable.BusinessName}(id).then((res) => {
|
||||
const { code, data } = res;
|
||||
if (code == 200) {
|
||||
open.value = true;
|
||||
title.value = "修改数据";
|
||||
opertype.value = 2;
|
||||
|
||||
form.value = {
|
||||
...data,
|
||||
$foreach(item in genTable.Columns)
|
||||
$if(item.HtmlType == "checkbox")
|
||||
${item.CsharpFieldFl}Checked: data.${item.CsharpFieldFl} ? data.${item.CsharpFieldFl}.split(',') : [],
|
||||
$end
|
||||
$end
|
||||
};
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 表单提交
|
||||
function submitForm() {
|
||||
proxy.${refs}refs["formRef"].validate((valid) => {
|
||||
if (valid) {
|
||||
if (form.value.${replaceDto.FistLowerPk} != undefined && opertype.value === 2) {
|
||||
update${genTable.BusinessName}(form.value)
|
||||
.then((res) => {
|
||||
proxy.${modal}modal.msgSuccess("修改成功");
|
||||
open.value = false;
|
||||
getList();
|
||||
})
|
||||
.catch((err) => {
|
||||
//TODO 错误逻辑
|
||||
});
|
||||
} else {
|
||||
add${genTable.BusinessName}(form.value)
|
||||
.then((res) => {
|
||||
proxy.${modal}modal.msgSuccess("新增成功");
|
||||
open.value = false;
|
||||
getList();
|
||||
})
|
||||
.catch((err) => {
|
||||
//TODO 错误逻辑
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
// 重置查询操作
|
||||
function resetQuery(){
|
||||
$foreach(item in genTable.Columns)
|
||||
$if(item.HtmlType == "datetime" && item.IsQuery == true)
|
||||
//${item.ColumnComment}时间范围
|
||||
dateRange${item.CsharpField}.value = [];
|
||||
$end
|
||||
$end
|
||||
proxy.resetForm("queryRef");
|
||||
handleQuery();
|
||||
}
|
||||
$if(replaceDto.ShowBtnExport)
|
||||
// 导出按钮操作
|
||||
function handleExport() {
|
||||
proxy.${confirm}confirm("是否确认导出所有${genTable.functionName}数据项?", "警告", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
})
|
||||
.then(function () {
|
||||
return export${genTable.BusinessName}(queryParams);
|
||||
})
|
||||
.then((response) => {
|
||||
proxy.download(response.data.path);
|
||||
});
|
||||
}
|
||||
$end
|
||||
// 多选框选中数据
|
||||
function handleSelectionChange(selection) {
|
||||
ids.value = selection.map((item) => item.${replaceDto.FistLowerPk});
|
||||
single.value = selection.length != 1
|
||||
multiple.value = !selection.length;
|
||||
}
|
||||
// 自定义排序
|
||||
function sortChange(column) {
|
||||
if (column.prop == null || column.order == null) {
|
||||
queryParams.sort = undefined;
|
||||
queryParams.sortType = undefined;
|
||||
} else {
|
||||
queryParams.sort = column.prop;
|
||||
queryParams.sortType = column.order;
|
||||
}
|
||||
|
||||
handleQuery();
|
||||
}
|
||||
$if(replaceDto.UploadFile == 1)
|
||||
//图片上传成功方法
|
||||
function handleUploadSuccess(column, filelist) {
|
||||
form[column] = filelist;
|
||||
}
|
||||
$end
|
||||
|
||||
return {
|
||||
single,
|
||||
multiple,
|
||||
loading,
|
||||
showSearch,
|
||||
queryParams,
|
||||
total,
|
||||
rules,
|
||||
title,
|
||||
opertype,
|
||||
open,
|
||||
form,
|
||||
dataList,
|
||||
$foreach(item in genTable.Columns)
|
||||
$if((item.HtmlType == "radio" || item.HtmlType == "select" || item.HtmlType == "checkbox"))
|
||||
${item.CsharpFieldFl}Options,
|
||||
$elseif(item.HtmlType == "datetime" && item.IsQuery == true)
|
||||
dateRange${item.CsharpField},
|
||||
$elseif(item.HtmlType == "customInput")
|
||||
editIndex,
|
||||
$end
|
||||
$end
|
||||
handleQuery,
|
||||
handleAdd,
|
||||
submitForm,
|
||||
$if(replaceDto.ShowBtnExport)
|
||||
handleExport,
|
||||
$end
|
||||
resetQuery,
|
||||
handleDelete,
|
||||
handleUpdate,
|
||||
reset,
|
||||
cancel,
|
||||
queryRef,
|
||||
formRef,
|
||||
sortChange,
|
||||
getList,
|
||||
handleSelectionChange,
|
||||
$if(replaceDto.UploadFile == 1)
|
||||
handleUploadSuccess,
|
||||
$end
|
||||
};
|
||||
},
|
||||
};
|
||||
</script>
|
||||
@ -34,26 +34,23 @@ namespace ZR.CodeGenerator
|
||||
sb.AppendLine(" <el-col :lg=\"12\" v-if=\"opertype == 2\">");
|
||||
sb.AppendLine($" <el-form-item label=\"{labelName}\">{{{{form.{columnName}}}}}</el-form-item>");
|
||||
sb.AppendLine(" </el-col>");
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
//树
|
||||
if (genTable.TplCategory.Equals("tree", StringComparison.OrdinalIgnoreCase) && genTable.TreeParentCode != null && dbFieldInfo.CsharpField.Equals(genTable.TreeParentCode))
|
||||
else if (genTable.TplCategory.Equals("tree", StringComparison.OrdinalIgnoreCase) && genTable.TreeParentCode != null && dbFieldInfo.CsharpField.Equals(genTable.TreeParentCode))
|
||||
{
|
||||
//树
|
||||
sb.AppendLine(@" <el-col :lg=""24"">");
|
||||
sb.AppendLine($@" <el-form-item label=""父级id"" prop=""{columnName}"">");
|
||||
sb.AppendLine($@" <treeselect v-model=""form.{columnName}"" :options=""dataList"" :normalizer=""normalizer"" :show-count=""true"" placeholder=""选择上级菜单"" />");
|
||||
sb.AppendLine(@" </el-form-item>");
|
||||
sb.AppendLine(@" </el-col>");
|
||||
return sb.ToString();
|
||||
}
|
||||
//主键、非自增要插入,不能编辑
|
||||
if (dbFieldInfo.IsPk || dbFieldInfo.IsIncrement)
|
||||
else if (dbFieldInfo.IsPk || dbFieldInfo.IsIncrement)
|
||||
{
|
||||
sb.AppendLine(" <el-col :lg=\"12\">");
|
||||
sb.AppendLine($" <el-form-item label=\"{labelName}\" prop=\"{columnName}\">");
|
||||
//主键非自增 显示input
|
||||
if (dbFieldInfo.IsPk && !dbFieldInfo.IsIncrement)
|
||||
if (!dbFieldInfo.IsIncrement)
|
||||
{
|
||||
sb.AppendLine($" <el-input-number v-model.number=\"form.{columnName}\" controls-position=\"right\" placeholder=\"请输入{labelName}\" :disabled=\"title=='修改数据'\"/>");
|
||||
}
|
||||
@ -64,8 +61,9 @@ namespace ZR.CodeGenerator
|
||||
|
||||
sb.AppendLine(" </el-form-item>");
|
||||
sb.AppendLine(" </el-col>");
|
||||
return sb.ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (dbFieldInfo.HtmlType == GenConstants.HTML_INPUT_NUMBER)
|
||||
{
|
||||
//数字框
|
||||
@ -89,7 +87,7 @@ namespace ZR.CodeGenerator
|
||||
//图片
|
||||
sb.AppendLine(" <el-col :lg=\"24\">");
|
||||
sb.AppendLine($" <el-form-item label=\"{labelName}\" prop=\"{columnName}\">");
|
||||
sb.AppendLine($@" <UploadImage v-model=""form.{columnName}"" :data=""{{ 'storeType' : 1}}"" column=""{columnName}"" @input=""handleUploadSuccess"" />");
|
||||
sb.AppendLine($@" <UploadImage v-model=""form.{columnName}"" column=""{columnName}"" @input=""handleUploadSuccess"" />");
|
||||
sb.AppendLine(" </el-form-item>");
|
||||
sb.AppendLine(" </el-col>");
|
||||
}
|
||||
@ -162,7 +160,7 @@ namespace ZR.CodeGenerator
|
||||
sb.AppendLine(" </el-form-item>");
|
||||
sb.AppendLine(" </el-col>");
|
||||
}
|
||||
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
|
||||
@ -85,6 +85,7 @@ namespace ZR.CodeGenerator
|
||||
GenerateService(replaceDto, dto);
|
||||
GenerateControllers(replaceDto, dto);
|
||||
GenerateVueViews(replaceDto, dto);
|
||||
GenerateVue3Views(replaceDto, dto);
|
||||
GenerateVueJs(replaceDto, dto);
|
||||
GenerateSql(replaceDto, dto);
|
||||
|
||||
@ -201,7 +202,41 @@ namespace ZR.CodeGenerator
|
||||
|
||||
generateDto.GenCodes.Add(new GenCode(6, "index.vue", fullPath, result));
|
||||
}
|
||||
/// <summary>
|
||||
/// vue3
|
||||
/// </summary>
|
||||
/// <param name="replaceDto"></param>
|
||||
/// <param name="generateDto"></param>
|
||||
private static void GenerateVue3Views(ReplaceDto replaceDto, GenerateDto generateDto)
|
||||
{
|
||||
string fileName = string.Empty;
|
||||
switch (generateDto.GenTable.TplCategory)
|
||||
{
|
||||
//case "tree":
|
||||
// fileName = "TplTreeVue.txt";
|
||||
// break;
|
||||
case "crud":
|
||||
fileName = "Vue.txt";
|
||||
break;
|
||||
//case "select":
|
||||
// fileName = "TplVueSelect.txt";
|
||||
// break;
|
||||
default:
|
||||
fileName = "Vue.txt";
|
||||
break;
|
||||
}
|
||||
fileName = Path.Combine("v3", fileName);
|
||||
var tpl = FileHelper.ReadJtTemplate(fileName);
|
||||
//tpl.Set("vueQueryFormHtml", replaceDto.VueQueryFormHtml);
|
||||
//tpl.Set("VueViewEditFormRuleContent", replaceDto.VueViewEditFormRuleContent);//添加、修改表单验证规则
|
||||
//tpl.Set("VueViewFormContent", replaceDto.VueViewFormHtml);//添加、修改表单
|
||||
//tpl.Set("VueViewListContent", replaceDto.VueViewListHtml);//查询 table列
|
||||
|
||||
var result = tpl.Render();
|
||||
var fullPath = generateDto.IsPreview ? string.Empty : Path.Combine(generateDto.GenCodePath, "ZR.Vue3", "src", "views", generateDto.GenTable.ModuleName.FirstLowerCase(), $"{generateDto.GenTable.BusinessName.FirstUpperCase()}.vue");
|
||||
//Console.WriteLine(result);
|
||||
generateDto.GenCodes.Add(new GenCode(16, "index.vue", fullPath, result));
|
||||
}
|
||||
/// <summary>
|
||||
/// 生成vue页面api
|
||||
/// </summary>
|
||||
@ -478,6 +513,7 @@ namespace ZR.CodeGenerator
|
||||
options.OutMode = OutMode.Auto;
|
||||
//options.DisableeLogogram = true;//禁用简写
|
||||
options.Data.Set("refs", "$");//特殊标签替换
|
||||
options.Data.Set("modal", "$");//特殊标签替换
|
||||
options.Data.Set("index", "$");//特殊标签替换
|
||||
options.Data.Set("confirm", "$");//特殊标签替换
|
||||
options.Data.Set("nextTick", "$");
|
||||
|
||||
40
ZR.Model/Dto/Business/GendemoDto.cs
Normal file
40
ZR.Model/Dto/Business/GendemoDto.cs
Normal file
@ -0,0 +1,40 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using ZR.Model.Dto;
|
||||
using ZR.Model.Models;
|
||||
|
||||
namespace ZR.Model.Dto
|
||||
{
|
||||
/// <summary>
|
||||
/// 演示输入对象
|
||||
/// </summary>
|
||||
public class GenDemoDto
|
||||
{
|
||||
[Required(ErrorMessage = "id不能为空")]
|
||||
public int Id { get; set; }
|
||||
[Required(ErrorMessage = "名称不能为空")]
|
||||
public string Name { get; set; }
|
||||
public string Icon { get; set; }
|
||||
[Required(ErrorMessage = "显示状态不能为空")]
|
||||
public int ShowStatus { get; set; }
|
||||
public int? Sex { get; set; }
|
||||
public int? Sort { get; set; }
|
||||
public string Remark { get; set; }
|
||||
public DateTime? BeginTime { get; set; }
|
||||
public DateTime? EndTime { get; set; }
|
||||
public string Feature { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 演示查询对象
|
||||
/// </summary>
|
||||
public class GenDemoQueryDto : PagerInfo
|
||||
{
|
||||
public int? Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
public int? ShowStatus { get; set; }
|
||||
public DateTime? BeginAddTime { get; set; }
|
||||
public DateTime? EndAddTime { get; set; }
|
||||
}
|
||||
}
|
||||
103
ZR.Model/Models/Business/Gendemo.cs
Normal file
103
ZR.Model/Models/Business/Gendemo.cs
Normal file
@ -0,0 +1,103 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using SqlSugar;
|
||||
using OfficeOpenXml.Attributes;
|
||||
|
||||
namespace ZR.Model.Models
|
||||
{
|
||||
/// <summary>
|
||||
/// 演示,数据实体对象
|
||||
///
|
||||
/// @author zz
|
||||
/// @date 2022-03-31
|
||||
/// </summary>
|
||||
[SugarTable("gen_demo")]
|
||||
public class GenDemo
|
||||
{
|
||||
/// <summary>
|
||||
/// 描述 : id
|
||||
/// 空值 : false
|
||||
/// </summary>
|
||||
[EpplusTableColumn(Header = "id")]
|
||||
[SqlSugar.SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
|
||||
public int Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 描述 : 名称
|
||||
/// 空值 : false
|
||||
/// </summary>
|
||||
[EpplusTableColumn(Header = "名称")]
|
||||
public string Name { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 描述 : 图片
|
||||
/// 空值 : true
|
||||
/// </summary>
|
||||
[EpplusTableColumn(Header = "图片")]
|
||||
public string Icon { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 描述 : 显示状态
|
||||
/// 空值 : false
|
||||
/// </summary>
|
||||
[EpplusTableColumn(Header = "显示状态")]
|
||||
public int ShowStatus { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 描述 : 添加时间
|
||||
/// 空值 : true
|
||||
/// </summary>
|
||||
[EpplusTableColumn(Header = "添加时间", NumberFormat = "yyyy-MM-dd HH:mm:ss")]
|
||||
public DateTime? AddTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 描述 : 用户性别
|
||||
/// 空值 : true
|
||||
/// </summary>
|
||||
[EpplusTableColumn(Header = "用户性别")]
|
||||
public int? Sex { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 描述 : 排序
|
||||
/// 空值 : true
|
||||
/// </summary>
|
||||
[EpplusTableColumn(Header = "排序")]
|
||||
public int? Sort { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 描述 : 备注
|
||||
/// 空值 : true
|
||||
/// </summary>
|
||||
[EpplusTableColumn(Header = "备注")]
|
||||
public string Remark { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 描述 : 开始时间
|
||||
/// 空值 : true
|
||||
/// </summary>
|
||||
[EpplusTableColumn(Header = "开始时间", NumberFormat = "yyyy-MM-dd HH:mm:ss")]
|
||||
public DateTime? BeginTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 描述 : 结束时间
|
||||
/// 空值 : true
|
||||
/// </summary>
|
||||
[EpplusTableColumn(Header = "结束时间", NumberFormat = "yyyy-MM-dd HH:mm:ss")]
|
||||
public DateTime? EndTime { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 描述 : 特征
|
||||
/// 空值 : true
|
||||
/// </summary>
|
||||
[EpplusTableColumn(Header = "特征")]
|
||||
public string Feature { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 描述 : 父级id
|
||||
/// 空值 : true
|
||||
/// </summary>
|
||||
[EpplusTableColumn(Header = "父级id")]
|
||||
public int? ParentId { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
@ -112,6 +112,11 @@ namespace ZR.Model.System.Dto
|
||||
/// </summary>
|
||||
[Display(Name = "传入参数")]
|
||||
public string JobParams { get; set; }
|
||||
public string ApiUrl { get; set; }
|
||||
/// <summary>
|
||||
/// 1、程序集任务 2、apiUrl任务
|
||||
/// </summary>
|
||||
public int TaskType { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -219,6 +224,10 @@ namespace ZR.Model.System.Dto
|
||||
/// </summary>
|
||||
[Display(Name = "传入参数")]
|
||||
public string JobParams { get; set; }
|
||||
public string ApiUrl { get; set; }
|
||||
/// <summary>
|
||||
/// 1、程序集任务 2、apiUrl任务
|
||||
/// </summary>
|
||||
public int TaskType { get; set; }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -157,5 +157,13 @@ namespace ZR.Model.System
|
||||
/// 最后运行时间
|
||||
/// </summary>
|
||||
public DateTime? LastRunTime { get; set; }
|
||||
/// <summary>
|
||||
/// api执行地址
|
||||
/// </summary>
|
||||
public string ApiUrl { get; set; }
|
||||
/// <summary>
|
||||
/// 任务类型 1程序集2网络请求
|
||||
/// </summary>
|
||||
public int TaskType { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
20
ZR.Repository/Business/GendemoRepository.cs
Normal file
20
ZR.Repository/Business/GendemoRepository.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using System;
|
||||
using Infrastructure.Attribute;
|
||||
using ZR.Repository.System;
|
||||
using ZR.Model.Models;
|
||||
|
||||
namespace ZR.Repository
|
||||
{
|
||||
/// <summary>
|
||||
/// 演示仓储
|
||||
///
|
||||
/// @author zz
|
||||
/// @date 2022-03-31
|
||||
/// </summary>
|
||||
[AppService(ServiceLifetime = LifeTime.Transient)]
|
||||
public class GenDemoRepository : BaseRepository<GenDemo>
|
||||
{
|
||||
#region 业务逻辑代码
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
56
ZR.Service/Business/GendemoService.cs
Normal file
56
ZR.Service/Business/GendemoService.cs
Normal file
@ -0,0 +1,56 @@
|
||||
using Infrastructure;
|
||||
using Infrastructure.Attribute;
|
||||
using ZR.Model;
|
||||
using ZR.Model.Dto;
|
||||
using ZR.Model.Models;
|
||||
using ZR.Repository;
|
||||
using ZR.Service.Business.IBusinessService;
|
||||
using System;
|
||||
using SqlSugar;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace ZR.Service.Business
|
||||
{
|
||||
/// <summary>
|
||||
/// 演示Service业务层处理
|
||||
///
|
||||
/// @author zz
|
||||
/// @date 2022-03-31
|
||||
/// </summary>
|
||||
[AppService(ServiceType = typeof(IGenDemoService), ServiceLifetime = LifeTime.Transient)]
|
||||
public class GenDemoService : BaseService<GenDemo>, IGenDemoService
|
||||
{
|
||||
private readonly GenDemoRepository _GenDemorepository;
|
||||
public GenDemoService(GenDemoRepository repository)
|
||||
{
|
||||
_GenDemorepository = repository;
|
||||
}
|
||||
|
||||
#region 业务逻辑代码
|
||||
|
||||
/// <summary>
|
||||
/// 查询演示列表
|
||||
/// </summary>
|
||||
/// <param name="parm"></param>
|
||||
/// <returns></returns>
|
||||
public PagedInfo<GenDemo> GetList(GenDemoQueryDto parm)
|
||||
{
|
||||
//开始拼装查询条件
|
||||
var predicate = Expressionable.Create<GenDemo>();
|
||||
|
||||
//搜索条件查询语法参考Sqlsugar
|
||||
predicate = predicate.AndIF(parm.Id != null, it => it.Id == parm.Id);
|
||||
predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.Name), it => it.Name == parm.Name);
|
||||
predicate = predicate.AndIF(parm.ShowStatus != null, it => it.ShowStatus == parm.ShowStatus);
|
||||
predicate = predicate.AndIF(parm.BeginAddTime == null, it => it.AddTime >= DateTime.Now.AddDays(-1));
|
||||
predicate = predicate.AndIF(parm.BeginAddTime != null, it => it.AddTime >= parm.BeginAddTime && it.AddTime <= parm.EndAddTime);
|
||||
var response = _GenDemorepository
|
||||
.Queryable()
|
||||
.Where(predicate.ToExpression())
|
||||
.ToPage(parm);
|
||||
return response;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
20
ZR.Service/Business/IBusinessService/IGendemoService.cs
Normal file
20
ZR.Service/Business/IBusinessService/IGendemoService.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using System;
|
||||
using ZR.Model;
|
||||
using ZR.Model.Dto;
|
||||
using ZR.Model.Models;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace ZR.Service.Business.IBusinessService
|
||||
{
|
||||
/// <summary>
|
||||
/// 演示service接口
|
||||
///
|
||||
/// @author zz
|
||||
/// @date 2022-03-31
|
||||
/// </summary>
|
||||
public interface IGenDemoService : IBaseService<GenDemo>
|
||||
{
|
||||
PagedInfo<GenDemo> GetList(GenDemoQueryDto parm);
|
||||
|
||||
}
|
||||
}
|
||||
@ -7,7 +7,7 @@ namespace ZR.Tasks
|
||||
{
|
||||
public class JobFactory : IJobFactory
|
||||
{
|
||||
private NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
|
||||
private readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
|
||||
|
||||
/// <summary>
|
||||
/// 注入反射获取依赖对象
|
||||
@ -42,12 +42,10 @@ namespace ZR.Tasks
|
||||
|
||||
public void ReturnJob(IJob job)
|
||||
{
|
||||
var disposable = job as IDisposable;
|
||||
if (disposable != null)
|
||||
if (job is IDisposable disposable)
|
||||
{
|
||||
disposable.Dispose();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
33
ZR.Tasks/TaskScheduler/Job_HttpRequest.cs
Normal file
33
ZR.Tasks/TaskScheduler/Job_HttpRequest.cs
Normal file
@ -0,0 +1,33 @@
|
||||
using Infrastructure;
|
||||
using Infrastructure.Attribute;
|
||||
using Quartz;
|
||||
using Quartz.Impl;
|
||||
using Quartz.Impl.Triggers;
|
||||
using System.Threading.Tasks;
|
||||
using ZR.Service.System.IService;
|
||||
|
||||
namespace ZR.Tasks.TaskScheduler
|
||||
{
|
||||
[AppService(ServiceType = typeof(Job_HttpRequest), ServiceLifetime = LifeTime.Scoped)]
|
||||
internal class Job_HttpRequest : JobBase, IJob
|
||||
{
|
||||
private readonly ISysTasksQzService tasksQzService;
|
||||
|
||||
public Job_HttpRequest(ISysTasksQzService tasksQzService)
|
||||
{
|
||||
this.tasksQzService = tasksQzService;
|
||||
}
|
||||
public async Task Execute(IJobExecutionContext context)
|
||||
{
|
||||
await ExecuteJob(context, async () => await Run(context));
|
||||
}
|
||||
public async Task Run(IJobExecutionContext context)
|
||||
{
|
||||
AbstractTrigger trigger = (context as JobExecutionContextImpl).Trigger as AbstractTrigger;
|
||||
var info = await tasksQzService.GetByIdAsync(trigger.Name);
|
||||
|
||||
var result = await HttpHelper.HttpPostAsync("http://" + info.ApiUrl, info.JobParams);
|
||||
//Console.WriteLine(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
78
ZR.Vue/src/api/business/demo.js
Normal file
78
ZR.Vue/src/api/business/demo.js
Normal file
@ -0,0 +1,78 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 演示分页查询
|
||||
* @param {查询条件} data
|
||||
*/
|
||||
export function listDemo(query) {
|
||||
return request({
|
||||
url: 'business/Demo/list',
|
||||
method: 'get',
|
||||
params: query,
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 新增演示
|
||||
* @param data
|
||||
*/
|
||||
export function addDemo(data) {
|
||||
return request({
|
||||
url: 'business/Demo',
|
||||
method: 'post',
|
||||
data: data,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改演示
|
||||
* @param data
|
||||
*/
|
||||
export function updateDemo(data) {
|
||||
return request({
|
||||
url: 'business/Demo',
|
||||
method: 'PUT',
|
||||
data: data,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取演示详情
|
||||
* @param {Id}
|
||||
*/
|
||||
export function getDemo(id) {
|
||||
return request({
|
||||
url: 'business/Demo/' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除演示
|
||||
* @param {主键} pid
|
||||
*/
|
||||
export function delDemo(pid) {
|
||||
return request({
|
||||
url: 'business/Demo/' + pid,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
// 导出演示
|
||||
export function exportDemo(query) {
|
||||
return request({
|
||||
url: 'business/Demo/export',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
//排序
|
||||
export function changeSort(data) {
|
||||
return request({
|
||||
url: 'business/Demo/ChangeSort',
|
||||
method: 'get',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
70
ZR.Vue/src/api/business/genDemo.js
Normal file
70
ZR.Vue/src/api/business/genDemo.js
Normal file
@ -0,0 +1,70 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 演示分页查询
|
||||
* @param {查询条件} data
|
||||
*/
|
||||
export function listGenDemo(query) {
|
||||
return request({
|
||||
url: 'business/GenDemo/list',
|
||||
method: 'get',
|
||||
params: query,
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 新增演示
|
||||
* @param data
|
||||
*/
|
||||
export function addGenDemo(data) {
|
||||
return request({
|
||||
url: 'business/GenDemo',
|
||||
method: 'post',
|
||||
data: data,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改演示
|
||||
* @param data
|
||||
*/
|
||||
export function updateGenDemo(data) {
|
||||
return request({
|
||||
url: 'business/GenDemo',
|
||||
method: 'PUT',
|
||||
data: data,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取演示详情
|
||||
* @param {Id}
|
||||
*/
|
||||
export function getGenDemo(id) {
|
||||
return request({
|
||||
url: 'business/GenDemo/' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除演示
|
||||
* @param {主键} pid
|
||||
*/
|
||||
export function delGenDemo(pid) {
|
||||
return request({
|
||||
url: 'business/GenDemo/' + pid,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
// 导出演示
|
||||
export function exportGenDemo(query) {
|
||||
return request({
|
||||
url: 'business/GenDemo/export',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
@ -1,11 +1,12 @@
|
||||
<template>
|
||||
<div :class="{'has-logo':showLogo}" :style="{ backgroundColor: settings.sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground }">
|
||||
<div :class="{'has-logo':showLogo}"
|
||||
:style="{ backgroundColor: settings.sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground }">
|
||||
<logo v-if="showLogo" :collapse="isCollapse" />
|
||||
<el-scrollbar :class="settings.sideTheme" wrap-class="scrollbar-wrapper">
|
||||
|
||||
<el-menu :default-active="activeMenu" :collapse="isCollapse" :background-color="settings.sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground" :text-color="settings.sideTheme === 'theme-dark' ? variables.menuColor : variables.menuLightColor" :unique-opened="true"
|
||||
<el-menu :default-active="activeMenu" :collapse="isCollapse"
|
||||
:background-color="settings.sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground"
|
||||
:text-color="settings.sideTheme === 'theme-dark' ? variables.menuColor : variables.menuLightColor" :unique-opened="true"
|
||||
:active-text-color="settings.theme" :collapse-transition="false" mode="vertical">
|
||||
|
||||
<sidebar-item v-for="(route, index) in sidebarRouters" :key="route.path + index" :item="route" :base-path="route.path" />
|
||||
</el-menu>
|
||||
</el-scrollbar>
|
||||
@ -13,34 +14,34 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapGetters, mapState } from "vuex";
|
||||
import Logo from "./Logo";
|
||||
import SidebarItem from "./SidebarItem";
|
||||
import variables from "@/assets/styles/variables.scss";
|
||||
import { mapGetters, mapState } from 'vuex'
|
||||
import Logo from './Logo'
|
||||
import SidebarItem from './SidebarItem'
|
||||
import variables from '@/assets/styles/variables.scss'
|
||||
|
||||
export default {
|
||||
components: { SidebarItem, Logo },
|
||||
computed: {
|
||||
...mapState(["settings"]),
|
||||
...mapGetters(["sidebarRouters", "sidebar"]),
|
||||
...mapState(['settings']),
|
||||
...mapGetters(['sidebarRouters', 'sidebar']),
|
||||
activeMenu() {
|
||||
const route = this.$route;
|
||||
const { meta, path } = route;
|
||||
const route = this.$route
|
||||
const { meta, path } = route
|
||||
// if set path, the sidebar will highlight the path you set
|
||||
if (meta.activeMenu) {
|
||||
return meta.activeMenu;
|
||||
return meta.activeMenu
|
||||
}
|
||||
return path;
|
||||
return path
|
||||
},
|
||||
showLogo() {
|
||||
return this.$store.state.settings.sidebarLogo;
|
||||
return this.$store.state.settings.sidebarLogo
|
||||
},
|
||||
variables() {
|
||||
return variables;
|
||||
return variables
|
||||
},
|
||||
isCollapse() {
|
||||
return !this.sidebar.opened;
|
||||
},
|
||||
},
|
||||
};
|
||||
return !this.sidebar.opened
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@ -126,8 +126,7 @@ export default {
|
||||
this.$store
|
||||
.dispatch("Login", this.loginForm)
|
||||
.then(() => {
|
||||
this.msgSuccess("登陆成功");
|
||||
this.loading = true;
|
||||
this.msgSuccess("登录成功");
|
||||
this.$router.push({ path: this.redirect || "/" });
|
||||
})
|
||||
.catch((error) => {
|
||||
|
||||
@ -77,46 +77,71 @@
|
||||
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
|
||||
<el-row>
|
||||
<el-col :span="24" v-if="this.form.id">
|
||||
<el-col :lg="24" v-if="this.form.id">
|
||||
<el-form-item label="任务ID">
|
||||
<div>{{form.id}}</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-col :lg="12">
|
||||
<el-form-item label="任务名称" maxlength="200" prop="name">
|
||||
<el-input v-model="form.name" placeholder="请输入任务名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-col :lg="12">
|
||||
<el-form-item label="触发器类型" prop="triggerType">
|
||||
<el-select v-model="form.triggerType" placeholder="请选择触发器类型" style="width:100%">
|
||||
<el-option v-for="item in triggerTypeOptions" :key="item.value" :label="item.label" :value="parseInt(item.value)" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-col :lg="12">
|
||||
<el-form-item label="任务分组" maxlength="200" prop="jobGroup">
|
||||
<el-select v-model="form.jobGroup" placeholder="请选择">
|
||||
<el-option v-for="dict in jobGroupOptions" :key="dict.dictValue" :label="dict.dictLabel" :value="dict.dictValue"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-col :lg="24">
|
||||
<el-form-item label="任务类型" prop="taskType">
|
||||
<el-radio-group v-model="form.taskType">
|
||||
<el-radio :label="1">执行程序集</el-radio>
|
||||
<el-radio :label="2">执行url</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :lg="24" v-if="form.taskType == 2">
|
||||
<el-form-item label="apiUrl" prop="apiUrl">
|
||||
<el-input v-model="form.apiUrl" placeholder="远程调用接口url">
|
||||
<template slot="prepend">Http://</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<template v-else>
|
||||
<el-col :lg="24">
|
||||
<el-form-item label="程序集名称" maxlength="200" prop="assemblyName">
|
||||
<el-input v-model="form.assemblyName" placeholder="请输入程序集名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-col :lg="24">
|
||||
<el-form-item label="任务类名" maxlength="200" prop="className">
|
||||
<el-input v-model="form.className" placeholder="请输入任务类名" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
</template>
|
||||
|
||||
<el-col :lg="24">
|
||||
<el-form-item label="传入参数" prop="jobParams">
|
||||
<span slot="label">
|
||||
<el-tooltip content="eg:{ token: abc123}" placement="top">
|
||||
<i class="el-icon-question"></i>
|
||||
</el-tooltip>
|
||||
传入参数
|
||||
</span>
|
||||
<el-input v-model="form.jobParams" placeholder="传入参数" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24" v-show="form.triggerType == 1">
|
||||
<el-col :lg="24" v-show="form.triggerType == 1">
|
||||
<el-form-item label="间隔(Cron)" prop="cron">
|
||||
<!-- <el-input placeholder="如10分钟执行一次:0/0 0/10 * * * ?" v-model="form.cron">
|
||||
<el-link slot="append" href="https://qqe2.com/cron" type="primary" target="_blank" class="mr10">cron在线生成</el-link>
|
||||
@ -131,22 +156,28 @@
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-col :lg="12">
|
||||
<el-form-item label="开始日期" prop="beginTime">
|
||||
<span slot="label">
|
||||
<el-tooltip content="如果不写开始时间和结束时间,任务将以当前时间开始执行,到9999年结束" placement="top">
|
||||
<i class="el-icon-question"></i>
|
||||
</el-tooltip>
|
||||
开始日期
|
||||
</span>
|
||||
<el-date-picker v-model="form.beginTime" style="width:100%" type="date" :picker-options="pickerOptions" placeholder="选择开始日期" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-col :lg="12">
|
||||
<el-form-item label="结束日期" prop="endTime">
|
||||
<el-date-picker v-model="form.endTime" style="width:100%" type="date" placeholder="选择结束日期" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-col :lg="24">
|
||||
<el-form-item v-show="form.triggerType == 0" label="执行间隔(秒)" prop="intervalSecond">
|
||||
<el-input-number v-model="form.intervalSecond" :max="9999999999" step-strictly controls-position="right" :min="1" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-col :lg="24">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input type="textarea" v-model="form.remark" />
|
||||
</el-form-item>
|
||||
@ -178,6 +209,7 @@
|
||||
<script>
|
||||
import {
|
||||
queryTasks,
|
||||
getTasks,
|
||||
createTasks,
|
||||
updateTasks,
|
||||
deleteTasks,
|
||||
@ -311,6 +343,9 @@ export default {
|
||||
triggerType: [
|
||||
{ required: true, message: '请选择触发器类型', trigger: 'blur' }
|
||||
],
|
||||
apiUrl: [
|
||||
{ required: true, message: '请输入apiUrl地址', trigger: 'blur' }
|
||||
],
|
||||
cron: [{ validator: cronValidate, trigger: 'blur' }],
|
||||
beginTime: [{ validator: beginTimeValidate, trigger: 'blur' }],
|
||||
endTime: [{ validator: endTimeValidate, trigger: 'blur' }],
|
||||
@ -376,9 +411,11 @@ export default {
|
||||
handleUpdate(row) {
|
||||
this.reset()
|
||||
|
||||
this.form = row
|
||||
getTasks(row.id).then((res) => {
|
||||
this.form = res.data
|
||||
this.open = true
|
||||
this.title = '修改计划任务'
|
||||
})
|
||||
},
|
||||
/** 任务日志列表查询 */
|
||||
handleJobLog(id, title) {
|
||||
@ -407,10 +444,7 @@ export default {
|
||||
handleStart(row) {
|
||||
startTasks(row.id).then((response) => {
|
||||
if (response.code === 200) {
|
||||
this.$message({
|
||||
message: response.msg,
|
||||
type: 'success'
|
||||
})
|
||||
this.msgSuccess(response.msg)
|
||||
this.open = false
|
||||
this.getList()
|
||||
}
|
||||
@ -420,10 +454,7 @@ export default {
|
||||
handleStop(row) {
|
||||
stopTasks(row.id).then((response) => {
|
||||
if (response.code === 200) {
|
||||
this.$message({
|
||||
message: response.msg,
|
||||
type: 'success'
|
||||
})
|
||||
this.msgSuccess(response.msg)
|
||||
this.open = false
|
||||
this.getList()
|
||||
}
|
||||
@ -446,10 +477,7 @@ export default {
|
||||
deleteTasks(jobInfo.id).then((response) => {
|
||||
if (response.code === 200) {
|
||||
this.getList()
|
||||
this.$message({
|
||||
message: '删除成功',
|
||||
type: 'success'
|
||||
})
|
||||
this.msgSuccess('删除成功')
|
||||
}
|
||||
})
|
||||
})
|
||||
@ -466,10 +494,7 @@ export default {
|
||||
}).then((res) => {
|
||||
runTasks(jobInfo.id).then((res) => {
|
||||
if (res.code === 200) {
|
||||
this.$message({
|
||||
message: '执行成功',
|
||||
type: 'success'
|
||||
})
|
||||
this.msgSuccess('执行成功')
|
||||
this.getList()
|
||||
}
|
||||
})
|
||||
@ -482,10 +507,7 @@ export default {
|
||||
if (this.form.id !== undefined) {
|
||||
updateTasks(this.form).then((response) => {
|
||||
if (response.code === 200) {
|
||||
this.$message({
|
||||
message: '修改成功',
|
||||
type: 'success'
|
||||
})
|
||||
this.msgSuccess('修改成功')
|
||||
this.open = false
|
||||
this.getList()
|
||||
}
|
||||
@ -493,10 +515,7 @@ export default {
|
||||
} else {
|
||||
createTasks(this.form).then((response) => {
|
||||
if (response.code === 200) {
|
||||
this.$message({
|
||||
message: '新增成功',
|
||||
type: 'success'
|
||||
})
|
||||
this.msgSuccess('新增成功')
|
||||
this.open = false
|
||||
this.getList()
|
||||
}
|
||||
@ -524,7 +543,8 @@ export default {
|
||||
beginTime: undefined,
|
||||
endTime: undefined,
|
||||
intervalSecond: 1,
|
||||
cron: undefined
|
||||
cron: undefined,
|
||||
taskType: 1
|
||||
}
|
||||
this.resetForm('form')
|
||||
},
|
||||
|
||||
@ -41,14 +41,10 @@
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['system:user:add']">新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<!-- <el-col :span="1.5">
|
||||
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
|
||||
v-hasPermi="['system:user:edit']">修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
|
||||
v-hasPermi="['system:user:remove']">删除</el-button>
|
||||
</el-col>
|
||||
</el-col> -->
|
||||
<el-col :span="1.5">
|
||||
<el-button type="info" plain icon="el-icon-upload2" size="mini" @click="handleImport" v-hasPermi="['system:user:import']">导入</el-button>
|
||||
</el-col>
|
||||
@ -59,7 +55,6 @@
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
|
||||
</el-row>
|
||||
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="50" align="center" />
|
||||
<el-table-column label="编号" align="center" prop="userId" width="60" />
|
||||
<el-table-column label="登录名" align="center" prop="userName" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="昵称" align="center" prop="nickName" :show-overflow-tooltip="true" />
|
||||
|
||||
@ -26,6 +26,8 @@ CREATE TABLE `Sys_TasksQz` (
|
||||
`create_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人编码',
|
||||
`update_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人编码',
|
||||
`lastRunTime` datetime(0) NULL DEFAULT NULL COMMENT '最后执行时间',
|
||||
`apiUrl` varchar(200) NULL DEFAULT NULL COMMENT '网络请求地址',
|
||||
`taskType` int(11) NULL DEFAULT NULL COMMENT '任务类型1程序集 2网络请求'
|
||||
PRIMARY KEY (`ID`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '计划任务' ROW_FORMAT = Dynamic;
|
||||
|
||||
|
||||
@ -25,6 +25,8 @@ CREATE TABLE sys_tasksQz
|
||||
create_by varchar(50) NULL DEFAULT NULL , --'创建人编码',
|
||||
update_by varchar(50) NULL DEFAULT NULL , --'更新人编码',
|
||||
lastRunTime datetime , --最后执行时间
|
||||
taskType int null , --任务类型 1程序集 2网络请求
|
||||
apiUrl varchar(200) --网络请求地址
|
||||
)
|
||||
GO
|
||||
INSERT INTO sys_tasksQz VALUES ('1410905433996136448', '测试任务', 'SYSTEM', '0 0/10 * * * ? ', 'ZR.Tasks', 'TaskScheduler.Job_SyncTest', NULL, 0, '2021-07-02 18:17:31', '9999-12-31 00:00:00', 1, 1, 1, NULL, '2021-07-02 18:17:23', '2021-07-02 18:17:31', 'admin', NULL, NULL);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user