vehicleModel.vue 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766
  1. <template>
  2. <div class="vehicleModelPanel">
  3. <model-list
  4. ref="modelList"
  5. class="modelList"
  6. @showInfo="showInfo"
  7. @addOne="addOne"
  8. @delOne="delOne"
  9. :getListApi="getListApi"
  10. :showName="showName"
  11. ></model-list>
  12. <div class="contentPanel">
  13. <el-form
  14. ref="form"
  15. :model="form"
  16. :rules="rules"
  17. label-width="160px"
  18. >
  19. <div class="inputBox flexBox">
  20. <span class="label">车辆ID</span>
  21. <div>{{ form.vehicleCode }}</div>
  22. </div>
  23. <div class="flexBox">
  24. <el-form-item label="车辆名称:" prop="vehicleName">
  25. <el-input
  26. placeholder="请输入"
  27. maxlength="60"
  28. v-autoTrim="{ obj: form, key: 'vehicleName' }"
  29. v-model="form.vehicleName"
  30. >
  31. </el-input>
  32. </el-form-item>
  33. <el-form-item label="车辆描述:" prop="description">
  34. <el-input
  35. v-autoTrim="{ obj: form, key: 'description' }"
  36. v-model="form.description"
  37. placeholder="请输入"
  38. maxlength="200"
  39. ></el-input>
  40. </el-form-item>
  41. <el-form-item label="车辆模型:" prop="modelLabel">
  42. <el-cascader
  43. ref="cascader"
  44. v-model="form.modelLabel"
  45. :options="modelLabelList"
  46. :props="props"
  47. @change="modelLabelChange"
  48. ></el-cascader>
  49. </el-form-item>
  50. <!-- <el-form-item label="车辆类型:" prop="vehicleType">
  51. <el-select v-model="form.vehicleType">
  52. <el-option
  53. v-for="item in vehicleTypeList"
  54. :label="item.caption"
  55. :value="item.code"
  56. :key="item.code"
  57. ></el-option>
  58. </el-select>
  59. </el-form-item> -->
  60. <!-- <el-form-item label="车辆型号:" prop="vehicleModel">
  61. <el-input
  62. placeholder="请输入"
  63. maxlength="60"
  64. v-autoTrim="{ obj: form, key: 'vehicleModel' }"
  65. v-model="form.vehicleModel"
  66. >
  67. </el-input>
  68. <el-select v-model="form.vehicleModel" disabled>
  69. <el-option
  70. v-for="item in vehicleModelList"
  71. :label="item.caption"
  72. :value="item.code"
  73. :key="item.code"
  74. ></el-option>
  75. </el-select>
  76. </el-form-item> -->
  77. <!-- <el-form-item label="车辆颜色:" prop="vehicleColour">
  78. <el-input
  79. placeholder="请输入"
  80. maxlength="60"
  81. v-autoTrim="{ obj: form, key: 'vehicleColour' }"
  82. v-model="form.vehicleColour"
  83. >
  84. </el-input>
  85. <el-select v-model="form.vehicleColour" disabled>
  86. <el-option
  87. v-for="item in vehicleColourList"
  88. :label="item.caption"
  89. :value="item.code"
  90. :key="item.code"
  91. ></el-option>
  92. </el-select>
  93. </el-form-item> -->
  94. </div>
  95. <div class="titlePanel">
  96. <div class="titlePanelBor">控制参数</div>
  97. </div>
  98. <div class="flexBox">
  99. <el-form-item label="最大速度(km/h):" prop="maxSpeed">
  100. <el-input
  101. placeholder="请输入"
  102. maxlength="12"
  103. v-autoTrim="{ obj: form, key: 'maxSpeed' }"
  104. v-model="form.maxSpeed"
  105. >
  106. </el-input>
  107. </el-form-item>
  108. <el-form-item label="发动机功率(kW):" prop="enginePower">
  109. <el-input
  110. placeholder="请输入"
  111. maxlength="12"
  112. v-autoTrim="{ obj: form, key: 'enginePower' }"
  113. v-model="form.enginePower"
  114. >
  115. </el-input>
  116. </el-form-item>
  117. <el-form-item
  118. label="最大减速度(m/s²):"
  119. prop="maxDeceleration"
  120. >
  121. <el-input
  122. placeholder="请输入"
  123. maxlength="12"
  124. v-autoTrim="{ obj: form, key: 'maxDeceleration' }"
  125. v-model="form.maxDeceleration"
  126. >
  127. </el-input>
  128. </el-form-item>
  129. <el-form-item
  130. label="最大转向角度(deg):"
  131. prop="maxSteeringAngle"
  132. >
  133. <el-input
  134. placeholder="请输入"
  135. maxlength="12"
  136. v-autoTrim="{ obj: form, key: 'maxSteeringAngle' }"
  137. v-model="form.maxSteeringAngle"
  138. >
  139. </el-input>
  140. </el-form-item>
  141. <el-form-item label="驱动方式:" prop="wheelDrive">
  142. <el-select v-model="form.wheelDrive">
  143. <el-option
  144. v-for="item in wheelDriveList"
  145. :label="item.caption"
  146. :value="item.code"
  147. :key="item.code"
  148. ></el-option>
  149. </el-select>
  150. </el-form-item>
  151. </div>
  152. <div class="titlePanel">
  153. <div class="titlePanelBor">效率参数</div>
  154. </div>
  155. <div class="flexBox">
  156. <el-form-item label="总效率:" prop="overallEfficiency">
  157. <el-input
  158. placeholder="请输入"
  159. maxlength="9"
  160. v-autoTrim="{ obj: form, key: 'overallEfficiency' }"
  161. v-model="form.overallEfficiency"
  162. >
  163. </el-input>
  164. </el-form-item>
  165. <el-form-item
  166. label="前表面有效面积(㎡):"
  167. prop="frontSurfaceEffective"
  168. >
  169. <el-input
  170. placeholder="请输入"
  171. maxlength="12"
  172. v-autoTrim="{
  173. obj: form,
  174. key: 'frontSurfaceEffective',
  175. }"
  176. v-model="form.frontSurfaceEffective"
  177. >
  178. </el-input>
  179. </el-form-item>
  180. <el-form-item
  181. label="空气阻力系数:"
  182. prop="airDragCoefficient"
  183. >
  184. <el-input
  185. placeholder="请输入"
  186. maxlength="9"
  187. v-autoTrim="{
  188. obj: form,
  189. key: 'airDragCoefficient',
  190. }"
  191. v-model="form.airDragCoefficient"
  192. >
  193. </el-input>
  194. </el-form-item>
  195. <el-form-item
  196. label="滚动阻力系数:"
  197. prop="rollingResistanceCoefficient"
  198. >
  199. <el-input
  200. placeholder="请输入"
  201. maxlength="9"
  202. v-autoTrim="{
  203. obj: form,
  204. key: 'rollingResistanceCoefficient',
  205. }"
  206. v-model="form.rollingResistanceCoefficient"
  207. >
  208. </el-input>
  209. </el-form-item>
  210. </div>
  211. <div class="titlePanel">
  212. <div class="titlePanelBor">几何参数</div>
  213. </div>
  214. <div class="flexBox">
  215. <el-form-item label="车轮直径(m):" prop="wheelDiameter">
  216. <el-input
  217. placeholder="请输入"
  218. maxlength="12"
  219. v-autoTrim="{ obj: form, key: 'wheelDiameter' }"
  220. v-model="form.wheelDiameter"
  221. >
  222. </el-input>
  223. </el-form-item>
  224. <el-form-item label="车前距(m):" prop="frontDistance">
  225. <el-input
  226. placeholder="请输入"
  227. maxlength="12"
  228. v-autoTrim="{ obj: form, key: 'frontDistance' }"
  229. v-model="form.frontDistance"
  230. >
  231. </el-input>
  232. </el-form-item>
  233. <el-form-item label="车后距(m):" prop="rearDistance">
  234. <el-input
  235. placeholder="请输入"
  236. maxlength="12"
  237. v-autoTrim="{ obj: form, key: 'rearDistance' }"
  238. v-model="form.rearDistance"
  239. >
  240. </el-input>
  241. </el-form-item>
  242. <el-form-item label="车左距(m):" prop="leftDistance">
  243. <el-input
  244. placeholder="请输入"
  245. maxlength="12"
  246. v-autoTrim="{ obj: form, key: 'leftDistance' }"
  247. v-model="form.leftDistance"
  248. >
  249. </el-input>
  250. </el-form-item>
  251. <el-form-item label="车右距(m):" prop="rightDistance">
  252. <el-input
  253. placeholder="请输入"
  254. maxlength="12"
  255. v-autoTrim="{ obj: form, key: 'rightDistance' }"
  256. v-model="form.rightDistance"
  257. >
  258. </el-input>
  259. </el-form-item>
  260. <el-form-item label="车高(m):" prop="heightDistance">
  261. <el-input
  262. placeholder="请输入"
  263. maxlength="12"
  264. v-autoTrim="{ obj: form, key: 'heightDistance' }"
  265. v-model="form.heightDistance"
  266. >
  267. </el-input>
  268. </el-form-item>
  269. <el-form-item label="轴距(m):" prop="wheelbase">
  270. <el-input
  271. placeholder="请输入"
  272. maxlength="12"
  273. v-autoTrim="{ obj: form, key: 'wheelbase' }"
  274. v-model="form.wheelbase"
  275. >
  276. </el-input>
  277. </el-form-item>
  278. <el-form-item label="质量(kg):" prop="mass">
  279. <el-input
  280. placeholder="请输入"
  281. maxlength="12"
  282. v-autoTrim="{ obj: form, key: 'mass' }"
  283. v-model="form.mass"
  284. >
  285. </el-input>
  286. </el-form-item>
  287. </div>
  288. <div class="titlePanel">
  289. <div class="titlePanelBor">视图</div>
  290. </div>
  291. <div class="modelBox">
  292. <img v-show="modelImgSrc" :src="modelImgSrc" width="100%" />
  293. </div>
  294. </el-form>
  295. <div class="btns">
  296. <!-- 新增和私有才能修改和保存 -->
  297. <!-- 私有才能分享 -->
  298. <!-- share有值 才能另存为 -->
  299. <el-button
  300. type="primary"
  301. v-show="form.share === '0' || form.share === ''"
  302. @click="save(false)"
  303. >保存</el-button
  304. >
  305. <el-button
  306. type="primary"
  307. v-show="form.share === '0'"
  308. @click="share"
  309. >分享</el-button
  310. >
  311. <el-button
  312. type="primary"
  313. v-show="form.share === '0' || form.share === '1'"
  314. @click="save(true)"
  315. >另存为</el-button
  316. >
  317. <el-button type="primary" plain @click="cancel">取消</el-button>
  318. </div>
  319. </div>
  320. </div>
  321. </template>
  322. <script>
  323. import modelList from "./components/modelList.vue";
  324. import { mapState } from "vuex";
  325. export default {
  326. name: "vehicleModel", // 车辆模型
  327. components: { modelList },
  328. data() {
  329. // 校验非负且最多4位小数
  330. let validateNum = (rule, value, callback) => {
  331. !/^(0|[1-9][0-9]*)(\.\d{1,4})?$/.test(value) &&
  332. callback(new Error(rule.message));
  333. callback();
  334. };
  335. // 校验不大于1
  336. let validateNoMore1 = (rule, value, callback) => {
  337. if (value > 1) {
  338. callback(new Error(rule.message));
  339. return;
  340. }
  341. callback();
  342. };
  343. return {
  344. getListApi: this.$api.modelLibrary.getVehicleList, // 获取列表api
  345. showName: "vehicleName",
  346. typeList: [],
  347. // imgSrc: require("@/assets/common/image/car.png"),
  348. form: {
  349. vehicleCode: "", // 车辆ID
  350. vehicleName: "", // 车辆名称
  351. description: "", // 车辆描述
  352. // vehicleType: "", // 车辆类型
  353. // vehicleModel: "", // 车辆型号
  354. // vehicleColour: "", // 车辆颜色
  355. modelLabel: [], // 车辆模型
  356. maxSpeed: "", // 最大速度
  357. enginePower: "", // 发动机功率
  358. maxDeceleration: "", // 最大减速度
  359. maxSteeringAngle: "", // 最大转角
  360. wheelDrive: "", // 驱动方式
  361. overallEfficiency: "", // 总效率
  362. frontSurfaceEffective: "", // 前表面有效面积
  363. airDragCoefficient: "", // 空气阻力系数
  364. rollingResistanceCoefficient: "", // 滚动阻力系数
  365. wheelDiameter: "", // 车轮直径
  366. frontDistance: "", // 车前距
  367. rearDistance: "", // 车后距
  368. leftDistance: "", // 车左距
  369. rightDistance: "", // 车右距
  370. heightDistance: "", // 车高
  371. wheelbase: "", // 轴距
  372. mass: "", // 质量
  373. share: "", // 分享
  374. // vehicleImage: "", // 对应的图片相对地址
  375. id: "",
  376. vehicleFrontView:"", // 对应的图片相对地址
  377. vehicleTopView:"", // 对应的图片相对地址
  378. },
  379. vehicleTypeList: [],
  380. vehicleModelList: [],
  381. vehicleColourList: [],
  382. wheelDriveList: [],
  383. rules: {
  384. vehicleName: [
  385. { required: true, message: "请输入", trigger: "blur" },
  386. ],
  387. description: [
  388. { required: true, message: "请输入", trigger: "blur" },
  389. ],
  390. // vehicleModel: [
  391. // { required: true, message: "请输入", trigger: "blur" },
  392. // ],
  393. // vehicleColour: [
  394. // { required: true, message: "请输入", trigger: "blur" },
  395. // ],
  396. maxSpeed: [
  397. { required: true, message: "请输入", trigger: "blur" },
  398. {
  399. validator: validateNum,
  400. message: "请输入最多带有4位小数的非负数",
  401. trigger: ["blur"],
  402. },
  403. ],
  404. enginePower: [
  405. { required: true, message: "请输入", trigger: "blur" },
  406. {
  407. validator: validateNum,
  408. message: "请输入最多带有4位小数的非负数",
  409. trigger: ["blur"],
  410. },
  411. ],
  412. maxDeceleration: [
  413. { required: true, message: "请输入", trigger: "blur" },
  414. {
  415. validator: validateNum,
  416. message: "请输入最多带有4位小数的非负数",
  417. trigger: ["blur"],
  418. },
  419. ],
  420. maxSteeringAngle: [
  421. { required: true, message: "请输入", trigger: "blur" },
  422. {
  423. validator: validateNum,
  424. message: "请输入最多带有4位小数的非负数",
  425. trigger: ["blur"],
  426. },
  427. ],
  428. overallEfficiency: [
  429. { required: true, message: "请输入", trigger: "blur" },
  430. {
  431. validator: validateNoMore1,
  432. message: "请输入不大于1的非负数",
  433. trigger: ["blur"],
  434. },
  435. {
  436. validator: validateNum,
  437. message: "请输入最多带有4位小数的非负数",
  438. trigger: ["blur"],
  439. },
  440. ],
  441. frontSurfaceEffective: [
  442. { required: true, message: "请输入", trigger: "blur" },
  443. {
  444. validator: validateNum,
  445. message: "请输入最多带有4位小数的非负数",
  446. trigger: ["blur"],
  447. },
  448. ],
  449. airDragCoefficient: [
  450. { required: true, message: "请输入", trigger: "blur" },
  451. {
  452. validator: validateNoMore1,
  453. message: "请输入不大于1的非负数",
  454. trigger: ["blur"],
  455. },
  456. {
  457. validator: validateNum,
  458. message: "请输入最多带有4位小数的非负数",
  459. trigger: ["blur"],
  460. },
  461. ],
  462. rollingResistanceCoefficient: [
  463. { required: true, message: "请输入", trigger: "blur" },
  464. {
  465. validator: validateNoMore1,
  466. message: "请输入不大于1的非负数",
  467. trigger: ["blur"],
  468. },
  469. {
  470. validator: validateNum,
  471. message: "请输入最多带有4位小数的非负数",
  472. trigger: ["blur"],
  473. },
  474. ],
  475. wheelDiameter: [
  476. { required: true, message: "请输入", trigger: "blur" },
  477. {
  478. validator: validateNum,
  479. message: "请输入最多带有4位小数的非负数",
  480. trigger: ["blur"],
  481. },
  482. ],
  483. frontDistance: [
  484. { required: true, message: "请输入", trigger: "blur" },
  485. {
  486. validator: validateNum,
  487. message: "请输入最多带有4位小数的非负数",
  488. trigger: ["blur"],
  489. },
  490. ],
  491. rearDistance: [
  492. { required: true, message: "请输入", trigger: "blur" },
  493. {
  494. validator: validateNum,
  495. message: "请输入最多带有4位小数的非负数",
  496. trigger: ["blur"],
  497. },
  498. ],
  499. leftDistance: [
  500. { required: true, message: "请输入", trigger: "blur" },
  501. {
  502. validator: validateNum,
  503. message: "请输入最多带有4位小数的非负数",
  504. trigger: ["blur"],
  505. },
  506. ],
  507. rightDistance: [
  508. { required: true, message: "请输入", trigger: "blur" },
  509. {
  510. validator: validateNum,
  511. message: "请输入最多带有4位小数的非负数",
  512. trigger: ["blur"],
  513. },
  514. ],
  515. heightDistance: [
  516. { required: true, message: "请输入", trigger: "blur" },
  517. {
  518. validator: validateNum,
  519. message: "请输入最多带有4位小数的非负数",
  520. trigger: ["blur"],
  521. },
  522. ],
  523. wheelbase: [
  524. { required: true, message: "请输入", trigger: "blur" },
  525. {
  526. validator: validateNum,
  527. message: "请输入最多带有4位小数的非负数",
  528. trigger: ["blur"],
  529. },
  530. ],
  531. mass: [
  532. { required: true, message: "请输入", trigger: "blur" },
  533. {
  534. validator: validateNum,
  535. message: "请输入最多带有4位小数的非负数",
  536. trigger: ["blur"],
  537. },
  538. ],
  539. // vehicleType: [
  540. // { required: true, message: "请选择", trigger: "change" },
  541. // ],
  542. wheelDrive: [
  543. { required: true, message: "请选择", trigger: "change" },
  544. ],
  545. modelLabel: [
  546. { required: true, message: "请选择", trigger: "change" },
  547. ],
  548. },
  549. props: {
  550. multiple: false,
  551. label: "name",
  552. value: "code",
  553. },
  554. modelLabelList: [],
  555. modelImgSrc: "",
  556. };
  557. },
  558. computed: {
  559. ...mapState(["fileHost", "fileUrl"]),
  560. },
  561. methods: {
  562. showInfo(id) {
  563. this.$axios({
  564. method: "post",
  565. url: this.$api.modelLibrary.getVehicleInfo,
  566. data: {
  567. id,
  568. },
  569. }).then((res) => {
  570. if (res.code == 200 && res.info) {
  571. this.$refs.form.clearValidate();
  572. this.form = res.info;
  573. if (res.info.vehicleFrontView) {
  574. this.modelImgSrc = this.getImgUrl(
  575. res.info.vehicleFrontView
  576. );
  577. }
  578. } else {
  579. this.$message.error(res.message || "获取失败");
  580. }
  581. });
  582. },
  583. save(isAdd) {
  584. // console.log(this.form);
  585. this.$refs.form.validate((valid) => {
  586. if (valid) {
  587. // 判断是否新增
  588. if (isAdd || this.form.share === "") {
  589. this.form.id = "";
  590. }
  591. this.$axios({
  592. method: "post",
  593. url: this.$api.modelLibrary.saveVehicle,
  594. data: {
  595. ...this.form,
  596. },
  597. }).then((res) => {
  598. if (res.code == 200 && res.info) {
  599. this.form.id = res.info.id;
  600. this.form.share = res.info.share;
  601. this.$message.success("保存成功");
  602. this.$refs.modelList.getList();
  603. } else {
  604. this.$message.error(res.message || "保存失败");
  605. }
  606. });
  607. }
  608. });
  609. },
  610. addOne() {
  611. this.$refs.form.resetFields();
  612. this.form.vehicleCode = "";
  613. this.form.vehicleFrontView = "";
  614. this.form.vehicleTopView = "";
  615. this.form.share = "";
  616. this.form.id = "";
  617. this.modelImgSrc = "";
  618. },
  619. delOne(id) {
  620. // console.log(id,this.form.id);return
  621. this.$axios({
  622. method: "post",
  623. url: this.$api.modelLibrary.delVehicleById,
  624. data: {
  625. id,
  626. },
  627. }).then((res) => {
  628. if (res.code == 200) {
  629. this.$message.success("删除成功");
  630. this.$refs.modelList.getList();
  631. if (this.form.id && id === this.form.id) {
  632. this.addOne();
  633. }
  634. } else {
  635. this.$message.error(res.message || "删除失败");
  636. }
  637. });
  638. },
  639. share() {
  640. this.$axios({
  641. method: "post",
  642. url: this.$api.modelLibrary.shareVehicle,
  643. data: {
  644. ...this.form,
  645. },
  646. }).then((res) => {
  647. if (res.code == 200) {
  648. this.$message.success("分享成功");
  649. this.$refs.modelList.getList();
  650. } else {
  651. this.$message.error(res.message || "分享失败");
  652. }
  653. });
  654. },
  655. cancel() {
  656. if (this.form.id) {
  657. // 取消时有id则重新请求表单
  658. this.showInfo(this.form.id);
  659. } else {
  660. // 清空
  661. this.addOne();
  662. }
  663. },
  664. getImgUrl(addr) {
  665. let url = "";
  666. if (process.env.VUE_APP_IS_DEV == "true") {
  667. url = this.fileHost + this.fileUrl;
  668. } else {
  669. url = this.fileUrl;
  670. }
  671. let token = localStorage.getItem("Authorization").split(" ")[1];
  672. let src = `${url}?objectName=${addr}&access_token=${token}`;
  673. return src;
  674. },
  675. modelLabelChange() {
  676. // console.log(this.$refs.cascader.getCheckedNodes(true)[0].data.vo);
  677. Object.assign(
  678. this.form,
  679. this.$refs.cascader.getCheckedNodes(true)[0].data.vo
  680. );
  681. this.modelImgSrc = this.getImgUrl(this.form.vehicleFrontView);
  682. },
  683. async getModelLabelList() {
  684. await this.$axios({
  685. method: "post",
  686. url: this.$api.modelLibrary.getVehicleTempTree,
  687. data: {},
  688. }).then((res) => {
  689. if (res.code == 200 && res.info) {
  690. this.modelLabelList = res.info;
  691. } else {
  692. this.$message.error(res.message || "获取车辆模型列表失败");
  693. }
  694. });
  695. },
  696. },
  697. async mounted() {
  698. await this.$dicsListsInit({
  699. vehicleTypeList: "vehicleType",
  700. wheelDriveList: "driveType",
  701. });
  702. this.getModelLabelList();
  703. },
  704. };
  705. </script>
  706. <style lang='less' scoped>
  707. .vehicleModelPanel {
  708. display: flex;
  709. flex: 1;
  710. padding: 15px 30px 30px;
  711. .modelList /deep/ .listPanel {
  712. min-height: 400px;
  713. height: calc(100vh - 120px);
  714. }
  715. .contentPanel {
  716. flex: 1;
  717. padding-left: 30px;
  718. }
  719. .inputBox.flexBox {
  720. margin-bottom: 22px;
  721. .label {
  722. width: 138px;
  723. }
  724. div {
  725. line-height: 32px;
  726. }
  727. }
  728. .titlePanel {
  729. padding: 22px 0;
  730. }
  731. .btns {
  732. padding-top: 30px;
  733. text-align: center;
  734. }
  735. .modelBox {
  736. width: 60%;
  737. min-width: 810px;
  738. }
  739. }
  740. </style>