合併衝突
This commit is contained in:
commit
d2e1549c3b
@ -30,6 +30,7 @@ namespace SolarPower.Controllers
|
|||||||
|
|
||||||
protected ILogger<T> Logger => _logger ?? (_logger = HttpContext?.RequestServices.GetService<ILogger<T>>());
|
protected ILogger<T> Logger => _logger ?? (_logger = HttpContext?.RequestServices.GetService<ILogger<T>>());
|
||||||
private IUserRepository userRepository => HttpContext?.RequestServices.GetService<IUserRepository>();
|
private IUserRepository userRepository => HttpContext?.RequestServices.GetService<IUserRepository>();
|
||||||
|
private IOperationRepository operationRepository => HttpContext?.RequestServices.GetService<IOperationRepository>();
|
||||||
private ICompanyRepository companyRepository => HttpContext?.RequestServices.GetService<ICompanyRepository>();
|
private ICompanyRepository companyRepository => HttpContext?.RequestServices.GetService<ICompanyRepository>();
|
||||||
private IRoleRepository roleRepository => HttpContext?.RequestServices.GetService<IRoleRepository>();
|
private IRoleRepository roleRepository => HttpContext?.RequestServices.GetService<IRoleRepository>();
|
||||||
private IOperatorLogRepository operatorLogRepository => HttpContext?.RequestServices.GetService<IOperatorLogRepository>();
|
private IOperatorLogRepository operatorLogRepository => HttpContext?.RequestServices.GetService<IOperatorLogRepository>();
|
||||||
|
|||||||
57
SolarPower/Controllers/OperationController.cs
Normal file
57
SolarPower/Controllers/OperationController.cs
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using SolarPower.Models;
|
||||||
|
using SolarPower.Models.Role;
|
||||||
|
using SolarPower.Repository.Interface;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace SolarPower.Controllers
|
||||||
|
{
|
||||||
|
public class OperationController : MyBaseController<OperationController>
|
||||||
|
{
|
||||||
|
private readonly IUserRepository userRepository;
|
||||||
|
private readonly IOperationRepository operationRepository;
|
||||||
|
private readonly IRoleRepository roleRepository;
|
||||||
|
public OperationController(
|
||||||
|
IUserRepository userRepository,
|
||||||
|
IOperationRepository operationRepository) : base()
|
||||||
|
{
|
||||||
|
this.userRepository = userRepository;
|
||||||
|
this.operationRepository = operationRepository;
|
||||||
|
}
|
||||||
|
public IActionResult Index()
|
||||||
|
{
|
||||||
|
return View();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<ActionResult> GetPowerStationSelectOption(int post)
|
||||||
|
{
|
||||||
|
ApiResult<List<PowerStationIdList>> apiResult = new ApiResult<List<PowerStationIdList>>();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var PowerStationIdLists = new List<PowerStationIdList>();
|
||||||
|
PowerStationIdLists = await operationRepository.GetPowerStationIdList(post) ;
|
||||||
|
apiResult.Code = "0000";
|
||||||
|
apiResult.Data = PowerStationIdLists;
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
apiResult.Code = "9999";
|
||||||
|
Logger.LogError("【" + controllerName + "/" + actionName + "】" + exception.Message);
|
||||||
|
}
|
||||||
|
|
||||||
|
apiResult.Msg = errorCode.GetString(apiResult.Code);
|
||||||
|
|
||||||
|
var result = Json(new
|
||||||
|
{
|
||||||
|
data = apiResult
|
||||||
|
});
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
29
SolarPower/Models/Operation.cs
Normal file
29
SolarPower/Models/Operation.cs
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace SolarPower.Models
|
||||||
|
{
|
||||||
|
public class Operation:Created
|
||||||
|
{
|
||||||
|
public int Id { get; set; }//流水號
|
||||||
|
public byte Delete { get; set; }//刪除
|
||||||
|
public string PlanId { get; set; }//計畫單號
|
||||||
|
public int PowerStationId { get; set; }//電站編號
|
||||||
|
public string SerialNumber { get; set; }//計畫單號用流水號
|
||||||
|
public int ScheduleNum { get; set; }//排程數字
|
||||||
|
public byte ScheduleType { get; set; }//排程屬性,0:天 1:周 2:月 3:季 4:年
|
||||||
|
public int WorkDay { get; set; }//預期工作天數
|
||||||
|
public DateTime StartTime { get; set; }//開始時間
|
||||||
|
public byte Type { get; set; }//項目, 0:清洗 1:巡檢
|
||||||
|
public byte EmailType { get; set; }//email提醒種類,0:當天 1:前一天 2:前兩天 3:前三天
|
||||||
|
public string Description { get; set; }//描述
|
||||||
|
|
||||||
|
}
|
||||||
|
public class PowerStationIdList
|
||||||
|
{
|
||||||
|
public string Text { get; set; }
|
||||||
|
public string Value { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
39
SolarPower/Repository/Implement/OperationRepository.cs
Normal file
39
SolarPower/Repository/Implement/OperationRepository.cs
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
using Dapper;
|
||||||
|
using SolarPower.Helper;
|
||||||
|
using SolarPower.Models;
|
||||||
|
using SolarPower.Repository.Interface;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Data;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace SolarPower.Repository.Implement
|
||||||
|
{
|
||||||
|
public class OperationRepository : RepositoryBase<Operation>, IOperationRepository
|
||||||
|
{
|
||||||
|
public OperationRepository(IDatabaseHelper databaseHelper) : base(databaseHelper)
|
||||||
|
{
|
||||||
|
tableName = "operation_plan_create";
|
||||||
|
}
|
||||||
|
public async Task<List<PowerStationIdList>> GetPowerStationIdList(int UserId)
|
||||||
|
{
|
||||||
|
List<PowerStationIdList> result;
|
||||||
|
using (IDbConnection conn = this._databaseHelper.GetConnection())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var sql = @$"SELECT tn.Id AS Value, tn.Name AS Text FROM {tableName} tn LEFT JOIN power_station_operation_personnel pp
|
||||||
|
ON tn.Id=pp.PowerStationId
|
||||||
|
WHERE pp.UserId = @userid";
|
||||||
|
result = (await conn.QueryAsync<PowerStationIdList>(sql, new { userid = UserId })).ToList();
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
throw exception;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
11
SolarPower/Repository/Interface/IOperation.cs
Normal file
11
SolarPower/Repository/Interface/IOperation.cs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace SolarPower.Repository.Interface
|
||||||
|
{
|
||||||
|
interface IOperation
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
13
SolarPower/Repository/Interface/IOperationRepository.cs
Normal file
13
SolarPower/Repository/Interface/IOperationRepository.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using SolarPower.Models;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace SolarPower.Repository.Interface
|
||||||
|
{
|
||||||
|
public interface IOperationRepository
|
||||||
|
{
|
||||||
|
Task<List<PowerStationIdList>> GetPowerStationIdList(int UserId);
|
||||||
|
}
|
||||||
|
}
|
||||||
11
SolarPower/Repository/Interface/Interface.cs
Normal file
11
SolarPower/Repository/Interface/Interface.cs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace SolarPower.Repository.Interface
|
||||||
|
{
|
||||||
|
interface Interface
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -7,6 +7,22 @@
|
|||||||
<UserSecretsId>9c9a93c3-c4f5-4cc2-92ea-0ae0a51be5d3</UserSecretsId>
|
<UserSecretsId>9c9a93c3-c4f5-4cc2-92ea-0ae0a51be5d3</UserSecretsId>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Remove="Views\NewFolder\**" />
|
||||||
|
<Content Remove="Views\NewFolder\**" />
|
||||||
|
<EmbeddedResource Remove="Views\NewFolder\**" />
|
||||||
|
<None Remove="Views\NewFolder\**" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Remove="Repository\Interface\Interface.cs" />
|
||||||
|
<Compile Remove="Repository\Interface\IOperation.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Content Remove="Views\Operation\_OperationPlanCreate.cshtml" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Dapper" Version="2.0.78" />
|
<PackageReference Include="Dapper" Version="2.0.78" />
|
||||||
<PackageReference Include="MySql.Data" Version="8.0.24" />
|
<PackageReference Include="MySql.Data" Version="8.0.24" />
|
||||||
|
|||||||
@ -66,6 +66,7 @@ namespace SolarPower
|
|||||||
services.AddScoped<IRoleRepository, RoleRepository>();
|
services.AddScoped<IRoleRepository, RoleRepository>();
|
||||||
services.AddScoped<IPowerStationRepository, PowerStationRepository>();
|
services.AddScoped<IPowerStationRepository, PowerStationRepository>();
|
||||||
services.AddScoped<IOperatorLogRepository, OperatorLogRepository>();
|
services.AddScoped<IOperatorLogRepository, OperatorLogRepository>();
|
||||||
|
services.AddScoped<IOperationRepository, OperationRepository>();
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
double loginExpireMinute = this.Configuration.GetValue<double>("LoginExpireMinute");
|
double loginExpireMinute = this.Configuration.GetValue<double>("LoginExpireMinute");
|
||||||
|
|||||||
@ -509,28 +509,37 @@
|
|||||||
$('#company_table').on("click", "button.del-btn", function () {
|
$('#company_table').on("click", "button.del-btn", function () {
|
||||||
|
|
||||||
selected_id = $(this).parents('tr').attr('data-id');
|
selected_id = $(this).parents('tr').attr('data-id');
|
||||||
|
Swal.fire(
|
||||||
|
{
|
||||||
|
title: "刪除",
|
||||||
|
text: "你確定是否刪除此筆資料?",
|
||||||
|
type: "warning",
|
||||||
|
icon: 'warning',
|
||||||
|
showCancelButton: true,
|
||||||
|
confirmButtonText: "是",
|
||||||
|
cancelButtonText: "否"
|
||||||
|
}).then(function (result) {
|
||||||
|
if (result.value) {
|
||||||
|
//取得單一系統管理員
|
||||||
|
var url = "/Company/DeleteOneCompany/";
|
||||||
|
var send_data = {
|
||||||
|
Id: selected_id
|
||||||
|
}
|
||||||
|
$.post(url, send_data, function (rel) {
|
||||||
|
if (rel.code == "9999") {
|
||||||
|
toast_error(rel.msg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (rel.code == "9998") {
|
||||||
|
toast_error(rel.msg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//取得單一系統管理員
|
toast_ok(rel.msg);
|
||||||
var url = "/Company/DeleteOneCompany/";
|
companyTable.ajax.reload();
|
||||||
|
}, 'json');
|
||||||
var send_data = {
|
}
|
||||||
Id: selected_id
|
});
|
||||||
}
|
|
||||||
|
|
||||||
$.post(url, send_data, function (rel) {
|
|
||||||
if (rel.code == "9999") {
|
|
||||||
toast_error(rel.msg);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else if (rel.code == "9998") {
|
|
||||||
toast_error(rel.msg);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
toast_ok(rel.msg);
|
|
||||||
companyTable.ajax.reload();
|
|
||||||
}, 'json');
|
|
||||||
|
|
||||||
});
|
});
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
|
|||||||
313
SolarPower/Views/Operation/Index.cshtml
Normal file
313
SolarPower/Views/Operation/Index.cshtml
Normal file
@ -0,0 +1,313 @@
|
|||||||
|
@{
|
||||||
|
ViewData["MainNum"] = "5";
|
||||||
|
ViewData["SubNum"] = "1";
|
||||||
|
ViewData["Title"] = "運維管理";
|
||||||
|
}
|
||||||
|
@using SolarPower.Models.Role
|
||||||
|
@model RoleLayerEnum
|
||||||
|
|
||||||
|
<ol class="breadcrumb page-breadcrumb">
|
||||||
|
<li class="breadcrumb-item"><a href="javascript:void(0);">系統管理</a></li>
|
||||||
|
<li class="breadcrumb-item active">定期計畫建立</li>
|
||||||
|
<li class="position-absolute pos-top pos-right d-none d-sm-block"><span class="js-get-date"></span></li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<div class="subheader">
|
||||||
|
<h1 class="subheader-title">
|
||||||
|
<i class='subheader-icon fal fa-globe'></i> 定期計畫建立
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
<!-- Your main content goes below here: -->
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-xl-12">
|
||||||
|
<div id="panel-5" class="panel">
|
||||||
|
<div class="panel-container show">
|
||||||
|
<div class="panel-content">
|
||||||
|
|
||||||
|
<div class="row mb-3 px-3">
|
||||||
|
<div class="pr-3">
|
||||||
|
<div class="btn-group btn-group-md">
|
||||||
|
<button type="button" class="btn btn-success waves-effect waves-themed">全部</button>
|
||||||
|
<button type="button" class="btn btn-secondary waves-effect waves-themed">巡檢</button>
|
||||||
|
<button type="button" class="btn btn-secondary waves-effect waves-themed">清洗</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-3 d-flex align-items-center px-3">
|
||||||
|
<div class="pr-3">
|
||||||
|
<button type="button" class="btn btn-secondary waves-effect waves-themed">全部縣市</button>
|
||||||
|
</div>
|
||||||
|
<div class="pr-3">
|
||||||
|
<div class="frame-wrap">
|
||||||
|
<button type="button" class="btn btn-outline-success waves-effect waves-themed">
|
||||||
|
新北市
|
||||||
|
<span class="badge bg-success-700 ml-2">4</span>
|
||||||
|
</button>
|
||||||
|
<button type="button" class="btn btn-outline-success waves-effect waves-themed">
|
||||||
|
台北市
|
||||||
|
<span class="badge bg-success-700 ml-2">4</span>
|
||||||
|
</button>
|
||||||
|
<button type="button" class="btn btn-success waves-effect waves-themed">
|
||||||
|
新竹市
|
||||||
|
<span class="badge bg-success-700 ml-2">4</span>
|
||||||
|
</button>
|
||||||
|
<button type="button" class="btn btn-outline-success waves-effect waves-themed">
|
||||||
|
苗栗縣
|
||||||
|
<span class="badge bg-success-700 ml-2">4</span>
|
||||||
|
</button>
|
||||||
|
<button type="button" class="btn btn-outline-success waves-effect waves-themed">
|
||||||
|
台中市
|
||||||
|
<span class="badge bg-success-700 ml-2">4</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-5 d-flex align-items-center px-3">
|
||||||
|
<div class="pr-3">
|
||||||
|
<button type="button" class="btn btn-secondary waves-effect waves-themed">全選</button>
|
||||||
|
</div>
|
||||||
|
<div class="pr-3">
|
||||||
|
<div class="frame-wrap">
|
||||||
|
<div class="custom-control custom-checkbox custom-control-inline">
|
||||||
|
<input type="checkbox" class="custom-control-input" id="defaultInline6">
|
||||||
|
<label class="custom-control-label" for="defaultInline6">新竹交大站</label>
|
||||||
|
</div>
|
||||||
|
<div class="custom-control custom-checkbox custom-control-inline">
|
||||||
|
<input type="checkbox" class="custom-control-input" id="defaultInline7" checked="">
|
||||||
|
<label class="custom-control-label" for="defaultInline7">新竹巨城站</label>
|
||||||
|
</div>
|
||||||
|
<div class="custom-control custom-checkbox custom-control-inline">
|
||||||
|
<input type="checkbox" class="custom-control-input" id="defaultInline8" checked="">
|
||||||
|
<label class="custom-control-label" for="defaultInline8">新竹動物園站</label>
|
||||||
|
</div>
|
||||||
|
<div class="custom-control custom-checkbox custom-control-inline">
|
||||||
|
<input type="checkbox" class="custom-control-input" id="defaultInline9" checked="">
|
||||||
|
<label class="custom-control-label" for="defaultInline9">新竹城隍廟站</label>
|
||||||
|
</div>
|
||||||
|
<div class="custom-control custom-checkbox custom-control-inline">
|
||||||
|
<input type="checkbox" class="custom-control-input" id="defaultInline10" checked="">
|
||||||
|
<label class="custom-control-label" for="defaultInline10">新竹清大站</label>
|
||||||
|
</div>
|
||||||
|
<div class="custom-control custom-checkbox custom-control-inline">
|
||||||
|
<input type="checkbox" class="custom-control-input" id="defaultInline11" checked="">
|
||||||
|
<label class="custom-control-label" for="defaultInline11">新竹高鐵站</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row d-flex justify-content-end px-3">
|
||||||
|
<button type="button" class="btn btn-info waves-effect waves-themed mb-3 mr-2">
|
||||||
|
<span class="fal fa-file-excel mr-1"></span>
|
||||||
|
匯出
|
||||||
|
</button>
|
||||||
|
<a href="javascript:;" class="btn btn-success waves-effect waves-themed mb-3 mr-2" data-toggle="modal" data-target="#companyrule">
|
||||||
|
<span class="fal fa-plus mr-1"></span>
|
||||||
|
計劃
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="frame-wrap">
|
||||||
|
<table class="table table-bordered table-hover m-0 text-center">
|
||||||
|
<thead class="thead-themed">
|
||||||
|
<tr>
|
||||||
|
<th>計劃單號</th>
|
||||||
|
<th>項目</th>
|
||||||
|
<th>電站</th>
|
||||||
|
<th>排程</th>
|
||||||
|
<th>開始時間</th>
|
||||||
|
<th>填寫表單</th>
|
||||||
|
<th>描述</th>
|
||||||
|
<th>email 通知</th>
|
||||||
|
<th>建立人</th>
|
||||||
|
<th>建立時間</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">20210630003</th>
|
||||||
|
<td>巡檢</td>
|
||||||
|
<td>新竹交大站</td>
|
||||||
|
<td>每次5天內 / 1周</td>
|
||||||
|
<td>王小明</td>
|
||||||
|
<td>巡檢單01</td>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
<div class="custom-control custom-checkbox">
|
||||||
|
<input type="checkbox" class="custom-control-input" id="defaultChecked" checked="">
|
||||||
|
<label class="custom-control-label" for="defaultChecked">當天</label>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td>鋼鐵人</td>
|
||||||
|
<td>2021-03-5</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">20210630003</th>
|
||||||
|
<td>清洗</td>
|
||||||
|
<td>新竹交大站</td>
|
||||||
|
<td>每次5天內 / 5周</td>
|
||||||
|
<td>鋼鐵人</td>
|
||||||
|
<td>清洗單02</td>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
<div class="custom-control custom-checkbox">
|
||||||
|
<input type="checkbox" class="custom-control-input" id="defaultChecked" checked="">
|
||||||
|
<label class="custom-control-label" for="defaultChecked">前一天</label>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td>浩克</td>
|
||||||
|
<td>2021-03-5</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th scope="row">20210630003</th>
|
||||||
|
<td>清洗</td>
|
||||||
|
<td>新竹交大站</td>
|
||||||
|
<td>每次5天內 / 5周</td>
|
||||||
|
<td>鋼鐵人</td>
|
||||||
|
<td>清洗單02</td>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
<div class="custom-control custom-checkbox">
|
||||||
|
<input type="checkbox" class="custom-control-input" id="defaultChecked" checked="">
|
||||||
|
<label class="custom-control-label" for="defaultChecked">前一天</label>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td>浩克</td>
|
||||||
|
<td>2021-03-5</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="modal fade" id="Operation-modal" tabindex="-1" role="dialog" aria-hidden="true">
|
||||||
|
<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h4 class="modal-title">
|
||||||
|
新增/修改 定期計劃
|
||||||
|
</h4>
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
||||||
|
<span aria-hidden="true"><i class="fal fa-times"></i></span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<div class="row mb-3">
|
||||||
|
<div class="col-lg-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label" for="operation_powerStationselect_modal">電站名</label>
|
||||||
|
<select class="form-control" id="operation_powerStationselect_modal">
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label" for="operation_type_modal">項目</label>
|
||||||
|
<select class="form-control" id="operation_type_modal">
|
||||||
|
<option value="0">清洗</option>
|
||||||
|
<option value="1">巡檢</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row mb-3">
|
||||||
|
<div class="col-lg-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="row d-flex justify-content-start align-items-center">
|
||||||
|
<div class="col-4">自動排程 每</div>
|
||||||
|
<div class="col">
|
||||||
|
<input type="text" id="operation_scheduleNum_modal" class="form-control">
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<select class="form-control" id="operation_scheduleType_modal" width="70" style="width: 70px">
|
||||||
|
<option value="0">天</option>
|
||||||
|
<option value="1">週</option>
|
||||||
|
<option value="2">月</option>
|
||||||
|
<option value="3">季</option>
|
||||||
|
<option value="4">年</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="col">安排一次</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="row d-flex justify-content-start align-items-center">
|
||||||
|
<div class="col-3">每次預期</div>
|
||||||
|
<div class="col">
|
||||||
|
<input type="text" id="operation_workDay_modal" class="form-control">
|
||||||
|
</div>
|
||||||
|
<div class="col">天內完成</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="row d-flex justify-content-start align-items-center">
|
||||||
|
<div class="col-3">開始時間</div>
|
||||||
|
<div class="col">
|
||||||
|
<input type="text" id="operation_startTime_modal" class="form-control" placeholder="2000-01-01">
|
||||||
|
</div>
|
||||||
|
<div class="col">~<font id="operation_endTime_modal">2021-06-30</font></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label" for="operation_description_modal">描述</label>
|
||||||
|
<textarea class="form-control" id="operation_description_modal" rows="5"></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-3">
|
||||||
|
<div class="col-lg-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label" for="operation_emailType_modal">email提醒</label>
|
||||||
|
<select class="form-control" id="operation_emailType_modal">
|
||||||
|
<option value="0">當天</option>
|
||||||
|
<option value="1">前1天</option>
|
||||||
|
<option value="2">前2天</option>
|
||||||
|
<option value="3">前3天</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
|
||||||
|
<button type="button" class="btn btn-primary">確定</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
@section Scripts{
|
||||||
|
<script>
|
||||||
|
$(function () {
|
||||||
|
//#region 電站下拉式選單select_option
|
||||||
|
var url_operation_select_option = "/Operation/GetPowerStationSelectOption";
|
||||||
|
$.get(url_operation_select_option, function (rel) {
|
||||||
|
if (rel.code != "0000") {
|
||||||
|
toast_error(rel.msg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$("#company_select").empty();
|
||||||
|
$("#company_select").append($("<option />").val(0).text("全部"));
|
||||||
|
|
||||||
|
$.each(rel.data, function (index, val) {
|
||||||
|
$("#company_select").append($("<option />").val(val.value).text(val.text));
|
||||||
|
});
|
||||||
|
|
||||||
|
//預設查詢第一個
|
||||||
|
$("#company_select").val($("#company_select option:first").val()).trigger('change');
|
||||||
|
});
|
||||||
|
//#endregion
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
}
|
||||||
13
SolarPower/Views/Operation/_OperationPlanCreate.cshtml
Normal file
13
SolarPower/Views/Operation/_OperationPlanCreate.cshtml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta name="viewport" content="width=device-width" />
|
||||||
|
<title>@ViewBag.Title</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div>
|
||||||
|
@RenderBody()
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@ -92,9 +92,8 @@
|
|||||||
var isLandBuildingLock = false;
|
var isLandBuildingLock = false;
|
||||||
var selected_id = 0;
|
var selected_id = 0;
|
||||||
var countPowerStationImage = 0; var countPowerStationSingleLine = 0;
|
var countPowerStationImage = 0; var countPowerStationSingleLine = 0;
|
||||||
|
var upper = 0;
|
||||||
$(function () {
|
$(function () {
|
||||||
|
|
||||||
var url = new URL(location.href);
|
var url = new URL(location.href);
|
||||||
stationId = url.searchParams.get('stationId');
|
stationId = url.searchParams.get('stationId');
|
||||||
//#region 運維列表 DataTable
|
//#region 運維列表 DataTable
|
||||||
@ -344,6 +343,7 @@
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
@ -1327,23 +1327,32 @@
|
|||||||
//刪除
|
//刪除
|
||||||
$('#land_buildingPart').on("click", "button.del-land-building-info-btn", function () {
|
$('#land_buildingPart').on("click", "button.del-land-building-info-btn", function () {
|
||||||
selectedLandBuildingId = $(this).attr("data-land-building-id");
|
selectedLandBuildingId = $(this).attr("data-land-building-id");
|
||||||
|
Swal.fire(
|
||||||
var url = "/PowerStation/DeleteLandBuildingInfo";
|
{
|
||||||
|
title: "刪除",
|
||||||
var send_data = {
|
text: "你確定是否刪除此筆資料?",
|
||||||
Id: selectedLandBuildingId
|
type: "warning",
|
||||||
}
|
icon: 'warning',
|
||||||
|
showCancelButton: true,
|
||||||
$.post(url, send_data, function (rel) {
|
confirmButtonText: "是",
|
||||||
if (rel.code != "0000") {
|
cancelButtonText: "否"
|
||||||
toast_error(rel.msg);
|
}).then(function (result) {
|
||||||
return;
|
if (result.value) {
|
||||||
}
|
var url = "/PowerStation/DeleteLandBuildingInfo";
|
||||||
|
var send_data = {
|
||||||
toast_ok(rel.msg);
|
Id: selectedLandBuildingId
|
||||||
powerStationData = rel.data;
|
}
|
||||||
SetLandBuildingInfo();
|
$.post(url, send_data, function (rel) {
|
||||||
}, 'json');
|
if (rel.code != "0000") {
|
||||||
|
toast_error(rel.msg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
toast_ok(rel.msg);
|
||||||
|
powerStationData = rel.data;
|
||||||
|
SetLandBuildingInfo();
|
||||||
|
}, 'json');
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
//新增土地房屋卡片
|
//新增土地房屋卡片
|
||||||
@ -1443,25 +1452,32 @@
|
|||||||
|
|
||||||
//#region 刪除運維資料
|
//#region 刪除運維資料
|
||||||
$('#Operation_table').on("click", "button.del-btn", function () {
|
$('#Operation_table').on("click", "button.del-btn", function () {
|
||||||
|
|
||||||
selected_id = $(this).parents('tr').attr('data-id');
|
selected_id = $(this).parents('tr').attr('data-id');
|
||||||
|
Swal.fire(
|
||||||
var url = "/PowerStation/DeleteOneOperation/";
|
{
|
||||||
|
title: "刪除",
|
||||||
var send_data = {
|
text: "你確定是否刪除此筆資料?",
|
||||||
Id: selected_id
|
type: "warning",
|
||||||
}
|
icon: 'warning',
|
||||||
|
showCancelButton: true,
|
||||||
$.post(url, send_data, function (rel) {
|
confirmButtonText: "是",
|
||||||
if (rel.code == "9999") {
|
cancelButtonText: "否"
|
||||||
toast_error(rel.msg);
|
}).then(function (result) {
|
||||||
return;
|
if (result.value) {
|
||||||
}
|
var url = "/PowerStation/DeleteOneOperation/";
|
||||||
|
var send_data = {
|
||||||
toast_ok(rel.msg);
|
Id: selected_id
|
||||||
OperationTable.ajax.reload();
|
}
|
||||||
}, 'json');
|
$.post(url, send_data, function (rel) {
|
||||||
|
if (rel.code != "0000") {
|
||||||
|
toast_error(rel.msg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
toast_ok(rel.msg);
|
||||||
|
OperationTable.ajax.reload();
|
||||||
|
}, 'json');
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
@ -1547,25 +1563,32 @@
|
|||||||
|
|
||||||
//#region 刪除裝置
|
//#region 刪除裝置
|
||||||
$('#Device_table').on("click", "button.del-btn", function () {
|
$('#Device_table').on("click", "button.del-btn", function () {
|
||||||
|
|
||||||
selected_id = $(this).parents('tr').attr('data-id');
|
selected_id = $(this).parents('tr').attr('data-id');
|
||||||
|
Swal.fire(
|
||||||
var url = "/PowerStation/DeleteOneDevice/";
|
{
|
||||||
|
title: "刪除",
|
||||||
var send_data = {
|
text: "你確定是否刪除此筆資料?",
|
||||||
Id: selected_id
|
type: "warning",
|
||||||
}
|
icon: 'warning',
|
||||||
|
showCancelButton: true,
|
||||||
$.post(url, send_data, function (rel) {
|
confirmButtonText: "是",
|
||||||
if (rel.code == "9999") {
|
cancelButtonText: "否"
|
||||||
toast_error(rel.msg);
|
}).then(function (result) {
|
||||||
return;
|
if (result.value) {
|
||||||
}
|
var url = "/PowerStation/DeleteOneDevice/";
|
||||||
|
var send_data = {
|
||||||
toast_ok(rel.msg);
|
Id: selected_id
|
||||||
DeviceTable.ajax.reload();
|
}
|
||||||
}, 'json');
|
$.post(url, send_data, function (rel) {
|
||||||
|
if (rel.code != "0000") {
|
||||||
|
toast_error(rel.msg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
toast_ok(rel.msg);
|
||||||
|
DeviceTable.ajax.reload();
|
||||||
|
}, 'json');
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
@ -1641,24 +1664,33 @@
|
|||||||
|
|
||||||
//#region 刪除異常
|
//#region 刪除異常
|
||||||
$('#Exception_table').on("click", "button.del-btn", function () {
|
$('#Exception_table').on("click", "button.del-btn", function () {
|
||||||
|
|
||||||
selected_id = $(this).parents('tr').attr('data-id');
|
selected_id = $(this).parents('tr').attr('data-id');
|
||||||
|
|
||||||
var url = "/PowerStation/DeleteOneException/";
|
Swal.fire(
|
||||||
|
{
|
||||||
var send_data = {
|
title: "刪除",
|
||||||
Id: selected_id
|
text: "你確定是否刪除此筆資料?",
|
||||||
}
|
type: "warning",
|
||||||
|
icon: 'warning',
|
||||||
$.post(url, send_data, function (rel) {
|
showCancelButton: true,
|
||||||
if (rel.code == "9999") {
|
confirmButtonText: "是",
|
||||||
toast_error(rel.msg);
|
cancelButtonText: "否"
|
||||||
return;
|
}).then(function (result) {
|
||||||
}
|
if (result.value) {
|
||||||
|
var url = "/PowerStation/DeleteOneException/";
|
||||||
toast_ok(rel.msg);
|
var send_data = {
|
||||||
ExceptionTable.ajax.reload();
|
Id: selected_id
|
||||||
}, 'json');
|
}
|
||||||
|
$.post(url, send_data, function (rel) {
|
||||||
|
if (rel.code == "9999") {
|
||||||
|
toast_error(rel.msg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
toast_ok(rel.msg);
|
||||||
|
ExceptionTable.ajax.reload();
|
||||||
|
}, 'json');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
//#endregion
|
//#endregion
|
||||||
@ -1913,5 +1945,14 @@
|
|||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
//#endregion
|
//#endregion
|
||||||
|
$('#Exception_UpperLimit_modal').change(function () {
|
||||||
|
upper = $('#Exception_UpperLimit_modal').val();
|
||||||
|
$("#Exception_LowerLimit_modal").rules("remove");
|
||||||
|
$("#Exception_LowerLimit_modal").rules("add", {
|
||||||
|
required: true,
|
||||||
|
max: Number(upper),
|
||||||
|
min: 0
|
||||||
|
});
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
}
|
}
|
||||||
@ -12,8 +12,8 @@
|
|||||||
<th>電站編號</th>
|
<th>電站編號</th>
|
||||||
<th>電站名稱</th>
|
<th>電站名稱</th>
|
||||||
<th>項目</th>
|
<th>項目</th>
|
||||||
<th>下限 ( <= )</th>
|
<th>上限 ( <= )</th>
|
||||||
<th>上限 ( >= )</th>
|
<th>下限 ( >= )</th>
|
||||||
<th>警示方式</th>
|
<th>警示方式</th>
|
||||||
<th>建立時間</th>
|
<th>建立時間</th>
|
||||||
<th>功能</th>
|
<th>功能</th>
|
||||||
|
|||||||
@ -179,15 +179,15 @@
|
|||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
|
||||||
<li class="">
|
<li class="@(ViewData["MainNum"] == "5" ? "active open" : "")">
|
||||||
<a href="#" title="Category" data-filter-tags="category">
|
<a href="#" title="Category" data-filter-tags="category">
|
||||||
<i class="fal fa-alien"></i>
|
<i class="fal fa-alien"></i>
|
||||||
<span class="nav-link-text" data-i18n="nav.category">運維管理</span>
|
<span class="nav-link-text" data-i18n="nav.category">運維管理</span>
|
||||||
</a>
|
</a>
|
||||||
<ul>
|
<ul>
|
||||||
<li class="">
|
<li class="@(ViewData["MainNum"] == "5" && ViewData["SubNum"] == "1" ? "active" : "")">
|
||||||
<a href="javascript:void(0);" title="定期計劃建立" data-filter-tags="utilities disabled item">
|
<a asp-controller="Operation" asp-action="Index" title="定期計畫建立" data-filter-tags="utilities disabled item">
|
||||||
<span class="nav-link-text" data-i18n="nav.utilities_disabled_item">定期計劃建立</span>
|
<span class="nav-link-text" data-i18n="nav.utilities_disabled_item">定期計畫建立</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="">
|
<li class="">
|
||||||
|
|||||||
@ -712,30 +712,38 @@
|
|||||||
|
|
||||||
//#region 刪除使用者
|
//#region 刪除使用者
|
||||||
$('#user_table').on("click", "button.del-btn", function () {
|
$('#user_table').on("click", "button.del-btn", function () {
|
||||||
|
|
||||||
selected_id = $(this).parents('tr').attr('data-id');
|
selected_id = $(this).parents('tr').attr('data-id');
|
||||||
|
Swal.fire(
|
||||||
|
{
|
||||||
|
title: "刪除",
|
||||||
|
text: "你確定是否刪除此筆資料?",
|
||||||
|
type: "warning",
|
||||||
|
icon: 'warning',
|
||||||
|
showCancelButton: true,
|
||||||
|
confirmButtonText: "是",
|
||||||
|
cancelButtonText: "否"
|
||||||
|
}).then(function (result) {
|
||||||
|
if (result.value) {
|
||||||
|
//取得單一系統管理員
|
||||||
|
var url = "/User/DeleteOneUser/";
|
||||||
|
var send_data = {
|
||||||
|
Id: selected_id
|
||||||
|
}
|
||||||
|
$.post(url, send_data, function (rel) {
|
||||||
|
if (rel.code != "0000") {
|
||||||
|
toast_error(rel.msg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//取得單一系統管理員
|
toast_ok(rel.msg);
|
||||||
var url = "/User/DeleteOneUser/";
|
|
||||||
|
|
||||||
var send_data = {
|
//更新當前剩餘可註冊使用者人數
|
||||||
Id: selected_id
|
UpdateRegisterNumber($("#select_user_company_userManager_tab").val());
|
||||||
}
|
|
||||||
|
|
||||||
$.post(url, send_data, function (rel) {
|
|
||||||
if (rel.code != "0000") {
|
|
||||||
toast_error(rel.msg);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
toast_ok(rel.msg);
|
|
||||||
|
|
||||||
//更新當前剩餘可註冊使用者人數
|
|
||||||
UpdateRegisterNumber($("#select_user_company_userManager_tab").val());
|
|
||||||
|
|
||||||
userTable.ajax.reload();
|
|
||||||
}, 'json');
|
|
||||||
|
|
||||||
|
userTable.ajax.reload();
|
||||||
|
}, 'json');
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
@ -863,24 +871,35 @@
|
|||||||
$('#role_table').on("click", "button.del-btn", function () {
|
$('#role_table').on("click", "button.del-btn", function () {
|
||||||
|
|
||||||
selected_role_id = $(this).parents('tr').attr('data-id');
|
selected_role_id = $(this).parents('tr').attr('data-id');
|
||||||
|
Swal.fire(
|
||||||
|
{
|
||||||
|
title: "刪除",
|
||||||
|
text: "你確定是否刪除此筆資料?",
|
||||||
|
type: "warning",
|
||||||
|
icon: 'warning',
|
||||||
|
showCancelButton: true,
|
||||||
|
confirmButtonText: "是",
|
||||||
|
cancelButtonText: "否"
|
||||||
|
}).then(function (result) {
|
||||||
|
if (result.value) {
|
||||||
|
//取得單一系統管理員
|
||||||
|
var url = "/Role/DeleteOneRole/";
|
||||||
|
|
||||||
//取得單一系統管理員
|
var send_data = {
|
||||||
var url = "/Role/DeleteOneRole/";
|
Id: selected_role_id
|
||||||
|
}
|
||||||
|
|
||||||
var send_data = {
|
$.post(url, send_data, function (rel) {
|
||||||
Id: selected_role_id
|
if (rel.code != "0000") {
|
||||||
}
|
toast_error(rel.msg);
|
||||||
|
return;
|
||||||
$.post(url, send_data, function (rel) {
|
}
|
||||||
if (rel.code != "0000") {
|
|
||||||
toast_error(rel.msg);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
toast_ok(rel.msg);
|
|
||||||
roleTable.ajax.reload();
|
|
||||||
}, 'json');
|
|
||||||
|
|
||||||
|
toast_ok(rel.msg);
|
||||||
|
roleTable.ajax.reload();
|
||||||
|
}, 'json');
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
@ -941,24 +960,37 @@
|
|||||||
var row_id_authCode = $(this).parents('tr').attr('data-id-authCode');
|
var row_id_authCode = $(this).parents('tr').attr('data-id-authCode');
|
||||||
|
|
||||||
var split_arr = row_id_authCode.split("_");
|
var split_arr = row_id_authCode.split("_");
|
||||||
|
Swal.fire(
|
||||||
|
{
|
||||||
|
title: "刪除",
|
||||||
|
text: "你確定是否刪除此筆資料?",
|
||||||
|
type: "warning",
|
||||||
|
icon: 'warning',
|
||||||
|
showCancelButton: true,
|
||||||
|
confirmButtonText: "是",
|
||||||
|
cancelButtonText: "否"
|
||||||
|
}).then(function (result)
|
||||||
|
{
|
||||||
|
if (result.value) {
|
||||||
|
//取得單一系統管理員
|
||||||
|
var url = "/Role/DeleteOneRoleAuth/";
|
||||||
|
|
||||||
//取得單一系統管理員
|
var send_data = {
|
||||||
var url = "/Role/DeleteOneRoleAuth/";
|
RoleId: split_arr[0],
|
||||||
|
AuthCode: split_arr[1]
|
||||||
|
}
|
||||||
|
|
||||||
var send_data = {
|
$.post(url, send_data, function (rel) {
|
||||||
RoleId: split_arr[0],
|
if (rel.code != "0000") {
|
||||||
AuthCode: split_arr[1]
|
toast_error(rel.msg);
|
||||||
}
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$.post(url, send_data, function (rel) {
|
toast_ok(rel.msg);
|
||||||
if (rel.code != "0000") {
|
roleAuthTable.ajax.reload();
|
||||||
toast_error(rel.msg);
|
}, 'json');
|
||||||
return;
|
}
|
||||||
}
|
});
|
||||||
|
|
||||||
toast_ok(rel.msg);
|
|
||||||
roleAuthTable.ajax.reload();
|
|
||||||
}, 'json');
|
|
||||||
});
|
});
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user