assetssMag.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899
  1. <template>
  2. <div class="global-variable">
  3. <div class="condition">
  4. <el-alert
  5. title="分析前请核对数据是否导入,点击查看是否导入即可查看"
  6. type="warning"
  7. show-icon
  8. >
  9. </el-alert>
  10. <el-form
  11. :inline="true"
  12. ref="ruleForm"
  13. :model="formInline"
  14. class="demo-form-inline"
  15. :rules="rules"
  16. >
  17. <el-form-item label="风场名称:" prop="fieldName">
  18. <el-input
  19. size="small"
  20. v-model="formInline.fieldName"
  21. placeholder="请输入风场名称"
  22. ></el-input>
  23. </el-form-item>
  24. <el-form-item>
  25. <el-button type="primary" @click="onSubmit" size="small"
  26. >查询</el-button
  27. >
  28. <el-button @click="reset('ruleForm')" size="small">重置</el-button>
  29. </el-form-item>
  30. <el-form-item class="right-align">
  31. <el-button @click="Newanalyse" size="small">创建分析</el-button>
  32. <el-button @click="examine" size="small">查看导入数据</el-button>
  33. </el-form-item>
  34. </el-form>
  35. </div>
  36. <div class="list-page">
  37. <el-table
  38. class="center-align-table"
  39. :data="tableData"
  40. border
  41. :cell-style="rowStyle"
  42. >
  43. <el-table-column
  44. fixed
  45. align="center"
  46. label="分析主题"
  47. prop="analysisName"
  48. min-width="200"
  49. >
  50. <template slot-scope="scope">
  51. <el-tooltip
  52. class="item"
  53. effect="dark"
  54. :content="scope.row.sketch ? scope.row.sketch : '暂无简述内容'"
  55. placement="top"
  56. >
  57. <span style="color: #4caf50">{{ scope.row.analysisName }}</span>
  58. </el-tooltip>
  59. </template>
  60. </el-table-column>
  61. <el-table-column
  62. align="center"
  63. prop="fieldName"
  64. label="风场名称"
  65. min-width="200"
  66. >
  67. </el-table-column>
  68. <el-table-column
  69. prop="loginName"
  70. align="center"
  71. label="分析状态"
  72. min-width="150"
  73. >
  74. <template slot-scope="scope">
  75. <span v-if="scope.row.analysisState == -1">未分析</span>
  76. <span
  77. v-else-if="
  78. scope.row.analysisState == 20 && scope.row.errState == 0
  79. "
  80. style="color: #f90"
  81. >分析中</span
  82. >
  83. <span v-else-if="scope.row.errState == 1" style="color: #f00"
  84. >分析异常</span
  85. >
  86. <span
  87. v-else-if="scope.row.analysisState == 30"
  88. style="color: #4caf50"
  89. >分析完成</span
  90. >
  91. <span
  92. v-else-if="scope.row.analysisState == 10"
  93. style="color: #4caf50"
  94. >排队中</span
  95. >
  96. <span v-else>/</span>
  97. </template>
  98. </el-table-column>
  99. <el-table-column
  100. prop="loginName"
  101. align="center"
  102. label="进度"
  103. min-width="150"
  104. >
  105. <template slot-scope="scope">
  106. <el-progress
  107. v-if="scope.row.analysisState == 20"
  108. :text-inside="true"
  109. :stroke-width="20"
  110. :percentage="scope.row.analysisProgress"
  111. :class="{
  112. 'indeterminate-progress': scope.row.analysisProgress < 100,
  113. 'animated-progress': true,
  114. }"
  115. ></el-progress>
  116. <span v-else>/</span>
  117. </template>
  118. </el-table-column>
  119. <el-table-column
  120. align="center"
  121. label="待分析排位"
  122. prop="dataTypeName"
  123. min-width="200"
  124. >
  125. <template slot-scope="scope">
  126. <span> {{ scope.row.dataTypeName }}</span>
  127. </template>
  128. </el-table-column>
  129. <el-table-column
  130. align="center"
  131. label="数据类型名称"
  132. prop="dataTypeName"
  133. min-width="200"
  134. >
  135. </el-table-column>
  136. <!-- <el-table-column
  137. prop="errState"
  138. align="center"
  139. label="异常状态"
  140. min-width="120"
  141. >
  142. <template slot-scope="scope">
  143. <span>
  144. {{
  145. scope.row.errState == 0 && scope.row.analysisState !== -1
  146. ? "未异常"
  147. : scope.row.errState === 1
  148. ? "异常"
  149. : "/"
  150. }}</span
  151. >
  152. </template>
  153. </el-table-column> -->
  154. <el-table-column
  155. prop="roleName"
  156. align="center"
  157. label="异常信息"
  158. min-width="120"
  159. >
  160. <template slot-scope="scope">
  161. <el-button
  162. v-if="scope.row.errState == 1"
  163. @click="abnormalDialog(scope.row, '异常详情')"
  164. type="text"
  165. size="small"
  166. >异常详情</el-button
  167. >
  168. <span v-else>/</span>
  169. </template>
  170. </el-table-column>
  171. <el-table-column
  172. prop="roleName"
  173. align="center"
  174. label="分析记录"
  175. min-width="120"
  176. >
  177. <template slot-scope="scope">
  178. <!-- 分析完成 -->
  179. <el-button
  180. v-if="scope.row.analysisState == 30 && scope.row.errState !== 1"
  181. @click="handleAssetssDetail(scope.row, '1')"
  182. type="text"
  183. size="small"
  184. >分析详情</el-button
  185. >
  186. <!-- 分析中 -->
  187. <el-button
  188. v-else-if="
  189. scope.row.analysisState == 20 && scope.row.errState == 0
  190. "
  191. @click="handleAssetssDetail(scope.row, '0')"
  192. type="text"
  193. size="small"
  194. >分析详情</el-button
  195. >
  196. <span v-else>/</span>
  197. </template>
  198. </el-table-column>
  199. <el-table-column
  200. prop="reportVos"
  201. align="center"
  202. label="报告"
  203. min-width="120"
  204. >
  205. <template slot-scope="scope">
  206. <el-dropdown v-if="scope.row.reportVos.length > 0" trigger="click">
  207. <el-button type="text" size="small" class="el-dropdown-link">
  208. 查看报告
  209. </el-button>
  210. <el-dropdown-menu slot="dropdown">
  211. <el-dropdown-item
  212. v-for="val in scope.row.reportVos"
  213. class="reportItemVal"
  214. >
  215. <div class="reportLeft">
  216. <span>{{ val.reportName }}</span>
  217. </div>
  218. <div class="reportRight">
  219. <el-button
  220. type="text"
  221. size="small"
  222. @click="detailReportAssetss(val)"
  223. >
  224. 查看
  225. </el-button>
  226. <el-button
  227. type="text"
  228. size="small"
  229. @click="downLoadeAssetss(val)"
  230. >
  231. 下载
  232. </el-button>
  233. </div>
  234. </el-dropdown-item>
  235. </el-dropdown-menu>
  236. </el-dropdown>
  237. <span v-else>/</span>
  238. <!-- <el-button type="text" size="small">
  239. {{
  240. scope.row.errState == 0 && scope.row.analysisState !== -1
  241. ? "查看报告"
  242. : "/"
  243. }}
  244. </el-button> -->
  245. </template>
  246. </el-table-column>
  247. <el-table-column
  248. prop="dataStartTime"
  249. align="center"
  250. label="开始时间"
  251. min-width="230"
  252. >
  253. </el-table-column>
  254. <el-table-column
  255. prop="dataEndTime"
  256. align="center"
  257. label="结束时间"
  258. min-width="230"
  259. >
  260. </el-table-column>
  261. <el-table-column
  262. prop="transition"
  263. align="center"
  264. fixed="right"
  265. label="操作"
  266. min-width="300"
  267. >
  268. <template slot-scope="scope">
  269. <el-button
  270. @click="abnormalDialog(scope.row, '上传报告')"
  271. type="text"
  272. size="small"
  273. >上传报告</el-button
  274. >
  275. <el-button
  276. @click="handleAssetss(scope.row)"
  277. type="text"
  278. :disabled="
  279. (scope.row.analysisState == 20 && scope.row.errState == 0) ||
  280. scope.row.analysisState == 10
  281. "
  282. size="small"
  283. >分析</el-button
  284. >
  285. <el-button
  286. @click="abnormalDialog(scope.row, '异常描述')"
  287. type="text"
  288. size="small"
  289. >异常描述</el-button
  290. >
  291. <el-button
  292. @click="insertQueue(scope.row)"
  293. type="text"
  294. size="small"
  295. >{{ scope.row.onOffCall === 0 ? "插队" : "取消插队" }}</el-button
  296. >
  297. <!-- <el-button
  298. @click="HandleOnOffAuto(scope.row)"
  299. type="text"
  300. size="small"
  301. >{{
  302. scope.row.onOffCall === 0 ? "开启自动分析" : "关闭自动分析"
  303. }}</el-button
  304. > -->
  305. </template>
  306. </el-table-column>
  307. </el-table>
  308. <div class="pagination-container">
  309. <el-pagination
  310. @current-change="handleCurrentChange"
  311. :current-page.sync="formInline.pageNum"
  312. layout="total, prev, pager, next"
  313. :page-size="formInline.pageSize"
  314. :total="formInline.totalSize"
  315. >
  316. </el-pagination>
  317. </div>
  318. </div>
  319. <!-- 弹出层 -->
  320. <!-- 异常信息 /异常描述 /上传报告-->
  321. <my-dialog
  322. :visible="dialogVisible"
  323. :title="title"
  324. :rowInfo="rowInfo"
  325. @confirm="handleConfirm"
  326. @getTableList="getTableList"
  327. >
  328. <div slot="tableEl">
  329. <el-empty description="暂无数据"></el-empty>
  330. </div>
  331. </my-dialog>
  332. <!-- 查看报告详情 -->
  333. <el-dialog
  334. title="PDF 预览"
  335. :visible.sync="dialogReportVisible"
  336. :width="dialogWidth"
  337. class="pdfDialog"
  338. :before-close="handleCloses"
  339. >
  340. <span>
  341. <div
  342. style="
  343. float: right;
  344. color: #fff;
  345. cursor: pointer;
  346. position: absolute;
  347. left: 90%;
  348. top: 21px;
  349. "
  350. >
  351. <span
  352. v-if="dialogWidth === '80%'"
  353. @click="() => (dialogWidth = '100%')"
  354. >全屏查看</span
  355. >
  356. <span
  357. v-if="dialogWidth === '100%'"
  358. @click="() => (dialogWidth = '80%')"
  359. >还原</span
  360. >
  361. <!-- {{ isFullscreen ? "还原" : "全屏" }} -->
  362. </div>
  363. </span>
  364. <div class="pdf-container" ref="viewer">
  365. <iframe :src="pdfUrl" width="100%" height="100%"></iframe>
  366. </div>
  367. <div></div>
  368. </el-dialog>
  369. <!-- 创建分析弹出框 -->
  370. <el-dialog
  371. title="创建分析"
  372. :visible.sync="addDialogVisible"
  373. width="30%"
  374. :before-close="AddHandleCloses"
  375. >
  376. <el-form
  377. :model="addRuleForm"
  378. :rules="addRules"
  379. ref="addRuleForm"
  380. label-width="100px"
  381. class="add-ruleForm"
  382. >
  383. <el-form-item label="关联风场" prop="fieldCode">
  384. <el-select
  385. v-model="addRuleForm.fieldCode"
  386. placeholder="请选择关联风场"
  387. >
  388. <el-option
  389. :label="item.fieldName"
  390. v-for="item in fieldCodeList"
  391. :value="item.codeNumber"
  392. ></el-option>
  393. </el-select>
  394. </el-form-item>
  395. <el-form-item label="" prop="analysisName">
  396. <b style="color: #f00; font-size: 12px"
  397. >不填写分析主题,自动采用系统生成的主题!</b
  398. >
  399. </el-form-item>
  400. <el-form-item label="分析主题" prop="analysisName">
  401. <el-input v-model="addRuleForm.analysisName"></el-input>
  402. </el-form-item>
  403. <el-form-item label="分析简述" prop="sketch">
  404. <el-input type="textarea" v-model="addRuleForm.sketch"></el-input>
  405. </el-form-item>
  406. <el-form-item>
  407. <el-button type="primary" @click="addRuleFormSubmit">提交</el-button>
  408. <el-button @click="AddHandleCloses">取消</el-button>
  409. </el-form-item>
  410. </el-form>
  411. </el-dialog>
  412. </div>
  413. </template>
  414. <script>
  415. import MyDialog from "./components/dialogCom.vue";
  416. import { downloadPDF } from "@/utils/common";
  417. import {
  418. onOffAutoAnalysis,
  419. analysisResultList,
  420. addAnalysisResult,
  421. queryCodeNum,
  422. } from "@/api/performance";
  423. import { from } from "plotly.js-dist";
  424. import { disable } from "ol/rotationconstraint";
  425. export default {
  426. components: {
  427. MyDialog,
  428. },
  429. data() {
  430. return {
  431. fieldCodeList: [],
  432. addDialogVisible: false,
  433. dialogWidth: "80%",
  434. intervalId: null,
  435. startTime: null,
  436. maxPollingTime: 3 * 60 * 1000, //轮询最大时间
  437. dialogVisible: false,
  438. loadingView: false,
  439. loading: false, //数据加载中
  440. errorInfo: "",
  441. addRules: {
  442. fieldCode: [
  443. { required: true, message: "请选择关联风场", trigger: "change" },
  444. ],
  445. },
  446. addRuleForm: {
  447. fieldCode: "",
  448. analysisName: "",
  449. sketch: "",
  450. },
  451. rules: {
  452. fieldName: { trigger: "blur" },
  453. },
  454. roleList: [],
  455. formInline: {
  456. fieldName: undefined,
  457. pageNum: 1,
  458. pageSize: 10,
  459. totalSize: 0,
  460. },
  461. tableData: [],
  462. rowInfo: {},
  463. title: "",
  464. viewerInstance: null, // PDF 文件 URL
  465. dialogReportVisible: false,
  466. pdfUrl: "",
  467. isPolling: false, // 轮询状态标识
  468. firstLoad: true, // 是否是第一次加载
  469. };
  470. },
  471. created() {
  472. window.addEventListener("message", this.handleMessage); //江
  473. },
  474. beforeDestroy() {
  475. this.stopPolling();
  476. // 销毁消息监听器
  477. window.removeEventListener("message", this.handleMessage); //江
  478. },
  479. methods: {
  480. // 创建分析时请求
  481. async addRuleFormSubmit() {
  482. this.$refs.addRuleForm.validate(async (valid) => {
  483. if (valid) {
  484. try {
  485. const res = await addAnalysisResult(this.addRuleForm);
  486. if (res.code === 200) {
  487. this.$message({
  488. type: "success",
  489. message: "创建成功",
  490. });
  491. this.addDialogVisible = false;
  492. this.loading = false;
  493. this.isPolling = false;
  494. await this.getTableList();
  495. this.$router.push({
  496. path: "/home/performance/editAssets",
  497. query: {
  498. batchCode: this.tableData[0].batchCode,
  499. analysisTypeCode: this.tableData[0].analysisTypeCode,
  500. fieldEngineCode: this.tableData[0].fieldCode,
  501. },
  502. });
  503. }
  504. } catch (err) {
  505. console.error(err);
  506. }
  507. }
  508. });
  509. },
  510. AddHandleCloses(done) {
  511. this.$confirm("确认关闭?")
  512. .then((_) => {
  513. this.addDialogVisible = false;
  514. done();
  515. })
  516. .catch((_) => {});
  517. },
  518. //获取风场列表
  519. async getQueryCodeNumList() {
  520. this.loading = true;
  521. try {
  522. const result = await queryCodeNum();
  523. this.fieldCodeList = result.data.fieldCodeList;
  524. this.loading = false;
  525. } catch (error) {
  526. console.error(error);
  527. this.loading = false;
  528. }
  529. },
  530. handleCloses(done) {
  531. this.$confirm("确认关闭?")
  532. .then((_) => {
  533. done();
  534. })
  535. .catch((_) => {});
  536. },
  537. //查看pdf 文件
  538. detailReportAssetss(row) {
  539. this.dialogReportVisible = true;
  540. this.pdfUrl = row.reportAddr;
  541. },
  542. //下载pdf 文件
  543. downLoadeAssetss(row) {
  544. downloadPDF(row.reportAddr, row.reportName);
  545. },
  546. async HandleOnOffAuto(row) {
  547. try {
  548. const form = new FormData();
  549. form.append("batchCode", row.batchCode);
  550. form.append("onOffCall", row.onOffCall === 0 ? 1 : 0);
  551. const res = await onOffAutoAnalysis(form);
  552. if (res.code === 200) {
  553. this.getTableList();
  554. this.$message({
  555. type: "success",
  556. message: `${row.onOffCall === 0 ? "开启" : "关闭"}成功`,
  557. });
  558. }
  559. } catch (err) {
  560. console.error(err);
  561. }
  562. },
  563. //插队接口
  564. async insertQueue(row) {
  565. this.$confirm(
  566. `确认${row.onOffCall === 0 ? "开启" : "关闭"}插队?`,
  567. "提示",
  568. {
  569. confirmButtonText: "确定",
  570. cancelButtonText: "取消",
  571. type: "warning",
  572. }
  573. )
  574. .then(() => {
  575. navigateToDetails();
  576. })
  577. .catch(() => {});
  578. },
  579. //分析
  580. handleAssetss(row) {
  581. this.$router.push({
  582. path: "/home/performance/editAssets",
  583. query: {
  584. batchCode: row.batchCode,
  585. analysisTypeCode: row.analysisTypeCode,
  586. fieldEngineCode: row.fieldCode,
  587. },
  588. });
  589. },
  590. //分析详情
  591. handleAssetssDetail(row, state) {
  592. const navigateToDetails = () => {
  593. this.$router.push({
  594. path: "/home/performance/overview",
  595. query: {
  596. batchCode: row.batchCode,
  597. // analysisTypeCode: row.analysisTypeCode,
  598. fieldCode: row.fieldCode,
  599. },
  600. });
  601. };
  602. if (state === "0") {
  603. // 分析状态为分析中
  604. this.$confirm(
  605. "当前查看的分析记录为历史分析结果,最新分析记录还未分析完成不展示!"
  606. )
  607. .then(() => {
  608. navigateToDetails();
  609. })
  610. .catch(() => {});
  611. } else {
  612. navigateToDetails();
  613. }
  614. },
  615. abnormalDialog(row, title) {
  616. this.dialogVisible = true;
  617. if (title === "异常详情") {
  618. this.errorInfo = row.errInfo;
  619. this.rowInfo = {};
  620. } else if (title === "异常描述") {
  621. this.errorInfo = "";
  622. this.rowInfo = { ...row };
  623. } else if (title === "上传报告") {
  624. this.errorInfo = "";
  625. this.rowInfo = {};
  626. this.rowInfo.batchCode = row.batchCode;
  627. }
  628. this.title = title;
  629. },
  630. handleConfirm() {
  631. this.dialogVisible = false;
  632. },
  633. // 页码变化时才触发查询
  634. handleCurrentChange(val) {
  635. this.formInline.pageNum = val;
  636. this.getTableList();
  637. },
  638. // 修改 getTableList 方法,避免重复请求
  639. async getTableList() {
  640. // 如果正在请求中,跳过此次调用
  641. console.log(this.loading, this.isPolling);
  642. if (this.loading || this.isPolling) return;
  643. this.loading = true;
  644. try {
  645. const params = { ...this.formInline, totalSize: undefined };
  646. // 传递条件参数
  647. if (this.formInline.analysisState !== undefined) {
  648. params.analysisState = this.formInline.analysisState;
  649. }
  650. if (this.formInline.errState !== undefined) {
  651. params.errState = this.formInline.errState;
  652. }
  653. const result = await analysisResultList(params);
  654. this.tableData = result.data.list;
  655. console.log(this.tableData, "result this.tableData");
  656. this.formInline.totalSize = result.data.totalSize;
  657. } catch (error) {
  658. this.$message({
  659. type: "error",
  660. message: "请检查是否连接网络",
  661. });
  662. } finally {
  663. this.loading = false;
  664. }
  665. },
  666. // 改进 handleMessage,避免频繁请求
  667. handleMessage(event) {
  668. // console.log(event, "请求分析页面");
  669. // 确保消息来自当前域
  670. if (event.origin !== window.location.origin) {
  671. return;
  672. }
  673. const { fieldName, analysisState, errState } = event.data;
  674. // 更新表单字段
  675. if (fieldName !== undefined) {
  676. this.formInline.fieldName = fieldName;
  677. console.log(fieldName, "0");
  678. }
  679. if (analysisState !== undefined) {
  680. this.formInline.analysisState = analysisState;
  681. console.log(analysisState, "2");
  682. }
  683. if (errState !== undefined) {
  684. this.formInline.errState = errState;
  685. console.log(errState, "1");
  686. }
  687. // 如果当前没有请求中,才调用 getTableList
  688. if (!this.loading && fieldName && analysisState) {
  689. this.getTableList();
  690. // this.startPolling();
  691. }
  692. },
  693. rowStyle() {
  694. return "text-align:center";
  695. },
  696. // 查询
  697. onSubmit() {
  698. this.getTableList();
  699. },
  700. // 重置
  701. reset(formName) {
  702. this.$refs[formName].resetFields();
  703. this.formInline.fieldName = "";
  704. this.formInline.analysisState = "";
  705. this.formInline.errState = "";
  706. this.getTableList();
  707. },
  708. // fetchData 方法在轮询中调用
  709. async fetchData() {
  710. try {
  711. const result = await analysisResultList({
  712. ...this.formInline,
  713. totalSize: undefined,
  714. });
  715. this.tableData = result.data.list;
  716. this.formInline.totalSize = result.data.totalSize;
  717. } catch (error) {
  718. this.$message({
  719. type: "error",
  720. message: "请检查是否连接网络",
  721. });
  722. }
  723. },
  724. stopPolling() {
  725. if (this.intervalId) {
  726. clearInterval(this.intervalId);
  727. this.intervalId = null;
  728. }
  729. this.isPolling = false;
  730. },
  731. // 启动轮询时,避免重复请求
  732. startPolling() {
  733. this.startTime = new Date().getTime();
  734. this.isPolling = true;
  735. this.intervalId = setInterval(() => {
  736. const currentTime = new Date().getTime();
  737. if (currentTime - this.startTime >= this.maxPollingTime) {
  738. this.stopPolling();
  739. } else {
  740. // 轮询期间不重复请求,检查是否可以调用 fetchData
  741. if (!this.loading) {
  742. this.fetchData();
  743. }
  744. }
  745. }, 10000); // 每10秒检查一次
  746. },
  747. //创建分析
  748. Newanalyse() {
  749. this.addDialogVisible = true;
  750. this.getQueryCodeNumList();
  751. },
  752. examine() {
  753. this.$router.push({
  754. path: "/transition",
  755. });
  756. },
  757. },
  758. mounted() {
  759. this.getTableList();
  760. setTimeout(() => {
  761. this.startPolling();
  762. }, 10000);
  763. },
  764. };
  765. </script>
  766. <style lang="scss" scoped>
  767. @keyframes striped-flow {
  768. from {
  769. background-position: 0 100px;
  770. }
  771. to {
  772. background-position: 1.25em 1.25em;
  773. }
  774. }
  775. .general {
  776. display: flex;
  777. flex-wrap: wrap;
  778. .condition {
  779. width: 50%;
  780. display: flex;
  781. p {
  782. width: 100px;
  783. text-align: right;
  784. line-height: 40px;
  785. }
  786. span {
  787. line-height: 40px;
  788. padding-left: 20px;
  789. }
  790. .el-select {
  791. width: 100%;
  792. margin-bottom: 20px;
  793. }
  794. .el-input {
  795. margin-bottom: 20px;
  796. }
  797. }
  798. }
  799. .attachment {
  800. display: flex;
  801. padding-top: 10px;
  802. p {
  803. margin-right: 20px;
  804. color: #409eff;
  805. }
  806. }
  807. .add-ruleForm {
  808. .el-select {
  809. width: 100%;
  810. }
  811. }
  812. .addition {
  813. display: flex;
  814. justify-content: flex-end;
  815. margin-bottom: 10px;
  816. }
  817. .demo-ruleForm {
  818. .el-form-item {
  819. margin-bottom: 25px;
  820. }
  821. }
  822. ::v-deep .animated-progress .el-progress-bar__outer {
  823. height: 15px; /* Adjust height as needed */
  824. background-color: rgb(235, 238, 245);
  825. background-image: linear-gradient(
  826. 45deg,
  827. rgba(0, 0, 0, 0.1) 25%,
  828. transparent 25%,
  829. transparent 50%,
  830. rgba(0, 0, 0, 0.1) 50%,
  831. rgba(0, 0, 0, 0.1) 75%,
  832. transparent 75%,
  833. transparent
  834. );
  835. background-size: 1.25em 1.25em;
  836. animation: striped-flow 3s linear infinite;
  837. }
  838. .reportItemVal {
  839. display: flex;
  840. justify-content: space-between;
  841. align-items: center;
  842. .reportLeft {
  843. margin-right: 50px;
  844. }
  845. }
  846. ::v-deep .pdfDialog .el-dialog {
  847. height: 100vh;
  848. display: flex;
  849. flex-direction: column;
  850. margin: 0 auto !important;
  851. .el-dialog__body {
  852. // height: 100% !important;
  853. flex: 1;
  854. background: #fff;
  855. .pdf-container {
  856. display: flex;
  857. justify-content: center;
  858. align-items: center;
  859. height: 100% !important;
  860. }
  861. }
  862. }
  863. canvas {
  864. border: 1px solid #dcdfe6;
  865. }
  866. .right-align {
  867. white-space: nowrap;
  868. }
  869. </style>