shipDetail.vue 22 KB

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