detail.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794
  1. <template>
  2. <div class="ele-body">
  3. <el-card shadow="never">
  4. <el-form
  5. label-width="120px"
  6. ref="manageForm"
  7. :model="form"
  8. :rules="rules"
  9. >
  10. <headerTitle title="基本信息">
  11. <el-button @click="cancel">返回</el-button>
  12. <el-button type="primary" @click="submit" :loading="loading"
  13. >保存
  14. </el-button>
  15. </headerTitle>
  16. <el-row :gutter="24">
  17. <el-col :span="8">
  18. <el-form-item label="分类" prop="categoryLevelName">
  19. <el-input
  20. v-model="form.categoryLevelName"
  21. @click.native="openCategory"
  22. />
  23. </el-form-item>
  24. </el-col>
  25. <el-col :span="8">
  26. <el-form-item label="编码" prop="code">
  27. <el-input
  28. v-if="ruleCode == '自定义'"
  29. v-model="form.code"
  30. readonly
  31. @click.native="openCode"
  32. :disabled="status == 0"
  33. />
  34. <el-input v-else v-model="form.code" :disabled="status == 0" />
  35. </el-form-item>
  36. </el-col>
  37. <el-col :span="8">
  38. <el-form-item label="名称" prop="name">
  39. <el-input v-model="form.name" />
  40. </el-form-item>
  41. </el-col>
  42. <el-col :span="8">
  43. <el-form-item label="图号/件号" prop="imgCode">
  44. <el-input v-model="form.imgCode" />
  45. </el-form-item>
  46. </el-col>
  47. <el-col :span="8">
  48. <el-form-item label="生产类型" prop="produceType">
  49. <el-select
  50. style="width: 100%"
  51. v-model="form.produceType"
  52. filterable
  53. multiple
  54. >
  55. <el-option
  56. v-for="item in dictList"
  57. :key="item.value"
  58. :value="item.value"
  59. :label="item.label"
  60. ></el-option>
  61. </el-select>
  62. </el-form-item>
  63. </el-col>
  64. <el-col
  65. :span="8"
  66. v-if="[1, 23, 9, 28].includes(Number(categoryLevelPathId))"
  67. >
  68. <el-form-item label="加工类型" prop="isConsumable">
  69. <el-select
  70. v-model="form.isConsumable"
  71. size="small"
  72. style="width: 100%"
  73. >
  74. <el-option :value="1" label="批量"></el-option>
  75. <el-option :value="0" label="单件"></el-option>
  76. </el-select>
  77. </el-form-item>
  78. </el-col>
  79. <el-col :span="8">
  80. <el-form-item label="牌号" prop="brandNum">
  81. <el-input v-model="form.brandNum" />
  82. </el-form-item>
  83. </el-col>
  84. <el-col :span="8">
  85. <el-form-item label="型号" prop="modelType">
  86. <el-input v-model="form.modelType" />
  87. </el-form-item>
  88. </el-col>
  89. <el-col :span="8">
  90. <el-form-item label="规格" prop="specification">
  91. <el-input v-model="form.specification" />
  92. </el-form-item>
  93. </el-col>
  94. <el-col :span="8">
  95. <el-form-item label="计量单位" prop="measuringUnit">
  96. <DictSelection
  97. dictName="计量单位"
  98. clearable
  99. v-model="form.measuringUnit"
  100. >
  101. </DictSelection>
  102. </el-form-item>
  103. </el-col>
  104. <el-col :span="8">
  105. <el-form-item label="重量单位" prop="weightUnit">
  106. <DictSelection
  107. dictName="重量单位"
  108. clearable
  109. v-model="form.weightUnit"
  110. >
  111. </DictSelection>
  112. </el-form-item>
  113. </el-col>
  114. <el-col :span="8">
  115. <el-form-item label="包装单位" prop="packingUnit">
  116. <DictSelection
  117. dictName="包装单位"
  118. clearable
  119. v-model="form.packingUnit"
  120. >
  121. </DictSelection>
  122. </el-form-item>
  123. </el-col>
  124. <el-col :span="8">
  125. <el-form-item label="体积">
  126. <div class="form-line">
  127. <el-input v-model="form.volume" />
  128. <DictSelection
  129. class="line-select"
  130. dictName="体积单位"
  131. clearable
  132. v-model="form.volumeUnit"
  133. >
  134. </DictSelection>
  135. </div>
  136. </el-form-item>
  137. </el-col>
  138. <el-col :span="8">
  139. <el-form-item label="毛重">
  140. <div class="form-line">
  141. <el-input v-model="form.roughWeight" />
  142. </div>
  143. </el-form-item>
  144. </el-col>
  145. <el-col :span="8">
  146. <el-form-item label="净重">
  147. <div class="form-line">
  148. <el-input v-model="form.netWeight" />
  149. </div>
  150. </el-form-item>
  151. </el-col>
  152. <el-col :span="8">
  153. <el-form-item label="级别">
  154. <template>
  155. <el-select
  156. style="width: 100%"
  157. v-model="form.level"
  158. placeholder="请选择"
  159. >
  160. <el-option
  161. v-for="item in levelOptions"
  162. :label="item.label"
  163. :value="item.value"
  164. :key="item.value"
  165. >
  166. </el-option>
  167. </el-select>
  168. </template>
  169. </el-form-item>
  170. </el-col>
  171. <el-col :span="8" v-for="(f, idx) in fileList" :key="idx">
  172. <el-form-item :label="f.label">
  173. <template>
  174. <div class="form-line">
  175. <component
  176. :is="f.tagType"
  177. v-model="form.extField[f.prop]"
  178. :disabled="f.extAttribute?.disabled"
  179. clearable
  180. :isProhibit="
  181. f.modelType == 'dict' ? f.extAttribute?.disabled : false
  182. "
  183. :dictName="f.modelType == 'dict' ? f.label : ''"
  184. ></component>
  185. </div>
  186. </template>
  187. </el-form-item>
  188. </el-col>
  189. </el-row>
  190. </el-form>
  191. </el-card>
  192. <!-- 自定义编码 -->
  193. <CodeDialog
  194. ref="codeRefs"
  195. v-if="codeShow"
  196. @close="codeShow = false"
  197. @chooseCode="chooseCode"
  198. ></CodeDialog>
  199. <!-- 分类选择弹窗 -->
  200. <CategoryDialog ref="categoryRefs" @chooseCategory="confirmCategory" />
  201. <!-- 仓储配置 -->
  202. <WarehouseInfo
  203. ref="warehouseRefs"
  204. :form="categoryWms"
  205. :measuringUnit="form.measuringUnit"
  206. :packageDispositionVOList="packageDispositionVOList"
  207. @change="changePackagingSpecification"
  208. />
  209. <!-- 生产信息 -->
  210. <ProductionInfo ref="productionRefs" :form="categoryMes" />
  211. <!-- 计划 -->
  212. <PlanInfo ref="planRefs" :form="categoryAps" />
  213. <!-- 质量配置 -->
  214. <QualityInfo ref="qualityRefs" :form="categoryQms" />
  215. <!-- 舟皿信息 -->
  216. <BoatInfo ref="qualityRefs" :form="categoryPallet" />
  217. <!-- 周转车信息 -->
  218. <TurnoverInfo ref="turnoverRefs" :form="categoryVehicle" />
  219. <!-- 模具信息 -->
  220. <MoldInfo ref="moldRefs" :form="categoryMold" />
  221. <!-- 备注信息 -->
  222. <RemarkInfo ref="remarkRefs" :form="remarkform" />
  223. <!-- 关联信息 -->
  224. <linkMsg
  225. ref="linkMsgRef"
  226. :id="$route.query.id"
  227. :categoryLevelId="form.categoryLevelId"
  228. :categoryLevelGroupId="form.categoryLevelGroupId"
  229. />
  230. </div>
  231. </template>
  232. <script>
  233. import GroupDialog from './components/GroupDialog.vue';
  234. import CodeDialog from './components/codeDialog.vue';
  235. import CategoryDialog from './components/CategoryDialog.vue';
  236. import WarehouseInfo from './components/WarehouseInfo.vue';
  237. import ProcureInfo from './components/ProcureInfo.vue';
  238. import ProductionInfo from './components/ProductionInfo.vue';
  239. import PlanInfo from './components/PlanInfo.vue';
  240. import SalesInfo from './components/SalesInfo.vue';
  241. import QualityInfo from './components/QualityInfo.vue';
  242. import BoatInfo from './components/BoatInfo.vue';
  243. import TurnoverInfo from './components/TurnoverInfo.vue';
  244. import MoldInfo from './components/MoldInfo.vue';
  245. import RemarkInfo from './components/RemarkInfo.vue';
  246. import deptSelect from '@/components/CommomSelect/dept-select.vue';
  247. import personSelect from '@/components/CommomSelect/person-select.vue';
  248. import linkMsg from './components/link-msg.vue';
  249. import { getDetails } from '@/api/classifyManage/itemInformation';
  250. import { getByCode } from '@/api/system/dictionary-data';
  251. import { getCode, rootCategoryCode, fieldModel } from '@/api/codeManagement';
  252. import { addMaterial } from '@/api/material/list.js';
  253. import { deepClone } from '@/utils/index';
  254. import { finishPageTab, reloadPageTab } from '@/utils/page-tab-util';
  255. export default {
  256. name: 'product',
  257. components: {
  258. linkMsg,
  259. GroupDialog,
  260. deptSelect,
  261. personSelect,
  262. WarehouseInfo,
  263. ProcureInfo,
  264. ProductionInfo,
  265. PlanInfo,
  266. SalesInfo,
  267. QualityInfo,
  268. BoatInfo,
  269. TurnoverInfo,
  270. MoldInfo,
  271. RemarkInfo,
  272. CategoryDialog,
  273. CodeDialog
  274. },
  275. data() {
  276. return {
  277. packagingSpecificationList: [],
  278. loading: false,
  279. levelOptions: [
  280. {
  281. label: '特级',
  282. value: '特级'
  283. },
  284. {
  285. label: '一级',
  286. value: '一级'
  287. },
  288. {
  289. label: '二级',
  290. value: '二级'
  291. },
  292. {
  293. label: '三级',
  294. value: '三级'
  295. }
  296. ],
  297. form: {
  298. categoryLevelGroupName: '',
  299. categoryLevelName: '',
  300. isConsumable: 1,
  301. extField: {}
  302. },
  303. remarkform: {
  304. remarkAttach: []
  305. },
  306. categoryAps: {},
  307. categoryMes: {},
  308. categoryMold: {},
  309. categoryPallet: {},
  310. categoryQms: {},
  311. categoryVehicle: {},
  312. categoryWms: {
  313. isUnpack: 1
  314. },
  315. packageDispositionVOList: [],
  316. categoryLevelPathId: null,
  317. dictList: [],
  318. fileList: [],
  319. // 表单验证规则
  320. rules: {
  321. categoryLevelGroupName: [
  322. { required: true, message: '请选择所属物料组', trigger: 'change' }
  323. ],
  324. code: [{ required: true, message: '请输入编码', trigger: 'blur' }],
  325. name: [{ required: true, message: '请输入名称', trigger: 'blur' }],
  326. produceType: [
  327. { required: true, message: '请选择生产类型', trigger: 'change' }
  328. ],
  329. categoryLevelName: [
  330. { required: true, message: '请选择所属分类', trigger: 'change' }
  331. ],
  332. measuringUnit: [
  333. { required: true, message: '请选择计量单位', trigger: 'change' }
  334. ],
  335. weightUnit: [
  336. { required: true, message: '请选择重量单位', trigger: 'change' }
  337. ],
  338. packingUnit: [
  339. { required: true, message: '请选择包装单位', trigger: 'change' }
  340. ],
  341. netWeight: [
  342. { required: true, message: '请输入净重', trigger: 'blur' }
  343. ]
  344. },
  345. PathInfo: {},
  346. id: null,
  347. ruleCode: null,
  348. codeShow: false,
  349. status: null
  350. };
  351. },
  352. watch: {
  353. '$route.query.id': {
  354. handler(id) {
  355. if (id) {
  356. this._getDetails();
  357. } else {
  358. this.form = {
  359. categoryLevelGroupName: '',
  360. // categoryLevelName: '',
  361. isConsumable: 1,
  362. extField: {}
  363. };
  364. this.remarkform = {
  365. remarkAttach: []
  366. };
  367. this.categoryAps = {};
  368. this.categoryMes = {};
  369. this.categoryMold = {};
  370. this.categoryPallet = {};
  371. this.categoryQms = {};
  372. this.categoryVehicle = {};
  373. this.categoryWms = {
  374. isUnpack: 1
  375. };
  376. this.packageDispositionVOList = [];
  377. this.categoryLevelPathId = null;
  378. this.dictList = [];
  379. this.fileList = [];
  380. }
  381. },
  382. deep: true,
  383. immediate: true
  384. }
  385. },
  386. async created() {
  387. this.$set(
  388. this.form,
  389. 'categoryLevelId',
  390. this.$route.query.categoryLevelId
  391. );
  392. this.$set(
  393. this.form,
  394. 'categoryLevelName',
  395. this.$route.query.categoryLevelName
  396. );
  397. this.$set(
  398. this.form,
  399. 'categoryLevelPath',
  400. this.$route.query.categoryLevelPath
  401. );
  402. this.$set(
  403. this.form,
  404. 'categoryLevelPathId',
  405. this.$route.query.categoryLevelPathId
  406. );
  407. this.ruleCode = this.$route.query.ruleCode;
  408. if (this.ruleCode && this.ruleCode != '自定义' && this.status != 0) {
  409. const code = await getCode(this.ruleCode);
  410. this.$set(this.form, 'code', code);
  411. }
  412. this.getFieldModel();
  413. this.status = this.$route.query.status;
  414. // if (this.$route.query.id) {
  415. // this._getDetails();
  416. // }
  417. this.getDictList('productionType');
  418. },
  419. methods: {
  420. changePackagingSpecification(val) {
  421. this.packagingSpecificationList = val;
  422. },
  423. async _getDetails() {
  424. const data = await getDetails(this.$route.query.id);
  425. const info = deepClone(data);
  426. this.form = {
  427. ...info.category
  428. };
  429. this.categoryLevelPathId = info.category.categoryLevelPathIdParent;
  430. this.judgeSet(info);
  431. if (this.status == 1) {
  432. rootCategoryCode(this.categoryLevelPathId).then((res) => {
  433. this.$set(this.form, 'code', res);
  434. });
  435. this.form.createTime = null
  436. }
  437. this.$forceUpdate();
  438. },
  439. // 判断字段类型并赋值
  440. judgeSet(info) {
  441. console.log('info-------', info);
  442. if (typeof info.categoryAps == 'string') {
  443. this.categoryAps = {};
  444. } else {
  445. this.categoryAps = info.categoryAps;
  446. }
  447. if (typeof info.categoryMes == 'string') {
  448. this.categoryMes = {};
  449. } else {
  450. this.categoryMes = info.categoryMes;
  451. }
  452. if (typeof info.categoryMold == 'string') {
  453. this.categoryMold = {};
  454. } else {
  455. this.categoryMold = info.categoryMold;
  456. }
  457. if (typeof info.categoryPallet == 'string') {
  458. this.categoryPallet = {};
  459. } else {
  460. this.categoryPallet = info.categoryPallet;
  461. }
  462. if (typeof info.categoryQms == 'string') {
  463. this.categoryQms = {};
  464. } else {
  465. this.categoryQms = info.categoryQms;
  466. }
  467. if (typeof info.categoryVehicle == 'string') {
  468. this.categoryVehicle = {};
  469. } else {
  470. this.categoryVehicle = info.categoryVehicle;
  471. }
  472. if (typeof info.categoryWms == 'string') {
  473. this.categoryWms = {};
  474. } else {
  475. this.categoryWms = info.categoryWms;
  476. }
  477. if (typeof info.packageDispositionVOList == 'string') {
  478. this.packageDispositionVOList = [];
  479. } else {
  480. this.packageDispositionVOList = info.packageDispositionVOList;
  481. console.log(
  482. 'this.packageDispositionVOList---!!!----',
  483. this.packageDispositionVOList
  484. );
  485. }
  486. },
  487. getFieldModel() {
  488. fieldModel({ relevance: 't_main_category' }).then((res) => {
  489. this.fileList = res;
  490. this.fileList.forEach((f) => {
  491. this.$set(this.form.extField, f.prop, ''); // 初始化动态模型属性
  492. });
  493. });
  494. },
  495. // 确定分类
  496. async confirmCategory(node, title, PathInfo, ruleCode) {
  497. if (this.status != 0) {
  498. this.$set(this.form, 'code', null);
  499. }
  500. this.categoryLevelPathId = PathInfo.categoryLevelPathId.split(',')[0];
  501. if (title == '选择产品分类') {
  502. this.$set(this.form, 'productCategoryLevelName', node.name);
  503. this.$set(this.form, 'productCategoryLevelId', node.id);
  504. } else {
  505. this.$set(this.form, 'categoryLevelName', node.name);
  506. this.$set(this.form, 'categoryLevelId', node.id);
  507. this.$set(this.form, 'categoryLevelPath', node.name);
  508. this.$set(this.form, 'categoryLevelPathId', node.id);
  509. this.PathInfo = PathInfo;
  510. this.ruleCode = ruleCode;
  511. if (ruleCode && ruleCode != '自定义' && this.status != 0) {
  512. const code = await getCode(ruleCode);
  513. this.$set(this.form, 'code', code);
  514. }
  515. }
  516. this.$forceUpdate();
  517. },
  518. async getDictList(code) {
  519. let { data: res } = await getByCode(code);
  520. this.dictList = res.map((item) => {
  521. let values = Object.keys(item);
  522. return {
  523. value: Number(values[0]),
  524. label: item[values[0]]
  525. };
  526. });
  527. },
  528. openCategory() {
  529. this.$refs.categoryRefs.open();
  530. },
  531. openCode() {
  532. this.codeShow = true;
  533. },
  534. chooseCode(code) {
  535. this.$set(this.form, 'code', code);
  536. this.codeShow = false;
  537. this.$forceUpdate();
  538. },
  539. cancel() {
  540. finishPageTab();
  541. this.$router.go(-1);
  542. },
  543. // 保存
  544. submit() {
  545. this.$refs.manageForm.validate(async (valid) => {
  546. let productionValid = await this.$refs.productionRefs.getFormValid();
  547. if (!valid || !productionValid) {
  548. return false;
  549. }
  550. let packageDispositionVOList = [];
  551. if (this.packagingSpecificationList.length > 0) {
  552. packageDispositionVOList = this.packagingSpecificationList.map(
  553. (item) => {
  554. let obj = {
  555. code: item.code,
  556. name: item.name
  557. };
  558. return [
  559. {
  560. ...obj,
  561. id: item.id0,
  562. sort: 0,
  563. status: item.status,
  564. packageCell: 1,
  565. packageUnit: item.packageUnit,
  566. conversionUnit: item.packageUnit
  567. },
  568. {
  569. ...obj,
  570. id: item.id1,
  571. sort: 1,
  572. packageCell: item.minPackageCell,
  573. packageUnit: item.packageUnit,
  574. conversionUnit: item.minConversionUnit,
  575. status: item.status
  576. },
  577. {
  578. ...obj,
  579. id: item.id2,
  580. sort: 2,
  581. packageCell: item.inPackageCell,
  582. packageUnit: item.minConversionUnit,
  583. conversionUnit: item.inConversionUnit,
  584. status: item.status
  585. },
  586. {
  587. ...obj,
  588. id: item.id3,
  589. sort: 3,
  590. packageCell: item.outPackageCell,
  591. packageUnit: item.inConversionUnit,
  592. conversionUnit: item.outConversionUnit,
  593. status: item.status
  594. }
  595. ];
  596. }
  597. );
  598. let packagingSpecificationList =
  599. this.packagingSpecificationList.filter(
  600. (item) => item.status == 1
  601. );
  602. this.form.extField.packingSpecification = packagingSpecificationList
  603. .map((item) => {
  604. return [
  605. `${item.minPackageCell}${item.packageUnit}/${item.minConversionUnit}`,
  606. `${item.inPackageCell}${item.minConversionUnit}/${item.inConversionUnit}`,
  607. `${item.outPackageCell}${item.inConversionUnit}/${item.outConversionUnit}`
  608. ];
  609. })
  610. .flat()
  611. .join(',');
  612. } else {
  613. this.form.extField.packingSpecification = '';
  614. }
  615. this.loading = true;
  616. // const imgList = this.remarkform.imgList;
  617. // const arr = [];
  618. // if (imgList.length) {
  619. // imgList.map((item) => {
  620. // arr.push(item.storePath);
  621. // });
  622. // this.form.remarkAttach = arr.join(',');
  623. // }
  624. // this.form.remark = this.remarkform.remark
  625. // ? this.remarkform.remark
  626. // : '';
  627. const data = {
  628. categoryWms: this.categoryWms,
  629. categoryAps: this.categoryAps,
  630. categoryMes: this.categoryMes,
  631. categoryMold: this.categoryMold,
  632. categoryPallet: this.categoryPallet,
  633. categoryQms: this.categoryQms,
  634. categoryVehicle: this.categoryVehicle,
  635. category: {
  636. ...this.form,
  637. ...this.remarkform,
  638. ...this.PathInfo
  639. },
  640. packageDispositionVOList: packageDispositionVOList.flat()
  641. };
  642. if (this.$route.query.status == 1) {
  643. data.category.id = null;
  644. data.categoryWms.id = null;
  645. data.categoryAps.id = null;
  646. data.categoryMes.id = null;
  647. data.categoryMold.id = null;
  648. data.categoryPallet.id = null;
  649. data.categoryQms.id = null;
  650. data.categoryVehicle.id = null;
  651. data.packageDispositionVOList = data.packageDispositionVOList.map(
  652. (item) => {
  653. return {
  654. ...item,
  655. id: null
  656. };
  657. }
  658. );
  659. }
  660. addMaterial(data)
  661. .then((msg) => {
  662. this.loading = false;
  663. this.$message.success(msg);
  664. reloadPageTab({ fullPath: '/material/product' });
  665. this.$router.go(-1);
  666. })
  667. .catch((e) => {
  668. this.loading = false;
  669. });
  670. });
  671. }
  672. }
  673. };
  674. </script>
  675. <style lang="scss" scoped>
  676. .ele-page-header {
  677. border: none;
  678. }
  679. .body-top {
  680. display: flex;
  681. align-items: center;
  682. justify-content: space-between;
  683. background: #fff;
  684. .top-left {
  685. display: flex;
  686. align-items: center;
  687. justify-content: flex-start;
  688. margin-left: -25px;
  689. .el-form-item {
  690. margin-bottom: 0;
  691. }
  692. }
  693. }
  694. .divider {
  695. margin: 20px 0;
  696. .title {
  697. display: flex;
  698. align-items: center;
  699. margin-bottom: 10px;
  700. div {
  701. width: 8px;
  702. height: 20px;
  703. margin-right: 10px;
  704. }
  705. span {
  706. font-size: 20px;
  707. }
  708. }
  709. .ele-width {
  710. width: 100%;
  711. height: 2px;
  712. }
  713. }
  714. .form-line {
  715. display: flex;
  716. align-items: center;
  717. justify-content: space-between;
  718. .line-select {
  719. margin-left: 15px;
  720. }
  721. }
  722. </style>