xiangqingPopUp.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790
  1. <template>
  2. <div class="popUp" v-if="modelValue">
  3. <div class="header" style="height: 3vh">
  4. <div class="headerTittle" style="font-weight: border; font-size: 28px">
  5. 物料采集详情
  6. </div>
  7. </div>
  8. <div
  9. class="header"
  10. style="display: flex; justify-content: center; margin: 20px"
  11. >
  12. <div class="box" @click.stop>
  13. <div class="boxItem">
  14. <div class="describeText">
  15. 需采集物料:{{ showInfo.materialName }}
  16. </div>
  17. <div class="describeText">型号:{{ showInfo.materialCode }}</div>
  18. <div class="describeText">单管需要:{{ showInfo.totalNum }}</div>
  19. </div>
  20. </div>
  21. </div>
  22. <div class="body">
  23. <div class="container1" @click.stop>
  24. <div class="boxTittle">
  25. 批次号列表(共&nbsp;{{
  26. batchNoTableData.length
  27. }}&nbsp;批次,完成绑定&nbsp;{{
  28. batchNoOkSum
  29. }}&nbsp;批次,本次完成绑定<span style="color: green">
  30. &nbsp;
  31. {{ tabledata.filter((item) => item.num == 0).length }} &nbsp;</span
  32. >批次 )
  33. </div>
  34. <el-divider style="margin-top: 20px !important" />
  35. <div style="display: flex; margin-bottom: 20px; align-items: center">
  36. <div class="seqSearchInput">
  37. <el-input
  38. v-model="searchBatchNo"
  39. placeholder="搜索批次号"
  40. class="searchInput"
  41. clearable
  42. />
  43. </div>
  44. <el-button
  45. @click="batchNoOk = true"
  46. :type="batchNoOk ? 'primary' : ''"
  47. >数量绑定完成</el-button
  48. >
  49. <el-button
  50. :type="!batchNoOk ? 'primary' : ''"
  51. @click="batchNoOk = false"
  52. >还可绑定</el-button
  53. >
  54. <el-button style="width: 300px" type="success" @click="autoAll"
  55. >按需全批次自动绑定</el-button
  56. >
  57. </div>
  58. <el-table
  59. border
  60. class="seqTable"
  61. :data="showTableData"
  62. :row-class-name="tableRowClassName1"
  63. style="flex: 1"
  64. >
  65. <el-table-column align="center" label="批次号" prop="batchNo" />
  66. <el-table-column
  67. align="center"
  68. label="总可绑数量"
  69. prop="surplusNum"
  70. />
  71. <el-table-column align="center" label="本次绑定管号">
  72. <template #default="scope">
  73. <el-scrollbar max-height="300px">
  74. <el-select
  75. multiple
  76. clearable
  77. filterable
  78. placeholder="管号"
  79. v-model="batchNoTableData[scope.$index].selectSeqNo"
  80. @change="
  81. (value) =>
  82. setSelectSeq(
  83. value,
  84. scope.$index,
  85. batchNoTableData[scope.$index].batchNo
  86. )
  87. "
  88. @clear="clear(scope.$index)"
  89. @remove-tag="(tagValue) => removeTag(tagValue, scope.$index)"
  90. >
  91. <el-option
  92. v-for="item in seqNoDataList"
  93. :key="item"
  94. :label="item.seqNo"
  95. :value="item.seqNo"
  96. :disabled="
  97. item.selectBatchNoList.includes(
  98. batchNoTableData[scope.$index].batchNo
  99. )
  100. ? false
  101. : tabledata[scope.$index].num == 0
  102. ? true
  103. : item.remainingNum == 0
  104. ? true
  105. : false
  106. "
  107. >
  108. </el-option>
  109. </el-select>
  110. </el-scrollbar>
  111. </template>
  112. </el-table-column>
  113. <el-table-column align="center" width="200" label="绑定管号详情">
  114. <template #default="scope">
  115. <el-scrollbar max-height="300px">
  116. <el-form
  117. :model="item"
  118. v-for="(item, index) in scope.row.selectSeq"
  119. :key="index"
  120. >
  121. <el-form-item
  122. :rules="{
  123. message: '该选项为必选',
  124. trigger: 'change',
  125. }"
  126. label="管号:"
  127. prop="seqNo"
  128. >{{ item.seqNo }}
  129. </el-form-item>
  130. <el-form-item
  131. :rules="{
  132. required: true,
  133. message: '该选项为必选',
  134. trigger: 'change',
  135. }"
  136. label="数量:"
  137. prop="num"
  138. >
  139. <el-input-number
  140. v-model="
  141. batchNoTableData[scope.$index].selectSeq[index].num
  142. "
  143. :min="0"
  144. :max="
  145. batchNoTableData[scope.$index].selectSeq[index].num +
  146. getMaxNum(
  147. batchNoTableData[scope.$index].batchNo,
  148. batchNoTableData[scope.$index].selectSeq[index].seqNo
  149. )
  150. "
  151. />
  152. </el-form-item>
  153. </el-form>
  154. </el-scrollbar>
  155. </template>
  156. </el-table-column>
  157. <el-table-column align="center" label="剩余可绑数量" prop="num">
  158. </el-table-column>
  159. <el-table-column align="center" width="160" label="操作">
  160. <template #default="scope">
  161. <el-button
  162. style="width: 120px"
  163. type="primary"
  164. @click="
  165. toAutoItem(
  166. scope.$index,
  167. batchNoTableData[scope.$index].batchNo
  168. )
  169. "
  170. >按需自动绑定</el-button
  171. >
  172. </template>
  173. </el-table-column>
  174. <template #empty>
  175. <div class="empty">
  176. <Empty />
  177. </div>
  178. </template>
  179. </el-table>
  180. <div class="btns">
  181. <el-button type="primary" @click="submitInfoStatus = true"
  182. >绑定确认</el-button
  183. >
  184. <el-button @click="handleClose">取消</el-button>
  185. </div>
  186. </div>
  187. <div class="container2" @click.stop>
  188. <div class="boxTittle">
  189. 管号列表(共 {{ seqList.length }} 个,完成绑定
  190. {{ seqNoOkSum }} 个,本次完成绑定<span style="color: green">
  191. &nbsp;
  192. {{ seqNoDataList.filter((item) => item.remainingNum == 0).length }}
  193. &nbsp;</span
  194. >个 )
  195. </div>
  196. <el-divider />
  197. <div style="display: flex; margin-bottom: 20px; align-items: center">
  198. <div class="seqSearchInput">
  199. <el-input
  200. v-model="searchSeqNo"
  201. placeholder="搜索管号"
  202. class="searchInput"
  203. clearable
  204. />
  205. </div>
  206. <el-button @click="seqNoOk = true" :type="seqNoOk ? 'primary' : ''"
  207. >完成绑定</el-button
  208. >
  209. <el-button :type="!seqNoOk ? 'primary' : ''" @click="seqNoOk = false"
  210. >未完成</el-button
  211. >
  212. </div>
  213. <el-table
  214. border
  215. class="seqTable"
  216. :row-class-name="tableRowClassName2"
  217. :data="seqNoOk ? showOKseqData : seqNoDataList"
  218. style="flex: 1"
  219. >
  220. <el-table-column align="center" label="管号" prop="seqNo" />
  221. <el-table-column
  222. align="center"
  223. label="已绑定批次号及数量"
  224. prop="batchNo"
  225. >
  226. <template #default="scope">
  227. <template
  228. v-if="scope.row.batchNo.length > 0"
  229. v-for="item in scope.row.batchNo"
  230. >
  231. <div class="selectInfo">
  232. <div class="batchNo">批次号: {{ item.batchNo }}</div>
  233. <div class="num">数量: {{ item.num }}</div>
  234. </div>
  235. </template>
  236. <span v-else>-</span>
  237. </template>
  238. </el-table-column>
  239. <el-table-column
  240. label="剩余需要绑定数量"
  241. sortable
  242. prop="remainingNum"
  243. align="center"
  244. />
  245. <el-table-column
  246. align="center"
  247. v-if="!seqNoOk"
  248. label="本次绑定批次号及数量"
  249. >
  250. <template #default="scope">
  251. <template
  252. v-if="scope.row.selectList.length > 0"
  253. v-for="item in scope.row.selectList"
  254. >
  255. <div class="selectInfo">
  256. <div class="batchNo">批次号: {{ item.batchNo }}</div>
  257. <div class="num">数量: {{ item.num }}</div>
  258. </div>
  259. </template>
  260. <span v-else>-</span>
  261. </template>
  262. </el-table-column>
  263. <template #empty>
  264. <div class="empty">
  265. <Empty />
  266. </div>
  267. </template>
  268. </el-table>
  269. </div>
  270. </div>
  271. <saveBatchInfoPop
  272. v-model="submitInfoStatus"
  273. :showInfo="showInfo"
  274. @close="handleClose"
  275. @data-list="dataList"
  276. />
  277. </div>
  278. </template>
  279. <script setup>
  280. import saveBatchInfoPop from "./saveBatchInfoPop.vue";
  281. import { useProcessStore } from "@/store";
  282. import { getunProcessedList } from "@/api/prosteps";
  283. import { includes } from "lodash-es";
  284. import internal from "stream";
  285. const props = defineProps({
  286. modelValue: {
  287. type: Boolean,
  288. default: false,
  289. },
  290. showInfo: {
  291. type: Object,
  292. },
  293. });
  294. const batchNoOk = ref(false);
  295. const submitInfoStatus = ref(false);
  296. const seqNoOk = ref(false);
  297. const emits = defineEmits(["update:modelValue", "dataList"]);
  298. const store = useProcessStore();
  299. //批次号绑定
  300. const batchNoTableData = ref([]);
  301. const batchNoOkSum = computed(() => {
  302. return batchNoTableData.value.filter((item) => item.ok).length;
  303. });
  304. provide("batchNoTableData", batchNoTableData);
  305. const removeTag = (tagValue, index) => {
  306. batchNoTableData.value[index].selectSeq = batchNoTableData.value[
  307. index
  308. ].selectSeq.filter((item) => item.seqNo != tagValue);
  309. };
  310. const clear = (index) => {
  311. batchNoTableData.value[index].selectSeq = [];
  312. };
  313. //存放当前已绑定结果
  314. let resetArray = [];
  315. const setResArray = () => {
  316. resetArray = [];
  317. for (let i = 0; i < props.showInfo.collectList.length; i++) {
  318. for (let j = 0; j < props.showInfo.collectList[i].batchNo.length; j++) {
  319. resetArray.push({
  320. ...props.showInfo.collectList[i].batchNo[j],
  321. seqNo: props.showInfo.collectList[i].seqNo,
  322. });
  323. }
  324. }
  325. };
  326. //设置BactchData
  327. const setBatchNoTableData = () => {
  328. let myMap = new Map();
  329. let listObj = {};
  330. // 设置回显现阶段绑定数据
  331. if (props.showInfo.collectList.length > 0) {
  332. for (let i = 0; i < resetArray.length; i++) {
  333. //设置数字
  334. if (myMap.has(resetArray[i].batchNo)) {
  335. myMap.set(
  336. resetArray[i].batchNo,
  337. Number(myMap.get(resetArray[i].batchNo)) + Number(resetArray[i].num)
  338. );
  339. } else {
  340. myMap.set(resetArray[i].batchNo, resetArray[i].num);
  341. }
  342. //设置obj
  343. if (listObj[resetArray[i].batchNo]) {
  344. listObj[resetArray[i].batchNo].push(resetArray[i]);
  345. } else {
  346. listObj[resetArray[i].batchNo] = [resetArray[i]];
  347. }
  348. }
  349. }
  350. batchNoTableData.value = JSON.parse(JSON.stringify(props.showInfo.batchList));
  351. batchNoTableData.value.forEach((item) => {
  352. //本次绑定管号字段
  353. item.selectSeqNo = [];
  354. //本次绑定具体字段和数量
  355. item.selectSeq = [];
  356. item.seqNo = listObj[item.batchNo];
  357. item.ok = item.surplusNum > 0 ? false : true;
  358. item.soNum = item.surplusNum;
  359. item.surplusNum = myMap.get(item.batchNo)
  360. ? item.surplusNum + myMap.get(item.batchNo)
  361. : item.surplusNum;
  362. });
  363. };
  364. //右侧列表数据
  365. const seqNoList = ref([]);
  366. const setSeqNoList = (seqList) => {
  367. const array = [];
  368. for (let i = 0; i < seqList.length; i++) {
  369. array.push({
  370. seqNo: seqList[i],
  371. //剩余可绑定数
  372. remainingNum: 0,
  373. //本次绑定数
  374. selectNum: 0,
  375. //本次绑定情况
  376. selectList: [],
  377. //已绑定情况
  378. batchNo: [],
  379. selectBatchNoList: [],
  380. });
  381. let sum = Number(props.showInfo.totalNum);
  382. for (let j = 0; j < resetArray.length; j++) {
  383. if (seqList[i] == resetArray[j].seqNo) {
  384. array[i].batchNo.push(resetArray[j]);
  385. sum = sum - resetArray[j].num;
  386. }
  387. }
  388. array[i].remainingNum = sum;
  389. if (array[i].remainingNum == 0) {
  390. array[i].ok = true;
  391. } else {
  392. array[i].ok = false;
  393. }
  394. }
  395. seqNoList.value = array;
  396. };
  397. //计算当前管号绑定情况
  398. const showOKseqData = computed(() => {
  399. let resArray = [];
  400. resArray = seqNoList.value.filter((item) => item.ok == true);
  401. if (searchSeqNo.value) {
  402. const lowerCaseSearchValue = searchSeqNo.value.toLowerCase();
  403. resArray.filter(
  404. (item) =>
  405. item.seqNo && item.seqNo.toLowerCase().includes(lowerCaseSearchValue)
  406. );
  407. }
  408. return resArray;
  409. });
  410. const seqNoDataList = computed(() => {
  411. let resArray = [];
  412. resArray = JSON.parse(JSON.stringify(seqNoList.value)).filter(
  413. (item) => item.ok != true
  414. );
  415. //对本次采集过滤
  416. const selectArray = [];
  417. //此处batchNoTableData为本计算属性主驱动
  418. const batchNoArray = JSON.parse(JSON.stringify(batchNoTableData.value));
  419. for (let i = 0; i < batchNoArray.length; i++) {
  420. for (let j = 0; j < batchNoArray[i].selectSeq.length; j++) {
  421. batchNoArray[i].selectSeq[j].batchNo = batchNoArray[i].batchNo;
  422. }
  423. selectArray.push(...batchNoArray[i].selectSeq);
  424. }
  425. resArray.forEach((item) => {
  426. for (let i = 0; i < selectArray.length; i++) {
  427. if (item.seqNo == selectArray[i].seqNo && selectArray[i].num > 0) {
  428. item.selectList.push(selectArray[i]);
  429. item.selectNum += selectArray[i].num;
  430. item.remainingNum -= selectArray[i].num;
  431. if (!item.selectBatchNoList.includes(selectArray[i].batchNo)) {
  432. item.selectBatchNoList.push(selectArray[i].batchNo);
  433. }
  434. }
  435. }
  436. });
  437. if (searchSeqNo.value) {
  438. const lowerCaseSearchValue = searchSeqNo.value.toLowerCase();
  439. resArray = resArray.filter(
  440. (item) =>
  441. item.seqNo && item.seqNo.toLowerCase().includes(lowerCaseSearchValue)
  442. );
  443. }
  444. return resArray;
  445. });
  446. const autoAll = () => {
  447. let setData = JSON.parse(JSON.stringify(batchNoTableData.value));
  448. setData.forEach((item, index) => {
  449. toAutoItem(index, item.batchNo);
  450. });
  451. };
  452. const toAutoItem = (index, batchNo) => {
  453. batchNoTableData.value[index] = autoItem(index, batchNo);
  454. };
  455. const autoItem = (index, batchNo) => {
  456. let obj = JSON.parse(JSON.stringify(batchNoTableData.value[index]));
  457. let resObj = autoObj(index, batchNo);
  458. obj.selectSeq = resObj.selectSeq;
  459. obj.selectSeqNo = resObj.selectSeqNo;
  460. return obj;
  461. };
  462. const autoObj = (index, batchNo) => {
  463. let batchNoData = JSON.parse(JSON.stringify(tabledata.value));
  464. let seqData = JSON.parse(JSON.stringify(seqNoDataList.value));
  465. let needSum = batchNoData[index].num;
  466. let resSelectSeqNo = batchNoTableData.value[index].selectSeqNo
  467. ? JSON.parse(JSON.stringify(batchNoTableData.value[index].selectSeqNo))
  468. : [];
  469. let resSelectSeq = batchNoTableData.value[index].selectSeq
  470. ? JSON.parse(JSON.stringify(batchNoTableData.value[index].selectSeq))
  471. : [];
  472. //本次新加的seq信息
  473. let addSelectSeqNo = [];
  474. //本次新加的seq值
  475. let addSelectSeq = [];
  476. let lastSelectSeq = [];
  477. for (let i = 0; i < seqData.length; i++) {
  478. if (needSum == 0) {
  479. break;
  480. }
  481. if (seqData[i].remainingNum > 0) {
  482. if (needSum - seqData[i].remainingNum >= 0) {
  483. if (!resSelectSeqNo.includes(seqData[i].seqNo)) {
  484. addSelectSeqNo.push(seqData[i].seqNo);
  485. }
  486. addSelectSeq.push({
  487. batchNo,
  488. seqNo: seqData[i].seqNo,
  489. num: seqData[i].remainingNum,
  490. });
  491. needSum = needSum - seqData[i].remainingNum;
  492. } else {
  493. //如果在此处足够了
  494. if (!resSelectSeqNo.includes(seqData[i].seqNo)) {
  495. addSelectSeqNo.push(seqData[i].seqNo);
  496. }
  497. addSelectSeq.push({
  498. batchNo,
  499. seqNo: seqData[i].seqNo,
  500. num: needSum,
  501. });
  502. needSum = 0;
  503. }
  504. } else {
  505. continue;
  506. }
  507. }
  508. //来处理相同的seq
  509. for (let i = 0; i < addSelectSeq.length; i++) {
  510. for (let j = 0; j < resSelectSeq.length; j++) {
  511. if (addSelectSeq[i].seqNo == resSelectSeq[j].seqNo) {
  512. addSelectSeq[i].num = addSelectSeq[i].num + resSelectSeq[j].num;
  513. resSelectSeq[j].num = 0;
  514. }
  515. }
  516. }
  517. lastSelectSeq = [...addSelectSeq, ...resSelectSeq];
  518. lastSelectSeq = lastSelectSeq.filter((item) => item.num != 0);
  519. return {
  520. selectSeq: lastSelectSeq,
  521. selectSeqNo: [...resSelectSeqNo, ...addSelectSeqNo],
  522. };
  523. };
  524. const showTableData = computed(() => {
  525. let array = JSON.parse(JSON.stringify(tabledata.value));
  526. if (searchBatchNo.value) {
  527. const lowerCaseSearchValue = searchBatchNo.value.toLowerCase();
  528. array = array.filter(
  529. (item) =>
  530. item.batchNo &&
  531. item.batchNo.toLowerCase().includes(lowerCaseSearchValue)
  532. );
  533. }
  534. return array;
  535. });
  536. //批次号data
  537. const tabledata = computed(() => {
  538. let array = JSON.parse(JSON.stringify(batchNoTableData.value));
  539. if (batchNoOk.value) {
  540. return array.filter((item) => item.ok == true);
  541. }
  542. array.forEach((item) => {
  543. item.num = item.soNum;
  544. if (item.selectSeq) {
  545. for (let i = 0; i < item.selectSeq.length; i++) {
  546. item.num = item.num - item.selectSeq[i].num;
  547. }
  548. }
  549. });
  550. return array;
  551. });
  552. //获取当前批次号绑定某管号最大数量
  553. const getMaxNum = (batchNo, seqNo) => {
  554. let sum1 = 0;
  555. let sum2 = 0;
  556. for (let i = 0; i < tabledata.value.length; i++) {
  557. if (tabledata.value[i].batchNo == batchNo) {
  558. sum1 = tabledata.value[i].num;
  559. }
  560. }
  561. for (let i = 0; i < seqNoDataList.value.length; i++) {
  562. if (seqNoDataList.value[i].seqNo == seqNo) {
  563. sum2 = seqNoDataList.value[i].remainingNum;
  564. }
  565. }
  566. if (sum1 > sum2) {
  567. return sum2;
  568. } else {
  569. return sum1;
  570. }
  571. };
  572. const searchBatchNo = ref("");
  573. const searchSeqNo = ref("");
  574. //本次绑定change事件
  575. const setSelectSeq = (value, index, batchNo) => {
  576. const value1 = ref(value);
  577. const array = [];
  578. batchNoTableData.value[index].selectSeq = batchNoTableData.value[
  579. index
  580. ].selectSeq.filter((item) => value1.value.includes(item.seqNo));
  581. for (let i = 0; i < batchNoTableData.value[index].selectSeq.length; i++) {
  582. array.push(batchNoTableData.value[index].selectSeq[i].seqNo);
  583. }
  584. const res = [];
  585. for (let i = 0; i < value.length; i++) {
  586. if (!array.includes(value[i])) {
  587. res.push({
  588. seqNo: value[i],
  589. num: getMaxNum(batchNo, value[i]),
  590. batchNo: batchNo,
  591. });
  592. }
  593. }
  594. batchNoTableData.value[index].selectSeq.push(...res);
  595. };
  596. const seqNoOkSum = computed(() => {
  597. return seqNoList.value.filter((item) => item.ok).length;
  598. });
  599. //获取当前物料绑定管号
  600. const getSeqList = async () => {
  601. const { data } = await getunProcessedList(store.scanInfo.id);
  602. seqList.value = data;
  603. setSeqNoList(data);
  604. };
  605. //更新外部列表
  606. const dataList = () => {
  607. emits("dataList");
  608. };
  609. const tableRowClassName1 = ({ row, rowIndex }) => {
  610. if (row.num == 0) {
  611. return "success-row";
  612. } else {
  613. }
  614. };
  615. const tableRowClassName2 = ({ row, rowIndex }) => {
  616. if (row.remainingNum == 0) {
  617. return "success-row";
  618. } else {
  619. }
  620. };
  621. const handleClose = () => {
  622. emits("update:modelValue", false);
  623. };
  624. //当前所有管号
  625. const seqList = ref([]);
  626. watch(
  627. () => props.showInfo,
  628. () => {
  629. if (props.showInfo) {
  630. setResArray();
  631. getSeqList();
  632. setBatchNoTableData();
  633. }
  634. }
  635. );
  636. </script>
  637. <style>
  638. .el-table .warning-row {
  639. --el-table-tr-bg-color: var(--el-color-warning-light-9);
  640. }
  641. .el-table .success-row {
  642. --el-table-tr-bg-color: var(--el-color-success-light-9);
  643. }
  644. </style>
  645. <style lang="scss" scoped>
  646. .selectInfo {
  647. margin-bottom: 5px;
  648. }
  649. :deep(.el-form-item) {
  650. margin-bottom: 5px !important;
  651. }
  652. .sumFail {
  653. color: black;
  654. }
  655. .sumOk {
  656. color: green;
  657. }
  658. .describeText {
  659. font-size: 20px !important;
  660. font-weight: bolder;
  661. color: black;
  662. }
  663. .searchInput {
  664. height: 40px;
  665. }
  666. :deep(.el-input__wrapper) {
  667. height: 40px !important;
  668. }
  669. :deep(.el-table__cell) {
  670. font-size: 18px !important;
  671. }
  672. .el-divider {
  673. margin-bottom: 10px;
  674. }
  675. .el-button {
  676. width: 180px;
  677. height: 40px;
  678. font-size: 18px;
  679. border-radius: 10px;
  680. }
  681. .describeText {
  682. line-height: 25px !important;
  683. }
  684. .seqTable {
  685. border-radius: 16px;
  686. }
  687. .boxTittle {
  688. font-size: 18px;
  689. font-weight: bolder;
  690. text-align: center;
  691. height: 1vh;
  692. }
  693. .popUp {
  694. position: fixed;
  695. width: 100vw;
  696. height: 100vh;
  697. z-index: 999;
  698. background-color: #00000030;
  699. top: 0;
  700. left: 0;
  701. backdrop-filter: blur(5px);
  702. .header {
  703. margin: 0;
  704. .box {
  705. width: 95vw;
  706. height: 6vh;
  707. background-color: #f1f3f5;
  708. border-radius: 16px;
  709. padding: 10px;
  710. display: flex;
  711. flex-direction: column;
  712. justify-content: space-evenly;
  713. .boxItem {
  714. display: flex;
  715. justify-content: space-between;
  716. padding: 0 5%;
  717. .describeText {
  718. font-size: 18px;
  719. }
  720. }
  721. }
  722. }
  723. .body {
  724. width: 100vw;
  725. height: 85vh;
  726. display: flex;
  727. justify-content: space-evenly;
  728. .container1 {
  729. width: 60vw;
  730. height: 100%;
  731. background-color: #f1f3f5;
  732. border-radius: 16px;
  733. padding: 10px;
  734. display: flex;
  735. flex-direction: column;
  736. .seqSearchInput {
  737. margin-right: 10px;
  738. width: 40%;
  739. max-width: 360px;
  740. }
  741. .btns {
  742. padding-top: 10px;
  743. display: flex;
  744. justify-content: space-evenly;
  745. align-items: center;
  746. }
  747. }
  748. .container2 {
  749. width: 32vw;
  750. height: 100%;
  751. background-color: #f1f3f5;
  752. border-radius: 16px;
  753. padding: 10px;
  754. display: flex;
  755. flex-direction: column;
  756. .seqSearchInput {
  757. margin-right: 10px;
  758. width: 40%;
  759. max-width: 360px;
  760. }
  761. .btns {
  762. height: 8vh;
  763. display: flex;
  764. justify-content: space-evenly;
  765. align-items: center;
  766. }
  767. }
  768. }
  769. }
  770. .headerTittle {
  771. width: 100%;
  772. height: 55px;
  773. text-align: center;
  774. line-height: 55px;
  775. font-size: 38px;
  776. font-weight: 500;
  777. }
  778. </style>