index.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876
  1. <template>
  2. <div class="index_box">
  3. <div class="content_box">
  4. <!-- @tab-click="handleClick" -->
  5. <!-- 工序名称 -->
  6. <!-- <Search></Search> -->
  7. <div class="content_box_tab">
  8. <el-input
  9. style="width: 180px"
  10. clearable
  11. v-model="name"
  12. placeholder="请输入筛选项"
  13. @input="seekInput"
  14. />
  15. <el-tabs
  16. v-model="activeName"
  17. type="card"
  18. stretch
  19. @tab-click="tabClickValue"
  20. >
  21. <el-tab-pane label="工序" name="0">
  22. <el-tree
  23. :data="produceTaskList"
  24. :props="defaultProps"
  25. node-key="id"
  26. :highlight-current="true"
  27. @node-click="handleNodeClick"
  28. ref="taskListRef"
  29. >
  30. </el-tree>
  31. <!--
  32. v-loading="treeLoading"
  33. :node-key="nodeKey"
  34. ref="tree"
  35. :highlight-current="true"
  36. :expand-on-click-node="false"
  37. @node-click="handleNodeClick"
  38. v-bind="$attrs"
  39. :default-expand-all="defaultExpandAll" -->
  40. </el-tab-pane>
  41. <!-- <el-tab-pane label="工位" name="second"> -->
  42. <!-- <AssetTree @handleNodeClick="handleNodeClickNew" @setRootId="setRootId" id="0" :paramsType="'type'"
  43. ref="treeList" eqDevice="sb" /> -->
  44. <!-- <el-tree
  45. :data="factoryworkstationList"
  46. :props="defaultPropsTow"
  47. node-key="id"
  48. :highlight-current="true"
  49. @node-click="handleNodeClick"
  50. >
  51. </el-tree>
  52. </el-tab-pane> -->
  53. </el-tabs>
  54. </div>
  55. <div style="width: calc(100% - 220px)">
  56. <div class="seek-list" style="background-color: #157a2c">
  57. <div>
  58. <el-input
  59. style="width: 180px; margin-right: 5px"
  60. clearable
  61. v-model="keyWord"
  62. placeholder="请输入关键字"
  63. @clear="handleSearch"
  64. />
  65. <!-- <el-input style="width: 180px" clearable v-model="taskName" placeholder="请输入工序进度" /> -->
  66. <!-- -->
  67. <el-button
  68. size="mini"
  69. type="primary"
  70. style="margin: 0 5px"
  71. @click="handleSearch"
  72. >查询</el-button
  73. >
  74. </div>
  75. <div
  76. style="
  77. width: 55%;
  78. color: #fff;
  79. display: flex;
  80. justify-content: space-between;
  81. "
  82. >
  83. <div>
  84. <b style="margin-right: 50px">当前工序:{{ title }}</b>
  85. <b>下道工序:{{ title1 }}</b>
  86. </div>
  87. <div> 操作员:{{ info.name }} </div>
  88. </div>
  89. </div>
  90. <ele-split-layout
  91. space="0px"
  92. width="45%"
  93. :resizable="true"
  94. :min-size="200"
  95. :max-size="-200"
  96. :left-style="{
  97. overflow: 'hidden',
  98. width: '100%'
  99. }"
  100. :right-style="{ overflow: 'hidden' }"
  101. :responsive="false"
  102. style="height: calc(100vh - 70px - 50px - 90px)"
  103. >
  104. <!-- 左侧 工单列表 -->
  105. <div class="left_main">
  106. <div class="top">
  107. <!-- /工单列表 -->
  108. <produceOrder
  109. @workSelect="workSelect"
  110. @rowClick="rowClick"
  111. ref="produceOrder"
  112. @getTaskName="getTaskName"
  113. >
  114. </produceOrder>
  115. </div>
  116. <!-- <div class="bottom">
  117. <productionResource :BomObj="BomObj"></productionResource>
  118. </div> -->
  119. </div>
  120. <!-- 右侧 详情 -->
  121. <template v-slot:content>
  122. <div class="right_main">
  123. <!-- 领料 -->
  124. <!-- <div v-if="operationType == 'pick'"> -->
  125. <div v-if="operationType == 'pick'">
  126. <pickDetails
  127. ref="pickListRef"
  128. :workTaskId="workTaskId"
  129. :taskId="taskObj.id"
  130. @pickAdd="pickAdd"
  131. ></pickDetails>
  132. </div>
  133. <div v-if="operationType == 'feed'">
  134. <!-- 投料 -->
  135. <feeding
  136. :workListIds="workListIds"
  137. :feedNeedEquipment="feedNeedEquipment"
  138. ></feeding>
  139. </div>
  140. <div v-if="operationType == 'job'">
  141. <!-- // 报工列表 入库 -->
  142. <warehousing
  143. v-if="taskObj.id == -1"
  144. :workListIds="workListIds"
  145. ref="wareRef"
  146. ></warehousing>
  147. <!-- // 设备 入库 -->
  148. <!-- 普通报工 -->
  149. <!-- <jobBooking
  150. v-else
  151. :workListIds="workListIds"
  152. ref="jobRef"
  153. :reportNeedFeed="reportNeedFeed"
  154. ></jobBooking> -->
  155. <jobBooking
  156. v-else
  157. :workListIds="workListIds"
  158. ref="jobRef"
  159. :reportNeedFeed="reportNeedFeed"
  160. ></jobBooking>
  161. <!-- <workPlan
  162. style="width: 100%"
  163. v-else
  164. :workListIds="workListIds"
  165. ref="jobRef"
  166. :reportNeedFeed="reportNeedFeed"
  167. >
  168. </workPlan> -->
  169. </div>
  170. <!-- 工步 -->
  171. <div v-if="operationType == 'workStep'"> </div>
  172. <!-- 质检工序 -->
  173. <div v-if="operationType == 'inspection'">
  174. <inspection
  175. :workListIds="workListIds"
  176. ref="inspectionRef"
  177. ></inspection>
  178. </div>
  179. <!-- 委外 -->
  180. <div
  181. v-if="operationType == 'Outsourcing' && isType == '3'"
  182. class="right_main_box"
  183. >
  184. <outsourcing
  185. :outsourceFormVal="outsourceForm"
  186. @changePlugIn="changePlugIn"
  187. v-if="isStep"
  188. ></outsourcing>
  189. <!-- -->
  190. <outsourceList
  191. :outsourceFormVal="outObj"
  192. @closeForm="closeForm"
  193. @outScucc="outScucc"
  194. v-else
  195. ></outsourceList>
  196. </div>
  197. </div>
  198. </template>
  199. </ele-split-layout>
  200. <footBtn
  201. @footBtn="footBtn"
  202. :type="type"
  203. :singleReportInspection="singleReportInspection"
  204. style="background: rgba(223, 250, 222, 0.6); padding: 10px"
  205. ></footBtn>
  206. </div>
  207. <!-- <footBtn @footBtn="footBtn"></footBtn> -->
  208. </div>
  209. <!--领料弹框 -->
  210. <picking
  211. v-if="pickingShow"
  212. @close="pickingClose"
  213. :workListIds="workListIds"
  214. ></picking>
  215. <!-- 工艺文件 -->
  216. <wokePopup ref="wokePopupRef"></wokePopup>
  217. <!-- 检验报工 -->
  218. <workPlan ref="jobRefs"> </workPlan>
  219. <!-- <workes ref="jobRefs"> </workes> -->
  220. <!-- :workListIds="workListIds" :taskId="taskObj.id" -->
  221. <!-- 工步 -->
  222. <workStep ref="workStepRef" />
  223. <!-- 任务 -->
  224. <TaskDialog ref="taskDialogRef" />
  225. </div>
  226. </template>
  227. <script>
  228. import TaskDialog from '@/views/produce/components/taskDialog/index.vue';
  229. import Search from './components/search.vue';
  230. import footBtn from './components/footBtn.vue';
  231. // import produceOrder from './components/produceOrder.vue';
  232. import produceOrder from './components/new_produceOrder.vue';
  233. import productionResource from './components/productionResource/index.vue';
  234. import outsourcing from './components/outsourcing/index.vue';
  235. import picking from './components/picking/index.vue';
  236. import wokePopup from './components/picking/wokePopup.vue';
  237. import inspection from './components/inspection/index.vue';
  238. import pickDetails from './components/picking/details.vue';
  239. import AssetTree from '@/components/AssetTree/joobIndex.vue';
  240. import feeding from './components/feeding/index.vue';
  241. import jobBooking from './components/jobBooking/index.vue';
  242. import workPlan from './components/workPlan/index.vue';
  243. import workes from './components/workPlan/components/work.vue';
  244. import warehousing from './components/warehousing/index.vue';
  245. import outsourceList from './components/outsourcing/outsourceList.vue';
  246. import workStep from './components/workStep/index.vue';
  247. import { parameterGetByCode } from '@/api/system/dictionary-data';
  248. import {
  249. getByTaskId,
  250. pcCheckOutsource,
  251. getTaskInstanceById,
  252. checkOutsourceMaterial,
  253. listTask,
  254. factoryworkstationPage,
  255. nextTask
  256. } from '@/api/produce/index';
  257. export default {
  258. components: {
  259. Search,
  260. footBtn,
  261. wokePopup,
  262. produceOrder,
  263. productionResource,
  264. outsourcing,
  265. picking,
  266. pickDetails,
  267. outsourceList,
  268. feeding,
  269. AssetTree,
  270. jobBooking,
  271. inspection,
  272. warehousing,
  273. workStep,
  274. workPlan,
  275. TaskDialog
  276. },
  277. data() {
  278. return {
  279. name: '',
  280. activeName: '0',
  281. taskName: '',
  282. keyWord: '', //搜索
  283. title: '',
  284. type: '',
  285. loading: false,
  286. operationType: null,
  287. popupType: '', // 弹窗
  288. workListIds: [],
  289. factoryworkstationList: [],
  290. title1: '',
  291. arr: [],
  292. arrTow: [],
  293. produceTaskList: [],
  294. isType: '',
  295. isStep: true,
  296. outsourceForm: {},
  297. outObj: {},
  298. pickingShow: false,
  299. wokePopup: false,
  300. BomObj: {},
  301. defaultProps: {
  302. children: 'children',
  303. label: 'newName'
  304. },
  305. defaultPropsTow: {
  306. children: 'children',
  307. label: 'name',
  308. value: 'code'
  309. },
  310. feedNeedEquipment: 0, //投料是否要添加生产设备1是0否
  311. reportNeedFeed: 0, //生产质检是否需要处置再报工1是0否
  312. singleReportInspection: null, //获取选中的工单是单个还是批量
  313. workTaskId: null, //选中的工单工序id
  314. workStepQueryParam: {
  315. taskId: null,
  316. workOrderId: null,
  317. bomCategoryId: null,
  318. }
  319. };
  320. },
  321. computed: {
  322. taskObj() {
  323. return this.$store.state.user.taskObj;
  324. },
  325. info() {
  326. return this.$store.state.user.info;
  327. },
  328. rightShow() {
  329. return (type) => {};
  330. }
  331. },
  332. created() {
  333. this.init();
  334. this.getTaskList();
  335. this.getFactoryworkstationPageList();
  336. this.operationType = null;
  337. this.workListIds = [];
  338. },
  339. methods: {
  340. tabClickValue() {
  341. this.name = '';
  342. this.seekInput();
  343. },
  344. // 前端筛选
  345. seekInput() {
  346. // console.log(activeName);
  347. if (this.activeName == '0') {
  348. if (!this.name) return (this.produceTaskList = this.arr);
  349. this.produceTaskList = this.produceTaskList.filter((item) => {
  350. return item.name.indexOf(this.name) > -1;
  351. });
  352. } else {
  353. if (!this.name) return (this.factoryworkstationList = this.arrTow);
  354. this.factoryworkstationList = this.factoryworkstationList.filter(
  355. (item) => {
  356. return item.name.indexOf(this.name) > -1;
  357. }
  358. );
  359. }
  360. },
  361. // 折叠悬浮中样式调整
  362. init() {
  363. this.$store.dispatch('theme/setCollapse', true);
  364. },
  365. async getTaskName(value) {
  366. if (value.length > 0) {
  367. let res = await nextTask({
  368. taskId: this.taskObj.id,
  369. workOrderIds: value.map((item) => item.id)
  370. });
  371. this.title1 = res.data.map((item) => item.taskTypeName).toString();
  372. } else {
  373. this.title1 = '';
  374. }
  375. },
  376. handleSearch() {
  377. let obj = {
  378. keyWord: this.keyWord,
  379. taskName: this.taskName
  380. };
  381. this.$refs.produceOrder.handleSearch(obj);
  382. //handleSearch(this.code);
  383. },
  384. handleNodeClickNew(info) {
  385. // this.current = info;
  386. let current = { id: info.id };
  387. this.$store.commit('user/currentObj', current);
  388. },
  389. setRootId(id) {
  390. this.rootId = id;
  391. },
  392. // 点击工序
  393. handleNodeClick(data) {
  394. this.feedNeedEquipment = data.feedNeedEquipment;
  395. this.reportNeedFeed = data.reportNeedFeed;
  396. let obj = {
  397. 1: `${data.workCenterName}-${data.name}(普通工序)`,
  398. 3: `${data.workCenterName}-${data.name}(质检工序)`,
  399. 4: `${data.workCenterName}-${data.name}(包装工序)`,
  400. 5: `${data.workCenterName}-${data.name}(入库工序)`,
  401. 6: `${data.workCenterName}-${data.name}(质检工序)`
  402. };
  403. this.title = obj[data.type] || '';
  404. this.type = data.type;
  405. let taskObj = {};
  406. taskObj = this.produceTaskList.find((item) => item.id === data.id);
  407. this.$store.commit('user/setTaskObj', taskObj);
  408. },
  409. handleChoose(val) {
  410. console.log(val);
  411. },
  412. // 获取工序列表
  413. getTaskList() {
  414. listTask().then((res) => {
  415. res.map((v) => {
  416. v.newName = `${v.workCenterName}-${v.name}`;
  417. });
  418. this.produceTaskList = res;
  419. this.arr = JSON.parse(JSON.stringify(this.produceTaskList));
  420. //默认选择第一个工序
  421. if (this.produceTaskList?.length) {
  422. this.$store.commit('user/setTaskObj', this.produceTaskList[0]);
  423. this.$nextTick(() => {
  424. this.$refs.taskListRef.setCurrentKey(this.produceTaskList[0].id);
  425. });
  426. }
  427. // newName
  428. });
  429. },
  430. // 获取工位
  431. getFactoryworkstationPageList() {
  432. factoryworkstationPage({ pageNum: 1, size: 99999999 }).then((res) => {
  433. this.factoryworkstationList = res.list;
  434. this.arrTow = JSON.parse(JSON.stringify(this.factoryworkstationList));
  435. // newName
  436. });
  437. },
  438. closeForm() {
  439. this.isStep = true;
  440. },
  441. outScucc() {
  442. this.operationType = null;
  443. },
  444. // 切换组件
  445. async changePlugIn(e) {
  446. this.outObj = e;
  447. let req = {
  448. taskId: e.taskId,
  449. taskIds: e.taskIds,
  450. workOrderId: e.workOrderId,
  451. quantity: e.formedNumLast
  452. };
  453. const res = await checkOutsourceMaterial(req);
  454. this.outObj = { ...res.data, ...this.outsourceForm, ...this.outObj };
  455. this.isStep = false;
  456. },
  457. workSelect(data) {
  458. this.workTaskId = data.list.length > 0 ? data.list[0].taskId : null;
  459. this.workStepQueryParam.taskId =
  460. data.list.length > 0 ? data.list[0].taskId : null;
  461. this.workStepQueryParam.workOrderId =
  462. data.list.length > 0 ? data.list[0].id : null;
  463. this.workStepQueryParam.bomCategoryId = data.list.length > 0 ? data.list[0].bomCategoryId : null;
  464. this.singleReportInspection =
  465. data.list.length > 0 ? data.list[0].singleReport : null; //获取选中的工单是单个还是批量
  466. this.isStep = true;
  467. this.operationType = null;
  468. this.workListIds = data.ids;
  469. this.workData = data.list[0];
  470. },
  471. pickingWokeClose() {
  472. this.wokePopup = false;
  473. },
  474. async getCodeData(req) {
  475. await parameterGetByCode({ code: 'enable_quality_plus' }).then(
  476. (res) => {
  477. if (res.value == '1') {
  478. this.$refs.jobRefs.open(req);
  479. }
  480. }
  481. );
  482. },
  483. footBtn(t) {
  484. // this.operationType = t;
  485. // 新增判断 *** 出现弹窗的时候不然右边数据消失
  486. if ((t == 'work' || t == 'workStep', t === 'task')) {
  487. this.popupType = t;
  488. } else {
  489. this.operationType = t;
  490. }
  491. if (
  492. Object.keys(this.$store.state.user.taskObj).length === 0 &&
  493. this.$store.state.user.taskObj.constructor === Object
  494. ) {
  495. this.$message.warning('请选择工序');
  496. return true;
  497. }
  498. if (['pick', 'feed', 'job', 'work', 'workStep', 'task'].includes(t)) {
  499. if (this.workListIds.length == 0) {
  500. this.$message.warning('请选择工单列表');
  501. return false;
  502. }
  503. }
  504. // console.log('按钮被点击了.....', t);
  505. if (t === 'job') {
  506. let req = {
  507. taskId: this.taskObj.id,
  508. workOrderId: this.workListIds[0],
  509. data: this.workData
  510. };
  511. if (this.taskObj.type == 2 || this.taskObj.type == 3 ||this.taskObj.type == 6) {
  512. // this.$refs.jobRefs.open(req);
  513. this.getCodeData(req);
  514. }
  515. }
  516. if (t == 'pick') {
  517. this.$nextTick(() => {
  518. this.$refs.pickListRef.getList(this.workListIds);
  519. });
  520. }
  521. // 工步
  522. if (t === 'workStep') {
  523. if (this.workListIds.length > 1) {
  524. return this.$message.warning('工步只能选择一个工单!');
  525. }
  526. this.$refs.workStepRef.open(this.workStepQueryParam);
  527. // let req = {
  528. // taskId: this.taskObj.id,
  529. // workOrderId: this.workListIds[0]
  530. // };
  531. // this.$refs.wokePopupRef.open(req);
  532. }
  533. if (t === 'task') {
  534. if (this.workListIds.length > 1) {
  535. return this.$message.warning('任务只能选择一个工单!');
  536. }
  537. this.$refs.taskDialogRef.open(this.workStepQueryParam, this.workData);
  538. }
  539. // 工艺路线 *** 修改 判断只能选择一个
  540. // if (t === 'work') {
  541. // let req = {
  542. // taskId: this.taskObj.id,
  543. // workOrderId: this.workListIds[0]
  544. // };
  545. // this.$refs.wokePopupRef.open(req);
  546. // }
  547. if (t === 'work') {
  548. if (this.workListIds.length > 1) {
  549. return this.$message.warning('工艺文件只能选择一个工单!');
  550. }
  551. let req = {
  552. taskId: this.taskObj.id,
  553. workOrderId: this.workListIds[0]
  554. };
  555. this.$refs.wokePopupRef.open(req);
  556. }
  557. if (t == 'feed') {
  558. }
  559. // 委外
  560. if (t == 'Outsourcing') {
  561. if (this.workListIds.length > 1) {
  562. return this.$message.warning('委外工序只能选择一个工单!');
  563. } else if (this.workListIds.length < 1)
  564. return this.$message.warning('请选择工单!');
  565. else {
  566. // /
  567. this.handOutsource(this.workListIds[0]);
  568. }
  569. }
  570. },
  571. handOutsource(workOrderId) {
  572. // return
  573. let param = {
  574. taskId: this.taskObj.id,
  575. workOrderId: workOrderId
  576. };
  577. pcCheckOutsource(param).then((res) => {
  578. this.outsourceForm = {
  579. ...res.data
  580. };
  581. this.outsourceForm.name = this.taskObj.name + '委外';
  582. if (res.data.outsource) {
  583. this.isType = '3';
  584. this.getTaskInstanceByIdFn(workOrderId);
  585. } else {
  586. return this.$message.warning('此工序不能委外');
  587. }
  588. });
  589. },
  590. //获取工单列表
  591. getTaskInstanceByIdFn(workOrderId) {
  592. getTaskInstanceById(workOrderId).then((res) => {
  593. let { data } = res;
  594. if (data.length) {
  595. data = data.filter((item) => item.type == 1 || item.type == 4);
  596. let arr = data.findIndex(
  597. (item) => item.sourceTaskId == this.taskObj.id
  598. );
  599. if (arr != -1) {
  600. data.splice(0, arr + 1);
  601. }
  602. this.$set(this.outsourceForm, 'newStepsList', data);
  603. }
  604. });
  605. },
  606. pickAdd() {
  607. this.pickingShow = true;
  608. },
  609. // 关闭领料弹窗
  610. pickingClose(val) {
  611. if (val) {
  612. this.$nextTick(() => {
  613. this.$refs.pickListRef.getList(this.workListIds);
  614. });
  615. }
  616. this.pickingShow = false;
  617. },
  618. rowClick(row, taskId) {
  619. if (taskId) {
  620. let params = {
  621. categoryId: row.categoryId,
  622. taskId: taskId
  623. };
  624. getByTaskId(params).then((res) => {
  625. this.BomObj = res.data;
  626. this.$forceUpdate();
  627. });
  628. }
  629. }
  630. },
  631. mounted() {
  632. this.$nextTick(() => {
  633. const targetElements =
  634. document.getElementsByClassName('ele-admin-tabs');
  635. if (targetElements.length > 0) {
  636. // 遍历所有具有 'ele-admin-tabs' 类的元素
  637. Array.from(targetElements).forEach((element) => {
  638. // 对每个元素添加 'new-ele-admin-tabs' 类
  639. element.classList.add('new-ele-admin-tabs');
  640. });
  641. }
  642. });
  643. },
  644. destroyed() {
  645. this.$nextTick(() => {
  646. const targetElements =
  647. document.getElementsByClassName('ele-admin-tabs');
  648. if (targetElements.length > 0) {
  649. Array.from(targetElements).forEach((element) => {
  650. element.classList.remove('new-ele-admin-tabs');
  651. });
  652. }
  653. });
  654. }
  655. };
  656. </script>
  657. <style>
  658. .content_box {
  659. display: flex;
  660. }
  661. .content_box_tab {
  662. width: 220px;
  663. padding: 5px;
  664. height: calc(100vh - 73px);
  665. background-color: #fff;
  666. overflow-y: auto;
  667. }
  668. .footBtn {
  669. position: absolute;
  670. bottom: 20px;
  671. left: 0;
  672. }
  673. .new-ele-admin-tabs {
  674. display: none !important;
  675. }
  676. .c_title {
  677. color: #157a2c;
  678. font-size: 16px;
  679. font-weight: bold;
  680. }
  681. .tableZ_box {
  682. border: 1px solid #e3e5e5;
  683. margin: 6px 0;
  684. &:last-child {
  685. border-bottom: none;
  686. }
  687. .row {
  688. width: 100%;
  689. display: flex;
  690. }
  691. .col {
  692. width: calc(100% / 5);
  693. display: flex;
  694. align-items: center;
  695. min-width: 200px;
  696. min-height: 32px;
  697. border-bottom: 1px solid #e3e5e5;
  698. border-right: 1px solid #e3e5e5;
  699. &:last-child {
  700. border-right: none;
  701. }
  702. .name {
  703. display: flex;
  704. align-items: center;
  705. padding: 4px;
  706. width: 80px;
  707. height: 100%;
  708. background-color: #d0e4d5;
  709. color: #000;
  710. }
  711. .content {
  712. padding: 4px 6px;
  713. color: #000;
  714. }
  715. }
  716. .pd6 {
  717. padding: 0 6px;
  718. }
  719. }
  720. </style>
  721. <style lang="scss" scoped>
  722. .seek-list {
  723. display: flex;
  724. justify-content: space-between;
  725. align-items: center;
  726. padding: 10px 10px;
  727. }
  728. .right_main_box {
  729. background-color: #fff;
  730. height: 100%;
  731. box-sizing: border-box;
  732. }
  733. .index_box {
  734. padding: 10px;
  735. padding-bottom: 0;
  736. width: 100%;
  737. box-sizing: border-box;
  738. min-width: 1280px !important;
  739. height: calc(100vh - 60px);
  740. // overflow-x: auto;
  741. /* 当内容超出宽度时,允许水平滚动 */
  742. white-space: nowrap;
  743. /* 防止内部文本换行,确保所有内容都在一行显示 */
  744. scrollbar-width: thin;
  745. /* 设置滚动条宽度(浏览器兼容性可能有所不同) */
  746. scrollbar-color: #40a9ff transparent;
  747. /* 设置滚动条颜色和轨道颜色(同样,浏览器兼容性) */
  748. }
  749. .main {
  750. width: 100%;
  751. min-width: 1280px;
  752. height: calc(100vh - 70px - 50px - 80px);
  753. display: flex;
  754. justify-content: space-between;
  755. }
  756. .left_main {
  757. width: 100%;
  758. height: 100%;
  759. display: flex;
  760. flex-direction: column;
  761. justify-content: space-around;
  762. min-width: 640px;
  763. .top {
  764. width: 100%;
  765. height: 100%;
  766. overflow: hidden;
  767. }
  768. // .bottom {
  769. // width: 100%;
  770. // min-height: calc((100vh - 70px - 50px - 80px - 20px) / 2);
  771. // overflow: hidden;
  772. // }
  773. }
  774. ::v-deep .el-tabs__item.is-active {
  775. background-color: #dffade;
  776. /* 蓝色背景 */
  777. color: #333;
  778. }
  779. ::v-deep .is-active {
  780. color: #dffade;
  781. }
  782. .right_main {
  783. min-width: 640px;
  784. padding-bottom: 12px;
  785. height: calc((100vh - 70px - 50px - 80px - 12px));
  786. background: #f0f3f3;
  787. }
  788. </style>