shipDetail.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817
  1. <template>
  2. <div class="line-container-p24">
  3. <i class="el-icon-arrow-left"></i>
  4. <div
  5. class="dib go-back ml8 pointer"
  6. @click="router.replace('/shipInfo/shipList')"
  7. >
  8. 返回船舶列表
  9. </div>
  10. </div>
  11. <div class="container-title">船舶信息</div>
  12. <div class="line-container-p24">
  13. <div class="line">
  14. <div class="info-line">
  15. <div class="info-line-title">船名</div>
  16. <el-input
  17. class="info-line-text"
  18. v-model="shipDetail.shipname"
  19. :disabled="unchangeable"
  20. ></el-input>
  21. </div>
  22. <div class="info-line">
  23. <div class="info-line-title">MMSI</div>
  24. <el-input
  25. class="info-line-text"
  26. v-model="shipDetail.mmsi"
  27. :disabled="unchangeable"
  28. ></el-input>
  29. </div>
  30. </div>
  31. <div class="line">
  32. <div class="info-line">
  33. <div class="info-line-title">船长</div>
  34. <el-input
  35. class="info-line-text"
  36. v-model="shipDetail.length"
  37. :disabled="unchangeable"
  38. ></el-input>
  39. </div>
  40. <div class="info-line">
  41. <div class="info-line-title">船宽</div>
  42. <el-input
  43. class="info-line-text"
  44. v-model="shipDetail.breadth"
  45. :disabled="unchangeable"
  46. ></el-input>
  47. </div>
  48. </div>
  49. <div class="line">
  50. <div class="info-line">
  51. <div class="info-line-title">吨位</div>
  52. <el-input
  53. class="info-line-text"
  54. v-model="shipDetail.tonnage"
  55. :disabled="unchangeable"
  56. ></el-input>
  57. </div>
  58. <div class="info-line">
  59. <div class="info-line-title">载货吨位</div>
  60. <el-input
  61. class="info-line-text"
  62. v-model="shipDetail.loadTons"
  63. :disabled="unchangeable"
  64. ></el-input>
  65. </div>
  66. </div>
  67. <div class="line">
  68. <div class="info-line">
  69. <div class="info-line-title">吃水</div>
  70. <el-input
  71. class="info-line-text"
  72. v-model="shipDetail.draught"
  73. :disabled="unchangeable"
  74. ></el-input>
  75. </div>
  76. </div>
  77. <Certs ref="certs"></Certs>
  78. <div class="df aic jcfe">
  79. <el-button v-if="unchangeable" type="primary" @click="change">
  80. 修改
  81. </el-button>
  82. <el-button v-if="!unchangeable" @click="cancelChange">取消</el-button>
  83. <el-button v-if="!unchangeable" type="primary" @click="submitChange">
  84. 提交
  85. </el-button>
  86. </div>
  87. <div
  88. style="margin-top: 60px; min-width: 800px; width: 90%; margin-left: 60px"
  89. >
  90. <el-table border :data="shipOwnerTableData" stripe style="width: 100%">
  91. <el-table-column
  92. type="index"
  93. label="序号"
  94. min-width="80"
  95. align="center"
  96. ></el-table-column>
  97. <el-table-column
  98. prop="userName"
  99. label="船东名称"
  100. min-width="120"
  101. align="center"
  102. ></el-table-column>
  103. <el-table-column
  104. prop="userPhone"
  105. label="手机号"
  106. min-width="160"
  107. align="center"
  108. ></el-table-column>
  109. <el-table-column
  110. prop="createTime"
  111. label="入驻时间"
  112. min-width="200"
  113. align="center"
  114. ></el-table-column>
  115. <el-table-column label="操作" min-width="80" align="center">
  116. <template v-slot="scope">
  117. <el-button
  118. @click="shipOwnerDetail(scope.row.userId, tableData)"
  119. type="text"
  120. size="small"
  121. >
  122. 查看详情
  123. </el-button>
  124. </template>
  125. </el-table-column>
  126. </el-table>
  127. <div style="width: 100%; text-align: right; margin-top: 43px">
  128. <el-pagination
  129. background
  130. layout="prev, pager, next"
  131. :total="shipOwnerTotal"
  132. @current-change="shipOwnerPageChange"
  133. ></el-pagination>
  134. </div>
  135. </div>
  136. </div>
  137. <div class="container-title">航次信息</div>
  138. <div class="full-container-p24">
  139. <div style="display: flex; justify-content: space-between">
  140. <div class="df aic">
  141. <div
  142. @click="changeVoyageType(1)"
  143. :class="
  144. currentbtn
  145. ? 'currentbtn radio-btns left-radius'
  146. : 'radio-btns left-radius'
  147. "
  148. >
  149. 执行中航次
  150. </div>
  151. <div
  152. @click="changeVoyageType(2)"
  153. :class="
  154. currentbtn
  155. ? ' radio-btns right-radius'
  156. : 'radio-btns right-radius currentbtn'
  157. "
  158. style="margin-right: 40px"
  159. >
  160. 历史航次
  161. </div>
  162. <el-input
  163. placeholder="请输入货主名称/联系人/联系人手机号"
  164. prefix-icon="el-icon-search"
  165. v-model="term"
  166. clearable
  167. style="width: 330px"
  168. ></el-input>
  169. <div class="search-btn" @click="getVoyageList()">查询</div>
  170. </div>
  171. <div class="cargo-owner-add" @click="voyageAddDialogVisible = true">
  172. 添加航次
  173. </div>
  174. </div>
  175. <el-dialog v-model="voyageAddDialogVisible" title="添加航次">
  176. <el-form
  177. :rules="rules"
  178. label-position="right"
  179. label-width="80px"
  180. ref="addVoyageForm"
  181. :model="voyageForm"
  182. :before-close="resetAddVoyageForm"
  183. >
  184. <div class="df ffw">
  185. <!-- <el-form-item prop="voyageName" label="航次名称">
  186. <el-input v-model="voyageForm.voyageName"></el-input>
  187. </el-form-item>
  188. <el-form-item label=""></el-form-item> -->
  189. <el-form-item prop="shipName" label="船舶">
  190. <!-- <el-input v-model="voyageForm.shipOwnerId"></el-input> -->
  191. <el-autocomplete
  192. v-model="voyageForm.shipName"
  193. :fetch-suggestions="searchShip"
  194. placeholder="选择船舶"
  195. @select="selectShip"
  196. disabled
  197. />
  198. </el-form-item>
  199. <el-form-item prop="cargoOwnerId" label="货主">
  200. <el-autocomplete
  201. v-model="voyageForm.cargoOwnerName"
  202. :fetch-suggestions="searchCargoOwner"
  203. placeholder="选择货主"
  204. @select="selectCargoOwner"
  205. />
  206. </el-form-item>
  207. <el-form-item prop="startTime" label="开始时间">
  208. <el-date-picker
  209. v-model="voyageForm.startTime"
  210. type="date"
  211. value-format="YYYY/MM/DD"
  212. placeholder="航次开始时间"
  213. ></el-date-picker>
  214. </el-form-item>
  215. <el-form-item prop="endTime" label="结束时间">
  216. <el-date-picker
  217. v-model="voyageForm.endTime"
  218. type="date"
  219. value-format="YYYY/MM/DD"
  220. placeholder="航次结束时间"
  221. disabled
  222. ></el-date-picker>
  223. </el-form-item>
  224. <el-form-item prop="loadPort" label="装货港">
  225. <el-autocomplete
  226. v-model="voyageForm.loadPort"
  227. :fetch-suggestions="getCol"
  228. placeholder="选择装货港"
  229. @select="selectLoadPort"
  230. />
  231. </el-form-item>
  232. <el-form-item prop="dischargeProt" label="卸货港">
  233. <el-autocomplete
  234. v-model="voyageForm.dischargeProt"
  235. :fetch-suggestions="getCol"
  236. placeholder="选择卸货港"
  237. @select="selectDischargeProt"
  238. />
  239. </el-form-item>
  240. <el-form-item prop="cargo" label="货种">
  241. <el-input v-model="voyageForm.cargo"></el-input>
  242. </el-form-item>
  243. <el-form-item prop="tons" label="吨位">
  244. <el-input v-model="voyageForm.tons"></el-input>
  245. </el-form-item>
  246. </div>
  247. </el-form>
  248. <template #footer>
  249. <span class="dialog-footer">
  250. <el-button @click="resetAddVoyageForm">取消</el-button>
  251. <el-button type="primary" @click="addVoyage">确定</el-button>
  252. </span>
  253. </template>
  254. </el-dialog>
  255. <el-table :data="tableData" stripe style="width: 100%; margin-top: 24px">
  256. <el-table-column
  257. type="index"
  258. label="序号"
  259. min-width="80"
  260. align="center"
  261. ></el-table-column>
  262. <el-table-column
  263. prop="voyageName"
  264. label="航次名称"
  265. min-width="120"
  266. align="center"
  267. ></el-table-column>
  268. <el-table-column
  269. prop="loadDiscPort"
  270. label="装货港-卸货港"
  271. min-width="200"
  272. align="center"
  273. ></el-table-column>
  274. <el-table-column
  275. prop="setSailTime"
  276. label="开航时间"
  277. min-width="180"
  278. align="center"
  279. ></el-table-column>
  280. <el-table-column
  281. prop="todayPhotoCount"
  282. label="今日照片"
  283. min-width="80"
  284. align="center"
  285. ></el-table-column>
  286. <el-table-column
  287. prop="cargo"
  288. label="货种"
  289. min-width="80"
  290. align="center"
  291. ></el-table-column>
  292. <el-table-column
  293. prop="tons"
  294. label="吨位(吨)"
  295. min-width="80"
  296. align="center"
  297. ></el-table-column>
  298. <el-table-column
  299. prop="transStatus"
  300. label="船舶状态"
  301. min-width="100"
  302. align="center"
  303. ></el-table-column>
  304. <el-table-column
  305. prop="remark"
  306. label="备注"
  307. min-width="100"
  308. align="center"
  309. ></el-table-column>
  310. <el-table-column label="操作" min-width="80" align="center">
  311. <template v-slot="scope">
  312. <el-button
  313. @click="voyageDetail(scope.row.id, tableData)"
  314. type="text"
  315. size="small"
  316. >
  317. 查看详情
  318. </el-button>
  319. </template>
  320. </el-table-column>
  321. </el-table>
  322. <div style="width: 100%; text-align: right; margin-top: 43px">
  323. <el-pagination
  324. background
  325. layout="prev, pager, next"
  326. :total="total"
  327. @current-change="pageChange"
  328. ></el-pagination>
  329. </div>
  330. </div>
  331. </template>
  332. <script>
  333. // import { uploadUrl } from "../../apis/config";
  334. import { ref, h, reactive, toRefs, onMounted } from "vue";
  335. import { ElNotification, ElMessageBox, ElMessage } from "element-plus";
  336. import store from "../../store";
  337. import router from "../../router";
  338. import md5 from "md5";
  339. import api from "../../apis/fetch";
  340. import { useRoute } from "_vue-router@4.0.12@vue-router";
  341. import _ from "lodash";
  342. export default {
  343. setup() {
  344. const route = useRoute();
  345. let shipDetail = ref({});
  346. async function getShipDetail() {
  347. let res = await api.getShipDetail({
  348. shipId: route.query.shipId,
  349. });
  350. if (res.data.status == 0) {
  351. shipDetail.value = res.data.result;
  352. voyageForm.voyageForm.shipName = res.data.result.shipname;
  353. voyageForm.voyageForm.shipId = res.data.result.id;
  354. certs.value.initCerts(shipDetail.value.shipCertificates);
  355. } else {
  356. console.log(res);
  357. }
  358. }
  359. let shipDetailCache = ref({});
  360. function change() {
  361. shipDetailCache.value = _.cloneDeep(shipDetail.value);
  362. certs.value.editCerts();
  363. unchangeable.value = false;
  364. }
  365. function cancelChange() {
  366. if (!_.isEqual(shipDetail.value, shipDetailCache.value)) {
  367. shipDetail.value = _.cloneDeep(shipDetailCache.value);
  368. }
  369. certs.value.cancelEditCerts();
  370. unchangeable.value = true;
  371. }
  372. let unchangeable = ref(true);
  373. async function submitChange() {
  374. shipDetail.value.shipId = shipDetail.value.id;
  375. shipDetail.value.shipCerts = certs.value.sendCerts();
  376. delete shipDetail.value.shipCertificates;
  377. let postData = {
  378. ...shipDetail.value,
  379. userId: 0,
  380. };
  381. let res = await api.updateShip(postData);
  382. if (res.data.status == 0) {
  383. unchangeable.value = true;
  384. ElNotification({
  385. type: "success",
  386. title: res.data.msg,
  387. });
  388. } else {
  389. ElNotification({
  390. type: "error",
  391. title: res.data.msg,
  392. });
  393. console.log(res);
  394. }
  395. certs.value.disabled = true;
  396. let t = setTimeout(() => {
  397. getShipDetail();
  398. clearTimeout(t);
  399. }, 500);
  400. }
  401. let currentbtn = ref(true);
  402. let currentPage = ref(1);
  403. let term = ref();
  404. let tableData = ref();
  405. let total = ref();
  406. let status = ref(1);
  407. async function getVoyageList() {
  408. tableData.value = [];
  409. let res = await api.getVoyageList({
  410. cargoOwnerId: 0,
  411. shipId: route.query.shipId,
  412. status: status.value,
  413. term: term.value,
  414. currentPage: currentPage.value,
  415. size: 10,
  416. });
  417. term.value = "";
  418. if (res.data.status == 0) {
  419. tableData.value = res.data.result;
  420. }
  421. }
  422. function changeVoyageType(s) {
  423. currentPage.value = 1;
  424. currentbtn.value = s == 1;
  425. status.value = s;
  426. getVoyageList();
  427. }
  428. async function voyageDetail(id) {
  429. router.push({
  430. path: "/voyage/voyageDetail",
  431. query: {
  432. id,
  433. },
  434. });
  435. }
  436. function pageChange(e) {
  437. currentPage.value = e;
  438. getVoyageList();
  439. }
  440. function goToVoyageAdd() {
  441. router.push({
  442. path: "/voyage/voyageAdd",
  443. });
  444. }
  445. let voyageAddDialogVisible = ref(false);
  446. const rules = reactive({
  447. rules: {
  448. voyageName: [
  449. { required: false, message: "请填写航次名称", trigger: "blur" },
  450. ],
  451. shipOwnerId: [
  452. { required: true, message: "请选择船东", trigger: "blur" },
  453. ],
  454. cargoOwnerId: [
  455. { required: true, message: "请选择货主", trigger: "blur" },
  456. ],
  457. startTime: [
  458. { required: true, message: "请填写开始时间", trigger: "blur" },
  459. ],
  460. endTime: [
  461. { required: false, message: "请填写结束时间", trigger: "blur" },
  462. ],
  463. loadPort: [
  464. { required: true, message: "请填写装货港", trigger: "blur" },
  465. ],
  466. dischargeProt: [
  467. { required: true, message: "请填写卸货港", trigger: "blur" },
  468. ],
  469. cargo: [{ required: true, message: "请填写货种", trigger: "blur" }],
  470. tons: [{ required: true, message: "请填写吨位", trigger: "blur" }],
  471. },
  472. });
  473. let voyageForm = reactive({
  474. voyageForm: {
  475. voyageName: "",
  476. cargoOwnerId: "",
  477. startTime: "",
  478. endTime: "",
  479. loadPort: "",
  480. dischargeProt: "",
  481. cargo: "",
  482. tons: "",
  483. },
  484. });
  485. let addVoyageForm = ref(null);
  486. async function addVoyage() {
  487. console.log("提交", voyageForm.voyageForm);
  488. addVoyageForm.value.validate(async (valid) => {
  489. if (valid) {
  490. // console.log("提交", voyageForm.voyageForm);
  491. let res = await api.addVoyage({
  492. ...voyageForm.voyageForm,
  493. });
  494. if (res.data.status == 0) {
  495. ElNotification({
  496. title: res.data.msg,
  497. type: "success",
  498. });
  499. resetAddVoyageForm();
  500. } else {
  501. console.log(res);
  502. ElNotification({
  503. title: res.data.msg,
  504. type: "error",
  505. });
  506. }
  507. }
  508. });
  509. }
  510. async function searchShip(queryString, cb) {
  511. if (!queryString) return;
  512. let res = await api.searchShip({
  513. term: queryString,
  514. });
  515. let ships = [];
  516. if (res.data.status == 0) {
  517. ships = res.data.result;
  518. for (let i of ships) {
  519. i.value = `${i.shipName}`;
  520. }
  521. cb(ships);
  522. }
  523. }
  524. const selectShip = (item) => {
  525. voyageForm.voyageForm.shipId = item.shipId;
  526. };
  527. async function searchCargoOwner(queryString, cb) {
  528. if (!queryString) return;
  529. let res = await api.searchUser({
  530. term: queryString,
  531. identity: 2,
  532. });
  533. let cargoOwners = [];
  534. if (res.data.status == 0) {
  535. cargoOwners = res.data.result;
  536. for (let i of cargoOwners) {
  537. i.value = `${i.userName}`;
  538. }
  539. cb(cargoOwners);
  540. }
  541. }
  542. const selectCargoOwner = (item) => {
  543. voyageForm.voyageForm.cargoOwnerId = item.userId;
  544. };
  545. const getCol = _.debounce(
  546. async (queryString, cb) => {
  547. if (!queryString) return;
  548. let res = await api.getCol({
  549. term: queryString,
  550. });
  551. if (res.data.status == 0) {
  552. cb(res.data.result);
  553. }
  554. },
  555. 1500,
  556. { leading: true }
  557. );
  558. const selectLoadPort = (item) => {
  559. voyageForm.voyageForm.loadPortId = item.key;
  560. voyageForm.voyageForm.loadPort = item.value;
  561. };
  562. const selectDischargeProt = (item) => {
  563. voyageForm.voyageForm.dischargeProtId = item.key;
  564. voyageForm.voyageForm.dischargeProt = item.value;
  565. };
  566. function resetAddVoyageForm() {
  567. voyageAddDialogVisible.value = false;
  568. addVoyageForm.value.resetFields();
  569. }
  570. let shipCurrentPage = ref(1);
  571. let shipOwnerTableData = ref([]);
  572. let shipOwnerCurrentPage = ref(1);
  573. let shipOwnerTotal = ref();
  574. async function getShipOwnerListByShipId() {
  575. let res = await api.getShipOwnerListByShipId({
  576. shipId: route.query.shipId,
  577. currentPage: shipOwnerCurrentPage.value,
  578. size: 10,
  579. });
  580. if (res.data.status == 0) {
  581. shipOwnerTableData.value = res.data.result;
  582. shipOwnerTotal.value = res.data.total;
  583. } else {
  584. console.log(res);
  585. }
  586. }
  587. function shipOwnerDetail(userId) {
  588. router.push({
  589. path: "/shipOwnerManage/shipOwnerDetail",
  590. query: {
  591. userId,
  592. },
  593. });
  594. }
  595. function shipOwnerPageChange(e) {
  596. shipOwnerCurrentPage.value = e;
  597. getShipOwnerListByShipId();
  598. }
  599. let certs = ref(null);
  600. onMounted(() => {
  601. getShipDetail();
  602. getVoyageList();
  603. getShipOwnerListByShipId();
  604. });
  605. return {
  606. unchangeable,
  607. change,
  608. cancelChange,
  609. submitChange,
  610. shipDetail,
  611. router,
  612. currentPage,
  613. term,
  614. tableData,
  615. total,
  616. currentbtn,
  617. changeVoyageType,
  618. getVoyageList,
  619. voyageDetail,
  620. pageChange,
  621. goToVoyageAdd,
  622. addVoyage,
  623. voyageAddDialogVisible,
  624. addVoyageForm,
  625. ...toRefs(rules),
  626. ...toRefs(voyageForm),
  627. searchCargoOwner,
  628. selectCargoOwner,
  629. resetAddVoyageForm,
  630. shipCurrentPage,
  631. shipOwnerTableData,
  632. shipOwnerCurrentPage,
  633. getShipOwnerListByShipId,
  634. shipOwnerDetail,
  635. shipOwnerPageChange,
  636. shipOwnerTotal,
  637. getCol,
  638. selectLoadPort,
  639. selectDischargeProt,
  640. searchShip,
  641. selectShip,
  642. certs,
  643. };
  644. },
  645. };
  646. </script>
  647. <style scoped>
  648. .search-btn {
  649. display: inline-block;
  650. width: 60px;
  651. height: 32px;
  652. background: #0094fe;
  653. border-radius: 2px;
  654. font-size: 14px;
  655. font-family: PingFangSC-Regular, PingFang SC;
  656. font-weight: 400;
  657. color: #ffffff;
  658. text-align: center;
  659. line-height: 32px;
  660. margin-left: 10px;
  661. cursor: pointer;
  662. }
  663. .cargo-owner-add {
  664. width: 80px;
  665. height: 32px;
  666. border-radius: 2px;
  667. border: 1px solid #0094fe;
  668. font-size: 14px;
  669. font-family: PingFangSC-Regular, PingFang SC;
  670. font-weight: 400;
  671. color: #0094fe;
  672. line-height: 32px;
  673. text-align: center;
  674. cursor: pointer;
  675. }
  676. :deep().el-dialog {
  677. width: 560px;
  678. padding: 20px 50px;
  679. border-radius: 6px;
  680. }
  681. :deep() .el-dialog__title {
  682. font-size: 18px;
  683. font-family: PingFangSC-Regular, PingFang SC;
  684. font-weight: 400;
  685. color: #0094fe;
  686. }
  687. .normal-label {
  688. font-size: 14px;
  689. font-family: PingFangSC-Regular, PingFang SC;
  690. font-weight: 400;
  691. color: #353a42;
  692. margin-right: 10px;
  693. }
  694. .show-input {
  695. width: 280px;
  696. height: 32px;
  697. background: #ffffff;
  698. border-radius: 2px;
  699. border: 1px solid #dee0e3;
  700. font-size: 14px;
  701. font-family: PingFangSC-Regular, PingFang SC;
  702. font-weight: 400;
  703. color: #333333;
  704. line-height: 32px;
  705. padding-left: 12px;
  706. margin-right: 40px;
  707. }
  708. .radio-btns {
  709. height: 38px;
  710. width: 103px;
  711. border: 1px solid #1486f9;
  712. line-height: 38px;
  713. text-align: center;
  714. font-size: 14px;
  715. font-family: PingFangSC-Regular, PingFang SC;
  716. font-weight: 400;
  717. color: #0094fe;
  718. cursor: pointer;
  719. }
  720. .left-radius {
  721. border-top-left-radius: 19px;
  722. border-bottom-left-radius: 19px;
  723. }
  724. .right-radius {
  725. border-top-right-radius: 19px;
  726. border-bottom-right-radius: 19px;
  727. }
  728. .currentbtn {
  729. background: #1486f9;
  730. color: #fff;
  731. }
  732. .search-btn {
  733. display: inline-block;
  734. width: 60px;
  735. height: 38px;
  736. background: #0094fe;
  737. border-radius: 2px;
  738. font-size: 14px;
  739. font-family: PingFangSC-Regular, PingFang SC;
  740. font-weight: 400;
  741. color: #ffffff;
  742. text-align: center;
  743. line-height: 38px;
  744. margin-left: 10px;
  745. cursor: pointer;
  746. }
  747. .voyage-add {
  748. width: 80px;
  749. height: 36px;
  750. border-radius: 2px;
  751. border: 1px solid #0094fe;
  752. font-size: 14px;
  753. font-family: PingFangSC-Regular, PingFang SC;
  754. font-weight: 400;
  755. color: #0094fe;
  756. line-height: 36px;
  757. text-align: center;
  758. cursor: pointer;
  759. }
  760. :deep() .el-dialog {
  761. width: 800px;
  762. }
  763. :deep() .el-form-item {
  764. margin-right: 22px;
  765. width: 300px;
  766. }
  767. :deep() .el-autocomplete {
  768. width: 220px;
  769. }
  770. .upload-text {
  771. height: 25%;
  772. color: rgb(139, 147, 156);
  773. }
  774. .upload-plus-icon {
  775. height: 15%;
  776. color: rgb(139, 147, 156);
  777. line-height: 100px;
  778. font-size: 40px;
  779. font-weight: 200;
  780. }
  781. </style>