diff --git a/dictation_client/openapitools.json b/dictation_client/openapitools.json index a3883a3..cd53ff4 100644 --- a/dictation_client/openapitools.json +++ b/dictation_client/openapitools.json @@ -2,6 +2,6 @@ "$schema": "./node_modules/@openapitools/openapi-generator-cli/config.schema.json", "spaces": 2, "generator-cli": { - "version": "6.5.0" + "version": "6.6.0" } } diff --git a/dictation_client/src/api/.openapi-generator/VERSION b/dictation_client/src/api/.openapi-generator/VERSION index 4be2c72..cd802a1 100644 --- a/dictation_client/src/api/.openapi-generator/VERSION +++ b/dictation_client/src/api/.openapi-generator/VERSION @@ -1 +1 @@ -6.5.0 \ No newline at end of file +6.6.0 \ No newline at end of file diff --git a/dictation_client/src/api/api.ts b/dictation_client/src/api/api.ts index edfbf7d..dfbe824 100644 --- a/dictation_client/src/api/api.ts +++ b/dictation_client/src/api/api.ts @@ -43,12 +43,148 @@ export interface AccessTokenResponse { */ export interface AudioDownloadLocationResponse { /** - * + * Blob StorageにアクセスするためのSASトークン入りのアクセスURL * @type {string} * @memberof AudioDownloadLocationResponse */ 'url': string; } +/** + * + * @export + * @interface AudioNextResponse + */ +export interface AudioNextResponse { + /** + * ODMS Cloud上の次の音声ファイルID(存在しなければundefind) + * @type {number} + * @memberof AudioNextResponse + */ + 'nextFileId'?: number; +} +/** + * + * @export + * @interface AudioOptionItem + */ +export interface AudioOptionItem { + /** + * + * @type {string} + * @memberof AudioOptionItem + */ + 'optionItemLabel': string; + /** + * + * @type {string} + * @memberof AudioOptionItem + */ + 'optionItemValue': string; +} +/** + * + * @export + * @interface AudioUploadFinishedRequest + */ +export interface AudioUploadFinishedRequest { + /** + * アップロード先Blob Storage(ファイル名含む) + * @type {string} + * @memberof AudioUploadFinishedRequest + */ + 'url': string; + /** + * 自分自身(ログイン認証)したAuthorID + * @type {string} + * @memberof AudioUploadFinishedRequest + */ + 'authorId': string; + /** + * 音声ファイル名 + * @type {string} + * @memberof AudioUploadFinishedRequest + */ + 'fileName': string; + /** + * 音声ファイルの録音時間(yyyy-mm-ddThh:mm:ss.sss) + * @type {string} + * @memberof AudioUploadFinishedRequest + */ + 'duration': string; + /** + * 音声ファイルの録音作成日時(開始日時)(yyyy-mm-ddThh:mm:ss.sss) + * @type {string} + * @memberof AudioUploadFinishedRequest + */ + 'createdDate': string; + /** + * 音声ファイルの録音作成終了日時(yyyy-mm-ddThh:mm:ss.sss) + * @type {string} + * @memberof AudioUploadFinishedRequest + */ + 'finishedDate': string; + /** + * 音声ファイルのアップロード日時(yyyy-mm-ddThh:mm:ss.sss) + * @type {string} + * @memberof AudioUploadFinishedRequest + */ + 'uploadedDate': string; + /** + * 音声ファイルのファイルサイズ(Byte) + * @type {number} + * @memberof AudioUploadFinishedRequest + */ + 'fileSize': number; + /** + * 優先度 \"00\":Normal / \"01\":High + * @type {string} + * @memberof AudioUploadFinishedRequest + */ + 'priority': string; + /** + * 録音形式: DSS/DS2(SP)/DS2(QP) + * @type {string} + * @memberof AudioUploadFinishedRequest + */ + 'audioFormat': string; + /** + * + * @type {string} + * @memberof AudioUploadFinishedRequest + */ + 'comment': string; + /** + * + * @type {string} + * @memberof AudioUploadFinishedRequest + */ + 'workType': string; + /** + * 音声ファイルに紐づくOption Itemの一覧(10個固定) + * @type {Array} + * @memberof AudioUploadFinishedRequest + */ + 'optionItemList': Array; + /** + * + * @type {boolean} + * @memberof AudioUploadFinishedRequest + */ + 'isEncrypted': boolean; +} +/** + * + * @export + * @interface AudioUploadFinishedResponse + */ +export interface AudioUploadFinishedResponse { + /** + * 8桁固定の数字 + * @type {string} + * @memberof AudioUploadFinishedResponse + */ + 'jobNumber': string; +} /** * * @export @@ -56,7 +192,7 @@ export interface AudioDownloadLocationResponse { */ export interface AudioUploadLocationResponse { /** - * + * Blob StorageにアクセスするためのSASトークン入りのアクセスURL * @type {string} * @memberof AudioUploadLocationResponse */ @@ -130,6 +266,25 @@ export interface CreateAccountRequest { */ 'token': string; } +/** + * + * @export + * @interface CreateOrdersRequest + */ +export interface CreateOrdersRequest { + /** + * + * @type {string} + * @memberof CreateOrdersRequest + */ + 'poNumber': string; + /** + * + * @type {number} + * @memberof CreateOrdersRequest + */ + 'orderCount': number; +} /** * * @export @@ -149,6 +304,61 @@ export interface ErrorResponse { */ 'code': string; } +/** + * + * @export + * @interface GetRelationsResponse + */ +export interface GetRelationsResponse { + /** + * ログインしたユーザーのAuthorID(Authorでない場合は空文字) + * @type {string} + * @memberof GetRelationsResponse + */ + 'authorId': string; + /** + * 属しているアカウントのAuthorID List(全て) + * @type {Array} + * @memberof GetRelationsResponse + */ + 'authorIdList': Array; + /** + * アカウントに設定されているWorktypeIDのリスト(最大20個) + * @type {Array} + * @memberof GetRelationsResponse + */ + 'workTypeList': Array; + /** + * ユーザーが音声ファイルを暗号化するかどうか + * @type {boolean} + * @memberof GetRelationsResponse + */ + 'isEncrypted': boolean; + /** + * ユーザーが暗号化を掛ける場合のパスワード + * @type {string} + * @memberof GetRelationsResponse + */ + 'encryptionPassword': string | null; + /** + * アカウントがデフォルトで利用するWorkTypeID(アカウントに紐づくWorkTypeIDから一つ指定) + * @type {string} + * @memberof GetRelationsResponse + */ + 'activeWorktype': string; + /** + * 録音形式: DSS/DS2(SP)/DS2(QP): DS2固定 + * @type {string} + * @memberof GetRelationsResponse + */ + 'audioFormat': string; + /** + * デバイス上で自動的にWorkTypeの選択画面を表示するかどうかのユーザーごとの設定(Authorでない場合はfalse) + * @type {boolean} + * @memberof GetRelationsResponse + */ + 'prompt': boolean; +} /** * * @export @@ -162,6 +372,50 @@ export interface GetUsersResponse { */ 'users': Array; } +/** + * + * @export + * @interface OptionItem + */ +export interface OptionItem { + /** + * Option Itemのラベル + * @type {string} + * @memberof OptionItem + */ + 'label': string; + /** + * 項目タイプ 1:Blank/2:Default/3:前の値 + * @type {number} + * @memberof OptionItem + */ + 'initialValueType': number; + /** + * typeでDefaultを選択した場合のデフォルト値 + * @type {string} + * @memberof OptionItem + */ + 'defaultValue': string; +} +/** + * + * @export + * @interface OptionItemList + */ +export interface OptionItemList { + /** + * + * @type {string} + * @memberof OptionItemList + */ + 'workTypeId': string; + /** + * 1WorkTypeIDにつき、10個まで登録可能 + * @type {Array} + * @memberof OptionItemList + */ + 'optionItemList': Array; +} /** * * @export @@ -236,6 +490,208 @@ export interface SignupRequest { */ 'notification': boolean; } +/** + * + * @export + * @interface Task + */ +export interface Task { + /** + * ODMS Cloud上の音声ファイルID + * @type {number} + * @memberof Task + */ + 'audioFileId': number; + /** + * AuthorID + * @type {string} + * @memberof Task + */ + 'authorId': string; + /** + * + * @type {string} + * @memberof Task + */ + 'workType': string; + /** + * 音声ファイルに紐づくOption Itemの一覧(10個固定) + * @type {Array} + * @memberof Task + */ + 'optionItemList': Array; + /** + * 音声ファイルのBlob Storage上での保存場所(ファイル名含む)のURL + * @type {string} + * @memberof Task + */ + 'url': string; + /** + * 音声ファイル名 + * @type {string} + * @memberof Task + */ + 'fileName': string; + /** + * 音声ファイルの録音時間(yyyy-mm-ddThh:mm:ss.sss) + * @type {string} + * @memberof Task + */ + 'audioDuration': string; + /** + * 音声ファイルの録音開始日時(yyyy-mm-ddThh:mm:ss.sss) + * @type {string} + * @memberof Task + */ + 'audioCreatedDate': string; + /** + * 音声ファイルの録音終了日時(yyyy-mm-ddThh:mm:ss.sss) + * @type {string} + * @memberof Task + */ + 'audioFinishedDate': string; + /** + * 音声ファイルのアップロード日時(yyyy-mm-ddThh:mm:ss.sss) + * @type {string} + * @memberof Task + */ + 'audioUploadedDate': string; + /** + * 音声ファイルのファイルサイズ(Byte) + * @type {number} + * @memberof Task + */ + 'fileSize': number; + /** + * 音声ファイルの優先度 \"00\":Normal / \"01\":High + * @type {string} + * @memberof Task + */ + 'priority': string; + /** + * 録音形式: DSS/DS2(SP)/DS2(QP) + * @type {string} + * @memberof Task + */ + 'audioFormat': string; + /** + * コメント + * @type {string} + * @memberof Task + */ + 'comment': string; + /** + * + * @type {boolean} + * @memberof Task + */ + 'isEncrypted': boolean; + /** + * JOBナンバー + * @type {string} + * @memberof Task + */ + 'jobNumber': string; + /** + * + * @type {TaskTypist} + * @memberof Task + */ + 'typist'?: TaskTypist; + /** + * 文字起こしに着手できる(チェックアウト可能な)、タスクにアサインされているグループ/個人の一覧 + * @type {Array} + * @memberof Task + */ + 'assignees': Array; + /** + * 音声ファイルのファイルステータス Uploaded / Pending / InProgress / Finished / Backup + * @type {string} + * @memberof Task + */ + 'status': string; + /** + * 文字起こし開始日時(yyyy-mm-ddThh:mm:ss.sss) + * @type {string} + * @memberof Task + */ + 'transcriptionStartedDate': string; + /** + * 文字起こし終了日時(yyyy-mm-ddThh:mm:ss.sss) + * @type {string} + * @memberof Task + */ + 'transcriptionFinishedDate': string; +} +/** + * 割り当てられたユーザー + * @export + * @interface TaskTypist + */ +export interface TaskTypist { + /** + * TypistID(TypistIDかTypistGroupIDのどちらかに値が入る) + * @type {number} + * @memberof TaskTypist + */ + 'typistUserId'?: number; + /** + * TypistGroupID(TypistGroupIDかTypistIDのどちらかに値が入る) + * @type {number} + * @memberof TaskTypist + */ + 'typistGroupId'?: number; + /** + * Typist名 / TypistGroup名 + * @type {string} + * @memberof TaskTypist + */ + 'typistName': string; +} +/** + * + * @export + * @interface TasksResponse + */ +export interface TasksResponse { + /** + * タスクの取得件数(指定しない場合はデフォルト値) + * @type {number} + * @memberof TasksResponse + */ + 'limit': number; + /** + * オフセット(何件目から取得するか 設定しない場合はデフォルト値) + * @type {number} + * @memberof TasksResponse + */ + 'offset': number; + /** + * タスクの総件数 + * @type {number} + * @memberof TasksResponse + */ + 'total': number; + /** + * 音声ファイル/タスク一覧 + * @type {Array} + * @memberof TasksResponse + */ + 'tasks': Array; +} +/** + * + * @export + * @interface TemplateDownloadLocationResponse + */ +export interface TemplateDownloadLocationResponse { + /** + * + * @type {string} + * @memberof TemplateDownloadLocationResponse + */ + 'url': string; +} /** * * @export @@ -274,6 +730,31 @@ export interface TokenResponse { */ 'accessToken': string; } +/** + * + * @export + * @interface Typist + */ +export interface Typist { + /** + * TypistID(TypistIDかTypistGroupIDのどちらかに値が入る) + * @type {number} + * @memberof Typist + */ + 'typistUserId'?: number; + /** + * TypistGroupID(TypistGroupIDかTypistIDのどちらかに値が入る) + * @type {number} + * @memberof Typist + */ + 'typistGroupId'?: number; + /** + * Typist名 / TypistGroup名 + * @type {string} + * @memberof Typist + */ + 'typistName': string; +} /** * * @export @@ -450,7 +931,7 @@ export class AccountsApi extends BaseAPI { export const AuthApiAxiosParamCreator = function (configuration?: Configuration) { return { /** - * + * リフレッシュトークンを元にアクセストークンを再生成します * @summary * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -484,7 +965,7 @@ export const AuthApiAxiosParamCreator = function (configuration?: Configuration) }; }, /** - * + * AzureADB2Cでのサインイン後に払いだされるIDトークンを元に認証用のアクセストークンとリフレッシュトークンを生成します * @summary * @param {TokenRequest} tokenRequest * @param {*} [options] Override http request option. @@ -530,7 +1011,7 @@ export const AuthApiFp = function(configuration?: Configuration) { const localVarAxiosParamCreator = AuthApiAxiosParamCreator(configuration) return { /** - * + * リフレッシュトークンを元にアクセストークンを再生成します * @summary * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -540,7 +1021,7 @@ export const AuthApiFp = function(configuration?: Configuration) { return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, /** - * + * AzureADB2Cでのサインイン後に払いだされるIDトークンを元に認証用のアクセストークンとリフレッシュトークンを生成します * @summary * @param {TokenRequest} tokenRequest * @param {*} [options] Override http request option. @@ -561,7 +1042,7 @@ export const AuthApiFactory = function (configuration?: Configuration, basePath? const localVarFp = AuthApiFp(configuration) return { /** - * + * リフレッシュトークンを元にアクセストークンを再生成します * @summary * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -570,7 +1051,7 @@ export const AuthApiFactory = function (configuration?: Configuration, basePath? return localVarFp.accessToken(options).then((request) => request(axios, basePath)); }, /** - * + * AzureADB2Cでのサインイン後に払いだされるIDトークンを元に認証用のアクセストークンとリフレッシュトークンを生成します * @summary * @param {TokenRequest} tokenRequest * @param {*} [options] Override http request option. @@ -590,7 +1071,7 @@ export const AuthApiFactory = function (configuration?: Configuration, basePath? */ export class AuthApi extends BaseAPI { /** - * + * リフレッシュトークンを元にアクセストークンを再生成します * @summary * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -601,7 +1082,7 @@ export class AuthApi extends BaseAPI { } /** - * + * AzureADB2Cでのサインイン後に払いだされるIDトークンを元に認証用のアクセストークンとリフレッシュトークンを生成します * @summary * @param {TokenRequest} tokenRequest * @param {*} [options] Override http request option. @@ -719,15 +1200,15 @@ export class DefaultApi extends BaseAPI { export const FilesApiAxiosParamCreator = function (configuration?: Configuration) { return { /** - * + * 指定した音声ファイルのBlob Storage上のダウンロード先アクセスURLを取得します * @summary - * @param {string} id 音声ファイル情報をDBから取得するためのID + * @param {number} audioFileId ODMSCloud上で管理する音声ファイルのID * @param {*} [options] Override http request option. * @throws {RequiredError} */ - downloadLocation: async (id: string, options: AxiosRequestConfig = {}): Promise => { - // verify required parameter 'id' is not null or undefined - assertParamExists('downloadLocation', 'id', id) + downloadLocation: async (audioFileId: number, options: AxiosRequestConfig = {}): Promise => { + // verify required parameter 'audioFileId' is not null or undefined + assertParamExists('downloadLocation', 'audioFileId', audioFileId) const localVarPath = `/files/audio/download-location`; // use dummy base URL string because the URL constructor only accepts absolute URLs. const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); @@ -744,8 +1225,8 @@ export const FilesApiAxiosParamCreator = function (configuration?: Configuration // http bearer authentication required await setBearerAuthToObject(localVarHeaderParameter, configuration) - if (id !== undefined) { - localVarQueryParameter['id'] = id; + if (audioFileId !== undefined) { + localVarQueryParameter['audioFileId'] = audioFileId; } @@ -760,7 +1241,88 @@ export const FilesApiAxiosParamCreator = function (configuration?: Configuration }; }, /** - * + * 指定した音声ファイルに対応したテンプレートファイルのBlob Storage上のダウンロード先アクセスURLを取得します + * @summary + * @param {number} audioFileId 文字起こし対象の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + downloadTemplateLocation: async (audioFileId: number, options: AxiosRequestConfig = {}): Promise => { + // verify required parameter 'audioFileId' is not null or undefined + assertParamExists('downloadTemplateLocation', 'audioFileId', audioFileId) + const localVarPath = `/files/template/download-location`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (audioFileId !== undefined) { + localVarQueryParameter['audioFileId'] = audioFileId; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * アップロードが完了した音声ファイルの情報を登録し、文字起こしタスクを生成します + * @summary + * @param {AudioUploadFinishedRequest} audioUploadFinishedRequest + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + uploadFinished: async (audioUploadFinishedRequest: AudioUploadFinishedRequest, options: AxiosRequestConfig = {}): Promise => { + // verify required parameter 'audioUploadFinishedRequest' is not null or undefined + assertParamExists('uploadFinished', 'audioUploadFinishedRequest', audioUploadFinishedRequest) + const localVarPath = `/files/audio/upload-finished`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(audioUploadFinishedRequest, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * ログイン中ユーザー用のBlob Storage上の音声ファイルのアップロード先アクセスURLを取得します * @summary * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -804,18 +1366,40 @@ export const FilesApiFp = function(configuration?: Configuration) { const localVarAxiosParamCreator = FilesApiAxiosParamCreator(configuration) return { /** - * + * 指定した音声ファイルのBlob Storage上のダウンロード先アクセスURLを取得します * @summary - * @param {string} id 音声ファイル情報をDBから取得するためのID + * @param {number} audioFileId ODMSCloud上で管理する音声ファイルのID * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async downloadLocation(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.downloadLocation(id, options); + async downloadLocation(audioFileId: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.downloadLocation(audioFileId, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, /** - * + * 指定した音声ファイルに対応したテンプレートファイルのBlob Storage上のダウンロード先アクセスURLを取得します + * @summary + * @param {number} audioFileId 文字起こし対象の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async downloadTemplateLocation(audioFileId: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.downloadTemplateLocation(audioFileId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * アップロードが完了した音声ファイルの情報を登録し、文字起こしタスクを生成します + * @summary + * @param {AudioUploadFinishedRequest} audioUploadFinishedRequest + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async uploadFinished(audioUploadFinishedRequest: AudioUploadFinishedRequest, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.uploadFinished(audioUploadFinishedRequest, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * ログイン中ユーザー用のBlob Storage上の音声ファイルのアップロード先アクセスURLを取得します * @summary * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -835,17 +1419,37 @@ export const FilesApiFactory = function (configuration?: Configuration, basePath const localVarFp = FilesApiFp(configuration) return { /** - * + * 指定した音声ファイルのBlob Storage上のダウンロード先アクセスURLを取得します * @summary - * @param {string} id 音声ファイル情報をDBから取得するためのID + * @param {number} audioFileId ODMSCloud上で管理する音声ファイルのID * @param {*} [options] Override http request option. * @throws {RequiredError} */ - downloadLocation(id: string, options?: any): AxiosPromise { - return localVarFp.downloadLocation(id, options).then((request) => request(axios, basePath)); + downloadLocation(audioFileId: number, options?: any): AxiosPromise { + return localVarFp.downloadLocation(audioFileId, options).then((request) => request(axios, basePath)); }, /** - * + * 指定した音声ファイルに対応したテンプレートファイルのBlob Storage上のダウンロード先アクセスURLを取得します + * @summary + * @param {number} audioFileId 文字起こし対象の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + downloadTemplateLocation(audioFileId: number, options?: any): AxiosPromise { + return localVarFp.downloadTemplateLocation(audioFileId, options).then((request) => request(axios, basePath)); + }, + /** + * アップロードが完了した音声ファイルの情報を登録し、文字起こしタスクを生成します + * @summary + * @param {AudioUploadFinishedRequest} audioUploadFinishedRequest + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + uploadFinished(audioUploadFinishedRequest: AudioUploadFinishedRequest, options?: any): AxiosPromise { + return localVarFp.uploadFinished(audioUploadFinishedRequest, options).then((request) => request(axios, basePath)); + }, + /** + * ログイン中ユーザー用のBlob Storage上の音声ファイルのアップロード先アクセスURLを取得します * @summary * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -864,19 +1468,43 @@ export const FilesApiFactory = function (configuration?: Configuration, basePath */ export class FilesApi extends BaseAPI { /** - * + * 指定した音声ファイルのBlob Storage上のダウンロード先アクセスURLを取得します * @summary - * @param {string} id 音声ファイル情報をDBから取得するためのID + * @param {number} audioFileId ODMSCloud上で管理する音声ファイルのID * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof FilesApi */ - public downloadLocation(id: string, options?: AxiosRequestConfig) { - return FilesApiFp(this.configuration).downloadLocation(id, options).then((request) => request(this.axios, this.basePath)); + public downloadLocation(audioFileId: number, options?: AxiosRequestConfig) { + return FilesApiFp(this.configuration).downloadLocation(audioFileId, options).then((request) => request(this.axios, this.basePath)); } /** - * + * 指定した音声ファイルに対応したテンプレートファイルのBlob Storage上のダウンロード先アクセスURLを取得します + * @summary + * @param {number} audioFileId 文字起こし対象の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof FilesApi + */ + public downloadTemplateLocation(audioFileId: number, options?: AxiosRequestConfig) { + return FilesApiFp(this.configuration).downloadTemplateLocation(audioFileId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * アップロードが完了した音声ファイルの情報を登録し、文字起こしタスクを生成します + * @summary + * @param {AudioUploadFinishedRequest} audioUploadFinishedRequest + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof FilesApi + */ + public uploadFinished(audioUploadFinishedRequest: AudioUploadFinishedRequest, options?: AxiosRequestConfig) { + return FilesApiFp(this.configuration).uploadFinished(audioUploadFinishedRequest, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * ログイン中ユーザー用のBlob Storage上の音声ファイルのアップロード先アクセスURLを取得します * @summary * @param {*} [options] Override http request option. * @throws {RequiredError} @@ -888,6 +1516,117 @@ export class FilesApi extends BaseAPI { } +/** + * LicensesApi - axios parameter creator + * @export + */ +export const LicensesApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary + * @param {CreateOrdersRequest} createOrdersRequest + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + createOrders: async (createOrdersRequest: CreateOrdersRequest, options: AxiosRequestConfig = {}): Promise => { + // verify required parameter 'createOrdersRequest' is not null or undefined + assertParamExists('createOrders', 'createOrdersRequest', createOrdersRequest) + const localVarPath = `/licenses/orders`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(createOrdersRequest, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * LicensesApi - functional programming interface + * @export + */ +export const LicensesApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = LicensesApiAxiosParamCreator(configuration) + return { + /** + * + * @summary + * @param {CreateOrdersRequest} createOrdersRequest + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async createOrders(createOrdersRequest: CreateOrdersRequest, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.createOrders(createOrdersRequest, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * LicensesApi - factory interface + * @export + */ +export const LicensesApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = LicensesApiFp(configuration) + return { + /** + * + * @summary + * @param {CreateOrdersRequest} createOrdersRequest + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + createOrders(createOrdersRequest: CreateOrdersRequest, options?: any): AxiosPromise { + return localVarFp.createOrders(createOrdersRequest, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * LicensesApi - object-oriented interface + * @export + * @class LicensesApi + * @extends {BaseAPI} + */ +export class LicensesApi extends BaseAPI { + /** + * + * @summary + * @param {CreateOrdersRequest} createOrdersRequest + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof LicensesApi + */ + public createOrders(createOrdersRequest: CreateOrdersRequest, options?: AxiosRequestConfig) { + return LicensesApiFp(this.configuration).createOrders(createOrdersRequest, options).then((request) => request(this.axios, this.basePath)); + } +} + + /** * NotificationApi - axios parameter creator * @export @@ -999,6 +1738,624 @@ export class NotificationApi extends BaseAPI { } +/** + * TasksApi - axios parameter creator + * @export + */ +export const TasksApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * 指定した文字起こしタスクをバックアップします(ステータスをBackupにします) + * @summary + * @param {number} audioFileId ODMS Cloud上の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + backup: async (audioFileId: number, options: AxiosRequestConfig = {}): Promise => { + // verify required parameter 'audioFileId' is not null or undefined + assertParamExists('backup', 'audioFileId', audioFileId) + const localVarPath = `/tasks/{audioFileId}/backup` + .replace(`{${"audioFileId"}}`, encodeURIComponent(String(audioFileId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * 指定した文字起こしタスクをキャンセルします(ステータスをUploadedにします) + * @summary + * @param {number} audioFileId ODMS Cloud上の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + cancel: async (audioFileId: number, options: AxiosRequestConfig = {}): Promise => { + // verify required parameter 'audioFileId' is not null or undefined + assertParamExists('cancel', 'audioFileId', audioFileId) + const localVarPath = `/tasks/{audioFileId}/cancel` + .replace(`{${"audioFileId"}}`, encodeURIComponent(String(audioFileId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * 指定した文字起こしタスクをチェックインします(ステータスをFinishedにします) + * @summary + * @param {number} audioFileId ODMS Cloud上の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + checkin: async (audioFileId: number, options: AxiosRequestConfig = {}): Promise => { + // verify required parameter 'audioFileId' is not null or undefined + assertParamExists('checkin', 'audioFileId', audioFileId) + const localVarPath = `/tasks/{audioFileId}/checkin` + .replace(`{${"audioFileId"}}`, encodeURIComponent(String(audioFileId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * 指定した文字起こしタスクをチェックアウトします(ステータスをInprogressにします) + * @summary + * @param {number} audioFileId ODMS Cloud上の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + checkout: async (audioFileId: number, options: AxiosRequestConfig = {}): Promise => { + // verify required parameter 'audioFileId' is not null or undefined + assertParamExists('checkout', 'audioFileId', audioFileId) + const localVarPath = `/tasks/{audioFileId}/checkout` + .replace(`{${"audioFileId"}}`, encodeURIComponent(String(audioFileId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * 指定した文字起こしタスクの次のタスクに紐づく音声ファイルIDを取得します + * @summary + * @param {number} endedFileId 文字起こし完了したタスクの音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + getNextAudioFile: async (endedFileId: number, options: AxiosRequestConfig = {}): Promise => { + // verify required parameter 'endedFileId' is not null or undefined + assertParamExists('getNextAudioFile', 'endedFileId', endedFileId) + const localVarPath = `/tasks/next`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (endedFileId !== undefined) { + localVarQueryParameter['endedFileId'] = endedFileId; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * 音声ファイル・文字起こしタスク情報をページ指定して取得します + * @summary + * @param {number} [limit] タスクの取得件数(指定しない場合はデフォルト値) + * @param {number} [offset] オフセット(何件目から取得するか 設定しない場合はデフォルト値) + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + getTasks: async (limit?: number, offset?: number, options: AxiosRequestConfig = {}): Promise => { + const localVarPath = `/tasks`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (limit !== undefined) { + localVarQueryParameter['limit'] = limit; + } + + if (offset !== undefined) { + localVarQueryParameter['offset'] = offset; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * 指定した文字起こしタスクを差し戻します(ステータスをPendingにします) + * @summary + * @param {number} audioFileId ODMS Cloud上の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + sendBack: async (audioFileId: number, options: AxiosRequestConfig = {}): Promise => { + // verify required parameter 'audioFileId' is not null or undefined + assertParamExists('sendBack', 'audioFileId', audioFileId) + const localVarPath = `/tasks/{audioFileId}/send-back` + .replace(`{${"audioFileId"}}`, encodeURIComponent(String(audioFileId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * 指定した文字起こしタスクを一時中断します(ステータスをPendingにします) + * @summary + * @param {number} audioFileId ODMS Cloud上の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + suspend: async (audioFileId: number, options: AxiosRequestConfig = {}): Promise => { + // verify required parameter 'audioFileId' is not null or undefined + assertParamExists('suspend', 'audioFileId', audioFileId) + const localVarPath = `/tasks/{audioFileId}/suspend` + .replace(`{${"audioFileId"}}`, encodeURIComponent(String(audioFileId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * TasksApi - functional programming interface + * @export + */ +export const TasksApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = TasksApiAxiosParamCreator(configuration) + return { + /** + * 指定した文字起こしタスクをバックアップします(ステータスをBackupにします) + * @summary + * @param {number} audioFileId ODMS Cloud上の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async backup(audioFileId: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.backup(audioFileId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * 指定した文字起こしタスクをキャンセルします(ステータスをUploadedにします) + * @summary + * @param {number} audioFileId ODMS Cloud上の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async cancel(audioFileId: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.cancel(audioFileId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * 指定した文字起こしタスクをチェックインします(ステータスをFinishedにします) + * @summary + * @param {number} audioFileId ODMS Cloud上の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async checkin(audioFileId: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.checkin(audioFileId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * 指定した文字起こしタスクをチェックアウトします(ステータスをInprogressにします) + * @summary + * @param {number} audioFileId ODMS Cloud上の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async checkout(audioFileId: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.checkout(audioFileId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * 指定した文字起こしタスクの次のタスクに紐づく音声ファイルIDを取得します + * @summary + * @param {number} endedFileId 文字起こし完了したタスクの音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async getNextAudioFile(endedFileId: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.getNextAudioFile(endedFileId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * 音声ファイル・文字起こしタスク情報をページ指定して取得します + * @summary + * @param {number} [limit] タスクの取得件数(指定しない場合はデフォルト値) + * @param {number} [offset] オフセット(何件目から取得するか 設定しない場合はデフォルト値) + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async getTasks(limit?: number, offset?: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.getTasks(limit, offset, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * 指定した文字起こしタスクを差し戻します(ステータスをPendingにします) + * @summary + * @param {number} audioFileId ODMS Cloud上の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async sendBack(audioFileId: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.sendBack(audioFileId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * 指定した文字起こしタスクを一時中断します(ステータスをPendingにします) + * @summary + * @param {number} audioFileId ODMS Cloud上の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async suspend(audioFileId: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.suspend(audioFileId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * TasksApi - factory interface + * @export + */ +export const TasksApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = TasksApiFp(configuration) + return { + /** + * 指定した文字起こしタスクをバックアップします(ステータスをBackupにします) + * @summary + * @param {number} audioFileId ODMS Cloud上の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + backup(audioFileId: number, options?: any): AxiosPromise { + return localVarFp.backup(audioFileId, options).then((request) => request(axios, basePath)); + }, + /** + * 指定した文字起こしタスクをキャンセルします(ステータスをUploadedにします) + * @summary + * @param {number} audioFileId ODMS Cloud上の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + cancel(audioFileId: number, options?: any): AxiosPromise { + return localVarFp.cancel(audioFileId, options).then((request) => request(axios, basePath)); + }, + /** + * 指定した文字起こしタスクをチェックインします(ステータスをFinishedにします) + * @summary + * @param {number} audioFileId ODMS Cloud上の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + checkin(audioFileId: number, options?: any): AxiosPromise { + return localVarFp.checkin(audioFileId, options).then((request) => request(axios, basePath)); + }, + /** + * 指定した文字起こしタスクをチェックアウトします(ステータスをInprogressにします) + * @summary + * @param {number} audioFileId ODMS Cloud上の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + checkout(audioFileId: number, options?: any): AxiosPromise { + return localVarFp.checkout(audioFileId, options).then((request) => request(axios, basePath)); + }, + /** + * 指定した文字起こしタスクの次のタスクに紐づく音声ファイルIDを取得します + * @summary + * @param {number} endedFileId 文字起こし完了したタスクの音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + getNextAudioFile(endedFileId: number, options?: any): AxiosPromise { + return localVarFp.getNextAudioFile(endedFileId, options).then((request) => request(axios, basePath)); + }, + /** + * 音声ファイル・文字起こしタスク情報をページ指定して取得します + * @summary + * @param {number} [limit] タスクの取得件数(指定しない場合はデフォルト値) + * @param {number} [offset] オフセット(何件目から取得するか 設定しない場合はデフォルト値) + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + getTasks(limit?: number, offset?: number, options?: any): AxiosPromise { + return localVarFp.getTasks(limit, offset, options).then((request) => request(axios, basePath)); + }, + /** + * 指定した文字起こしタスクを差し戻します(ステータスをPendingにします) + * @summary + * @param {number} audioFileId ODMS Cloud上の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + sendBack(audioFileId: number, options?: any): AxiosPromise { + return localVarFp.sendBack(audioFileId, options).then((request) => request(axios, basePath)); + }, + /** + * 指定した文字起こしタスクを一時中断します(ステータスをPendingにします) + * @summary + * @param {number} audioFileId ODMS Cloud上の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + suspend(audioFileId: number, options?: any): AxiosPromise { + return localVarFp.suspend(audioFileId, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * TasksApi - object-oriented interface + * @export + * @class TasksApi + * @extends {BaseAPI} + */ +export class TasksApi extends BaseAPI { + /** + * 指定した文字起こしタスクをバックアップします(ステータスをBackupにします) + * @summary + * @param {number} audioFileId ODMS Cloud上の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TasksApi + */ + public backup(audioFileId: number, options?: AxiosRequestConfig) { + return TasksApiFp(this.configuration).backup(audioFileId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * 指定した文字起こしタスクをキャンセルします(ステータスをUploadedにします) + * @summary + * @param {number} audioFileId ODMS Cloud上の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TasksApi + */ + public cancel(audioFileId: number, options?: AxiosRequestConfig) { + return TasksApiFp(this.configuration).cancel(audioFileId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * 指定した文字起こしタスクをチェックインします(ステータスをFinishedにします) + * @summary + * @param {number} audioFileId ODMS Cloud上の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TasksApi + */ + public checkin(audioFileId: number, options?: AxiosRequestConfig) { + return TasksApiFp(this.configuration).checkin(audioFileId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * 指定した文字起こしタスクをチェックアウトします(ステータスをInprogressにします) + * @summary + * @param {number} audioFileId ODMS Cloud上の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TasksApi + */ + public checkout(audioFileId: number, options?: AxiosRequestConfig) { + return TasksApiFp(this.configuration).checkout(audioFileId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * 指定した文字起こしタスクの次のタスクに紐づく音声ファイルIDを取得します + * @summary + * @param {number} endedFileId 文字起こし完了したタスクの音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TasksApi + */ + public getNextAudioFile(endedFileId: number, options?: AxiosRequestConfig) { + return TasksApiFp(this.configuration).getNextAudioFile(endedFileId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * 音声ファイル・文字起こしタスク情報をページ指定して取得します + * @summary + * @param {number} [limit] タスクの取得件数(指定しない場合はデフォルト値) + * @param {number} [offset] オフセット(何件目から取得するか 設定しない場合はデフォルト値) + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TasksApi + */ + public getTasks(limit?: number, offset?: number, options?: AxiosRequestConfig) { + return TasksApiFp(this.configuration).getTasks(limit, offset, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * 指定した文字起こしタスクを差し戻します(ステータスをPendingにします) + * @summary + * @param {number} audioFileId ODMS Cloud上の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TasksApi + */ + public sendBack(audioFileId: number, options?: AxiosRequestConfig) { + return TasksApiFp(this.configuration).sendBack(audioFileId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * 指定した文字起こしタスクを一時中断します(ステータスをPendingにします) + * @summary + * @param {number} audioFileId ODMS Cloud上の音声ファイルID + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TasksApi + */ + public suspend(audioFileId: number, options?: AxiosRequestConfig) { + return TasksApiFp(this.configuration).suspend(audioFileId, options).then((request) => request(this.axios, this.basePath)); + } +} + + /** * UsersApi - axios parameter creator * @export @@ -1077,6 +2434,40 @@ export const UsersApiAxiosParamCreator = function (configuration?: Configuration options: localVarRequestOptions, }; }, + /** + * ログインしているユーザーに関連する各種情報を取得します + * @summary + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + getRelations: async (options: AxiosRequestConfig = {}): Promise => { + const localVarPath = `/users/relations`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, /** * * @summary @@ -1183,6 +2574,16 @@ export const UsersApiFp = function(configuration?: Configuration) { const localVarAxiosArgs = await localVarAxiosParamCreator.confirmUserAndInitPassword(confirmRequest, options); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); }, + /** + * ログインしているユーザーに関連する各種情報を取得します + * @summary + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async getRelations(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.getRelations(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, /** * * @summary @@ -1234,6 +2635,15 @@ export const UsersApiFactory = function (configuration?: Configuration, basePath confirmUserAndInitPassword(confirmRequest: ConfirmRequest, options?: any): AxiosPromise { return localVarFp.confirmUserAndInitPassword(confirmRequest, options).then((request) => request(axios, basePath)); }, + /** + * ログインしているユーザーに関連する各種情報を取得します + * @summary + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + getRelations(options?: any): AxiosPromise { + return localVarFp.getRelations(options).then((request) => request(axios, basePath)); + }, /** * * @summary @@ -1287,6 +2697,17 @@ export class UsersApi extends BaseAPI { return UsersApiFp(this.configuration).confirmUserAndInitPassword(confirmRequest, options).then((request) => request(this.axios, this.basePath)); } + /** + * ログインしているユーザーに関連する各種情報を取得します + * @summary + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UsersApi + */ + public getRelations(options?: AxiosRequestConfig) { + return UsersApiFp(this.configuration).getRelations(options).then((request) => request(this.axios, this.basePath)); + } + /** * * @summary diff --git a/dictation_client/src/app/store.ts b/dictation_client/src/app/store.ts index 9435645..4ae0d5b 100644 --- a/dictation_client/src/app/store.ts +++ b/dictation_client/src/app/store.ts @@ -5,6 +5,7 @@ import signup from "features/signup/signupSlice"; import verify from "features/verify/verifySlice"; import ui from "features/ui/uiSlice"; import user from "features/user/userSlice"; +import license from "features/license/licenseSlice"; export const store = configureStore({ reducer: { @@ -14,6 +15,7 @@ export const store = configureStore({ verify, ui, user, + license, }, }); diff --git a/dictation_client/src/assets/images/ODMScloud.png b/dictation_client/src/assets/images/ODMScloud.png new file mode 100644 index 0000000..1be7a16 Binary files /dev/null and b/dictation_client/src/assets/images/ODMScloud.png differ diff --git a/dictation_client/src/assets/images/lock.svg b/dictation_client/src/assets/images/lock.svg new file mode 100644 index 0000000..993e747 --- /dev/null +++ b/dictation_client/src/assets/images/lock.svg @@ -0,0 +1,13 @@ + + + + + + diff --git a/dictation_client/src/assets/images/lock_open.svg b/dictation_client/src/assets/images/lock_open.svg new file mode 100644 index 0000000..a822269 --- /dev/null +++ b/dictation_client/src/assets/images/lock_open.svg @@ -0,0 +1,14 @@ + + + + + + diff --git a/dictation_client/src/assets/images/top-bg.png b/dictation_client/src/assets/images/top-bg.png new file mode 100644 index 0000000..622ed48 Binary files /dev/null and b/dictation_client/src/assets/images/top-bg.png differ diff --git a/dictation_client/src/assets/images/undo.svg b/dictation_client/src/assets/images/undo.svg new file mode 100644 index 0000000..963bf70 --- /dev/null +++ b/dictation_client/src/assets/images/undo.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/dictation_client/src/common/errors/code.ts b/dictation_client/src/common/errors/code.ts index 305eb60..c296113 100644 --- a/dictation_client/src/common/errors/code.ts +++ b/dictation_client/src/common/errors/code.ts @@ -24,4 +24,5 @@ export const errorCodes = [ "E010202", // 認証済ユーザエラー "E010301", // メールアドレス登録済みエラー "E010302", // authorId重複エラー + "E010401", // PONumber重複エラー ] as const; diff --git a/dictation_client/src/features/license/index.ts b/dictation_client/src/features/license/index.ts new file mode 100644 index 0000000..85ba17f --- /dev/null +++ b/dictation_client/src/features/license/index.ts @@ -0,0 +1,4 @@ +export * from "./state"; +export * from "./operations"; +export * from "./selectors"; +export * from "./licenseSlice"; diff --git a/dictation_client/src/features/license/licenseSlice.ts b/dictation_client/src/features/license/licenseSlice.ts new file mode 100644 index 0000000..583f992 --- /dev/null +++ b/dictation_client/src/features/license/licenseSlice.ts @@ -0,0 +1,31 @@ +import { PayloadAction, createSlice } from "@reduxjs/toolkit"; +import { LicenseOrdersState } from "./state"; + +const initialState: LicenseOrdersState = { + apps: { + poNumber: "", + newOrder: 0, + }, +}; +export const licenseSlice = createSlice({ + name: "license", + initialState, + reducers: { + changePoNumber: (state, action: PayloadAction<{ poNumber: string }>) => { + const { poNumber } = action.payload; + state.apps.poNumber = poNumber.toUpperCase(); + }, + changeNewOrder: (state, action: PayloadAction<{ newOrder: number }>) => { + const { newOrder } = action.payload; + state.apps.newOrder = newOrder; + }, + cleanupApps: (state) => { + state.apps = initialState.apps; + }, + }, +}); + +export const { changePoNumber, changeNewOrder, cleanupApps } = + licenseSlice.actions; + +export default licenseSlice.reducer; diff --git a/dictation_client/src/features/license/operations.ts b/dictation_client/src/features/license/operations.ts new file mode 100644 index 0000000..75bb187 --- /dev/null +++ b/dictation_client/src/features/license/operations.ts @@ -0,0 +1,74 @@ +import { createAsyncThunk } from "@reduxjs/toolkit"; +import type { RootState } from "app/store"; +import { getTranslationID } from "translation"; +import { openSnackbar } from "features/ui/uiSlice"; +import { LicensesApi } from "../../api/api"; +import { Configuration } from "../../api/configuration"; +import { ErrorObject, createErrorObject } from "../../common/errors"; + +export const orderLicenseAsync = createAsyncThunk< + { + /* Empty Object */ + }, + { + // パラメータ + poNumber: string; + orderCount: number; + }, + { + // rejectした時の返却値の型 + rejectValue: { + error: ErrorObject; + }; + } +>("licenses/orderLicenseAsync", async (args, thunkApi) => { + const { poNumber, orderCount } = args; + + // apiのConfigurationを取得する + const { getState } = thunkApi; + const state = getState() as RootState; + const { configuration, accessToken } = state.auth; + const config = new Configuration(configuration); + const licensesApi = new LicensesApi(config); + + try { + await licensesApi.createOrders( + { + poNumber, + orderCount, + }, + { + headers: { authorization: `Bearer ${accessToken}` }, + } + ); + thunkApi.dispatch( + openSnackbar({ + level: "info", + message: getTranslationID( + "licenseOrderPage.message.createOrderSuccess" + ), + }) + ); + return {}; + } catch (e) { + // e ⇒ errorObjectに変換" + const error = createErrorObject(e); + + let errorMessage = getTranslationID("common.message.internalServerError"); + + if (error.code === "E010401") { + errorMessage = getTranslationID( + "licenseOrderPage.message.poNumberConflictError" + ); + } + + thunkApi.dispatch( + openSnackbar({ + level: "error", + message: errorMessage, + }) + ); + + return thunkApi.rejectWithValue({ error }); + } +}); diff --git a/dictation_client/src/features/license/selectors.ts b/dictation_client/src/features/license/selectors.ts new file mode 100644 index 0000000..78d3cbb --- /dev/null +++ b/dictation_client/src/features/license/selectors.ts @@ -0,0 +1,36 @@ +import { RootState } from "app/store"; + +export const selectInputValidationErrors = (state: RootState) => { + const { poNumber, newOrder } = state.license.apps; + + // 必須項目のチェック + const hasErrorEmptyPoNumber = poNumber === ""; + // newOrderは初期値が入っている+minvalueが1なので必須チェックは行わない + + const hasErrorIncorrectPoNumber = checkErrorIncorrectPoNumber(poNumber); + const hasErrorIncorrectNewOrder = checkErrorIncorrectNewOrder(newOrder); + + return { + hasErrorEmptyPoNumber, + hasErrorIncorrectPoNumber, + hasErrorIncorrectNewOrder, + }; +}; +export const checkErrorIncorrectPoNumber = (poNumber: string): boolean => { + // 大文字半角英数字で50文字まで + const charaTypePattern = /^[A-Z0-9]{1,50}$/; + const charaType = new RegExp(charaTypePattern).test(poNumber); + + return !charaType; +}; +export const checkErrorIncorrectNewOrder = (newOrder: number): boolean => { + // 0以下の場合はエラー + if (newOrder <= 0) { + return true; + } + + return false; +}; + +export const selectPoNumber = (state: RootState) => state.license.apps.poNumber; +export const selectNewOrder = (state: RootState) => state.license.apps.newOrder; diff --git a/dictation_client/src/features/license/state.ts b/dictation_client/src/features/license/state.ts new file mode 100644 index 0000000..2a1f7c3 --- /dev/null +++ b/dictation_client/src/features/license/state.ts @@ -0,0 +1,8 @@ +export interface LicenseOrdersState { + apps: Apps; +} + +export interface Apps { + poNumber: string; + newOrder: number; +} diff --git a/dictation_client/src/pages/LicensePage/index.tsx b/dictation_client/src/pages/LicensePage/index.tsx index 7bfc585..d6a957c 100644 --- a/dictation_client/src/pages/LicensePage/index.tsx +++ b/dictation_client/src/pages/LicensePage/index.tsx @@ -1,10 +1,10 @@ import { useMsal } from "@azure/msal-react"; +import React, { useCallback, useState } from "react"; import { AppDispatch } from "app/store"; import { UpdateTokenTimer } from "components/auth/updateTokenTimer"; import Footer from "components/footer"; import Header from "components/header"; import { clearToken } from "features/auth"; -import React from "react"; import { useDispatch } from "react-redux"; import styles from "styles/app.module.scss"; import { getTranslationID } from "translation"; @@ -12,74 +12,94 @@ import { useTranslation } from "react-i18next"; import postAdd from "../../assets/images/post_add.svg"; import history from "../../assets/images/history.svg"; import key from "../../assets/images/key.svg"; +import { LicenseOrderPopup } from "./licenseOrderPopup"; const LicensePage: React.FC = (): JSX.Element => { const { instance } = useMsal(); const dispatch: AppDispatch = useDispatch(); const [t] = useTranslation(); + const [islicenseOrderPopupOpen, setIslicenseOrderPopupOpen] = useState(false); + + const onlicenseOrderOpen = useCallback(() => { + setIslicenseOrderPopupOpen(true); + }, [setIslicenseOrderPopupOpen]); + return ( - /* TODO 現状(PBI1221)はライセンス注文PUを起動するためのボタンのみ。別途ライセンス注文を実装するPBIで全般的に見直し。 */ -
-
- - -
-
-
-

- {t(getTranslationID("LicensePage.label.title"))} -

-
-
-
-

- {t(getTranslationID("LicensePage.label.subTitle"))} -

- -
-
-
-
- - {/* TODO 画面デザインにはないが、試験時に便利なので配置しておく。ライセンス注文を実装するPBIで正式なサインアウトのレイアウトに直す */} -
- + /> + )} + {/* TODO 現状(PBI1221)はライセンス注文PUを起動するためのボタンのみ。別途ライセンス注文を実装するPBIで全般的に見直し。 */} +
+
+ + +
+
+
+

