TrayPrinting.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816
  1. <template>
  2. <div style="width: 98% !important">
  3. <Navbar title="料车打印" :is-go-back="false" />
  4. <div class="all">
  5. <div class="globalMain">
  6. <ul class="siteList">
  7. <li class="site">
  8. <label class="labelStyle">名称</label>
  9. <div class="form-inline-div">
  10. <a-input v-model:value="searchParams.name" class="form-input" @keyup.enter="reQuery" />
  11. </div>
  12. </li>
  13. <li class="site">
  14. <label class="labelStyle">编号</label>
  15. <div class="form-inline-div">
  16. <a-input v-model:value="searchParams.no" class="form-input" @keyup.enter="reQuery" />
  17. </div>
  18. </li>
  19. <li class="site">
  20. <label class="labelStyle">{{ $t("lang.AssetLabelPrint.printStatus") }}</label>
  21. <div class="form-inline-div">
  22. <a-select v-model:value="searchParams.printStatus" class="form-input" @change="reQuery">
  23. <a-select-option :value="null">{{ $t("lang.AssetLabelPrint.all") }}</a-select-option>
  24. <a-select-option :value="false">
  25. {{ $t("lang.AssetLabelPrint.notPrint") }}
  26. </a-select-option>
  27. <a-select-option :value="true">
  28. {{ $t("lang.AssetLabelPrint.havePrint") }}
  29. </a-select-option>
  30. </a-select>
  31. </div>
  32. </li>
  33. </ul>
  34. </div>
  35. <ul class="siteList">
  36. <li class="site">
  37. <label class="labelStyle">{{ $t("lang.AssetLabelPrint.selectPrintTemplate") }}</label>
  38. <div class="form-inline-div">
  39. <a-select v-model:value="templateId" class="form-input">
  40. <a-select-option value="" />
  41. <a-select-option v-for="item in templates" :key="'templates' + item.name" :value="item.id">
  42. {{ item.name }}
  43. </a-select-option>
  44. </a-select>
  45. </div>
  46. </li>
  47. <li class="site">
  48. <label for="selectPrinter" class="labelStyle">{{ $t("lang.AssetLabelPrint.selectPrinter") }}</label>
  49. <div class="form-inline-div">
  50. <a-select v-model:value="selectedPrinter" class="form-input">
  51. <a-select-option value="" />
  52. <a-select-option v-for="printer in printers" :key="printer" :value="printer">
  53. {{ printer }}
  54. </a-select-option>
  55. </a-select>
  56. </div>
  57. </li>
  58. <li style=" margin-left: 36px; display: flex; justify-content: space-between; ">
  59. <a-button type="primary" style="width: 80px" @click="print()">
  60. {{ $t("lang.AssetLabelPrint.print") }}
  61. </a-button>
  62. <PrintEpc ref="printEpc" v-model:visible="printEpcVisible" :printer-name="selectedPrinterCard"
  63. @ok="closePrintEpc" />
  64. <a-button type="primary" style="width: 80px;margin-left: 12px" @click="reQuery()">
  65. {{ $t("lang.AssetLabelPrint.query") }}
  66. </a-button>
  67. <a-button style="width: 80px; margin-left: 12px" type="dashed" @click="clearFilter()">
  68. {{ $t("lang.AssetLabelPrint.clear") }}
  69. </a-button>
  70. </li>
  71. </ul>
  72. </div>
  73. <CommonTable ref="commonTableRef" :extra-height="70" :columns="labelPrintColumns"
  74. :data-source="assetInstanceDtoList" :total="pagination.total" :is-select="true" @get-pager="getPageParams"
  75. @get-selected="getSelectParams">
  76. <template #bodyCell="{ column, record }">
  77. <div v-if="column.dataIndex === 'printStatus'">
  78. {{ record.printStatus ? '已打印' : '未打印' }}
  79. </div>
  80. <div v-if="column.dataIndex === 'operate'">
  81. <a-button style="width: 80px; margin-left: 12px" type="dashed" @click="cardEpc(record.epc)">
  82. 发卡
  83. </a-button>
  84. </div>
  85. </template>
  86. </CommonTable>
  87. <WriteEpc ref="writeEpc" v-model:visible="writeEpcVisible" @ok="closePrintEpc" />
  88. <Loading v-if="loading" />
  89. </div>
  90. </template>
  91. <script>
  92. import Printer from './printer.js';
  93. import { message } from 'ant-design-vue';
  94. import CommonTable from '../common/CommonTable.vue';
  95. import { workBinColumns } from './columns.js';
  96. import { Common, Notify, PrintEpc, WriteEpc } from 'pc-component-v3';
  97. export default {
  98. components: { PrintEpc, CommonTable, WriteEpc },
  99. data: function () {
  100. return {
  101. assetInstanceDtoList: [],
  102. checked: false, //全选,
  103. labelPrintColumns: workBinColumns,
  104. pagination: {
  105. total: 0, //总页数
  106. per_page: 20, // 每页大小
  107. current_page: 1, // 当前页数
  108. last_page: 0, // 最后一页编号
  109. },
  110. rangeDate: [],
  111. // 请求查询参数
  112. searchParams: {
  113. no: null, // 资产编号
  114. name: null, // 资产名称
  115. printStatus: null, // 打印状态
  116. },
  117. userWindowNo: '050408',
  118. organizationWindowNo: '20220420_233656',
  119. organizationField: {
  120. name: '',
  121. listDisplayFieldName: 'name',
  122. },
  123. organizationFieldValue: {
  124. id: null,
  125. displayValue: [''],
  126. fieldType: 'Key',
  127. },
  128. custodianNameField: {
  129. name: '',
  130. listDisplayFieldName: 'name',
  131. },
  132. custodianNameFieldValue: {
  133. id: null,
  134. displayValue: [''],
  135. fieldType: 'Key',
  136. },
  137. userField: {
  138. name: '',
  139. listDisplayFieldName: 'name',
  140. },
  141. userFieldValue: {
  142. id: null,
  143. displayValue: [''],
  144. fieldType: 'Key',
  145. },
  146. applyPurchaseUserField: {
  147. name: '',
  148. listDisplayFieldName: 'name',
  149. },
  150. applyPurchaseUserFieldValue: {
  151. id: null,
  152. displayValue: [''],
  153. fieldType: 'Key',
  154. },
  155. organizationWCS: {
  156. customerDataDimensions: [
  157. {
  158. fieldName: 'client.id',
  159. dataDimensionTypeNo: '202201191757',
  160. defaultDataDimensionTypeValueNo: '4',
  161. },
  162. ],
  163. },
  164. custodianIdWhereClauseSource: {
  165. customerDataDimensions: [
  166. {
  167. fieldName: 'client.id',
  168. dataDimensionTypeNo: '202201191757',
  169. defaultDataDimensionTypeValueNo: '4',
  170. },
  171. ],
  172. },
  173. templates: [], //打印模板
  174. printers: [], //打印机
  175. selectedPrinter: '', // 选择的打印机
  176. templateId: '',
  177. printPages: [],
  178. printPreviews: [],
  179. loading: false,
  180. modal: false,
  181. selectedPrinterCard: '发卡机',
  182. printEpcVisible: false,
  183. isCardEpc: false,
  184. selectedIds: [],
  185. writeEpcVisible: false,
  186. };
  187. },
  188. computed: {},
  189. watch: {},
  190. mounted: function () {
  191. const _self = this;
  192. _self.pagination.current_page = 1;
  193. _self.getAssetInstancePrint();
  194. _self.loadTemplateData();
  195. Printer.getPrinters().then(
  196. success => {
  197. if (success.errorCode === 0) {
  198. if (success.data && success.data.length > 0) {
  199. success.data.forEach(item => {
  200. _self.printers.push(item);
  201. });
  202. }
  203. } else {
  204. message.warning(success.errorMessage);
  205. }
  206. },
  207. error => {
  208. console.log(error);
  209. },
  210. );
  211. },
  212. beforeUnmount: function () { },
  213. methods: {
  214. // 所属部门搜索框条件改变
  215. organizationValueChanged: function (newFieldValue) {
  216. this.organizationFieldValue = newFieldValue;
  217. this.searchParams.organizationId = newFieldValue.id;
  218. },
  219. // 责任人
  220. custodianNameValueChanged: function (newFieldValue) {
  221. this.custodianNameFieldValue = newFieldValue;
  222. this.searchParams.custodianId = newFieldValue.id;
  223. },
  224. // 保管人
  225. userValueChanged: function (newFieldValue) {
  226. this.userFieldValue = newFieldValue;
  227. this.searchParams.depositoryUserId = newFieldValue.id;
  228. },
  229. // 申购人
  230. applyPurchaseUserValueChanged: function (newFieldValue) {
  231. this.applyPurchaseUserFieldValue = newFieldValue;
  232. this.searchParams.applyPurchaseUserId = newFieldValue.id;
  233. },
  234. /**
  235. * 获取选择数据的id集合
  236. */
  237. getSelectedRecordIds: function () {
  238. const _self = this;
  239. // let recordIds = [];
  240. // for (let i = 0; i < _self.assetInstanceDtoList.length; i++) {
  241. // if (_self.assetInstanceDtoList[i].checked == true) {
  242. // recordIds.push(_self.assetInstanceDtoList[i].assetInstanceId);
  243. // }
  244. // }
  245. return _self.selectedIds;
  246. },
  247. onRangeChange(_, str) {
  248. this.searchParams.startDate = str[0] === '' ? null : str[0];
  249. this.searchParams.endDate = str[1] === '' ? null : str[1];
  250. },
  251. getPageParams(page, pageSize) {
  252. this.pagination.current_page = page;
  253. this.pagination.per_page = pageSize;
  254. this.getAssetInstancePrint();
  255. },
  256. getSelectParams(selected) {
  257. const _self = this;
  258. if (_self.isCardEpc) {
  259. return;
  260. }
  261. let templateId = _self.templateId;
  262. if (templateId == '' || templateId == null) {
  263. _self.templateId = '';
  264. _self.$refs.commonTableRef.clear(false);
  265. Notify.error('错误', '请先选择打印模板', false);
  266. return;
  267. }
  268. _self.selectedIds = selected.selectedRowKeys;
  269. },
  270. getPrintData: function (recordIds) {
  271. const _self = this;
  272. let contents = [];
  273. $.ajax({
  274. url: Common.getApiURL(
  275. 'AssetInstanceResource/print?printPreview=' +
  276. false +
  277. '&templateId=' +
  278. _self.templateId,
  279. ),
  280. dataType: 'json',
  281. type: 'post',
  282. contentType: 'application/json',
  283. data: JSON.stringify(recordIds),
  284. beforeSend: function (request) {
  285. Common.addTokenToRequest(request);
  286. _self.loading = true;
  287. },
  288. success: function (datas) {
  289. datas.forEach(function (item) {
  290. var printItem = {
  291. id: null,
  292. name: null,
  293. content: item,
  294. };
  295. if (
  296. printItem.content == null ||
  297. printItem.content.printItems == null ||
  298. printItem.content.printItems.length == 0
  299. ) {
  300. Notify.error('错误', '打印模板无数据,不能打印。');
  301. return;
  302. }
  303. var content = JSON.stringify(printItem.content);
  304. if (content == null || content == '' || content == '{}') {
  305. Notify.error('错误', '请先选择模板,再点击下载。');
  306. return;
  307. }
  308. contents.push(printItem.content);
  309. });
  310. _self.loading = false;
  311. },
  312. error: function (XMLHttpRequest, textStatus, errorThrown) {
  313. _self.loading = false;
  314. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  315. },
  316. });
  317. },
  318. /**
  319. * 打印文件
  320. */
  321. print: function () {
  322. const _self = this;
  323. let templateId = _self.templateId;
  324. if (templateId == null || templateId.length == 0) {
  325. Notify.error('提示', '请先选择打印模板。', false);
  326. return;
  327. }
  328. let selectedPrinter = _self.selectedPrinter;
  329. if (selectedPrinter == null || selectedPrinter.length == 0) {
  330. Notify.error('提示', '请先选择打印机。', false);
  331. return;
  332. }
  333. let recordIds = _self.getSelectedRecordIds();
  334. if (recordIds == null || recordIds.length == 0) {
  335. Notify.error('提示', '请先选择打印数据。', false);
  336. return;
  337. }
  338. console.log(templateId, recordIds, selectedPrinter, '打印数据');
  339. const cardIds = recordIds.join();
  340. const url = `/barcode.html#/chartPrint?templateId=${templateId}&printName=${selectedPrinter}&cardIds=${cardIds}&type=Container`;
  341. window.open(url);
  342. },
  343. cardEpc: function (epc) {
  344. const _self = this;
  345. _self.writeEpcVisible = true;
  346. _self.$refs.writeEpc.writeSingleEpc(epc);
  347. },
  348. // cardEpc: function () {
  349. // const _self = this;
  350. // _self.isCardEpc = true;
  351. // let recordIds = _self.getSelectedRecordIds();
  352. // if (recordIds == null || recordIds.length == 0) {
  353. // Notify.error('提示', '请先选择发卡数据。', false);
  354. // return;
  355. // }
  356. // if (recordIds.length > 1) {
  357. // Notify.error('提示', '至多选择一条发卡数据。', false);
  358. // return;
  359. // }
  360. // let contents = [];
  361. // let contentCards = [];
  362. // $.ajax({
  363. // url: Common.getApiURL(
  364. // 'AssetInstanceResource/print?printPreview=' +
  365. // false +
  366. // '&templateId=' +
  367. // _self.templateId,
  368. // ),
  369. // dataType: 'json',
  370. // type: 'post',
  371. // contentType: 'application/json',
  372. // data: JSON.stringify(recordIds),
  373. // beforeSend: function (request) {
  374. // Common.addTokenToRequest(request);
  375. // _self.loading = true;
  376. // },
  377. // success: function (datas) {
  378. // datas.forEach(function (item) {
  379. // var printItem = {
  380. // id: null,
  381. // name: null,
  382. // content: item,
  383. // };
  384. // if (
  385. // printItem.content == null ||
  386. // printItem.content.printItems == null ||
  387. // printItem.content.printItems.length == 0
  388. // ) {
  389. // Notify.error('错误', '打印模板无数据,不能打印。');
  390. // return;
  391. // }
  392. // var content = JSON.stringify(printItem.content);
  393. // if (content == null || content == '' || content == '{}') {
  394. // Notify.error('错误', '请先选择模板,再点击下载。');
  395. // return;
  396. // }
  397. // contents.push(printItem.content);
  398. // });
  399. // _self.printEpcVisible = true;
  400. // _self.$refs.printEpc.printPrintPages(contents);
  401. // _self.loading = false;
  402. // _self.isCardEpc = false;
  403. // },
  404. // error: function (XMLHttpRequest, textStatus, errorThrown) {
  405. // _self.loading = false;
  406. // _self.isCardEpc = false;
  407. // Common.processException(XMLHttpRequest, textStatus, errorThrown);
  408. // },
  409. // });
  410. // },
  411. closePrintEpc: function () {
  412. const _self = this;
  413. _self.writeEpcVisible = false;
  414. },
  415. /**
  416. * 打印模板change
  417. */
  418. templateChange: function (assetInstance) {
  419. const _self = this;
  420. if (_self.isCardEpc) {
  421. return;
  422. }
  423. let templateId = _self.templateId;
  424. if (templateId == '' || templateId == null) {
  425. _self.templateId = '';
  426. assetInstance.checked = false;
  427. Notify.error('错误', '未请先选择打印模板', false);
  428. return;
  429. }
  430. },
  431. /**
  432. * 设置模板
  433. */
  434. setTemplate: function (assetInstanceId, templateId) {
  435. var _self = this;
  436. _self.loading = true;
  437. $.ajax({
  438. url: Common.getApiURL('AssetInstanceResource/setPrintTemplate'),
  439. type: 'get',
  440. beforeSend: function (request) {
  441. Common.addTokenToRequest(request);
  442. },
  443. data: {
  444. assetInstanceId: assetInstanceId,
  445. templateId: templateId,
  446. },
  447. success: function (data) {
  448. _self.loading = false;
  449. },
  450. error: function (XMLHttpRequest, textStatus, errorThrown) {
  451. _self.loading = false;
  452. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  453. },
  454. });
  455. },
  456. /**
  457. * 加载打印模板数据
  458. */
  459. loadTemplateData: function () {
  460. var _self = this;
  461. Printer.queryTemplates().then(
  462. success => {
  463. if (success.errorCode === 0) {
  464. if (success.datas && success.datas.length > 0) {
  465. _self.templates = success.datas;
  466. }
  467. } else {
  468. message.warning(success.errorMessage);
  469. }
  470. },
  471. error => {
  472. Common.processException(error);
  473. },
  474. );
  475. },
  476. /**
  477. * 20200615
  478. * 点击全选
  479. */
  480. selectAll: function () {
  481. var _self = this;
  482. for (var i = 0; i < _self.assetInstanceDtoList.length; i++) {
  483. _self.assetInstanceDtoList[i].checked = _self.checked;
  484. }
  485. },
  486. /**
  487. * 重新查询
  488. */
  489. reQuery: function () {
  490. let _self = this;
  491. _self.$refs.commonTableRef.backFirstPage();
  492. },
  493. /**
  494. * 查询资产卡片打印的数据
  495. */
  496. getAssetInstancePrint: function () {
  497. var _self = this;
  498. _self.loading = true;
  499. _self.checked = false;
  500. const range = {
  501. start: (_self.pagination.current_page - 1) * _self.pagination.per_page,
  502. length: _self.pagination.per_page,
  503. };
  504. const searchParams = _self.searchParams;
  505. const params = { ...searchParams, ...{ range }, type: 'Tray' };
  506. $.ajax({
  507. url: Common.getApiURL('ContainerResource/queryContainerPrint'),
  508. type: 'post',
  509. contentType: 'application/json',
  510. dataType: 'json',
  511. data: JSON.stringify(params),
  512. beforeSend: function (request) {
  513. Common.addTokenToRequest(request);
  514. },
  515. success: function (successData) {
  516. if (successData.errorCode == 0) {
  517. if (successData.datas && successData.datas.length > 0) {
  518. _self.assetInstanceDtoList = successData.datas;
  519. _self.assetInstanceDtoList.forEach(function (item) {
  520. item.id = item.containerId;
  521. item.checked = false;
  522. });
  523. } else {
  524. _self.assetInstanceDtoList = [];
  525. }
  526. _self.pagination.total = successData.total;
  527. }
  528. _self.loading = false;
  529. },
  530. error: function (XMLHttpRequest, textStatus, errorThrown) {
  531. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  532. _self.loading = false;
  533. },
  534. });
  535. },
  536. /**
  537. * 清空条件
  538. */
  539. clearFilter: function () {
  540. const _self = this;
  541. (_self.searchParams = {
  542. epc: null,
  543. assetNo: null,
  544. assetInstanceName: null,
  545. printStatus: null,
  546. type: null,
  547. organizationId: null,
  548. custodianId: null,
  549. depositoryUserId: null,
  550. applyPurchaseUserId: null,
  551. locationName: null,
  552. startDate: null,
  553. endDate: null,
  554. }),
  555. _self.rangeDate = [];
  556. (_self.organizationFieldValue = {});
  557. _self.custodianNameFieldValue = {};
  558. _self.userFieldValue = {};
  559. _self.applyPurchaseUserFieldValue = {};
  560. _self.reQuery();
  561. },
  562. /**
  563. * 修改页Size
  564. */
  565. gridSizeSelect: function (newPageSize) {
  566. this.pagination.per_page = newPageSize;
  567. this.pagination.current_page = 1;
  568. this.getAssetInstancePrint();
  569. },
  570. },
  571. };
  572. </script>
  573. <style scoped>
  574. .grid-container {
  575. display: grid;
  576. grid-template-columns: 100%;
  577. /*将视图分为四个模块,每个模块的高度*/
  578. grid-template-rows: 53px min-content auto 40px;
  579. /*视口被均分为 100 单位的 vh 占据整个窗口,扣掉顶部 topNav 的距离后,计算得到 responseOrgnizationSelect 的高度*/
  580. height: calc(100vh - 90px);
  581. width: 100%;
  582. overflow: hidden;
  583. }
  584. .grid-item-1 {
  585. grid-column: 1 / 2;
  586. grid-row: 1 / 2;
  587. }
  588. .grid-item-2 {
  589. grid-column: 1 / 2;
  590. grid-row: 2 / 3;
  591. }
  592. .grid-item-3 {
  593. padding-top: 0px;
  594. padding-right: 10px;
  595. overflow: hidden;
  596. grid-column: 1 / 2;
  597. grid-row: 3/4;
  598. height: 100%;
  599. }
  600. .grid-item-4 {
  601. padding-top: 10px;
  602. grid-column: 1 / 2;
  603. grid-row: 4/5;
  604. }
  605. </style>
  606. <style scoped>
  607. .m-form-group {
  608. margin-left: 5px !important;
  609. margin-right: 5px !important;
  610. margin-bottom: 5px !important;
  611. }
  612. @media (max-width: 768px) {
  613. .m-form-group-label {
  614. text-align: left;
  615. padding-right: 10px;
  616. }
  617. }
  618. @media (min-width: 768px) {
  619. .m-form-group-label {
  620. width: 100px;
  621. text-align: center;
  622. padding-right: 10px;
  623. }
  624. .input-switches {
  625. width: 100%;
  626. }
  627. }
  628. .form-control-complex {
  629. width: 200px !important;
  630. }
  631. .form-input {
  632. border-radius: 4px !important;
  633. }
  634. .m-form-input {
  635. border-radius: 4px !important;
  636. width: 200px !important;
  637. }
  638. .form-inline-div {
  639. display: inline-block;
  640. height: 34px;
  641. }
  642. .m-btn {
  643. margin-left: 5px !important;
  644. margin-right: 5px !important;
  645. margin-bottom: 5px !important;
  646. }
  647. .table-header-left {
  648. float: left;
  649. /* margin: 20px 0; */
  650. }
  651. .table-header-right {
  652. margin-top: -2px;
  653. float: right;
  654. }
  655. </style>
  656. <style scoped>
  657. .room_img {
  658. width: 150px;
  659. height: 100px;
  660. float: left;
  661. margin-right: 10px;
  662. }
  663. .room_img img {
  664. width: 100%;
  665. height: 100%;
  666. }
  667. .room_img span {
  668. position: relative;
  669. right: -130px;
  670. top: -100px;
  671. font-size: 20px;
  672. color: red;
  673. }
  674. .modal-img-box {
  675. width: 100%;
  676. height: 400px;
  677. text-align: center;
  678. overflow: auto;
  679. }
  680. .m-small-img {
  681. cursor: pointer;
  682. }
  683. .m-img {
  684. width: 100%;
  685. }
  686. .labelStyle {
  687. width: 120px;
  688. text-align: right;
  689. padding: 8px;
  690. }
  691. .grid-item-row2-column2 {
  692. grid-row-start: 2;
  693. grid-row-end: 3;
  694. grid-column-start: 2;
  695. grid-column-end: 3;
  696. overflow: auto;
  697. margin-top: 0px;
  698. }
  699. .globalMain {
  700. max-width: 100%;
  701. margin-left: auto;
  702. margin-right: auto;
  703. }
  704. .siteList {
  705. display: flex;
  706. flex-wrap: wrap;
  707. justify-content: space-between;
  708. }
  709. @media (min-width: 500px) {
  710. .siteList {
  711. margin-left: 0;
  712. margin-right: -25px;
  713. justify-content: flex-start;
  714. }
  715. }
  716. .siteList>li {
  717. margin-bottom: 10px;
  718. }
  719. @media (min-width: 500px) {
  720. .siteList>li {
  721. margin-right: 8px;
  722. }
  723. }
  724. .siteList .site {
  725. width: 300px;
  726. display: flex;
  727. justify-content: center;
  728. align-items: center;
  729. /* flex-direction: column; */
  730. position: relative;
  731. }
  732. * {
  733. margin: 0;
  734. padding: 0;
  735. list-style: none;
  736. box-sizing: border-box;
  737. }
  738. .form-input {
  739. width: 200px !important;
  740. height: 30px !important;
  741. padding-left: 6px !important;
  742. }
  743. </style>