😎调整行政区划字段名称及增加同步天地图行政区域接口
This commit is contained in:
parent
a1e3f781ee
commit
95d0d2ba22
@ -87,13 +87,13 @@ public partial class SysRegion : EntityBaseId
|
||||
/// 经度
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnDescription = "经度")]
|
||||
public float Lng { get; set; }
|
||||
public decimal Longitude { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 维度
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnDescription = "维度")]
|
||||
public float Lat { get; set; }
|
||||
public decimal Latitude { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 排序
|
||||
|
||||
@ -69,4 +69,41 @@ public class GenOrgInput
|
||||
/// 生成层级
|
||||
/// </summary>
|
||||
public int Level { get; set; }
|
||||
}
|
||||
|
||||
public class TiandituInput
|
||||
{
|
||||
/// <summary>
|
||||
/// 规则:只支持单个关键词语搜索
|
||||
/// 关键词支持:行政区划名称、行政区划编码
|
||||
/// 例如,keyword='北京' 或 keyword = '156110000'
|
||||
/// 说明:仅行政区划名称支持模糊查询
|
||||
/// 注:keyword只有一个字符时,将只返回suggestion字段值,不返回district字段值
|
||||
/// </summary>
|
||||
public string Keyword { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 规则:设置显示下级行政区级数(行政区级别包括:国家、省/直辖市、市、区/县多级数据
|
||||
/// 可选值:0、1、2、3
|
||||
/// 0:不返回下级行政区
|
||||
/// 1:返回下一级行政区
|
||||
/// 2:返回下两级行政区
|
||||
/// 3:返回下三级行政区
|
||||
/// 需要在此特殊说明,目前部分城市和省直辖县因为没有区县的概念,故在省级下方直接显示区县。
|
||||
/// 例如:河南-济源
|
||||
/// </summary>
|
||||
public string ChildLevel { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否需要轮廓数据
|
||||
/// 可选值:true、false
|
||||
/// true:返回轮廓数据
|
||||
/// false:不返回轮廓数据
|
||||
/// </summary>
|
||||
public bool Extensions { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 密钥
|
||||
/// </summary>
|
||||
public string Tk { get; set; }
|
||||
}
|
||||
@ -276,7 +276,7 @@ public class SysRegionService : IDynamicApiController, ITransient
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 同步行政区划数据(国家地名信息库,最多支持2级深度)
|
||||
/// 同步行政区划数据(国家地名信息库,最多支持2级深度) 🔖
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[DisplayName("同步行政区划数据(国家地名信息库)")]
|
||||
@ -333,7 +333,23 @@ public class SysRegionService : IDynamicApiController, ITransient
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 生成组织架构
|
||||
/// 同步行政区划数据(天地图行政区划) 🔖
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[DisplayName("同步行政区划数据(天地图行政区划)")]
|
||||
public async Task<int> SyncRegionTianditu(TiandituInput input)
|
||||
{
|
||||
// 接口说明及地址:http://lbs.tianditu.gov.cn/server/administrative2.html
|
||||
var url = $"http://api.tianditu.gov.cn/v2/administrative?keyword={input.Keyword}&childLevel={input.ChildLevel}&extensions={input.Extensions}&tk={input.Tk}";
|
||||
|
||||
var areaList = new List<SysRegion>();
|
||||
|
||||
await _sysRegionRep.AsDeleteable().ExecuteCommandAsync();
|
||||
return await _sysRegionRep.AsInsertable(areaList).ExecuteCommandAsync();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 生成组织架构 🔖
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
|
||||
@ -31,7 +31,7 @@ import { LoginPhoneInput } from '../models';
|
||||
export const SysAuthApiAxiosParamCreator = function (configuration?: Configuration) {
|
||||
return {
|
||||
/**
|
||||
*
|
||||
* Swagger登录检查
|
||||
* @summary Swagger登录检查 🔖
|
||||
* @param {*} [options] Override http request option.
|
||||
* @throws {RequiredError}
|
||||
@ -74,7 +74,7 @@ export const SysAuthApiAxiosParamCreator = function (configuration?: Configurati
|
||||
};
|
||||
},
|
||||
/**
|
||||
*
|
||||
* Swagger登录提交
|
||||
* @summary Swagger登录提交 🔖
|
||||
* @param {string} [userName]
|
||||
* @param {string} [password]
|
||||
@ -473,7 +473,7 @@ export const SysAuthApiAxiosParamCreator = function (configuration?: Configurati
|
||||
export const SysAuthApiFp = function(configuration?: Configuration) {
|
||||
return {
|
||||
/**
|
||||
*
|
||||
* Swagger登录检查
|
||||
* @summary Swagger登录检查 🔖
|
||||
* @param {*} [options] Override http request option.
|
||||
* @throws {RequiredError}
|
||||
@ -486,7 +486,7 @@ export const SysAuthApiFp = function(configuration?: Configuration) {
|
||||
};
|
||||
},
|
||||
/**
|
||||
*
|
||||
* Swagger登录提交
|
||||
* @summary Swagger登录提交 🔖
|
||||
* @param {string} [userName]
|
||||
* @param {string} [password]
|
||||
@ -605,7 +605,7 @@ export const SysAuthApiFp = function(configuration?: Configuration) {
|
||||
export const SysAuthApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
|
||||
return {
|
||||
/**
|
||||
*
|
||||
* Swagger登录检查
|
||||
* @summary Swagger登录检查 🔖
|
||||
* @param {*} [options] Override http request option.
|
||||
* @throws {RequiredError}
|
||||
@ -614,7 +614,7 @@ export const SysAuthApiFactory = function (configuration?: Configuration, basePa
|
||||
return SysAuthApiFp(configuration).apiSwaggerCheckUrlPost(options).then((request) => request(axios, basePath));
|
||||
},
|
||||
/**
|
||||
*
|
||||
* Swagger登录提交
|
||||
* @summary Swagger登录提交 🔖
|
||||
* @param {string} [userName]
|
||||
* @param {string} [password]
|
||||
@ -702,7 +702,7 @@ export const SysAuthApiFactory = function (configuration?: Configuration, basePa
|
||||
*/
|
||||
export class SysAuthApi extends BaseAPI {
|
||||
/**
|
||||
*
|
||||
* Swagger登录检查
|
||||
* @summary Swagger登录检查 🔖
|
||||
* @param {*} [options] Override http request option.
|
||||
* @throws {RequiredError}
|
||||
@ -712,7 +712,7 @@ export class SysAuthApi extends BaseAPI {
|
||||
return SysAuthApiFp(this.configuration).apiSwaggerCheckUrlPost(options).then((request) => request(this.axios, this.basePath));
|
||||
}
|
||||
/**
|
||||
*
|
||||
* Swagger登录提交
|
||||
* @summary Swagger登录提交 🔖
|
||||
* @param {string} [userName]
|
||||
* @param {string} [password]
|
||||
|
||||
@ -26,6 +26,7 @@ import { DeleteRegionInput } from '../models';
|
||||
import { GenOrgInput } from '../models';
|
||||
import { PageRegionInput } from '../models';
|
||||
import { SyncInput } from '../models';
|
||||
import { TiandituInput } from '../models';
|
||||
import { UpdateRegionInput } from '../models';
|
||||
/**
|
||||
* SysRegionApi - axios parameter creator
|
||||
@ -131,7 +132,7 @@ export const SysRegionApiAxiosParamCreator = function (configuration?: Configura
|
||||
},
|
||||
/**
|
||||
*
|
||||
* @summary 生成组织架构
|
||||
* @summary 生成组织架构 🔖
|
||||
* @param {GenOrgInput} [body]
|
||||
* @param {*} [options] Override http request option.
|
||||
* @throws {RequiredError}
|
||||
@ -279,7 +280,7 @@ export const SysRegionApiAxiosParamCreator = function (configuration?: Configura
|
||||
},
|
||||
/**
|
||||
*
|
||||
* @summary 同步行政区划数据(国家地名信息库,最多支持2级深度)
|
||||
* @summary 同步行政区划数据(国家地名信息库,最多支持2级深度) 🔖
|
||||
* @param {number} code
|
||||
* @param {*} [options] Override http request option.
|
||||
* @throws {RequiredError}
|
||||
@ -374,6 +375,54 @@ export const SysRegionApiAxiosParamCreator = function (configuration?: Configura
|
||||
options: localVarRequestOptions,
|
||||
};
|
||||
},
|
||||
/**
|
||||
*
|
||||
* @summary 同步行政区划数据(天地图行政区划) 🔖
|
||||
* @param {TiandituInput} [body]
|
||||
* @param {*} [options] Override http request option.
|
||||
* @throws {RequiredError}
|
||||
*/
|
||||
apiSysRegionSyncRegionTiandituPost: async (body?: TiandituInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
|
||||
const localVarPath = `/api/sysRegion/syncRegionTianditu`;
|
||||
// use dummy base URL string because the URL constructor only accepts absolute URLs.
|
||||
const localVarUrlObj = new URL(localVarPath, 'https://example.com');
|
||||
let baseOptions;
|
||||
if (configuration) {
|
||||
baseOptions = configuration.baseOptions;
|
||||
}
|
||||
const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
|
||||
const localVarHeaderParameter = {} as any;
|
||||
const localVarQueryParameter = {} as any;
|
||||
|
||||
// authentication Bearer required
|
||||
// http bearer authentication required
|
||||
if (configuration && configuration.accessToken) {
|
||||
const accessToken = typeof configuration.accessToken === 'function'
|
||||
? await configuration.accessToken()
|
||||
: await configuration.accessToken;
|
||||
localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
|
||||
}
|
||||
|
||||
localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
|
||||
|
||||
const query = new URLSearchParams(localVarUrlObj.search);
|
||||
for (const key in localVarQueryParameter) {
|
||||
query.set(key, localVarQueryParameter[key]);
|
||||
}
|
||||
for (const key in options.params) {
|
||||
query.set(key, options.params[key]);
|
||||
}
|
||||
localVarUrlObj.search = (new URLSearchParams(query)).toString();
|
||||
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
|
||||
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
|
||||
const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
|
||||
localVarRequestOptions.data = needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
|
||||
|
||||
return {
|
||||
url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
|
||||
options: localVarRequestOptions,
|
||||
};
|
||||
},
|
||||
/**
|
||||
*
|
||||
* @summary 更新行政区域 🔖
|
||||
@ -461,7 +510,7 @@ export const SysRegionApiFp = function(configuration?: Configuration) {
|
||||
},
|
||||
/**
|
||||
*
|
||||
* @summary 生成组织架构
|
||||
* @summary 生成组织架构 🔖
|
||||
* @param {GenOrgInput} [body]
|
||||
* @param {*} [options] Override http request option.
|
||||
* @throws {RequiredError}
|
||||
@ -503,7 +552,7 @@ export const SysRegionApiFp = function(configuration?: Configuration) {
|
||||
},
|
||||
/**
|
||||
*
|
||||
* @summary 同步行政区划数据(国家地名信息库,最多支持2级深度)
|
||||
* @summary 同步行政区划数据(国家地名信息库,最多支持2级深度) 🔖
|
||||
* @param {number} code
|
||||
* @param {*} [options] Override http request option.
|
||||
* @throws {RequiredError}
|
||||
@ -529,6 +578,20 @@ export const SysRegionApiFp = function(configuration?: Configuration) {
|
||||
return axios.request(axiosRequestArgs);
|
||||
};
|
||||
},
|
||||
/**
|
||||
*
|
||||
* @summary 同步行政区划数据(天地图行政区划) 🔖
|
||||
* @param {TiandituInput} [body]
|
||||
* @param {*} [options] Override http request option.
|
||||
* @throws {RequiredError}
|
||||
*/
|
||||
async apiSysRegionSyncRegionTiandituPost(body?: TiandituInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultInt32>>> {
|
||||
const localVarAxiosArgs = await SysRegionApiAxiosParamCreator(configuration).apiSysRegionSyncRegionTiandituPost(body, options);
|
||||
return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
|
||||
const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
|
||||
return axios.request(axiosRequestArgs);
|
||||
};
|
||||
},
|
||||
/**
|
||||
*
|
||||
* @summary 更新行政区域 🔖
|
||||
@ -574,7 +637,7 @@ export const SysRegionApiFactory = function (configuration?: Configuration, base
|
||||
},
|
||||
/**
|
||||
*
|
||||
* @summary 生成组织架构
|
||||
* @summary 生成组织架构 🔖
|
||||
* @param {GenOrgInput} [body]
|
||||
* @param {*} [options] Override http request option.
|
||||
* @throws {RequiredError}
|
||||
@ -604,7 +667,7 @@ export const SysRegionApiFactory = function (configuration?: Configuration, base
|
||||
},
|
||||
/**
|
||||
*
|
||||
* @summary 同步行政区划数据(国家地名信息库,最多支持2级深度)
|
||||
* @summary 同步行政区划数据(国家地名信息库,最多支持2级深度) 🔖
|
||||
* @param {number} code
|
||||
* @param {*} [options] Override http request option.
|
||||
* @throws {RequiredError}
|
||||
@ -622,6 +685,16 @@ export const SysRegionApiFactory = function (configuration?: Configuration, base
|
||||
async apiSysRegionSyncRegionStatsPost(body?: SyncInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
|
||||
return SysRegionApiFp(configuration).apiSysRegionSyncRegionStatsPost(body, options).then((request) => request(axios, basePath));
|
||||
},
|
||||
/**
|
||||
*
|
||||
* @summary 同步行政区划数据(天地图行政区划) 🔖
|
||||
* @param {TiandituInput} [body]
|
||||
* @param {*} [options] Override http request option.
|
||||
* @throws {RequiredError}
|
||||
*/
|
||||
async apiSysRegionSyncRegionTiandituPost(body?: TiandituInput, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultInt32>> {
|
||||
return SysRegionApiFp(configuration).apiSysRegionSyncRegionTiandituPost(body, options).then((request) => request(axios, basePath));
|
||||
},
|
||||
/**
|
||||
*
|
||||
* @summary 更新行政区域 🔖
|
||||
@ -666,7 +739,7 @@ export class SysRegionApi extends BaseAPI {
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @summary 生成组织架构
|
||||
* @summary 生成组织架构 🔖
|
||||
* @param {GenOrgInput} [body]
|
||||
* @param {*} [options] Override http request option.
|
||||
* @throws {RequiredError}
|
||||
@ -699,7 +772,7 @@ export class SysRegionApi extends BaseAPI {
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @summary 同步行政区划数据(国家地名信息库,最多支持2级深度)
|
||||
* @summary 同步行政区划数据(国家地名信息库,最多支持2级深度) 🔖
|
||||
* @param {number} code
|
||||
* @param {*} [options] Override http request option.
|
||||
* @throws {RequiredError}
|
||||
@ -719,6 +792,17 @@ export class SysRegionApi extends BaseAPI {
|
||||
public async apiSysRegionSyncRegionStatsPost(body?: SyncInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
|
||||
return SysRegionApiFp(this.configuration).apiSysRegionSyncRegionStatsPost(body, options).then((request) => request(this.axios, this.basePath));
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @summary 同步行政区划数据(天地图行政区划) 🔖
|
||||
* @param {TiandituInput} [body]
|
||||
* @param {*} [options] Override http request option.
|
||||
* @throws {RequiredError}
|
||||
* @memberof SysRegionApi
|
||||
*/
|
||||
public async apiSysRegionSyncRegionTiandituPost(body?: TiandituInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultInt32>> {
|
||||
return SysRegionApiFp(this.configuration).apiSysRegionSyncRegionTiandituPost(body, options).then((request) => request(this.axios, this.basePath));
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @summary 更新行政区域 🔖
|
||||
|
||||
@ -107,7 +107,7 @@ export interface AddRegionInput {
|
||||
* @type {number}
|
||||
* @memberof AddRegionInput
|
||||
*/
|
||||
lng?: number;
|
||||
longitude?: number;
|
||||
|
||||
/**
|
||||
* 维度
|
||||
@ -115,7 +115,7 @@ export interface AddRegionInput {
|
||||
* @type {number}
|
||||
* @memberof AddRegionInput
|
||||
*/
|
||||
lat?: number;
|
||||
latitude?: number;
|
||||
|
||||
/**
|
||||
* 排序
|
||||
|
||||
@ -387,6 +387,7 @@ export * from './tenant-output';
|
||||
export * from './tenant-type-enum';
|
||||
export * from './tenant-user-input';
|
||||
export * from './text-info';
|
||||
export * from './tianditu-input';
|
||||
export * from './trigger-status';
|
||||
export * from './type';
|
||||
export * from './type-attributes';
|
||||
|
||||
@ -115,7 +115,7 @@ export interface SysRegion {
|
||||
* @type {number}
|
||||
* @memberof SysRegion
|
||||
*/
|
||||
lng?: number;
|
||||
longitude?: number;
|
||||
|
||||
/**
|
||||
* 维度
|
||||
@ -123,7 +123,7 @@ export interface SysRegion {
|
||||
* @type {number}
|
||||
* @memberof SysRegion
|
||||
*/
|
||||
lat?: number;
|
||||
latitude?: number;
|
||||
|
||||
/**
|
||||
* 排序
|
||||
|
||||
54
Web/src/api-services/models/tianditu-input.ts
Normal file
54
Web/src/api-services/models/tianditu-input.ts
Normal file
@ -0,0 +1,54 @@
|
||||
/* tslint:disable */
|
||||
/* eslint-disable */
|
||||
/**
|
||||
* Admin.NET 通用权限开发平台
|
||||
* 让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><u><b><font color='FF0000'> 👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!</font></b></u>
|
||||
*
|
||||
* OpenAPI spec version: 1.0.0
|
||||
*
|
||||
*
|
||||
* NOTE: This class is auto generated by the swagger code generator program.
|
||||
* https://github.com/swagger-api/swagger-codegen.git
|
||||
* Do not edit the class manually.
|
||||
*/
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* @export
|
||||
* @interface TiandituInput
|
||||
*/
|
||||
export interface TiandituInput {
|
||||
|
||||
/**
|
||||
* 规则:只支持单个关键词语搜索 关键词支持:行政区划名称、行政区划编码 例如,keyword='北京' 或 keyword = '156110000' 说明:仅行政区划名称支持模糊查询 注:keyword只有一个字符时,将只返回suggestion字段值,不返回district字段值
|
||||
*
|
||||
* @type {string}
|
||||
* @memberof TiandituInput
|
||||
*/
|
||||
keyword?: string | null;
|
||||
|
||||
/**
|
||||
* 规则:设置显示下级行政区级数(行政区级别包括:国家、省/直辖市、市、区/县多级数据 可选值:0、1、2、3 0:不返回下级行政区 1:返回下一级行政区 2:返回下两级行政区 3:返回下三级行政区 需要在此特殊说明,目前部分城市和省直辖县因为没有区县的概念,故在省级下方直接显示区县。 例如:河南-济源
|
||||
*
|
||||
* @type {string}
|
||||
* @memberof TiandituInput
|
||||
*/
|
||||
childLevel?: string | null;
|
||||
|
||||
/**
|
||||
* 是否需要轮廓数据 可选值:true、false true:返回轮廓数据 false:不返回轮廓数据
|
||||
*
|
||||
* @type {boolean}
|
||||
* @memberof TiandituInput
|
||||
*/
|
||||
extensions?: boolean;
|
||||
|
||||
/**
|
||||
* 密钥
|
||||
*
|
||||
* @type {string}
|
||||
* @memberof TiandituInput
|
||||
*/
|
||||
tk?: string | null;
|
||||
}
|
||||
@ -107,7 +107,7 @@ export interface UpdateRegionInput {
|
||||
* @type {number}
|
||||
* @memberof UpdateRegionInput
|
||||
*/
|
||||
lng?: number;
|
||||
longitude?: number;
|
||||
|
||||
/**
|
||||
* 维度
|
||||
@ -115,7 +115,7 @@ export interface UpdateRegionInput {
|
||||
* @type {number}
|
||||
* @memberof UpdateRegionInput
|
||||
*/
|
||||
lat?: number;
|
||||
latitude?: number;
|
||||
|
||||
/**
|
||||
* 排序
|
||||
|
||||
@ -44,6 +44,7 @@
|
||||
|
||||
<el-button type="danger" icon="ele-Lightning" @click="syncRegionStats" v-auth="'sysRegion/add'"> 同步国家统计局 </el-button>
|
||||
<el-button type="danger" icon="ele-Lightning" @click="syncRegionMca" v-auth="'sysRegion/add'"> 同步国家地名信息库 </el-button>
|
||||
<el-button type="danger" icon="ele-Lightning" @click="syncRegionTianditu" v-auth="'sysRegion/add'"> 同步天地图行政区划 </el-button>
|
||||
</template>
|
||||
<template #toolbar_tools> </template>
|
||||
<template #empty>
|
||||
@ -232,16 +233,22 @@ const handleNodeChange = async (node: any) => {
|
||||
|
||||
// 同步国家统计局
|
||||
const syncRegionStats = async () => {
|
||||
state.title = '同步国家统计局行政区域数据';
|
||||
state.title = '同步国家统计局';
|
||||
syncStatsParamRef.value?.openDialog();
|
||||
};
|
||||
|
||||
// 同步国家地名信息库
|
||||
const syncRegionMca = async () => {
|
||||
state.title = '同步国家地名信息库行政区域数据';
|
||||
state.title = '同步国家地名信息库';
|
||||
syncMcaParamRef.value?.openDialog();
|
||||
};
|
||||
|
||||
// 同步天地图行政区划
|
||||
const syncRegionTianditu = async () => {
|
||||
state.title = '同步天地图行政区划';
|
||||
// syncTdtParamRef.value?.openDialog();
|
||||
};
|
||||
|
||||
// 生成组织架构
|
||||
const genOrg = (row: any) => {
|
||||
state.title = '生成/更新系统组织架构';
|
||||
|
||||
Loading…
Reference in New Issue
Block a user