+ {t(getTranslationID("LicensePage.label.title"))} +

+
+
+
+

+ {t(getTranslationID("LicensePage.label.subTitle"))} +

+ +
+
+
+
+ + {/* TODO 画面デザインにはないが、試験時に便利なので配置しておく。ライセンス注文を実装するPBIで正式なサインアウトのレイアウトに直す */} +
+ +
+
-
-
+ ); }; diff --git a/dictation_client/src/pages/LicensePage/licenseOrderPopup.tsx b/dictation_client/src/pages/LicensePage/licenseOrderPopup.tsx new file mode 100644 index 0000000..be846c4 --- /dev/null +++ b/dictation_client/src/pages/LicensePage/licenseOrderPopup.tsx @@ -0,0 +1,210 @@ +import { AppDispatch } from "app/store"; +import React, { useState, useCallback, useEffect } from "react"; +import styles from "styles/app.module.scss"; +import { useDispatch, useSelector } from "react-redux"; +import { getTranslationID } from "translation"; +import { useTranslation } from "react-i18next"; +import { + changePoNumber, + changeNewOrder, + selectPoNumber, + selectNewOrder, + selectInputValidationErrors, + orderLicenseAsync, + cleanupApps, +} from "features/license"; +import close from "../../assets/images/close.svg"; + +interface LicenseOrderPopupProps { + onClose: () => void; +} + +export const LicenseOrderPopup: React.FC = (props) => { + const { onClose } = props; + const dispatch: AppDispatch = useDispatch(); + const { t } = useTranslation(); + const initCount = useSelector(selectNewOrder); + const [count, setCount] = useState(initCount); + const [poNumberInputValue, setpoNumberInputValue] = useState(); + + useEffect( + () => () => { + // useEffectのreturnとしてcleanupAppsを実行することで、ポップアップのアンマウント時に初期化を行う + dispatch(cleanupApps()); + }, + [dispatch] + ); + + // ポップアップを閉じる処理 + const closePopup = useCallback(() => { + setIsPushOrderButton(false); + onClose(); + }, [onClose]); + + // 画面からのパラメータ + const poNumber = useSelector(selectPoNumber); + const orderCount = useSelector(selectNewOrder); + + const [isPushOrderButton, setIsPushOrderButton] = useState(false); + + // エラー宣言 + const { + hasErrorEmptyPoNumber, + hasErrorIncorrectPoNumber, + hasErrorIncorrectNewOrder, + } = useSelector(selectInputValidationErrors); + + // 注文ボタン押下時 + const onOrderLicense = useCallback(async () => { + setIsPushOrderButton(true); + // エラーチェックを実施 + if ( + hasErrorEmptyPoNumber || + hasErrorIncorrectPoNumber || + hasErrorIncorrectNewOrder + ) { + return; + } + + // ダイアログ確認 + if ( + /* eslint-disable-next-line no-alert */ + !window.confirm( + t(getTranslationID("licenseOrderPage.message.confirmOrder")) + ) + ) { + return; + } + + // 注文APIの呼び出し + const { meta } = await dispatch( + orderLicenseAsync({ + poNumber, + orderCount, + }) + ); + setIsPushOrderButton(false); + + if (meta.requestStatus === "fulfilled") { + closePopup(); + } + }, [ + dispatch, + closePopup, + t, + hasErrorEmptyPoNumber, + hasErrorIncorrectPoNumber, + hasErrorIncorrectNewOrder, + poNumber, + orderCount, + ]); + + // HTML + return ( +
+
+

+ {t(getTranslationID("licenseOrderPage.label.title"))} + +

+
+
+
{t(getTranslationID("licenseOrderPage.label.licenses"))}
+
+ +
+
{t(getTranslationID("licenseOrderPage.label.poNumber"))}
+
+ { + const input = e.target.value.toUpperCase(); + setpoNumberInputValue(input); + }} + onBlur={(e) => { + dispatch(changePoNumber({ poNumber: e.target.value })); + }} + /> + {isPushOrderButton && hasErrorEmptyPoNumber && ( + + {t( + getTranslationID("licenseOrderPage.message.inputEmptyError") + )} + + )} + {isPushOrderButton && hasErrorIncorrectPoNumber && ( + + {t( + getTranslationID( + "licenseOrderPage.message.poNumberIncorrectError" + ) + )} + + )} +
+
{t(getTranslationID("licenseOrderPage.label.newOrder"))}
+
+ { + const input = Number(e.target.value.substring(0, 4)); + setCount(input); + }} + onBlur={(e) => { + dispatch( + changeNewOrder({ newOrder: Number(e.target.value) }) + ); + }} + /> + {isPushOrderButton && hasErrorIncorrectNewOrder && ( + + {t( + getTranslationID( + "licenseOrderPage.message.newOrderIncorrectError" + ) + )} + + )} +
+
+ +
+
+
+
+
+ ); +}; diff --git a/dictation_client/src/styles/app.module.scss b/dictation_client/src/styles/app.module.scss index 4e0abe3..8eee3fa 100644 --- a/dictation_client/src/styles/app.module.scss +++ b/dictation_client/src/styles/app.module.scss @@ -1,8 +1,3 @@ -.wrap.home { - background: url("../assets/images/top-bg04.png") no-repeat bottom center; - background-size: cover; -} - .wrap { display: grid; grid-template-rows: auto 1fr auto; @@ -22,7 +17,7 @@ z-index: 4; } .headerLogo { - margin: 1.8rem 2rem 1rem; + margin: 1.2rem 2rem 1rem; font-size: 1.71rem; line-height: 2rem; letter-spacing: 0.07rem; @@ -32,7 +27,7 @@ width: 198px; } .headerSub { - margin: 1.8rem 2rem 1rem; + margin: 1.4rem 2rem 1rem; font-size: 1.2rem; line-height: 2rem; letter-spacing: 0.07rem; @@ -70,25 +65,26 @@ text-decoration: underline; } .headerMenu ul li a.isActive { - font-weight: 500; + font-weight: 600; pointer-events: none; position: relative; } .headerMenu ul li a.isActive::after { content: ""; - width: 100%; - height: 5px; - background: #f0f0f0; + border-right: 0.6rem transparent solid; + border-bottom: 0.6rem #282828 solid; + border-left: 0.6rem transparent solid; position: absolute; bottom: -4px; - left: 0; + left: 50%; + transform: translateX(-50%); } .accountInfo { position: absolute; right: 2rem; bottom: 0.3rem; - font-size: 0.8rem; + font-size: 0.9rem; line-height: 1.6rem; letter-spacing: 0.04rem; font-weight: normal; @@ -133,7 +129,54 @@ _:-ms-lang(x)::-ms-backdrop, letter-spacing: 0.4px; font-weight: normal; color: #999999; - background: #282828; +} + +h2 .brCrumb, +h3 .brCrumb { + display: inline; + margin-left: 1rem; + font-size: 1.5rem; + line-height: 1.4; + letter-spacing: 0.04rem; + font-weight: normal; +} +h2 .brCrumb::before, +h3 .brCrumb::before { + content: "-"; +} +h2 .brCrumb .tlIcon, +h3 .brCrumb .tlIcon { + width: 1.6rem; + margin: 0 0.2rem 0 0.5rem; + vertical-align: text-top; +} + +.brCrumbAcc { + margin-bottom: 1rem; +} +.brCrumbAcc li { + padding-left: 1.1rem; + font-size: 1.2rem; + line-height: 1.4; + letter-spacing: 0.04rem; + font-weight: normal; + position: relative; +} +.brCrumbAcc li::before { + content: ""; + border-top: 8px #333333 solid; + border-right: 6px transparent solid; + border-left: 6px transparent solid; + position: absolute; + top: 50%; + left: 0; + transform: translateY(-50%); +} +.brCrumbAcc li:nth-of-type(2) { + margin-left: 1.1rem; +} +.brCrumbAcc li:nth-of-type(3) { + margin-left: 2.2rem; } .buttonNormal { @@ -281,14 +324,18 @@ _:-ms-lang(x)::-ms-backdrop, .formInput:focus { outline: 0; } +.formInput[readonly] { + border: 1px #e6e6e6 solid; + background: #e6e6e6; +} .formInput.isError { background: rgba(229, 0, 0, 0.08); } .formInput.password[type="password"] + span { - background: url(../images/visibility_off.svg) no-repeat top right; + background: url(../assets/images/visibility_off.svg) no-repeat top right; } .formInput.password[type="text"] + span { - background: url(../images/visibility.svg) no-repeat top right; + background: url(../assets/images/visibility.svg) no-repeat top right; } .formIconEye { display: inline-block; @@ -345,6 +392,7 @@ _:-ms-lang(x)::-ms-backdrop, width: 350px; padding: 0.6rem 0.6rem; background: #f0f0f0; + box-sizing: border-box; } .formSubmit { min-width: 15rem; @@ -433,6 +481,34 @@ _:-ms-lang(x)::-ms-backdrop, width: 100px; } +.listVertical { + width: 600px; + display: flex; + flex-wrap: wrap; + border-bottom: 0.1rem solid rgba(0, 0, 0, 0.1); +} +.listVertical dt, +.listVertical dd { + padding: 0.8rem 4%; + font-size: 14px; + line-height: 1.4; + letter-spacing: 0.04rem; + font-weight: normal; +} +.listVertical dt:nth-of-type(odd), +.listVertical dd:nth-of-type(odd) { + background: #f5f5f5; +} +.listVertical dt { + width: 42%; + text-align: left; + position: relative; +} +.listVertical dd { + width: 42%; + text-align: right; +} + .loadingBoxSpinner { width: 50px; height: 50px; @@ -524,16 +600,22 @@ _:-ms-lang(x)::-ms-backdrop, } .pageHeader { - background: #f0f0f0; - padding: 1.5rem 2.5rem; - background: linear-gradient(#f0f0f0, #ffffff 70%, #ffffff 100%); + padding: 0.5rem 2.5rem 0.4rem; + background: #282828; + color: #ffffff; + margin-bottom: 2rem; } .pageTitle { + display: inline-block; + padding-right: 1rem; font-size: 1.8rem; line-height: 2.5rem; letter-spacing: 0.07rem; font-weight: 500; } +.pageTx { + display: inline-block; +} .pagenation { margin-bottom: 3rem; @@ -640,6 +722,16 @@ _:-ms-lang(x)::-ms-backdrop, .table tr:last-child { border-bottom: 0.1rem solid rgba(0, 0, 0, 0.1); } +.table td { + padding: 0.8rem 0.7rem; + font-size: 13px; + line-height: 1.4; + letter-spacing: 0; + font-weight: normal; +} +.table td .isAlert { + color: #ff5a33; +} .tableHeader { background: #282828; } @@ -657,6 +749,7 @@ _:-ms-lang(x)::-ms-backdrop, .tableHeader th .hasSort { display: block; width: calc(100% - 0.5rem); + padding-right: 0.5rem; } .tableHeader th .hasSort::before { content: ""; @@ -667,7 +760,7 @@ _:-ms-lang(x)::-ms-backdrop, top: 50%; right: 0.5rem; transform: translateY(-50%); - opacity: 0; + opacity: 0.4; -moz-transition: all 0.3s ease-out; -ms-transition: all 0.3s ease-out; -webkit-transition: all 0.3s ease-out; @@ -692,55 +785,48 @@ _:-ms-lang(x)::-ms-backdrop, right: -0.3rem; z-index: 3; } -.table td { - padding: 0.8rem 0.5rem; - font-size: 13px; - line-height: 1.4; - letter-spacing: 0; - font-weight: normal; +.tableHeader th.noLine { + border-right: none; } -.table td:has(img) { +.tableHeader th.noLine::after { + display: none; +} + +.wrap.home { + background: url("../assets/images/top-bg.png") no-repeat bottom center; + background-size: cover; +} + +.header.home { + background: none; + box-shadow: none; +} +.header.home .headerSub { + display: none; +} + +@media only screen and (min-width: 1280px) { + .pgHome { + display: flex; + flex-wrap: wrap; + justify-content: center; + } +} +.pgHome .ODMSlogo { text-align: center; + padding: 2rem 0 0; } -.table td .isAlert { - color: #ff5a33; -} - -.icCheckCircle { - width: 20px; - vertical-align: bottom; -} - @media only screen and (min-width: 1280px) { - .wrap.home { - display: grid; - grid-template-rows: 1fr auto; - grid-template-columns: 45% 1fr; - grid-template-areas: "header main" "footer footer"; - min-height: 100vh; - } -} - -@media only screen and (min-width: 1280px) { - .header.home { - display: block; - padding-top: 30vh; - padding-left: 40%; - background: none; - box-shadow: none; - } - .header.home .headerSub { - font-size: 1.4rem; - line-height: 2rem; - letter-spacing: 0.07rem; - font-weight: 600; + .pgHome .ODMSlogo { + width: 400px; + margin: 15vh 0 0 0; + padding: 0 0 0; text-align: left; } } - .pgHome > div { width: 400px; - margin: 15vh auto 0; + margin: 3rem auto 0; padding: 2rem; background: #ffffff; box-shadow: 0 0 5px #aaa; @@ -748,7 +834,7 @@ _:-ms-lang(x)::-ms-backdrop, } @media only screen and (min-width: 1280px) { .pgHome > div { - margin: 25vh auto 0 50px; + margin: 15vh 0 0 0; } } .pgHomeLinks { @@ -797,48 +883,53 @@ _:-ms-lang(x)::-ms-backdrop, } .user > div, -.license > div { +.license > div, +.dictation > div { padding: 0 2rem; } .user .table tr:not(.tableHeader), -.license .table tr:not(.tableHeader) { - cursor: pointer; +.license .table tr:not(.tableHeader), +.dictation .table tr:not(.tableHeader) { position: relative; } -.user .table tr:not(.tableHeader):hover .tdEx, -.license .table tr:not(.tableHeader):hover .tdEx { - opacity: 1; -} -.user .table tr:not(.tableHeader).isSelected, -.license .table tr:not(.tableHeader).isSelected { - background: #0084b2; - color: #ffffff; -} -.user .table tr:not(.tableHeader).isSelected:hover, -.license .table tr:not(.tableHeader).isSelected:hover { - color: #ffffff; -} -.user .table td:not(.tdEx), -.license .table td:not(.tdEx) { +.user .table td, +.license .table td, +.dictation .table td { max-width: 300px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; - padding-bottom: 2rem; + position: relative; } -.user .table td.tdEx, -.license .table td.tdEx { +.user .table.user tr:not(.tableHeader), +.license .table.user tr:not(.tableHeader), +.dictation .table.user tr:not(.tableHeader) { + cursor: pointer; +} +.user .table.user tr:not(.tableHeader):hover, +.license .table.user tr:not(.tableHeader):hover, +.dictation .table.user tr:not(.tableHeader):hover { + color: #0084b2; +} +.user .table.user tr:not(.tableHeader).isSelected, +.license .table.user tr:not(.tableHeader).isSelected, +.dictation .table.user tr:not(.tableHeader).isSelected { + color: #ffffff; +} +.user .table.user tr:not(.tableHeader).isSelected:hover, +.license .table.user tr:not(.tableHeader).isSelected:hover, +.dictation .table.user tr:not(.tableHeader).isSelected:hover { + color: #ffffff; +} +.user .table.user tr:not(.tableHeader).isSelected td, +.license .table.user tr:not(.tableHeader).isSelected td, +.dictation .table.user tr:not(.tableHeader).isSelected td { + background: #0084b2; +} +.user .table.user tr:not(.tableHeader).isSelected .menuInTable, +.license .table.user tr:not(.tableHeader).isSelected .menuInTable, +.dictation .table.user tr:not(.tableHeader).isSelected .menuInTable { display: block; - width: 100%; - padding: 0 0.5rem; - position: absolute; - left: 0; - bottom: 0.5rem; - -moz-transition: all 0.3s ease-out; - -ms-transition: all 0.3s ease-out; - -webkit-transition: all 0.3s ease-out; - transition: all 0.3s ease-out; - opacity: 0; } .menuAction { @@ -848,6 +939,51 @@ _:-ms-lang(x)::-ms-backdrop, display: inline-block; margin-right: 0.5rem; } +.menuAction.inTable { + margin-bottom: 0; +} +.menuAction.inTable .menuLink { + padding: 0.3rem 0.5rem 0.3rem 0.5rem; + opacity: 0; +} +.menuAction.inTable .menuLink.isActive { + opacity: 1; +} +.menuAction.inTable .colorLink { + display: block; + padding: 0.3rem 0.5rem 0.3rem 0.5rem; + font-size: 13px; + line-height: 1.4; + letter-spacing: 0.04rem; + font-weight: normal; + text-decoration: none; + border: 1px #999999 solid; + border-radius: 0.2rem; + opacity: 0; + pointer-events: none; + background: #ffffff; + -moz-transition: all 0.3s ease-out; + -ms-transition: all 0.3s ease-out; + -webkit-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} +.menuAction.inTable .colorLink.isActive { + cursor: pointer; + opacity: 1; + color: #ffffff; + background: #004086; + border: 1px #004086 solid; + pointer-events: inherit; +} +.menuAction.inTable .colorLink.isActive:hover { + background: rgba(0, 94, 184, 0.7); +} +.menuMore { + text-align: center; +} +.menuMore .menuIcon { + height: 1.2rem; +} .menuLink { display: block; padding: 0.3rem 0.5rem 0.3rem 0.3rem; @@ -859,8 +995,13 @@ _:-ms-lang(x)::-ms-backdrop, color: #333333; border: 1px #a5a5a5 solid; border-radius: 0.2rem; - opacity: 0.4; + opacity: 0.3; pointer-events: none; + background: #ffffff; + -moz-transition: all 0.3s ease-out; + -ms-transition: all 0.3s ease-out; + -webkit-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; } .menuLink.isActive { opacity: 1; @@ -875,6 +1016,577 @@ _:-ms-lang(x)::-ms-backdrop, vertical-align: bottom; } +.icCheckCircle { + width: 20px; + vertical-align: bottom; +} + +.license .table.history { + width: 1000px; +} +.license .table.history td:last-child { + width: 200px; + text-align: right; +} +.license .table.cardHistory { + width: 750px; +} +.license .table.cardHistory td:last-child { + width: 50%; +} +.license .table.partner tr { + position: relative; +} +.license .table.partner tr td[title="View child accounts"] { + position: relative; + cursor: pointer; + background-size: 0.2rem; +} +.license .table.partner tr td[title="View child accounts"]:hover { + color: #0084b2; +} +.license .table.partner tr td[title="View child accounts"] a { + color: inherit; + text-decoration: none; +} +.license .table.partner tr td[title="Return"] { + position: relative; + cursor: pointer; +} +.license .table.partner tr td[title="Return"]:hover { + color: #0084b2; +} +.license .table.partner tr.isOpen::after { + content: ""; + width: 100%; + border-bottom: 3px #0084b2 solid; + position: absolute; + bottom: 0; + left: 0; +} +.license .table.partner tr.isOpen td { + padding: 0.3rem 0.7rem; +} +.license .table.partner tr.isOpen td:nth-child(n + 2) { + color: #999999; +} +.license .table.partner tr.isOpen td:first-child { + padding-left: 1.5rem; +} +.license .table.partner tr.isOpen td:first-child::before { + content: ""; + position: absolute; + top: 50%; + left: 0.4rem; + border-top: 8px #0084b2 solid; + border-right: 6px transparent solid; + border-left: 6px transparent solid; + transform: translateY(-50%); +} +.license .table.partner tr.isOpen ~ tr td:first-child { + padding-left: 2.5rem; +} +.license .table.partner tr.isOpen ~ tr td:first-child::before { + top: 50%; + left: 1.4rem; +} +.license .table.partner tr.isOpen + .isOpen::after { + width: calc(100% - 1.4rem); + left: 1.4rem; +} +.license .table.partner tr.isOpen + .isOpen ~ tr td:first-child { + padding-left: 3.5rem; +} +.license .table.partner tr.isOpen + .isOpen ~ tr td:first-child::before { + top: 50%; + left: 2.4rem; +} +.license .table.partner tr.isOpen + .isOpen + .isOpen::after { + width: calc(100% - 2.4rem); + left: 2.4rem; +} +.license .table.partner tr.isOpen.role2, +.license .table.partner tr.isOpen.role3, +.license .table.partner tr.isOpen.role4 { + background: #fafafa; +} +.license .table.partner tr.isOpen.role3::after { + border-bottom: 3px #00b4aa solid; +} +.license .table.partner tr.isOpen.role3 td:first-child::before { + border-top: 8px #00b4aa solid; + border-right: 6px transparent solid; + border-left: 6px transparent solid; +} +.license .table.partner tr.isOpen.role4::after { + border-bottom: 3px #faa306 solid; +} +.license .table.partner tr.isOpen.role4 td:first-child::before { + border-top: 8px #faa306 solid; + border-right: 6px transparent solid; + border-left: 6px transparent solid; +} +.license .table.partner td:last-child { + width: 120px; + text-align: right; +} +.license .table.partner.iconver tr td[title="View child accounts"] { + padding-left: 1.5rem; + position: relative; + cursor: pointer; + background-size: none; +} +.license .table.partner.iconver tr td[title="View child accounts"]:hover { + color: #0084b2; +} +.license .table.partner.iconver tr td[title="View child accounts"] a { + color: inherit; + text-decoration: none; +} +.license .table.partner.iconver tr td[title="View child accounts"]::before { + content: ""; + position: absolute; + top: 50%; + left: 0.4rem; + border-top: 6px transparent solid; + border-bottom: 6px transparent solid; + border-left: 8px #0084b2 solid; + transform: translateY(-50%); +} +.license + .table.partner.iconver + tr.role3 + td[title="View child accounts"]::before { + border-top: 6px transparent solid; + border-bottom: 6px transparent solid; + border-left: 8px #00b4aa solid; +} +.license + .table.partner.iconver + tr.role4 + td[title="View child accounts"]::before { + border-top: 6px transparent solid; + border-bottom: 6px transparent solid; + border-left: 8px #faa306 solid; +} +.license .table.partner.iconver tr.role5 td:first-child::before { + display: none; +} + +.dictation .displayOptions { + display: none; + margin-bottom: 0.6rem; + padding: 0.3rem 1rem; + background: #f0f0f0; + position: relative; +} +.dictation .displayOptions li { + display: inline-block; +} +.dictation .displayOptions li label { + padding: 0.3rem 0; + font-size: 13px; + line-height: 1.4; + letter-spacing: 0.02rem; + font-weight: normal; +} +.dictation .displayOptions li label .formCheck { + width: 0.9rem; + height: 0.9rem; + margin-right: 0.3rem; +} +.dictation .displayOptions.isShow { + display: block; +} +.dictation .displayOptions::before { + content: ""; + border-right: 0.6rem transparent solid; + border-bottom: 0.6rem #f0f0f0 solid; + border-left: 0.6rem transparent solid; + position: absolute; + top: -0.5rem; + left: 1rem; +} +.dictation .table { + margin-bottom: 0; +} +.dictation .tableFilter { + padding-top: 0.8rem; + margin-bottom: 0.8rem; +} +.dictation .tableFilter li { + display: inline-block; + margin-right: 0.3rem; + font-size: 14px; + line-height: 1.4; + letter-spacing: 0.02rem; + font-weight: normal; +} +.dictation .tableFilter li label { + cursor: pointer; +} +.dictation .tableFilter li label .formCheck { + width: 0.9rem; + height: 0.9rem; + margin-right: 0.3rem; +} +.dictation .tableFilter2 { + padding-top: 0.8rem; + margin-bottom: 0.8rem; +} +.dictation .tableFilter2 li { + display: inline-block; + margin-right: 0.5rem; + font-size: 14px; + line-height: 1.1; + letter-spacing: 0.02rem; + font-weight: normal; +} +.dictation .tableFilter2 li a { + display: block; + color: #0084b2; + text-decoration: none; + padding-right: 0.5rem; +} +.dictation .tableFilter2 li a:hover { + opacity: 0.7; +} +.dictation .tableFilter2 li a.isDisable { + color: #999999; + pointer-events: none; +} +.dictation .tableFilter2 li a span { + display: inline-block; + padding: 0 0.2rem; + color: #333333; +} +.dictation .tableFilter2 li:not(:last-child) a { + border-right: 1px #999999 solid; +} +.dictation .tableWrap { + max-width: calc(100vw - 5.1rem); + max-height: 90vh; + overflow-x: scroll; + margin-bottom: 1rem; +} +.dictation .table.dictation { + position: relative; + min-width: 100%; +} +.dictation .table.dictation tr { + position: relative; +} +.dictation .table.dictation tr.tableHeader th { + position: -webkit-sticky; + position: sticky; + top: 0; + background: #282828; + z-index: 1; +} +.dictation .table.dictation tr.tableHeader th.clm0 { + width: 0px; + padding: 0 0; +} +.dictation .table.dictation tr.tableHeader th:not(:last-child)::before { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border-right: 0.1rem #e6e6e6 solid; + z-index: -1; +} +.dictation .table.dictation tr:hover .menuInTable { + opacity: 1; +} +.dictation .table.dictation tr.isSelected { + background: #0084b2; + color: #ffffff; +} +.dictation .table.dictation tr.isSelected:hover { + color: #ffffff; +} +.dictation .table.dictation td { + padding-bottom: 2rem; + vertical-align: top; +} +.dictation .table.dictation td:has(img[alt="encrypted"]) { + text-align: center; +} +.dictation .table.dictation td:has(img[alt="encrypted"]) img { + height: 1.1rem; +} +.dictation .table.dictation td.clm0 { + width: 0px; + padding: 0 0; + overflow: visible; + position: sticky; + left: 0; + z-index: 2; +} +.dictation .table.dictation td img { + height: 1.3rem; + margin-right: 0.2rem; + margin-left: -0.4rem; + vertical-align: middle; +} +.dictation .table.dictation td.txWsline { + white-space: pre; +} +.dictation .table.dictation.hidePri th.opPri, +.dictation .table.dictation.hidePri td.opPri { + display: none; +} +.dictation .table.dictation.hideSize th.opSize, +.dictation .table.dictation.hideSize td.opSize { + display: none; +} +.dictation .table.dictation.hideUpd th.opUpd, +.dictation .table.dictation.hideUpd td.opUpd { + display: none; +} +.dictation .table.dictation.hideC1 th.clm1, +.dictation .table.dictation.hideC1 td.clm1 { + display: none; +} +.dictation .table.dictation.hideC2 th.clm2, +.dictation .table.dictation.hideC2 td.clm2 { + display: none; +} +.dictation .table.dictation.hideC3 th.clm3, +.dictation .table.dictation.hideC3 td.clm3 { + display: none; +} +.dictation .table.dictation.hideC4 th.clm4, +.dictation .table.dictation.hideC4 td.clm4 { + display: none; +} +.dictation .table.dictation.hideC5 th.clm5, +.dictation .table.dictation.hideC5 td.clm5 { + display: none; +} +.dictation .table.dictation.hideC6 th.clm6, +.dictation .table.dictation.hideC6 td.clm6 { + display: none; +} +.dictation .table.dictation.hideC7 th.clm7, +.dictation .table.dictation.hideC7 td.clm7 { + display: none; +} +.dictation .table.dictation.hideC8 th.clm8, +.dictation .table.dictation.hideC8 td.clm8 { + display: none; +} +.dictation .table.dictation.hideC9 th.clm9, +.dictation .table.dictation.hideC9 td.clm9 { + display: none; +} +.dictation .table.dictation.hideC10 th.clm10, +.dictation .table.dictation.hideC10 td.clm10 { + display: none; +} +.dictation .table.dictation.hideC11 th.clm11, +.dictation .table.dictation.hideC11 td.clm11 { + display: none; +} +.dictation .table.dictation.hideC12 th.clm12, +.dictation .table.dictation.hideC12 td.clm12 { + display: none; +} +.dictation .table.dictation.hideC13 th.clm13, +.dictation .table.dictation.hideC13 td.clm13 { + display: none; +} +.dictation .table.dictation.hideC14 th.clm14, +.dictation .table.dictation.hideC14 td.clm14 { + display: none; +} +.dictation .table.dictation.hideC15 th.clm15, +.dictation .table.dictation.hideC15 td.clm15 { + display: none; +} +.dictation .table.dictation.hideC16 th.clm16, +.dictation .table.dictation.hideC16 td.clm16 { + display: none; +} +.dictation .table.dictation.hideO1 th.op1, +.dictation .table.dictation.hideO1 td.op1 { + display: none; +} +.dictation .table.dictation.hideO2 th.op2, +.dictation .table.dictation.hideO2 td.op2 { + display: none; +} +.dictation .table.dictation.hideO3 th.op3, +.dictation .table.dictation.hideO3 td.op3 { + display: none; +} +.dictation .table.dictation.hideO4 th.op4, +.dictation .table.dictation.hideO4 td.op4 { + display: none; +} +.dictation .table.dictation.hideO5 th.op5, +.dictation .table.dictation.hideO5 td.op5 { + display: none; +} +.dictation .table.dictation.hideO6 th.op6, +.dictation .table.dictation.hideO6 td.op6 { + display: none; +} +.dictation .table.dictation.hideO7 th.op7, +.dictation .table.dictation.hideO7 td.op7 { + display: none; +} +.dictation .table.dictation.hideO8 th.op8, +.dictation .table.dictation.hideO8 td.op8 { + display: none; +} +.dictation .table.dictation.hideO9 th.op9, +.dictation .table.dictation.hideO9 td.op9 { + display: none; +} +.dictation .table.dictation.hideO10 th.op10, +.dictation .table.dictation.hideO10 td.op10 { + display: none; +} + +.menuInTable { + width: auto; + position: absolute; + left: 0.7rem; + bottom: 0.5rem; + opacity: 0; + -moz-transition: all 0.3s ease-out; + -ms-transition: all 0.3s ease-out; + -webkit-transition: all 0.3s ease-out; + transition: all 0.3s ease-out; +} +.menuInTable li { + display: inline-block; + margin-right: 0.5rem; + padding-right: 0.5rem; +} +.menuInTable li a { + display: block; + padding-left: 1.2rem; + font-size: 12px; + line-height: 1.4; + letter-spacing: 0.02rem; + font-weight: normal; + text-decoration: none; + color: #0084b2; +} +.menuInTable li a:hover { + opacity: 0.7; +} +.menuInTable li a.isDisable { + color: #999999; + pointer-events: none; +} +.menuInTable li a.mnPlay { + background: url(../assets/images/mn_play.svg) no-repeat left center; + background-size: 1.2rem; +} +.menuInTable li a.mnFile { + background: url(../assets/images/mn_file.svg) no-repeat left center; + background-size: 1.2rem; +} +.menuInTable li a.mnChange { + background: url(../assets/images/mn_change.svg) no-repeat left center; + background-size: 1.2rem; +} +.menuInTable li a.mnDelete { + background: url(../assets/images/delete.svg) no-repeat left center; + background-size: 1.2rem; +} +tr.isSelected .menuInTable li a { + color: #333333; +} +tr.isSelected .menuInTable li a:hover { + color: #ffffff; +} + +.formList dd.formChange { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + width: 92%; + padding: 0 4%; +} +.formList dd.formChange ul.chooseMember, +.formList dd.formChange ul.holdMember { + width: calc(40% - 2px); + border: 1px #999999 solid; +} +.formChange ul.chooseMember, +.formChange ul.holdMember { + height: 250px; + overflow-y: scroll; + padding: 0.5rem; +} +.formChange ul.chooseMember li.changeTitle, +.formChange ul.holdMember li.changeTitle { + font-weight: 600; +} +.formChange ul.chooseMember li .formCheck, +.formChange ul.holdMember li .formCheck { + display: none; +} +.formChange ul.chooseMember li input + label, +.formChange ul.holdMember li input + label { + display: block; + padding: 0.2rem 0 0.2rem 1.5rem; + margin-right: 0; + background: url(../assets/images/circle.svg) no-repeat left center; + background-size: 1.3rem; +} +.formChange ul.chooseMember li input + label:hover, +.formChange ul.holdMember li input + label:hover { + background: #e6e6e6 url(../assets/images/arrow_circle_left.svg) no-repeat left + center; + background-size: 1.3rem; +} +.formChange ul.chooseMember li input:checked + label, +.formChange ul.holdMember li input:checked + label { + padding: 0.2rem 1rem 0.2rem 0; + background: url(../assets/images/check_circle_fill.svg) no-repeat right center; + background-size: 1.3rem; +} +.formChange ul.chooseMember li input:checked + label:hover, +.formChange ul.holdMember li input:checked + label:hover { + background: #e6e6e6 url(../assets/images/arrow_circle_right.svg) no-repeat + right center; + background-size: 1.3rem; +} +.formChange > p { + width: 6%; + height: 20px; + background: #e6e6e6; + position: relative; +} +.formChange > p::before { + content: ""; + border-top: 20px transparent solid; + border-right: 20px #e6e6e6 solid; + border-bottom: 20px transparent solid; + position: absolute; + top: 50%; + left: -15px; + transform: translateY(-50%); +} +.formChange > p::after { + content: ""; + border-top: 20px transparent solid; + border-bottom: 20px transparent solid; + border-left: 20px #e6e6e6 solid; + position: absolute; + top: 50%; + right: -15px; + transform: translateY(-50%); +} + .alignCenter { text-align: center; } @@ -931,6 +1643,19 @@ _:-ms-lang(x)::-ms-backdrop, margin-right: 3rem; } +.paddSide0 { + padding: 0 0.5rem; +} +.paddSide1 { + padding: 0 1rem; +} +.paddSide2 { + padding: 0 2rem; +} +.paddSide3 { + padding: 0 3rem; +} + .txNormal { font-size: 14px; line-height: 1.7; @@ -940,5 +1665,11 @@ _:-ms-lang(x)::-ms-backdrop, .txIcon { width: 1.1rem; } +.txWsline { + white-space: pre-line; +} +.txWswrap { + white-space: pre-wrap; +} /*# sourceMappingURL=style.css.map */ diff --git a/dictation_client/src/styles/app.module.scss.d.ts b/dictation_client/src/styles/app.module.scss.d.ts index 11b807b..ad831d5 100644 --- a/dictation_client/src/styles/app.module.scss.d.ts +++ b/dictation_client/src/styles/app.module.scss.d.ts @@ -1,6 +1,5 @@ declare const classNames: { readonly wrap: "wrap"; - readonly home: "home"; readonly header: "header"; readonly headerLogo: "headerLogo"; readonly headerSub: "headerSub"; @@ -12,6 +11,9 @@ declare const classNames: { readonly mainSmall: "mainSmall"; readonly mainLogin: "mainLogin"; readonly footer: "footer"; + readonly brCrumb: "brCrumb"; + readonly tlIcon: "tlIcon"; + readonly brCrumbAcc: "brCrumbAcc"; readonly buttonNormal: "buttonNormal"; readonly small: "small"; readonly red: "red"; @@ -37,6 +39,7 @@ declare const classNames: { readonly formBack: "formBack"; readonly formButtonTx: "formButtonTx"; readonly formDone: "formDone"; + readonly listVertical: "listVertical"; readonly loadingBoxSpinner: "loadingBoxSpinner"; readonly modal: "modal"; readonly isShow: "isShow"; @@ -48,6 +51,7 @@ declare const classNames: { readonly slideSet: "slideSet"; readonly pageHeader: "pageHeader"; readonly pageTitle: "pageTitle"; + readonly pageTx: "pageTx"; readonly pagenation: "pagenation"; readonly pagenationNav: "pagenationNav"; readonly pagenationTotal: "pagenationTotal"; @@ -59,16 +63,106 @@ declare const classNames: { readonly table: "table"; readonly tableHeader: "tableHeader"; readonly hasSort: "hasSort"; - readonly icCheckCircle: "icCheckCircle"; + readonly noLine: "noLine"; + readonly home: "home"; readonly pgHome: "pgHome"; + readonly ODMSlogo: "ODMSlogo"; readonly pgHomeLinks: "pgHomeLinks"; readonly buttonIcon: "buttonIcon"; readonly user: "user"; readonly license: "license"; + readonly dictation: "dictation"; readonly isSelected: "isSelected"; + readonly menuInTable: "menuInTable"; readonly menuAction: "menuAction"; + readonly inTable: "inTable"; readonly menuLink: "menuLink"; + readonly colorLink: "colorLink"; + readonly menuMore: "menuMore"; readonly menuIcon: "menuIcon"; + readonly icCheckCircle: "icCheckCircle"; + readonly history: "history"; + readonly cardHistory: "cardHistory"; + readonly partner: "partner"; + readonly isOpen: "isOpen"; + readonly role2: "role2"; + readonly role3: "role3"; + readonly role4: "role4"; + readonly iconver: "iconver"; + readonly role5: "role5"; + readonly displayOptions: "displayOptions"; + readonly tableFilter: "tableFilter"; + readonly tableFilter2: "tableFilter2"; + readonly isDisable: "isDisable"; + readonly tableWrap: "tableWrap"; + readonly clm0: "clm0"; + readonly txWsline: "txWsline"; + readonly hidePri: "hidePri"; + readonly opPri: "opPri"; + readonly hideSize: "hideSize"; + readonly opSize: "opSize"; + readonly hideUpd: "hideUpd"; + readonly opUpd: "opUpd"; + readonly hideC1: "hideC1"; + readonly clm1: "clm1"; + readonly hideC2: "hideC2"; + readonly clm2: "clm2"; + readonly hideC3: "hideC3"; + readonly clm3: "clm3"; + readonly hideC4: "hideC4"; + readonly clm4: "clm4"; + readonly hideC5: "hideC5"; + readonly clm5: "clm5"; + readonly hideC6: "hideC6"; + readonly clm6: "clm6"; + readonly hideC7: "hideC7"; + readonly clm7: "clm7"; + readonly hideC8: "hideC8"; + readonly clm8: "clm8"; + readonly hideC9: "hideC9"; + readonly clm9: "clm9"; + readonly hideC10: "hideC10"; + readonly clm10: "clm10"; + readonly hideC11: "hideC11"; + readonly clm11: "clm11"; + readonly hideC12: "hideC12"; + readonly clm12: "clm12"; + readonly hideC13: "hideC13"; + readonly clm13: "clm13"; + readonly hideC14: "hideC14"; + readonly clm14: "clm14"; + readonly hideC15: "hideC15"; + readonly clm15: "clm15"; + readonly hideC16: "hideC16"; + readonly clm16: "clm16"; + readonly hideO1: "hideO1"; + readonly op1: "op1"; + readonly hideO2: "hideO2"; + readonly op2: "op2"; + readonly hideO3: "hideO3"; + readonly op3: "op3"; + readonly hideO4: "hideO4"; + readonly op4: "op4"; + readonly hideO5: "hideO5"; + readonly op5: "op5"; + readonly hideO6: "hideO6"; + readonly op6: "op6"; + readonly hideO7: "hideO7"; + readonly op7: "op7"; + readonly hideO8: "hideO8"; + readonly op8: "op8"; + readonly hideO9: "hideO9"; + readonly op9: "op9"; + readonly hideO10: "hideO10"; + readonly op10: "op10"; + readonly mnPlay: "mnPlay"; + readonly mnFile: "mnFile"; + readonly mnChange: "mnChange"; + readonly mnDelete: "mnDelete"; + readonly formChange: "formChange"; + readonly chooseMember: "chooseMember"; + readonly holdMember: "holdMember"; + readonly changeTitle: "changeTitle"; readonly alignCenter: "alignCenter"; readonly alignLeft: "alignLeft"; readonly alignRight: "alignRight"; @@ -83,7 +177,12 @@ declare const classNames: { readonly marginRgt1: "marginRgt1"; readonly marginRgt2: "marginRgt2"; readonly marginRgt3: "marginRgt3"; + readonly paddSide0: "paddSide0"; + readonly paddSide1: "paddSide1"; + readonly paddSide2: "paddSide2"; + readonly paddSide3: "paddSide3"; readonly txNormal: "txNormal"; readonly txIcon: "txIcon"; + readonly txWswrap: "txWswrap"; }; export = classNames; diff --git a/dictation_client/src/translation/de.json b/dictation_client/src/translation/de.json index 39b4999..c4629fb 100644 --- a/dictation_client/src/translation/de.json +++ b/dictation_client/src/translation/de.json @@ -136,5 +136,23 @@ "orderHistory": "(de)Order History", "importLicenseKey": "(de)Import License Key" } + }, + "licenseOrderPage": { + "message": { + "inputEmptyError": "(de)この項目の入力は必須です。入力してください。", + "poNumberIncorrectError": "(de)PO Numberの形式が不正です。PO Numberは半角英数字(大文字)のみ入力可能です。", + "newOrderIncorrectError": "(de)New Orderには1以上の数字を入力してください。", + "confirmOrder": "(de)注文を行いますか?", + "createOrderSuccess": "(de)処理に成功しました。", + "poNumberConflictError": "(de)既に同じPO Numberで注文済みもしくは発行済みの注文が存在しています。他のPO Numberで注文してください。" + }, + "label": { + "title": "(de)Order License", + "licenses": "(de)Licenses", + "poNumber": "(de)PO Number", + "newOrder": "(de)New Order", + "orderButton": "(de)Order", + "licenseTypeText": "(de)One Year" + } } } \ No newline at end of file diff --git a/dictation_client/src/translation/en.json b/dictation_client/src/translation/en.json index f4d70c4..3edb49b 100644 --- a/dictation_client/src/translation/en.json +++ b/dictation_client/src/translation/en.json @@ -136,5 +136,23 @@ "orderHistory": "Order History", "importLicenseKey": "Import License Key" } + }, + "licenseOrderPage": { + "message": { + "inputEmptyError": "この項目の入力は必須です。入力してください。", + "poNumberIncorrectError": "PO Numberの形式が不正です。PO Numberは半角英数字(大文字)のみ入力可能です。", + "newOrderIncorrectError": "New Orderには1以上の数字を入力してください。", + "confirmOrder": "注文を行いますか?", + "createOrderSuccess": "処理に成功しました。", + "poNumberConflictError": "既に同じPO Numberで注文済みもしくは発行済みの注文が存在しています。他のPO Numberで注文してください。" + }, + "label": { + "title": "Order License", + "licenses": "Licenses", + "poNumber": "PO Number", + "newOrder": "New Order", + "orderButton": "Order", + "licenseTypeText": "One Year" + } } } \ No newline at end of file diff --git a/dictation_client/src/translation/es.json b/dictation_client/src/translation/es.json index 4ac6865..a4738d5 100644 --- a/dictation_client/src/translation/es.json +++ b/dictation_client/src/translation/es.json @@ -136,5 +136,23 @@ "orderHistory": "(es)Order History", "importLicenseKey": "(es)Import License Key" } + }, + "licenseOrderPage": { + "message": { + "inputEmptyError": "(es)この項目の入力は必須です。入力してください。", + "poNumberIncorrectError": "(es)PO Numberの形式が不正です。PO Numberは半角英数字(大文字)のみ入力可能です。", + "newOrderIncorrectError": "(es)New Orderには1以上の数字を入力してください。", + "confirmOrder": "(es)注文を行いますか?", + "createOrderSuccess": "(es)処理に成功しました。", + "poNumberConflictError": "(es)既に同じPO Numberで注文済みもしくは発行済みの注文が存在しています。他のPO Numberで注文してください。" + }, + "label": { + "title": "(es)Order License", + "licenses": "(es)Licenses", + "poNumber": "(es)PO Number", + "newOrder": "(es)New Order", + "orderButton": "(es)Order", + "licenseTypeText": "(es)One Year" + } } } \ No newline at end of file diff --git a/dictation_client/src/translation/fr.json b/dictation_client/src/translation/fr.json index 16a0fda..e8d136a 100644 --- a/dictation_client/src/translation/fr.json +++ b/dictation_client/src/translation/fr.json @@ -136,5 +136,23 @@ "orderHistory": "(fr)Order History", "importLicenseKey": "(fr)Import License Key" } + }, + "licenseOrderPage": { + "message": { + "inputEmptyError": "(fr)この項目の入力は必須です。入力してください。", + "poNumberIncorrectError": "(fr)PO Numberの形式が不正です。PO Numberは半角英数字(大文字)のみ入力可能です。", + "newOrderIncorrectError": "(fr)New Orderには1以上の数字を入力してください。", + "confirmOrder": "(fr)注文を行いますか?", + "createOrderSuccess": "(fr)処理に成功しました。", + "poNumberConflictError": "(fr)既に同じPO Numberで注文済みもしくは発行済みの注文が存在しています。他のPO Numberで注文してください。" + }, + "label": { + "title": "(fr)Order License", + "licenses": "(fr)Licenses", + "poNumber": "(fr)PO Number", + "newOrder": "(fr)New Order", + "orderButton": "(fr)Order", + "licenseTypeText": "(fr)One Year" + } } } \ No newline at end of file