shipDetail.vue 22 KB

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