Контроль отображения уровня стоимости со знаками валюты - PullRequest
1 голос
/ 16 июня 2020

Это может быть самоуверенный вопрос, но я хотел бы задать его, потому что возможности UI5 довольно широки. Мне нужны эти элементы как

enter image description here

, для которых я планирую ввести собственный шрифт. Как вы думаете, это хорошее решение или есть какой-нибудь лучший способ сделать это с помощью некоторых готовых решений?

1 Ответ

4 голосов
/ 17 июня 2020

То, что вы ищете, это sap.m.RatingIndicator.

<RatingIndicator
  editable="false"
  maxValue="6"
  value="4"
  iconSelected="imageOrIconURI1"
  iconUnselected="imageOrIconURI2"
/>

В вашем случае вам понадобятся два изображения: одно для символа ca sh / валюты и одна его версия, затененная серым. Оба URI должны быть назначены iconSelected и iconUnselected соответственно.

Вот моя попытка:

sap.ui.require([
  "sap/ui/core/Core"
], Core => Core.attachInit(() => sap.ui.require([
  "sap/ui/core/Fragment",
  "sap/ui/model/json/JSONModel",
  "sap/ui/core/theming/Parameters",
], async (Fragment, JSONModel, ThemeParameters) => {
  "use strict";

  const control = await Fragment.load({
    definition: `<form:SimpleForm xmlns:form="sap.ui.layout.form" xmlns="sap.m">
      <Label text="Cost A" />
      <RatingIndicator
        displayOnly="true"
        editable="false"
        maxValue="6"
        value="4"
        iconSelected="{myCurrency>/filled}"
        iconUnselected="{myCurrency>/unfilled}"
      />
      <Label text="Cost B" />
      <RatingIndicator
        displayOnly="true"
        editable="false"
        maxValue="6"
        value="2"
        iconSelected="{myCurrency>/filled}"
        iconUnselected="{myCurrency>/unfilled}"
      />
    </form:SimpleForm>`,
  });

  //==================================================================
  //============= Sample rating indicator icons ======================

  const currencyCode = "€";
  // determine theme-dependent color values for font colors:
  const colorFilled = ThemeParameters.get("sapUiContentForegroundTextColor").replace("#", "%23");
  const colorUnfilled = ThemeParameters.get("sapUiContentImagePlaceholderBackground").replace("#", "%23");
  const model = new JSONModel({ // assign the icon URIs, e.g. data-URI with SVG content:
    filled: `data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg'
      viewBox='0 0 14 14'>
      <text x='50%' y='66%'
        fill='${colorFilled}'
        dominant-baseline='middle'
        text-anchor='middle'>
        ${currencyCode}
      </text>
    </svg>`,
    unfilled: `data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14'>
      <text x='50%' y='66%'
        fill='${colorUnfilled}'
        dominant-baseline='middle'
        text-anchor='middle'>
        ${currencyCode}
      </text>
    </svg>`,
  });
  
  control.setModel(model, "myCurrency").placeAt("content");
})));
<script id="sap-ui-bootstrap"
  src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js"
  data-sap-ui-libs="sap.ui.core, sap.m, sap.ui.layout"
  data-sap-ui-async="true"
  data-sap-ui-theme="sap_fiori_3"
  data-sap-ui-compatversion="edge"
  data-sap-ui-xx-waitfortheme="init"
></script>
<body id="content" class="sapUiBody sapUiSizeCompact"></body>

ui5 rating indicator with text instead of images ui5 rating indicator with text instead of images - in dark mode

Поскольку я помещаю текстовый символ в SVG, «изображение» можно масштабировать без потери качества, а также можно сделать цвет зависимым от темы, как показано выше. Но, конечно, вы также можете просто использовать вместо этого два растровых изображения.

В любом случае, я считаю, что RatingIndicator - хороший кандидат, который можно использовать вместо создания и поддержки пользовательского элемента управления или пользовательского шрифта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...