Merged PR 747: デザイン反映
## 概要 [Task3670: デザイン反映](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/3670) - ユーザー一覧画面のヘッダーのスタイル修正 - ブラウザのサイズに合わせて折り返すようにした - ユーザー一覧のテーブルを横スクロールできるように修正 - ライセンス履歴画面にパンくずリストを表示 - OptionItem更新ポップアップのスタイル修正 - 端が切れてしまっていたため枠に収まるようにした - Typistを「Selected」と「Pool」で選択するUIのスタイル修正 - typist名やグループ名が長くてもチェックアイコンに重ならないようにした ## レビューポイント - 特になし ## UIの変更 - https://ndstokyo.sharepoint.com/:f:/r/sites/Piranha/Shared%20Documents/General/OMDS/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88/Task3670?csf=1&web=1&e=zIcngJ ## 動作確認状況 - ローカルで確認 ## 補足 - 相談、参考資料などがあれば
This commit is contained in:
parent
73ef74770e
commit
25b7936bf4
@ -171,8 +171,11 @@ export const LicenseOrderHistory: React.FC<LicenseOrderHistoryProps> = (
|
||||
<div>
|
||||
<div className={styles.pageHeader}>
|
||||
<h1 className={styles.pageTitle}>
|
||||
{t(getTranslationID("orderHistoriesPage.label.title"))}
|
||||
{t(getTranslationID("LicenseSummaryPage.label.title"))}
|
||||
</h1>
|
||||
<p className={styles.pageTx}>
|
||||
{t(getTranslationID("orderHistoriesPage.label.orderHistory"))}
|
||||
</p>
|
||||
</div>
|
||||
<section className={styles.license}>
|
||||
<div>
|
||||
|
||||
@ -147,104 +147,115 @@ const UserListPage: React.FC = (): JSX.Element => {
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<table className={`${styles.table} ${styles.user}`}>
|
||||
<tbody>
|
||||
<tr className={styles.tableHeader}>
|
||||
<th className={styles.clm0}>{/** th is empty */}</th>
|
||||
<th>{t(getTranslationID("userListPage.label.name"))}</th>
|
||||
<th>{t(getTranslationID("userListPage.label.role"))}</th>
|
||||
<th>
|
||||
{t(getTranslationID("userListPage.label.authorID"))}
|
||||
</th>
|
||||
<th>
|
||||
{t(getTranslationID("userListPage.label.encryption"))}
|
||||
</th>
|
||||
<th>
|
||||
{t(getTranslationID("userListPage.label.prompt"))}
|
||||
</th>
|
||||
<th>
|
||||
{t(getTranslationID("userListPage.label.typistGroup"))}
|
||||
</th>
|
||||
<th>{t(getTranslationID("userListPage.label.email"))}</th>
|
||||
<th>
|
||||
{t(getTranslationID("userListPage.label.status"))}
|
||||
</th>
|
||||
<th>
|
||||
{t(getTranslationID("userListPage.label.expiration"))}
|
||||
</th>
|
||||
<th>
|
||||
{t(getTranslationID("userListPage.label.remaining"))}
|
||||
</th>
|
||||
<th>
|
||||
{t(getTranslationID("userListPage.label.autoRenew"))}
|
||||
</th>
|
||||
<th>
|
||||
{t(getTranslationID("userListPage.label.notification"))}
|
||||
</th>
|
||||
<th>
|
||||
{t(
|
||||
getTranslationID("userListPage.label.emailVerified")
|
||||
)}
|
||||
</th>
|
||||
</tr>
|
||||
{!isLoading &&
|
||||
users.map((user) => (
|
||||
<tr key={user.email}>
|
||||
<td className={styles.clm0}>
|
||||
<ul className={styles.menuInTable}>
|
||||
<li>
|
||||
{/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */}
|
||||
<a
|
||||
onClick={() => {
|
||||
onUpdateOpen(user.id);
|
||||
}}
|
||||
>
|
||||
{t(
|
||||
getTranslationID(
|
||||
"userListPage.label.editUser"
|
||||
)
|
||||
)}
|
||||
</a>
|
||||
</li>
|
||||
{isTier5 && (
|
||||
<>
|
||||
<li>
|
||||
{/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */}
|
||||
<a
|
||||
onClick={() => {
|
||||
onAllocateLicensePopupOpen(user);
|
||||
}}
|
||||
>
|
||||
{t(
|
||||
getTranslationID(
|
||||
"userListPage.label.licenseAllocation"
|
||||
)
|
||||
)}
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
{/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */}
|
||||
<a
|
||||
className={
|
||||
user.licenseStatus ===
|
||||
LICENSE_STATUS.NOLICENSE
|
||||
? styles.isDisable
|
||||
: ""
|
||||
}
|
||||
onClick={() => {
|
||||
onLicenseDeallocation(user.id);
|
||||
}}
|
||||
>
|
||||
{t(
|
||||
getTranslationID(
|
||||
"userListPage.label.licenseDeallocation"
|
||||
)
|
||||
)}
|
||||
</a>
|
||||
</li>
|
||||
</>
|
||||
)}
|
||||
{/* ユーザー削除 CCB後回し分なので今は非表示
|
||||
<div className={styles.tableWrap}>
|
||||
<table className={`${styles.table} ${styles.user}`}>
|
||||
<tbody>
|
||||
<tr className={styles.tableHeader}>
|
||||
<th className={styles.clm0}>{/** th is empty */}</th>
|
||||
<th>
|
||||
{t(getTranslationID("userListPage.label.name"))}
|
||||
</th>
|
||||
<th>
|
||||
{t(getTranslationID("userListPage.label.role"))}
|
||||
</th>
|
||||
<th>
|
||||
{t(getTranslationID("userListPage.label.authorID"))}
|
||||
</th>
|
||||
<th>
|
||||
{t(getTranslationID("userListPage.label.encryption"))}
|
||||
</th>
|
||||
<th>
|
||||
{t(getTranslationID("userListPage.label.prompt"))}
|
||||
</th>
|
||||
<th>
|
||||
{t(
|
||||
getTranslationID("userListPage.label.typistGroup")
|
||||
)}
|
||||
</th>
|
||||
<th>
|
||||
{t(getTranslationID("userListPage.label.email"))}
|
||||
</th>
|
||||
<th>
|
||||
{t(getTranslationID("userListPage.label.status"))}
|
||||
</th>
|
||||
<th>
|
||||
{t(getTranslationID("userListPage.label.expiration"))}
|
||||
</th>
|
||||
<th>
|
||||
{t(getTranslationID("userListPage.label.remaining"))}
|
||||
</th>
|
||||
<th>
|
||||
{t(getTranslationID("userListPage.label.autoRenew"))}
|
||||
</th>
|
||||
<th>
|
||||
{t(
|
||||
getTranslationID("userListPage.label.notification")
|
||||
)}
|
||||
</th>
|
||||
<th>
|
||||
{t(
|
||||
getTranslationID("userListPage.label.emailVerified")
|
||||
)}
|
||||
</th>
|
||||
</tr>
|
||||
{!isLoading &&
|
||||
users.map((user) => (
|
||||
<tr key={user.email}>
|
||||
<td className={styles.clm0}>
|
||||
<ul className={styles.menuInTable}>
|
||||
<li>
|
||||
{/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */}
|
||||
<a
|
||||
onClick={() => {
|
||||
onUpdateOpen(user.id);
|
||||
}}
|
||||
>
|
||||
{t(
|
||||
getTranslationID(
|
||||
"userListPage.label.editUser"
|
||||
)
|
||||
)}
|
||||
</a>
|
||||
</li>
|
||||
{isTier5 && (
|
||||
<>
|
||||
<li>
|
||||
{/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */}
|
||||
<a
|
||||
onClick={() => {
|
||||
onAllocateLicensePopupOpen(user);
|
||||
}}
|
||||
>
|
||||
{t(
|
||||
getTranslationID(
|
||||
"userListPage.label.licenseAllocation"
|
||||
)
|
||||
)}
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
{/* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */}
|
||||
<a
|
||||
className={
|
||||
user.licenseStatus ===
|
||||
LICENSE_STATUS.NOLICENSE
|
||||
? styles.isDisable
|
||||
: ""
|
||||
}
|
||||
onClick={() => {
|
||||
onLicenseDeallocation(user.id);
|
||||
}}
|
||||
>
|
||||
{t(
|
||||
getTranslationID(
|
||||
"userListPage.label.licenseDeallocation"
|
||||
)
|
||||
)}
|
||||
</a>
|
||||
</li>
|
||||
</>
|
||||
)}
|
||||
{/* ユーザー削除 CCB後回し分なので今は非表示
|
||||
<li>
|
||||
<a href="">
|
||||
{t(
|
||||
@ -255,57 +266,58 @@ const UserListPage: React.FC = (): JSX.Element => {
|
||||
</a>
|
||||
</li>
|
||||
*/}
|
||||
</ul>
|
||||
</td>
|
||||
<td> {user.name}</td>
|
||||
<td>{user.role}</td>
|
||||
<td>{user.authorId}</td>
|
||||
<td>{boolToElement(user.encryption)}</td>
|
||||
<td>{boolToElement(user.prompt)}</td>
|
||||
<td>{arrayToElement(user.typistGroupName)}</td>
|
||||
<td>{user.email}</td>
|
||||
<td>
|
||||
<span
|
||||
className={
|
||||
user.licenseStatus ===
|
||||
LICENSE_STATUS.NOLICENSE ||
|
||||
user.licenseStatus === LICENSE_STATUS.ALERT
|
||||
? styles.isAlert
|
||||
: ""
|
||||
}
|
||||
>
|
||||
{getLicenseStatus(user.licenseStatus)}
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span
|
||||
className={
|
||||
user.licenseStatus === LICENSE_STATUS.ALERT
|
||||
? styles.isAlert
|
||||
: ""
|
||||
}
|
||||
>
|
||||
{user.expiration ?? "-"}
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span
|
||||
className={
|
||||
user.licenseStatus === LICENSE_STATUS.ALERT
|
||||
? styles.isAlert
|
||||
: ""
|
||||
}
|
||||
>
|
||||
{user.remaining ?? "-"}
|
||||
</span>
|
||||
</td>
|
||||
<td>{boolToElement(user.autoRenew)}</td>
|
||||
<td>{boolToElement(user.notification)}</td>
|
||||
<td>{boolToElement(user.emailVerified)}</td>
|
||||
</tr>
|
||||
))}
|
||||
</tbody>
|
||||
</table>
|
||||
</ul>
|
||||
</td>
|
||||
<td> {user.name}</td>
|
||||
<td>{user.role}</td>
|
||||
<td>{user.authorId}</td>
|
||||
<td>{boolToElement(user.encryption)}</td>
|
||||
<td>{boolToElement(user.prompt)}</td>
|
||||
<td>{arrayToElement(user.typistGroupName)}</td>
|
||||
<td>{user.email}</td>
|
||||
<td>
|
||||
<span
|
||||
className={
|
||||
user.licenseStatus ===
|
||||
LICENSE_STATUS.NOLICENSE ||
|
||||
user.licenseStatus === LICENSE_STATUS.ALERT
|
||||
? styles.isAlert
|
||||
: ""
|
||||
}
|
||||
>
|
||||
{getLicenseStatus(user.licenseStatus)}
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span
|
||||
className={
|
||||
user.licenseStatus === LICENSE_STATUS.ALERT
|
||||
? styles.isAlert
|
||||
: ""
|
||||
}
|
||||
>
|
||||
{user.expiration ?? "-"}
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span
|
||||
className={
|
||||
user.licenseStatus === LICENSE_STATUS.ALERT
|
||||
? styles.isAlert
|
||||
: ""
|
||||
}
|
||||
>
|
||||
{user.remaining ?? "-"}
|
||||
</span>
|
||||
</td>
|
||||
<td>{boolToElement(user.autoRenew)}</td>
|
||||
<td>{boolToElement(user.notification)}</td>
|
||||
<td>{boolToElement(user.emailVerified)}</td>
|
||||
</tr>
|
||||
))}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{!isLoading && users.length === 0 && (
|
||||
<p
|
||||
style={{
|
||||
|
||||
@ -128,107 +128,132 @@ export const EditOptionItemsPopup: React.FC<EditOptionItemsPopupProps> = (
|
||||
<dl className={`${styles.formList} ${styles.hasbg}`}>
|
||||
<dd className={styles.full}>
|
||||
<div className={styles.tableWrap}>
|
||||
<table className={styles.table}>
|
||||
<tr className={styles.tableHeader}>
|
||||
<th className={styles.noLine}>
|
||||
{t(getTranslationID("worktypeIdSetting.label.itemLabel"))}
|
||||
</th>
|
||||
<th className={styles.noLine}>
|
||||
{t(
|
||||
getTranslationID("worktypeIdSetting.label.defaultValue")
|
||||
)}
|
||||
</th>
|
||||
<th>
|
||||
{t(
|
||||
getTranslationID("worktypeIdSetting.label.initialValue")
|
||||
)}
|
||||
</th>
|
||||
</tr>
|
||||
{optionItems?.map((item) => (
|
||||
<tr key={`optionItem_${item.id}`}>
|
||||
<td>
|
||||
<input
|
||||
type="text"
|
||||
maxLength={16}
|
||||
name="itemLabel"
|
||||
value={item.itemLabel}
|
||||
className={styles.formInput}
|
||||
onChange={(e) => {
|
||||
const { value } = e.target;
|
||||
// optionItemsの更新
|
||||
const newOptionItem = {
|
||||
...item,
|
||||
itemLabel: value,
|
||||
};
|
||||
onChangeOptionItem(newOptionItem);
|
||||
}}
|
||||
/>
|
||||
</td>
|
||||
<td>
|
||||
<select
|
||||
name="defaultValueType"
|
||||
className={styles.formInput}
|
||||
value={item.defaultValueType}
|
||||
onChange={(e) => {
|
||||
const { value } = e.target;
|
||||
// optionItemsの更新
|
||||
const newOptionItem = {
|
||||
...item,
|
||||
defaultValueType: value,
|
||||
};
|
||||
onChangeOptionItem(newOptionItem);
|
||||
}}
|
||||
>
|
||||
<option
|
||||
value={OPTION_ITEMS_DEFAULT_VALUE_TYPE.DEFAULT}
|
||||
>
|
||||
{t(
|
||||
getTranslationID(
|
||||
"worktypeIdSetting.label.default"
|
||||
)
|
||||
)}
|
||||
</option>
|
||||
<option value={OPTION_ITEMS_DEFAULT_VALUE_TYPE.BLANK}>
|
||||
{t(
|
||||
getTranslationID("worktypeIdSetting.label.blank")
|
||||
)}
|
||||
</option>
|
||||
<option
|
||||
value={OPTION_ITEMS_DEFAULT_VALUE_TYPE.LAST_INPUT}
|
||||
>
|
||||
{t(
|
||||
getTranslationID(
|
||||
"worktypeIdSetting.label.lastInput"
|
||||
)
|
||||
)}
|
||||
</option>
|
||||
</select>
|
||||
</td>
|
||||
<td>
|
||||
{item.defaultValueType ===
|
||||
OPTION_ITEMS_DEFAULT_VALUE_TYPE.DEFAULT ? (
|
||||
<table className={`${styles.table} ${styles.optionItem}`}>
|
||||
<tbody>
|
||||
<tr className={styles.tableHeader}>
|
||||
<th className={styles.noLine}>
|
||||
{t(
|
||||
getTranslationID("worktypeIdSetting.label.itemLabel")
|
||||
)}
|
||||
</th>
|
||||
<th className={styles.noLine}>
|
||||
{t(
|
||||
getTranslationID(
|
||||
"worktypeIdSetting.label.defaultValue"
|
||||
)
|
||||
)}
|
||||
</th>
|
||||
<th>
|
||||
{t(
|
||||
getTranslationID(
|
||||
"worktypeIdSetting.label.initialValue"
|
||||
)
|
||||
)}
|
||||
</th>
|
||||
</tr>
|
||||
{optionItems?.map((item) => (
|
||||
<tr key={`optionItem_${item.id}`}>
|
||||
<td>
|
||||
<input
|
||||
type="text"
|
||||
maxLength={20}
|
||||
name="initialValue"
|
||||
value={item.initialValue}
|
||||
maxLength={16}
|
||||
name="itemLabel"
|
||||
value={item.itemLabel}
|
||||
className={styles.formInput}
|
||||
onChange={(e) => {
|
||||
const { value } = e.target;
|
||||
// optionItemsの更新
|
||||
const newOptionItem = {
|
||||
...item,
|
||||
initialValue: value,
|
||||
itemLabel: value,
|
||||
};
|
||||
onChangeOptionItem(newOptionItem);
|
||||
}}
|
||||
/>
|
||||
) : (
|
||||
"-"
|
||||
)}
|
||||
</td>
|
||||
<td>
|
||||
<select
|
||||
name="defaultValueType"
|
||||
className={styles.formInput}
|
||||
value={item.defaultValueType}
|
||||
onChange={(e) => {
|
||||
const { value } = e.target;
|
||||
// optionItemsの更新
|
||||
const newOptionItem = {
|
||||
...item,
|
||||
defaultValueType: value,
|
||||
};
|
||||
onChangeOptionItem(newOptionItem);
|
||||
}}
|
||||
>
|
||||
<option
|
||||
value={OPTION_ITEMS_DEFAULT_VALUE_TYPE.DEFAULT}
|
||||
>
|
||||
{t(
|
||||
getTranslationID(
|
||||
"worktypeIdSetting.label.default"
|
||||
)
|
||||
)}
|
||||
</option>
|
||||
<option
|
||||
value={OPTION_ITEMS_DEFAULT_VALUE_TYPE.BLANK}
|
||||
>
|
||||
{t(
|
||||
getTranslationID(
|
||||
"worktypeIdSetting.label.blank"
|
||||
)
|
||||
)}
|
||||
</option>
|
||||
<option
|
||||
value={OPTION_ITEMS_DEFAULT_VALUE_TYPE.LAST_INPUT}
|
||||
>
|
||||
{t(
|
||||
getTranslationID(
|
||||
"worktypeIdSetting.label.lastInput"
|
||||
)
|
||||
)}
|
||||
</option>
|
||||
</select>
|
||||
</td>
|
||||
<td>
|
||||
{item.defaultValueType ===
|
||||
OPTION_ITEMS_DEFAULT_VALUE_TYPE.DEFAULT ? (
|
||||
<input
|
||||
type="text"
|
||||
maxLength={20}
|
||||
name="initialValue"
|
||||
value={item.initialValue}
|
||||
className={styles.formInput}
|
||||
onChange={(e) => {
|
||||
const { value } = e.target;
|
||||
// optionItemsの更新
|
||||
const newOptionItem = {
|
||||
...item,
|
||||
initialValue: value,
|
||||
};
|
||||
onChangeOptionItem(newOptionItem);
|
||||
}}
|
||||
/>
|
||||
) : (
|
||||
"-"
|
||||
)}
|
||||
</td>
|
||||
</tr>
|
||||
))}
|
||||
<tr>
|
||||
<td colSpan={3}>
|
||||
<span
|
||||
className={`${styles.formComment} ${styles.alignCenter}`}
|
||||
>
|
||||
{t(
|
||||
getTranslationID(
|
||||
"worktypeIdSetting.label.optionItemTerms"
|
||||
)
|
||||
)}
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
))}
|
||||
</tbody>
|
||||
</table>
|
||||
{isPushSaveButton && hasInvalidOptionItems && (
|
||||
<span className={`${styles.formError} ${styles.alignCenter}`}>
|
||||
@ -248,14 +273,6 @@ export const EditOptionItemsPopup: React.FC<EditOptionItemsPopupProps> = (
|
||||
)}
|
||||
</span>
|
||||
)}
|
||||
<span
|
||||
style={{ display: "block" }}
|
||||
className={`${styles.formComment} ${styles.alignCenter}`}
|
||||
>
|
||||
{t(
|
||||
getTranslationID("worktypeIdSetting.label.optionItemTerms")
|
||||
)}
|
||||
</span>
|
||||
</div>
|
||||
</dd>
|
||||
<dd className={`${styles.full} ${styles.alignCenter}`}>
|
||||
|
||||
@ -1130,6 +1130,9 @@ h3 + .brCrumb .tlIcon {
|
||||
.modal .form .table.backup td:first-child {
|
||||
padding: 0.6rem 0.2rem;
|
||||
}
|
||||
.modal .form .table.optionItem select {
|
||||
width: 123px;
|
||||
}
|
||||
.modal .form .pagenation {
|
||||
margin-bottom: 1.5rem;
|
||||
padding-right: 2.5%;
|
||||
@ -1597,15 +1600,6 @@ _:-ms-lang(x)::-ms-backdrop,
|
||||
left: 0;
|
||||
z-index: 2;
|
||||
}
|
||||
.account .table.user,
|
||||
.user .table.user,
|
||||
.license .table.user,
|
||||
.dictation .table.user,
|
||||
.partners .table.user,
|
||||
.workflow .table.user,
|
||||
.support .table.user {
|
||||
margin-bottom: 5rem;
|
||||
}
|
||||
.account .table.user th::after,
|
||||
.user .table.user th::after,
|
||||
.license .table.user th::after,
|
||||
@ -1626,6 +1620,16 @@ _:-ms-lang(x)::-ms-backdrop,
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.user .table {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.user .tableWrap {
|
||||
max-width: calc(100vw - 5.1rem);
|
||||
max-height: 90vh;
|
||||
overflow-x: scroll;
|
||||
margin-bottom: 5rem;
|
||||
}
|
||||
|
||||
.account .listVertical {
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
@ -2488,10 +2492,13 @@ tr.isSelected .menuInTable li a.isDisable {
|
||||
.formChange ul.chooseMember li input + label,
|
||||
.formChange ul.holdMember li input + label {
|
||||
display: block;
|
||||
padding: 0.2rem 0 0.2rem 1.5rem;
|
||||
padding: 0.4rem 0 0.4rem 1.5rem;
|
||||
margin-right: 0;
|
||||
background: url(../assets/images/circle.svg) no-repeat left center;
|
||||
background-size: 1.3rem;
|
||||
white-space: pre-line;
|
||||
word-break: break-all;
|
||||
line-height: 1.3;
|
||||
}
|
||||
.formChange ul.chooseMember li input + label:hover,
|
||||
.formChange ul.holdMember li input + label:hover {
|
||||
@ -2501,7 +2508,7 @@ tr.isSelected .menuInTable li a.isDisable {
|
||||
}
|
||||
.formChange ul.chooseMember li input:checked + label,
|
||||
.formChange ul.holdMember li input:checked + label {
|
||||
padding: 0.2rem 1rem 0.2rem 0;
|
||||
padding: 0.4rem 1.5rem 0.4rem 0;
|
||||
background: url(../assets/images/check_circle_fill.svg) no-repeat right center;
|
||||
background-size: 1.3rem;
|
||||
}
|
||||
|
||||
@ -74,6 +74,7 @@ declare const classNames: {
|
||||
readonly table: "table";
|
||||
readonly tableHeader: "tableHeader";
|
||||
readonly backup: "backup";
|
||||
readonly optionItem: "optionItem";
|
||||
readonly pagenation: "pagenation";
|
||||
readonly encryptionPass: "encryptionPass";
|
||||
readonly pageHeader: "pageHeader";
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user