TabFormFieldEdit.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775
  1. <template>
  2. <div
  3. v-if="modelData && modelData.data != undefined && field.visible"
  4. v-show="showField"
  5. class="form-group"
  6. :class="formGroupClass"
  7. >
  8. <label
  9. v-tooltip.right="field.help"
  10. class="control-label"
  11. :class="formGroupLabelClass"
  12. :style="field.cssStyle"
  13. >
  14. <span v-if="field.mandatory" class="required-mark">*</span>
  15. <font size="2">{{ Language.getDisplayNameTrl($i18n.locale, field) }}</font><br />
  16. <font v-if="isChineseEnglish && $i18n.locale == 'zh-CN'" size="0.5">{{ field.displayNameEng }}</font>
  17. </label>
  18. <div class="input-group" :class="inputGroupClass">
  19. <input
  20. v-if="fieldUtil.isTextType(field)"
  21. v-model="displayValue"
  22. autocomplete="off"
  23. type="text"
  24. class="form-control"
  25. :name="field.displayName"
  26. :readonly="readOnly"
  27. :disabled="readOnly"
  28. />
  29. <input
  30. v-if="fieldUtil.isNumberType(field)"
  31. v-model="displayValue"
  32. autocomplete="off"
  33. type="number"
  34. class="form-control"
  35. :name="field.displayName"
  36. :readonly="readOnly"
  37. :disabled="readOnly"
  38. onmousewheel="return false;"
  39. @mousewheel="mouseWheelEvent"
  40. @change="numberFormat"
  41. />
  42. <switches
  43. v-if="fieldUtil.isCheckBoxType(field)"
  44. v-model="displayValue"
  45. :selected="displayValue"
  46. color="green"
  47. :type-bold="true"
  48. :disabled="readOnly"
  49. />
  50. <RedGreenSelect
  51. v-if="fieldUtil.isRedGreenEditorType(field)"
  52. v-model="displayValue"
  53. type="string"
  54. :disabled="readOnly"
  55. />
  56. <input
  57. v-if="fieldUtil.isPasswordType(field)"
  58. v-model="displayValue"
  59. autocomplete="off"
  60. type="password"
  61. class="form-control"
  62. :name="field.displayName"
  63. :readonly="readOnly"
  64. :disabled="readOnly"
  65. />
  66. <textarea
  67. v-if="fieldUtil.isTextAreaType(field)"
  68. v-model="displayValue"
  69. class="form-control"
  70. rows="3"
  71. :name="field.displayName"
  72. :style="field.cssStyle"
  73. :readonly="readOnly"
  74. :disabled="readOnly"
  75. />
  76. <Date
  77. v-if="fieldUtil.isDateType(field)"
  78. :model-value="displayValue"
  79. :data-vv-name="field.displayName"
  80. :name="field.displayName"
  81. :data-vv-value-path="displayValue"
  82. :readonly="readOnly"
  83. style="width:100%"
  84. @update:model-value="textChanged"
  85. />
  86. <Time
  87. v-if="fieldUtil.isTimeType(field)"
  88. v-model="displayValue"
  89. class="form-control"
  90. :data-vv-name="field.displayName"
  91. :name="field.displayName"
  92. :data-vv-value-path="displayValue"
  93. :readonly="readOnly"
  94. />
  95. <DateTime
  96. v-if="fieldUtil.isDateTimeType(field)"
  97. :model-value="displayValue"
  98. :readonly="readOnly"
  99. style="width:100%"
  100. @update:model-value="textChanged"
  101. />
  102. <YearPicker
  103. v-if="fieldUtil.isYearType(field)"
  104. :value="displayValue"
  105. :readonly="readOnly"
  106. @selected="textChanged"
  107. />
  108. <VueMonthlyPicker
  109. v-if="fieldUtil.isYearMonthType(field)"
  110. id="month-picker"
  111. v-model="month"
  112. date-format="YYYY-MM"
  113. class="vue-monthly-picker m-date-fieldEditView"
  114. @selected="refresh"
  115. />
  116. <ImageWidget
  117. v-if="fieldUtil.isImageType(field)"
  118. :uuid="uuid1"
  119. :pattern-json="field.pattern"
  120. :field="field"
  121. :field-value="fieldValue"
  122. :class-name="className"
  123. :readonly="readOnly"
  124. @value-changed="valueChanged"
  125. />
  126. <ImageListWidget
  127. v-if="fieldUtil.isImageListType(field)"
  128. :field="field"
  129. :field-value="fieldValue"
  130. :class-name="className"
  131. :readonly="readOnly"
  132. @value-changed="valueChanged"
  133. />
  134. <VideoListWidget
  135. v-if="fieldUtil.isVideoType(field)"
  136. :field="field"
  137. :field-value="fieldValue"
  138. :class-name="className"
  139. :readonly="readOnly"
  140. @value-changed="valueChanged"
  141. />
  142. <FileListWidget
  143. v-if="fieldUtil.isFileType(field)"
  144. :field="field"
  145. :field-value="fieldValue"
  146. :class-name="className"
  147. :readonly="readOnly"
  148. @value-changed="valueChanged"
  149. />
  150. <EnumRadioGroupWidget
  151. v-if="fieldUtil.isRadioButtonGroupType(field)"
  152. :field="field"
  153. :field-value="fieldValue"
  154. :data-vv-name="field.displayName"
  155. :name="field.displayName"
  156. :data-vv-value-path="displayValue"
  157. :readonly="readOnly"
  158. @value-changed="valueChanged"
  159. />
  160. <ManyToManySetSearchWidget
  161. v-if="fieldUtil.isManyToManySetType(field)"
  162. :info-window-no="field.infoWindowNo"
  163. :field="field"
  164. :field-value="fieldValue"
  165. :readonly="readOnly"
  166. :model-data="modelData"
  167. :window-no="windowNo"
  168. :tab-index="tabIndex"
  169. @value-changed="valueChanged"
  170. />
  171. <SearchWidget
  172. v-if="fieldUtil.isSearchType(field)"
  173. :info-window-no="field.infoWindowNo"
  174. :field="field"
  175. :field-value="fieldValue"
  176. :readonly="readOnly"
  177. :model-data="modelData"
  178. :window-no="windowNo"
  179. :tab-index="tabIndex"
  180. @value-changed="valueChanged"
  181. />
  182. <EnumSelectWidget
  183. v-if="fieldUtil.isEnumListType(field)"
  184. :field="field"
  185. :field-value="fieldValue"
  186. :name="field.displayName"
  187. :readonly="readOnly"
  188. @value-changed="valueChanged"
  189. />
  190. <EnumMultiSelectWidget
  191. v-if="fieldUtil.isEnumMultiType(field)"
  192. :field="field"
  193. :field-value="fieldValue"
  194. :name="field.displayName"
  195. :readonly="readOnly"
  196. @value-changed="valueChanged"
  197. />
  198. <SelectWidget
  199. v-if="fieldUtil.isSelectType(field)"
  200. ref="selectWidget"
  201. :field="field"
  202. :field-value="fieldValue"
  203. :window-no="windowNo"
  204. :tab-index="tabIndex"
  205. :readonly="readOnly"
  206. :model-data="modelData"
  207. @value-changed="valueChanged"
  208. />
  209. <ButtonWidget
  210. v-if="fieldUtil.isButtonType(field)"
  211. :field="field"
  212. :field-value="fieldValue"
  213. :readonly="readOnly"
  214. @value-changed="valueChanged"
  215. @execute-callout="executeCallout"
  216. />
  217. <RichTextAreaEditorWidget
  218. v-if="fieldUtil.isRichTextAreaEditor(field)"
  219. :display-value="displayValue"
  220. :class-name="className"
  221. :field-value="fieldValue"
  222. :readonly="isReadOnly"
  223. @value-changed="valueChanged"
  224. />
  225. <p v-show="!validateMandatory" class="required-mark required-error">
  226. 该字段为必填字段
  227. </p>
  228. </div>
  229. </div>
  230. </template>
  231. <script>
  232. import fieldUtil from '../../resource/dictionary/FieldUtil.js';
  233. import WindowClientUtil from '../../resource/dictionary/WindowClientUtil.js';
  234. import Language from '../../common/Language.js';
  235. import Context from '../common/Context.js';
  236. import SearchWidget from '../tabFormWidget/SearchWidget.vue';
  237. import ImageListWidget from '../tabFormWidget/ImageListWidget.vue';
  238. import EnumSelectWidget from '../tabFormWidget/EnumSelectWidget.vue';
  239. import SelectWidget from '../tabFormWidget/SelectWidget.vue';
  240. import EnumRadioGroupWidget from '../tabFormWidget/EnumRadioGroupWidget.vue';
  241. import VideoListWidget from '../tabFormWidget/VideoListWidget.vue';
  242. import FileListWidget from '../tabFormWidget/FileListWidget.vue';
  243. import ButtonWidget from '../tabFormWidget/ButtonWidget.vue';
  244. import EnumMultiSelectWidget from '../tabFormWidget/EnumMultiSelectWidget.vue';
  245. import ManyToManySetSearchWidget from '../tabFormWidget/ManyToManySetSearchWidget.vue';
  246. import RedGreenSelect from '../../widget/RedGreenSelect.vue';
  247. import ImageWidget from '../tabFormWidget/ImageWidget.vue';
  248. import RichTextAreaEditorWidget from '../tabFormWidget/RichTextAreaEditorWidget.vue';
  249. import JsUtil from '../../common/JsUtil.js';
  250. import { Notify, Uuid } from 'pc-component-v3';
  251. export default {
  252. components: {
  253. SearchWidget,
  254. ImageListWidget,
  255. EnumSelectWidget,
  256. SelectWidget,
  257. EnumRadioGroupWidget,
  258. VideoListWidget,
  259. FileListWidget,
  260. EnumMultiSelectWidget,
  261. ManyToManySetSearchWidget,
  262. ImageWidget,
  263. RedGreenSelect,
  264. ButtonWidget,
  265. RichTextAreaEditorWidget,
  266. },
  267. props: {
  268. windowNo: {
  269. type: String,
  270. default: null,
  271. },
  272. tabIndex: {
  273. type: Number,
  274. default: null,
  275. },
  276. className: {
  277. type: String,
  278. default: null,
  279. },
  280. multipleColumn: {
  281. type: Boolean,
  282. default: null,
  283. },
  284. jsUrl: {
  285. type: String,
  286. default: null,
  287. },
  288. field: {
  289. type: Object,
  290. default : function(){
  291. return null;
  292. },
  293. },
  294. modelData: {
  295. type: Object,
  296. default : function(){
  297. return null;
  298. },
  299. },
  300. isChineseEnglish: {
  301. type: Boolean,
  302. default: null,
  303. },
  304. },
  305. emits: ['executeCallout', 'valueChanged'],
  306. data: function () {
  307. this.Language = Language;
  308. // eslint-disable-next-line
  309. var value =
  310. this.modelData == undefined ||
  311. this.modelData.data == undefined ||
  312. this.modelData.data[this.field.fieldName] == undefined
  313. ? ''
  314. : this.modelData.data[this.field.fieldName].displayValue[
  315. this.field.entityFieldIndex
  316. ];
  317. var fieldValue =
  318. this.modelData == undefined || this.modelData.data == undefined
  319. ? []
  320. : this.modelData.data[this.field.fieldName];
  321. return {
  322. displayValue: value,
  323. fieldValue: fieldValue,
  324. fieldUtil: fieldUtil,
  325. validateMandatory: true, // 验证强制字段是否通过
  326. month: undefined,
  327. uuid1: Uuid.createUUID(),
  328. showField: true, // 显示字段
  329. };
  330. },
  331. computed: {
  332. readOnly: function () {
  333. if (this.field == undefined) {
  334. return true;
  335. }
  336. if (this.field != undefined && this.field.readOnly == true) {
  337. return true;
  338. }
  339. if (this.field != undefined && this.field.entityFieldIndex > 0) {
  340. return true;
  341. }
  342. if (
  343. this.modelData != undefined &&
  344. this.modelData.id > 0 &&
  345. (this.field.updatable == undefined || this.field.updatable == false)
  346. ) {
  347. return true;
  348. }
  349. return this.field.readOnly;
  350. },
  351. /**
  352. * 表单组的CSS样式
  353. * 对应 bootstrap 表单 form-group
  354. */
  355. formGroupClass: function () {
  356. return {
  357. 'form-group-single-row':
  358. this.field != undefined && this.field.singleRow,
  359. 'form-group-multiple-row':
  360. this.field != undefined && !this.field.singleRow,
  361. 'form-group-multiple-column':
  362. this.field != undefined && this.multipleColumn == true, // 多列
  363. };
  364. },
  365. /**
  366. * 标题的CSS样式
  367. * 对应 bootstrap 表单 label 样式
  368. */
  369. formGroupLabelClass: function () {
  370. return {
  371. 'm-sr-only':
  372. this.field == null || !this.field.visible || !this.field.showLabel, // 显示/隐藏
  373. 'col-xs-5 col-sm-4 col-md-3 col-lg-2':
  374. this.field != null && this.multipleColumn == false, // 单列
  375. 'label-multiple-column':
  376. this.field != null && this.multipleColumn == true, // 多列
  377. };
  378. },
  379. /**
  380. * 控件的CSS样式
  381. * 对应 bootstrap 表单 input-group
  382. */
  383. inputGroupClass: function () {
  384. return {
  385. 'col-xs-7 col-sm-8 col-md-9 col-lg-10':
  386. this.field != null && this.multipleColumn == false, // 单列
  387. 'input-group-multiple-column': this.multipleColumn, // 多列
  388. 'input-group-single-row':
  389. this.field != undefined &&
  390. this.field.singleRow == true &&
  391. this.multipleColumn, // 单独一行
  392. };
  393. },
  394. /**
  395. * 控件的CSS样式
  396. * 对应 bootstrap 表单 input-group 内的元素
  397. */
  398. inputGroupItemClass: function () {
  399. return {};
  400. },
  401. },
  402. watch: {
  403. displayValue: function (currentValue, oldValue) {
  404. if (
  405. fieldUtil.isSearchType(this.field) == false &&
  406. this.field.entityFieldIndex == 0 &&
  407. fieldUtil.isSelectType(this.field) == false &&
  408. fieldUtil.isRadioButtonGroupType(this.field) == false &&
  409. fieldUtil.isEnumListType(this.field) == false &&
  410. fieldUtil.isManyToManySetType(this.field) == false
  411. ) {
  412. // add by jack 20240220
  413. // 修复bug:当modelData.data的值从外部修改以后,修改执行 watch->'modelData.data' 中的 this.displayValue = ? 方法
  414. // 执行完成以后,watch->displayValue 又会执行,会触发valueChanged事件,这会导致 callout/calloutjs 会被多次执行。
  415. // 所以在触发 valueChanged 的之前,先判断currentValue与modelData中的值是否相等,
  416. // 如果相等,说明是外部修改了modelData,然后执行了 watch->'modelData.data' 方法修改了 displayValue,此时不触发valueChanged事件。
  417. // 如果不相等,说明是DOM修改了,触发修改了displayValue,此时触发valueChanged事件。
  418. const modelDataFieldDisplayValue = this.getModelDataFieldDisplayValue();
  419. if (currentValue !== oldValue && currentValue !== modelDataFieldDisplayValue) {
  420. var newFieldValue = {
  421. displayValue: [currentValue],
  422. fieldType: 'String',
  423. };
  424. this.$emit('valueChanged', newFieldValue);
  425. }
  426. }
  427. },
  428. 'modelData.data': {
  429. deep: true,
  430. handler(curVal, oldVal) {
  431. if(curVal == undefined ||
  432. curVal[this.field.fieldName] == undefined ||
  433. curVal[this.field.fieldName].displayValue == undefined ||
  434. curVal[this.field.fieldName].displayValue.length < this.field.entityFieldIndex + 1){
  435. this.displayValue = '';
  436. }else{
  437. let tempValue = curVal[this.field.fieldName].displayValue[this.field.entityFieldIndex];
  438. if(fieldUtil.isCheckBoxType(this.field)){
  439. if(typeof(tempValue) =='string'){
  440. this.displayValue = (tempValue === 'true') ? true : false;
  441. }
  442. if(typeof(tempValue) =='boolean'){
  443. this.displayValue = (tempValue === true) ? true : false;
  444. }
  445. }else{
  446. this.displayValue = tempValue;
  447. }
  448. }
  449. this.fieldValue = curVal == undefined ? [] : curVal[this.field.fieldName];
  450. this.showLogical();
  451. },
  452. },
  453. month: function () {
  454. this.textChanged(this.month);
  455. },
  456. },
  457. mounted: function () {},
  458. methods: {
  459. /**
  460. * 获取Context
  461. */
  462. getContext: Context,
  463. /**
  464. * 获取modelData中字段的显示值
  465. */
  466. getModelDataFieldDisplayValue : function(){
  467. if(this.modelData == null
  468. || this.field == null
  469. || this.modelData[this.field.fieldName] == undefined
  470. || this.modelData[this.field.fieldName].displayValue == undefined
  471. || this.modelData[this.field.fieldName].displayValue.length < this.field.entityFieldIndex + 1){
  472. return null;
  473. }
  474. return this.modelData[this.field.fieldName].displayValue[this.field.entityFieldIndex];
  475. },
  476. // 值改变事件
  477. valueChanged: function (newFieldValue) {
  478. // this.fieldValue = newFieldValue;
  479. this.$emit('valueChanged', newFieldValue);
  480. },
  481. /**
  482. * 执行Callout
  483. */
  484. executeCallout: function (field) {
  485. this.$emit('executeCallout', field);
  486. },
  487. //年份选择器值改变
  488. textChanged: function (value) {
  489. var newFieldValue = {
  490. displayValue: [value],
  491. fieldType: 'String',
  492. };
  493. this.$emit('valueChanged', newFieldValue);
  494. },
  495. validateRule: function (field) {
  496. return field.mandatory ? 'required' : '';
  497. },
  498. performValide: function () {
  499. var _self = this;
  500. _self.validateMandatory = true;
  501. if (this.field.mandatory == true) {
  502. if (
  503. fieldUtil.isRadioButtonGroupType(this.field) ||
  504. fieldUtil.isSelectType(this.field) ||
  505. fieldUtil.isSearchType(this.field)
  506. ) {
  507. var idValue =
  508. this.modelData == undefined ||
  509. this.modelData.data == undefined ||
  510. this.modelData.data[this.field.fieldName] == undefined
  511. ? undefined
  512. : this.modelData.data[this.field.fieldName].id;
  513. if (idValue == null || idValue == '' || idValue < 1) {
  514. _self.validateMandatory = false;
  515. }
  516. } else if (fieldUtil.isCheckBoxType(this.field)) {
  517. return true;
  518. } else if (fieldUtil.isRedGreenEditorType(this.field)) {
  519. return true;
  520. } else {
  521. var stringValue =
  522. this.modelData == undefined ||
  523. this.modelData.data == undefined ||
  524. this.modelData.data[this.field.fieldName] == undefined
  525. ? ''
  526. : this.modelData.data[this.field.fieldName].displayValue[0];
  527. if (stringValue == undefined || stringValue === '') {
  528. _self.validateMandatory = false;
  529. }
  530. }
  531. }
  532. return _self.validateMandatory;
  533. },
  534. /**
  535. * 年份变化
  536. */
  537. yearChange: function () {},
  538. /**
  539. * 年月选择完成
  540. */
  541. refresh: function () {},
  542. numberFormat: function () {
  543. if (
  544. this.fieldItem &&
  545. this.fieldItem.pattern &&
  546. this.fieldItem.pattern != ''
  547. ) {
  548. var _self = this;
  549. fieldUtil.formatNumber(
  550. this.displayValue,
  551. this.fieldItem.pattern,
  552. function (formatValue) {
  553. _self.displayValue = formatValue;
  554. },
  555. );
  556. }
  557. },
  558. /**
  559. * 禁止滚轮滚动影响数字
  560. */
  561. mouseWheelEvent: function (event) {
  562. if (event || Window.event) {
  563. event.preventDefault();
  564. }
  565. },
  566. /**
  567. * 响应显示逻辑
  568. */
  569. showLogical: function () {
  570. let _self = this;
  571. var logic = this.field.showLogical;
  572. if (logic == null || logic == '') {
  573. this.showField = true;
  574. return;
  575. }
  576. const functionName =
  577. this.field.fieldName.replace('.', '_') + '_showLogical';
  578. let executeFunction = function(){
  579. try{
  580. let context = new _self.getContext(_self.modelData);
  581. _self.showField = _self[functionName](context);
  582. }catch(error){
  583. console.error(error);
  584. Notify.error('数据字典定义异常', '【' + logic + '】前端列显示逻辑定义异常,请联系管理员检查数据字典的定义。', false);
  585. }
  586. };
  587. if (_self[functionName] == null) {
  588. const jsUrl = _self.jsUrl;
  589. if(jsUrl == null || jsUrl == undefined){
  590. Notify.error('数据字典定义异常', '【' + logic + '】前端列显示逻辑的JS文件不存在,请联系管理员检查数据字典是否JS文件。', false);
  591. return;
  592. }
  593. let promise = JsUtil.dynamicLoadJsFunction(jsUrl, logic);
  594. promise.then(targetFunction => {
  595. _self[functionName] = targetFunction;
  596. if(_self[functionName] == null){
  597. Notify.error('数据字典定义异常', '【' + logic + '】前端列显示逻辑方法不存在,请联系管理员检查数据字典。', false);
  598. return;
  599. }
  600. executeFunction();
  601. }, errorData => {
  602. console.error(errorData);
  603. });
  604. }else{
  605. executeFunction();
  606. }
  607. },
  608. },
  609. };
  610. </script>
  611. <style scoped>
  612. .required-mark {
  613. color: red;
  614. margin-right: 10px;
  615. }
  616. input::-webkit-outer-spin-button,
  617. input::-webkit-inner-spin-button {
  618. -webkit-appearance: none !important;
  619. margin: 0;
  620. }
  621. input[type="number"] {
  622. -moz-appearance: textfield;
  623. }
  624. textarea {
  625. overflow-y: auto !important;
  626. overflow-x: hidden !important;
  627. }
  628. .form-group-single-row {
  629. display: block;
  630. width: 100%;
  631. }
  632. .input-group-item {
  633. word-break: break-all;
  634. }
  635. .input-group-item-manytomany {
  636. color: #333;
  637. background-color: #f0f0f0;
  638. border: 1px solid #ccc;
  639. border-radius: 4px;
  640. height: 26px;
  641. margin: 4px 4px 0px 0px;
  642. padding: 6px 0.25em;
  643. }
  644. .label-multiple-column {
  645. width: 120px;
  646. }
  647. .form-group-multiple-column {
  648. margin-top: 5px;
  649. }
  650. @media (max-width: 768px) {
  651. .input-group-single-row {
  652. width: 100%;
  653. }
  654. .input-group-item {
  655. padding-top: 0px;
  656. }
  657. }
  658. @media (min-width: 768px) {
  659. .label-multiple-column {
  660. text-overflow: ellipsis;
  661. text-align: right;
  662. padding-right: 5px;
  663. }
  664. .input-group-multiple-column {
  665. width: 230px;
  666. }
  667. .input-group-single-row {
  668. width: calc(100% - 200px) !important;
  669. word-wrap: break-word;
  670. }
  671. }
  672. .m-sr-only {
  673. visibility: hidden;
  674. }
  675. </style>
  676. <style>
  677. .m-date-fieldEditView > div:first-child {
  678. width: 100%;
  679. }
  680. </style>