voyageList.vue 22 KB

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