AssetLabelPrinting.vue 21 KB

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