edit.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796
  1. <template>
  2. <div>
  3. <Toptitle :title="setTip">
  4. <Button @click="back" type="primary" ghost style="margin-right:10px;"
  5. >返回</Button
  6. >
  7. <Button v-if="type != 3" @click="handleSubmit('Info')">保存</Button>
  8. </Toptitle>
  9. <div class="page-edit">
  10. <Form inline ref="Info" :model="info" :rules="rules">
  11. <FormItem label="ID">
  12. <Input v-model="info.id" disabled placeholder="自动生成" />
  13. </FormItem>
  14. <FormItem label="部件名称" prop="parts_id">
  15. <Select
  16. :disabled="type == 3"
  17. filterable
  18. clearable
  19. v-model="info.parts_id"
  20. style="width:186px;"
  21. >
  22. <Option
  23. v-for="item of partsList"
  24. :key="item.id"
  25. :value="item.id"
  26. :label="item.title"
  27. ></Option>
  28. </Select>
  29. </FormItem>
  30. <FormItem label="工艺组合名称" prop="title">
  31. <Input
  32. :disabled="type == 3"
  33. v-model="info.title"
  34. placeholder="请输入工艺组合名称"
  35. />
  36. </FormItem>
  37. <FormItem label="价格" prop="price">
  38. <Input
  39. :disabled="type == 3"
  40. type="number"
  41. v-model="info.price"
  42. placeholder="请输入价格"
  43. />
  44. </FormItem>
  45. </Form>
  46. <!-- <span v-for="_item in partsList" :key="_item.id">
  47. <span v-for="_id in info.parts_id" :key="_id">
  48. <span v-show="_item.id == _id">
  49. {{ _item.title }}
  50. </span>
  51. </span>
  52. </span> -->
  53. <div class="hierarchy" v-for="item of info.list" :key="item.name">
  54. <span>{{ item.name || item.title }}(多选):</span>
  55. <div v-for="_item in item.cld" class="radio-g" :key="_item.type_title">
  56. <span
  57. :class="['box-us', _item.show ? 'box-us-foc' : '']"
  58. @click="setBoxChange(item, _item)"
  59. >{{ _item.type_title }}</span
  60. >
  61. <div
  62. :class="['radio-us', __item.show ? 'radio-us-foc' : '']"
  63. v-for="__item in _item.list"
  64. @click="setRadioChange(_item, __item)"
  65. :key="__item.id"
  66. >
  67. {{ __item.title }}
  68. </div>
  69. </div>
  70. <!-- <div class="radio-g">
  71. <div @click="setRadioChange(item,_item)"
  72. :class="['radio-us',_item.show ? 'radio-us-foc' : '']"
  73. v-for='_item of item.cld'
  74. :key="_item.id">{{_item.title}}</div>
  75. </div> -->
  76. </div>
  77. <div style="padding:10px 0;">
  78. <span>工艺路线:</span>
  79. <Button :disabled="type == 3" @click="editRouter()">{{
  80. type == 1 ? "选择工艺路线" : "选择工艺路线"
  81. }}</Button>
  82. {{ process_name }}
  83. </div>
  84. <Table border :columns="tableColumns" :data="tableData"></Table>
  85. </div>
  86. <Modal
  87. class-name="vertical-center-modal"
  88. v-model="show_add"
  89. :mask-closable="false"
  90. title="选择工艺路线"
  91. >
  92. <div class="modal_process_route">
  93. <div class="modal_process_route_top">
  94. <div>
  95. <span>工艺路线名称:</span>
  96. <Input
  97. :disabled="type == 3"
  98. v-model="tempProcessLine.title"
  99. style="width:120px"
  100. placeholder="请输入"
  101. ></Input>
  102. </div>
  103. <Button
  104. type="primary"
  105. @click="handleSearchProcessLine(tempProcessLine.title)"
  106. >搜索</Button
  107. >
  108. </div>
  109. <div class="modal_process_route_content">
  110. <Table
  111. border
  112. :columns="processLineColumns"
  113. :data="processLineTableData"
  114. >
  115. <template slot="processLineSet" slot-scope="{ row, index }">
  116. <a style="margin:0 5px" @click="handleProcessLineSet(row, index)"
  117. >选择</a
  118. >
  119. </template>
  120. </Table>
  121. </div>
  122. </div>
  123. </Modal>
  124. <Modal
  125. class-name="vertical-center-modal"
  126. width="80%"
  127. :mask-closable="false"
  128. v-model="show_add_detail"
  129. title="工艺路线详情"
  130. >
  131. <div class="modal_process_route_detail">
  132. <div>
  133. <span style="width: 100px">id: </span
  134. ><Input
  135. v-model="info.id"
  136. disabled
  137. placeholder="自动生成"
  138. style="width: 150px"
  139. size="small"
  140. />
  141. </div>
  142. <div>
  143. <span style="width: 100px">工艺路线名称: </span
  144. ><Input
  145. v-model="info.process_route_title"
  146. placeholder="请输入工艺路线名称"
  147. @on-change="handleProcessNameChange"
  148. size="small"
  149. style="width: 250px"
  150. />
  151. </div>
  152. </div>
  153. <div class="modal_content">
  154. <div class="modal_content_left">
  155. <span>已选:</span>
  156. <SlickList
  157. :distance="10"
  158. :lockToContainerEdges="true"
  159. axis="x,y,xy"
  160. lockAxis="xy"
  161. v-model="selectTags"
  162. class="SortableList"
  163. @input="getChangeLists"
  164. >
  165. <SlickItem
  166. style="z-index: 9999"
  167. v-for="(item, key) of selectTags"
  168. :key="key"
  169. class="SortableItem"
  170. :index="key"
  171. >
  172. <Tooltip>
  173. <div slot="content">
  174. <p>工时:{{ item.time }}</p>
  175. <p>工价:{{ item.wages }}</p>
  176. <p>产能:{{ item.capacity }}</p>
  177. </div>
  178. <div class="tag-modal">
  179. <div class="before">{{ key + 1 }}</div>
  180. <Tag
  181. @on-close="closeTag(key, selectTags, item)"
  182. color="primary"
  183. type="border"
  184. closable
  185. >{{ item.title }}</Tag
  186. >
  187. </div>
  188. </Tooltip>
  189. </SlickItem>
  190. </SlickList>
  191. </div>
  192. <div class="modal_content_right">
  193. <div v-for="(item, index) of info.bps" :key="index">
  194. <div v-if="item.cld && item.cld.length > 0">
  195. <span style="font-weight:bold">{{ item.title }}</span>
  196. <div
  197. style="display: flex;justify-content: flex-start;flex-wrap: wrap;"
  198. >
  199. <div
  200. v-for="(_item, _index) in item.cld"
  201. :key="_index"
  202. :style="
  203. _item.p_id
  204. ? [{ 'margin-left': '10px' }]
  205. : [{ 'margin-left': '10px' }, { width: '100%' }]
  206. "
  207. >
  208. <div v-if="_item.cld && _item.cld.length > 0">
  209. <div>
  210. <div style="font-weight:bold;width:100%">
  211. {{ _item.title }}:
  212. </div>
  213. <div
  214. style="display: flex;justify-content: flex-start;flex-wrap: wrap;"
  215. >
  216. <div
  217. v-for="(__item, __index) in _item.cld"
  218. :key="__index"
  219. :style="
  220. __item.p_id
  221. ? [{ 'margin-left': '10px' }]
  222. : [{ 'margin-left': '10px' }, { width: '100%' }]
  223. "
  224. >
  225. <div v-if="__item.cld && __item.cld.length > 0">
  226. <span style="font-weight:bold"
  227. >{{ __item.title }}:</span
  228. >
  229. <div
  230. style="display: flex;justify-content: flex-start;flex-wrap: wrap;"
  231. >
  232. <Tooltip
  233. v-for="(___item, ___index) of __item.cld"
  234. :key="___index"
  235. >
  236. <div slot="content">
  237. <p>工时:{{ ___item.time }}</p>
  238. <p>工价:{{ ___item.wages }}</p>
  239. <p>产能:{{ ___item.capacity }}</p>
  240. </div>
  241. <Checkbox
  242. @on-change="
  243. changeCheck($event, ___item, selectTags)
  244. "
  245. v-model="___item.show"
  246. style="padding: 0px 5px"
  247. >{{ ___item.title }}</Checkbox
  248. >
  249. </Tooltip>
  250. </div>
  251. </div>
  252. <div v-else>
  253. <Tooltip v-if="__item.p_id">
  254. <div slot="content">
  255. <p>工时:{{ __item.time }}</p>
  256. <p>工价:{{ __item.wages }}</p>
  257. <p>产能:{{ __item.capacity }}</p>
  258. </div>
  259. <Checkbox
  260. @on-change="
  261. changeCheck($event, __item, selectTags)
  262. "
  263. v-model="__item.show"
  264. style="padding: 0px 5px"
  265. >{{ __item.title }}</Checkbox
  266. >
  267. </Tooltip>
  268. </div>
  269. </div>
  270. </div>
  271. </div>
  272. </div>
  273. <div v-else>
  274. <Tooltip v-if="_item.p_id">
  275. <div slot="content">
  276. <p>工时:{{ _item.time }}</p>
  277. <p>工价:{{ _item.wages }}</p>
  278. <p>产能:{{ _item.capacity }}</p>
  279. </div>
  280. <Checkbox
  281. @on-change="changeCheck($event, _item, selectTags)"
  282. v-model="_item.show"
  283. style="padding: 0px 5px"
  284. >{{ _item.title }}</Checkbox
  285. >
  286. </Tooltip>
  287. <!-- <span v-else>{{ _item.title }}</span> -->
  288. </div>
  289. </div>
  290. </div>
  291. </div>
  292. <!-- <div v-else>{{ item.title }}</div> -->
  293. </div>
  294. </div>
  295. </div>
  296. <div slot="footer">
  297. <Button
  298. @click="
  299. show_add_detail = false;
  300. show_add = true;
  301. "
  302. type="primary"
  303. ghost
  304. >取消</Button
  305. >
  306. <Button @click="saveTableData()" type="primary">确定</Button>
  307. </div>
  308. </Modal>
  309. </div>
  310. </template>
  311. <script>
  312. import { SlickList, SlickItem } from "vue-slicksort";
  313. export default {
  314. data() {
  315. return {
  316. tempProcessLine: {
  317. title: "",
  318. },
  319. processLineColumns: [
  320. { title: "序号", type: "index", align: "center", key: "" },
  321. // { title: 'ID', align: 'center', key: 'id' },
  322. { title: "工艺路线名称", align: "center", key: "title" },
  323. { title: "操作", align: "center", key: "id", slot: "processLineSet" },
  324. ],
  325. processLineTableData: [],
  326. type: 1,
  327. id: null,
  328. partsList: [],
  329. show_add: false,
  330. show_add_detail: false,
  331. selectTags: [], //已选列表
  332. info: {
  333. title: "",
  334. price: "",
  335. parts_id: "",
  336. id: null,
  337. properties: [], //工序号
  338. procedure: [], //工艺属性id
  339. list: [],
  340. bps: [],
  341. },
  342. rules: {
  343. title: [{ required: true, message: " ", trigger: "blur" }],
  344. parts_id: [{ required: true, message: " " }],
  345. price: [{ required: true, message: " ", trigger: "blur" }],
  346. },
  347. tableColumns: [
  348. { title: "序号", type: "index", align: "center", key: "" },
  349. // { title: 'ID', align: 'center', key: 'id' },
  350. { title: "工序名称", align: "center", key: "title" },
  351. { title: "工时", align: "center", key: "time" },
  352. { title: "工价", align: "center", key: "wages" },
  353. { title: "产能", align: "center", key: "capacity" },
  354. ],
  355. tableData: [],
  356. processRouteId: "",
  357. processRouteName: "",
  358. process_name: "",
  359. isNewProcess: false,
  360. temp_info_bps: [],
  361. };
  362. },
  363. computed: {
  364. setTip() {
  365. const { type } = this.$route.query;
  366. const inner =
  367. type == 1
  368. ? "新增工艺"
  369. : type == 2
  370. ? "编辑工艺"
  371. : type == 3
  372. ? "查看工艺"
  373. : "拷贝工艺";
  374. return inner;
  375. },
  376. },
  377. mounted() {
  378. this.type = this.$route.query.type;
  379. this.id = this.$route.query.id;
  380. if (this.id) {
  381. this.getData(this.id);
  382. }
  383. this.axios("/api/bp_list").then((res) => {
  384. this.info.bps = res.data;
  385. this.temp_info_bps = res.data;
  386. });
  387. if (this.type == 1) {
  388. this.axios("/api/bpp_list_new").then((res) => {
  389. res.data.map((v) => {
  390. if (v.select) {
  391. v.cld.map((z) => {
  392. v.select.map((k) => {
  393. z.show = k == z.id ? true : false;
  394. });
  395. });
  396. } else {
  397. v.cld.map((v) => (v.show = false));
  398. }
  399. });
  400. this.info.list = res.data;
  401. });
  402. }
  403. this.getParts();
  404. },
  405. methods: {
  406. handleProcessLineSet(row, index) {
  407. this.info.id = row.id;
  408. this.info.process_route_title = row.title;
  409. this.info.procedure_id = row.procedure_id;
  410. this.isNewProcess = false;
  411. this.selectTags = [];
  412. const arr = this.info.procedure_id
  413. ? this.info.procedure_id.split(",")
  414. : [];
  415. console.log("this.info.bps :>> ", this.info.bps);
  416. for (let index = 0; index < arr.length; index++) {
  417. const element = arr[index];
  418. this.info.bps.map((lv1) => {
  419. lv1.cld &&
  420. lv1.cld.length > 0 &&
  421. lv1.cld.map((lv2) => {
  422. if (lv2.id == element) {
  423. lv2.show = true;
  424. lv2.p_id && this.selectTags.push(lv2);
  425. }
  426. lv2.cld &&
  427. lv2.cld.length > 0 &&
  428. lv2.cld.map((lv3) => {
  429. if (lv3.id == element) {
  430. lv3.show = true;
  431. lv3.p_id && this.selectTags.push(lv3);
  432. }
  433. lv3.cld &&
  434. lv3.cld.length > 0 &&
  435. lv3.cld.map((lv4) => {
  436. if (lv4.id == element) {
  437. lv4.show = true;
  438. lv4.p_id && this.selectTags.push(lv4);
  439. }
  440. });
  441. });
  442. });
  443. });
  444. }
  445. this.show_add_detail = true;
  446. this.show_add = false;
  447. },
  448. handleProcessNameChange(val) {
  449. this.process_name = val;
  450. this.isNewProcess = true;
  451. },
  452. handleSearchProcessLine(title) {
  453. this.axios({
  454. method: "get",
  455. url: "/api/technological_route",
  456. params: {
  457. title,
  458. },
  459. }).then((res) => {
  460. this.processLineTableData = res.data.data;
  461. });
  462. },
  463. back() {
  464. this.$router.go(-1);
  465. },
  466. getChangeLists(e) {},
  467. postData() {
  468. const { type } = this.$route.query;
  469. this.info.op = type == 1 || type == 4 ? "add" : "edit";
  470. let data = JSON.parse(JSON.stringify(this.info));
  471. data.technological_route_id = data.id;
  472. type == 4 ? (data.id = "") : "";
  473. let properties = [],
  474. procedure = [];
  475. data.list.forEach((element) => {
  476. element.cld.forEach((elem) => {
  477. elem.list.forEach((el) => {
  478. if (el.show) {
  479. properties.push(el.id);
  480. }
  481. });
  482. });
  483. });
  484. this.selectTags.map((v) => {
  485. procedure.push(v.id);
  486. });
  487. delete data.list;
  488. delete data.bps;
  489. this.type == 1 ? delete data.id : "";
  490. data.properties = properties;
  491. data.procedure = procedure.join(",");
  492. this.axios.post("/api/process_route_save", data).then((res) => {
  493. if (res.code == 200) {
  494. this.$Message.success(res.msg);
  495. setTimeout(() => {
  496. this.back();
  497. }, 500);
  498. }
  499. });
  500. },
  501. getData(row) {
  502. this.axios("/api/process_route_detail", { params: { id: row } }).then(
  503. (res) => {
  504. this.info = res.data;
  505. this.info.bps = this.temp_info_bps;
  506. this.selectTags = res.data.produce_list;
  507. const selectTagsId = this.selectTags.map((item) => item.id);
  508. this.info.bps.forEach((v) => {
  509. v.cld &&
  510. v.cld.length > 0 &&
  511. v.cld.forEach((z) => {
  512. z.show = selectTagsId.includes(z.id);
  513. z.cld &&
  514. z.cld.length > 0 &&
  515. z.cld.forEach((elem) => {
  516. elem.show = selectTagsId.includes(elem.id);
  517. elem.cld &&
  518. elem.cld.length > 0 &&
  519. elem.cld.forEach((ele) => {
  520. ele.show = selectTagsId.includes(ele.id);
  521. ele.cld &&
  522. ele.cld.length > 0 &&
  523. ele.cld.forEach((el) => {
  524. el.show = selectTagsId.includes(el.id);
  525. });
  526. });
  527. });
  528. });
  529. });
  530. this.process_name = res.data.technological_route_title;
  531. this.tableData = JSON.parse(JSON.stringify(this.selectTags));
  532. }
  533. );
  534. },
  535. getParts() {
  536. this.axios("/api/parts_index").then((res) => {
  537. this.partsList = res.data.data;
  538. });
  539. },
  540. editRouter() {
  541. this.show_add = true;
  542. this.handleSearchProcessLine(this.tempProcessLine.title);
  543. },
  544. changeCheck(e, item, selectArray) {
  545. this.isNewProcess = true;
  546. //复选框选中与非选中同时同步tag标签跟随操作
  547. item.show = e;
  548. if (e) {
  549. selectArray.push(item);
  550. } else {
  551. let id = item.id;
  552. let id_index = selectArray.findIndex((v) => v.id == id);
  553. selectArray.splice(id_index, 1);
  554. }
  555. },
  556. // closeTag(key, arr, row) {
  557. // //取消tag标签展示操作并同步下方的复选框ui同步
  558. // arr.splice(key, 1);
  559. // console.log(this.info);
  560. // this.info.bps.map((v) => {
  561. // v.cld.map((p) => {
  562. // p.id == row.id ? (p.show = false) : "";
  563. // console.log(p);
  564. // });
  565. // });
  566. // },
  567. closeTag(key, arr, row) {
  568. //取消tag标签展示操作并同步下方的复选框ui同步
  569. for (const key in this.info.bps) {
  570. const element = this.info.bps[key];
  571. element.cld.map((p) => {
  572. p.id == row.id ? (p.show = false) : "";
  573. p.cld &&
  574. p.cld.length > 0 &&
  575. p.cld.map((q) => {
  576. q.id == row.id ? (q.show = false) : "";
  577. q.cld &&
  578. q.cld.length > 0 &&
  579. q.cld.map((r) => {
  580. r.id == row.id ? (r.show = false) : "";
  581. r.cld &&
  582. r.cld.length > 0 &&
  583. r.cld.map((s) => {
  584. s.id == row.id ? (s.show = false) : "";
  585. });
  586. });
  587. });
  588. });
  589. }
  590. arr.splice(key, 1);
  591. },
  592. saveTableData() {
  593. if (this.isNewProcess) {
  594. let temparr = [];
  595. this.selectTags.forEach((el) => {
  596. temparr.push(el.id);
  597. });
  598. this.axios({
  599. method: "post",
  600. url: "/api/technological_route_edit",
  601. data: {
  602. id: "",
  603. title: this.info.process_route_title,
  604. procedure_id: temparr.join(","),
  605. },
  606. }).then((res) => {
  607. if (res.code == 200) {
  608. // this.$Message.success(res.msg);
  609. this.tableData = JSON.parse(JSON.stringify(this.selectTags));
  610. this.process_name = this.info.process_route_title;
  611. this.show_add_detail = false;
  612. }
  613. });
  614. } else {
  615. this.tableData = JSON.parse(JSON.stringify(this.selectTags));
  616. this.process_name = this.info.process_route_title;
  617. this.show_add_detail = false;
  618. }
  619. },
  620. handleSubmit(name) {
  621. this.$refs[name].validate((valid) => {
  622. if (valid) {
  623. this.postData();
  624. }
  625. });
  626. },
  627. changeRadio(e) {},
  628. setBoxChange(parent, child) {
  629. const { type } = this.$route.query;
  630. if (type == 3) {
  631. return;
  632. }
  633. child.show = !child.show;
  634. child.list.forEach((element) => {
  635. element.show = child.show;
  636. });
  637. },
  638. setRadioChange(parent, child) {
  639. const { type } = this.$route.query;
  640. if (type == 3) {
  641. return;
  642. }
  643. child.show = !child.show;
  644. let flag = true;
  645. parent.list.forEach((element) => {
  646. if (!element.show) {
  647. flag = false;
  648. }
  649. });
  650. parent.show = flag;
  651. // parent.cld.map(v=>v.show = false)
  652. // if(parent.select == child.id){
  653. // child.show = false;
  654. // parent.select = '';
  655. // }else{
  656. // parent.select = child.id;
  657. // child.show = true;
  658. // }
  659. this.$forceUpdate();
  660. },
  661. },
  662. components: { SlickList, SlickItem },
  663. };
  664. </script>
  665. <style lang="scss" scoped>
  666. .edit-table-log {
  667. display: flex;
  668. justify-content: space-between;
  669. align-items: center;
  670. padding-bottom: 10px;
  671. .footer-log {
  672. color: #666666;
  673. }
  674. }
  675. .hierarchy {
  676. .radio-g {
  677. padding: 10px 0;
  678. display: flex;
  679. justify-content: flex-start;
  680. align-items: center;
  681. flex-wrap: wrap;
  682. .radio-us {
  683. background: #f4f5f7;
  684. padding: 5px 20px;
  685. margin: 5px;
  686. margin-right: 18px;
  687. color: #999999;
  688. border-radius: 15px;
  689. border: 1px solid #dedede;
  690. cursor: pointer;
  691. }
  692. .radio-us-foc {
  693. color: #3764ff;
  694. background: #fff;
  695. border: 1px solid #3764ff;
  696. }
  697. .box-us {
  698. background: #f4f5f7;
  699. padding: 5px 20px;
  700. margin: 5px;
  701. margin-right: 18px;
  702. color: #999999;
  703. border-radius: 5px;
  704. border: 1px solid #dedede;
  705. cursor: pointer;
  706. }
  707. .box-us-foc {
  708. color: #3764ff;
  709. background: #fff;
  710. border: 1px solid #3764ff;
  711. }
  712. }
  713. }
  714. .vertical-center-modal {
  715. display: flex;
  716. align-items: center;
  717. justify-content: center;
  718. .ivu-modal {
  719. top: 0;
  720. }
  721. }
  722. .modal-tags {
  723. display: flex;
  724. align-items: center;
  725. }
  726. .pro-select {
  727. display: flex;
  728. padding: 10px 0;
  729. align-items: center;
  730. }
  731. // .SortableList {
  732. // display: flex;
  733. // flex-wrap: wrap;
  734. // overflow: hidden;
  735. // }
  736. .tag-modal {
  737. display: flex;
  738. align-items: center;
  739. .before {
  740. width: 20px;
  741. background: #3764ff;
  742. height: 24px;
  743. border-radius: 5px 0 0 5px;
  744. display: flex;
  745. justify-content: center;
  746. align-items: center;
  747. color: #fff;
  748. }
  749. }
  750. /deep/.ivu-modal-body {
  751. height: 700px;
  752. overflow: auto;
  753. }
  754. </style>
  755. <style lang="scss">
  756. .modal_process_route {
  757. .modal_process_route_top {
  758. display: flex;
  759. justify-content: space-around;
  760. padding: 10px 0;
  761. }
  762. }
  763. .ivu-tooltip-popper {
  764. z-index: 999999 !important;
  765. }
  766. .modal_content {
  767. display: flex;
  768. justify-content: space-around;
  769. height: 100%;
  770. .modal_content_left {
  771. max-width: 40%;
  772. min-width: 30%;
  773. border-right: 1px solid #d8d8d8;
  774. }
  775. .modal_content_right {
  776. width: 60%;
  777. max-height: 600px;
  778. padding-left: 10px;
  779. overflow: hidden;
  780. overflow-y: auto;
  781. font-size: 18px;
  782. }
  783. }
  784. .modal_process_route_detail {
  785. display: flex;
  786. justify-content: space-around;
  787. align-items: center;
  788. margin: 5px 0;
  789. }
  790. </style>