shipDetail.vue 22 KB

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