index.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796
  1. <template>
  2. <div class="records">
  3. <div class="header" style="flex-direction: row-reverse">
  4. <el-button @click="backPageHandler">返回</el-button>
  5. <el-button style="margin: 0px 10px" type="primary" @click="handleSave"
  6. >保存</el-button
  7. >
  8. <el-button :disabled="isDisableExport" @click="handleExport"
  9. >导出</el-button
  10. >
  11. </div>
  12. <h3 class="title">现 场 勘 验 笔 录</h3>
  13. <div class="content">
  14. <div class="line" style="flex-direction: row-reverse">
  15. <el-input
  16. class="input"
  17. v-model="data.inquestNum"
  18. placeholder=""
  19. style="width: 280px"
  20. />
  21. <span>现场勘验号:</span>
  22. </div>
  23. <div class="line">
  24. <span>现场勘验单位:</span>
  25. <el-input
  26. class="input"
  27. v-model="data.deptName"
  28. placeholder=""
  29. style="width: 100%"
  30. />
  31. </div>
  32. <div class="line">
  33. <span>指派/报告单位:</span>
  34. <el-input
  35. class="input"
  36. v-model="data.reportDept"
  37. placeholder=""
  38. style="width: 100%"
  39. />
  40. </div>
  41. <div class="line">
  42. <span>勘验时间: &nbsp; </span>
  43. <div>
  44. <el-date-picker
  45. class="input"
  46. v-model="data.inquestTime"
  47. type="datetime"
  48. placeholder="勘验时间"
  49. value-format="YYYY-MM-DD HH:mm:ss"
  50. style="width: 200px"
  51. />
  52. </div>
  53. </div>
  54. <div class="textarea">
  55. <span>勘验事由: </span>
  56. <el-input
  57. type="textarea"
  58. :rows="6"
  59. v-model="data.inquestResource"
  60. placeholder="报警人:xxx(性别:xxx 电话:xxx)报警称:xxx发生一起:xxx案,现场需勘察。接报后技术科科长:xxx带领技术员:xxx、法医:xxx立即赶赴现场进行勘察."
  61. style="width: 100%"
  62. />
  63. </div>
  64. <div class="line">
  65. <span>现场勘验时间: &nbsp; </span>
  66. <div>
  67. <el-date-picker
  68. class="input"
  69. v-model="data.times"
  70. type="datetimerange"
  71. range-separator="至"
  72. start-placeholder="现场勘验开始时间"
  73. end-placeholder="现场勘验结束时间"
  74. />
  75. </div>
  76. </div>
  77. <div class="line">
  78. <span>现场地点:</span>
  79. <el-input
  80. class="input"
  81. type="text"
  82. v-model="data.address"
  83. placeholder=""
  84. style="width: 100%"
  85. />
  86. </div>
  87. <div class="line">
  88. <span>现场保护情况:</span>
  89. <el-input
  90. class="input"
  91. type="text"
  92. v-model="data.protectionSituation"
  93. placeholder=""
  94. style="width: 100%"
  95. />
  96. </div>
  97. <div class="line">
  98. <span>现场保护人: &nbsp;&nbsp; &nbsp;</span>
  99. <span>姓名</span>
  100. <!-- 单位 XX派出所 职务 一级警长 -->
  101. <el-input
  102. class="input"
  103. type="text"
  104. v-model="data.protector.name"
  105. placeholder=""
  106. style="width: 180px"
  107. />
  108. <span>单位</span>
  109. <el-input
  110. class="input"
  111. type="text"
  112. v-model="data.protector.unit"
  113. placeholder=""
  114. style="width: 200px"
  115. />
  116. <span>职务</span>
  117. <el-input
  118. class="input"
  119. type="text"
  120. v-model="data.protector.job"
  121. placeholder=""
  122. style="width: 200px"
  123. />
  124. </div>
  125. <!-- protectionMeasures -->
  126. <div class="line">
  127. <span>保护措施:&nbsp; </span>
  128. <el-checkbox-group v-model="data.protectionMeasures">
  129. <el-checkbox :value="0" label="专人看护现场,防止他人进入" />
  130. <el-checkbox :value="1" checked label="设立警戒带,划定禁行区域" />
  131. <el-checkbox :value="2" label="其他措施" />
  132. </el-checkbox-group>
  133. </div>
  134. <div class="line">
  135. <span>现场情况: &nbsp; </span>
  136. <el-checkbox-group v-model="data.situation">
  137. <el-checkbox :value="0" label="原始现场" />
  138. <el-checkbox :value="1" checked label="变动现场" />
  139. </el-checkbox-group>
  140. </div>
  141. <!-- changeReason -->
  142. <div class="line">
  143. <span>变动原因: &nbsp; </span>
  144. <el-checkbox-group v-model="data.changeReason">
  145. <el-checkbox
  146. v-for="reason in ChangeReasonType"
  147. :value="reason.id"
  148. :label="reason.name"
  149. >
  150. </el-checkbox>
  151. <!-- <el-checkbox :value="0" label="事主进入" />
  152. <el-checkbox :value="1" label="报案人进入" />
  153. <el-checkbox :value="2" label="其他" /> -->
  154. </el-checkbox-group>
  155. <el-input
  156. class="input"
  157. v-model="data.changeReasonOtherValue"
  158. :disabled="!data.changeReason.includes(2)"
  159. style="margin-left: 20px; width: 200px"
  160. />
  161. </div>
  162. <div class="line">
  163. <span>天气: &nbsp; </span>
  164. <el-checkbox-group v-model="data.weatherInfo.type">
  165. <el-checkbox :value="0" label="阴" />
  166. <el-checkbox :value="1" label="晴" />
  167. <el-checkbox :value="2" label="雨" />
  168. <el-checkbox :value="3" label="雾" />
  169. </el-checkbox-group>
  170. <span style="margin-left: 20px; font-size: 12px">温度: &nbsp;</span>
  171. <el-input
  172. class="input"
  173. v-model="data.weatherInfo.temperature"
  174. style="width: 80px"
  175. /><span>℃</span>
  176. <span style="margin-left: 20px; font-size: 12px">湿度: &nbsp;</span>
  177. <el-input
  178. class="input"
  179. v-model="data.weatherInfo.humidity"
  180. style="width: 80px"
  181. /><span>%</span>
  182. <span style="margin-left: 20px; font-size: 12px">风向: &nbsp;</span>
  183. <el-input
  184. class="input"
  185. v-model="data.weatherInfo.windDirection"
  186. style="width: 80px"
  187. />
  188. </div>
  189. <div class="line">
  190. <span>现场勘验利用的光线: &nbsp; </span>
  191. <el-checkbox-group v-model="data.light">
  192. <el-checkbox :value="0" checked label="自然光" />
  193. <el-checkbox :value="1" checked label="灯光" />
  194. <el-checkbox :value="2" label="特种光" />
  195. </el-checkbox-group>
  196. </div>
  197. <div class="line">
  198. <span>现场勘验指挥人: &nbsp;&nbsp; </span>
  199. <span>姓名</span>
  200. <!-- 单位 XX派出所 职务 一级警长 -->
  201. <el-input
  202. class="input"
  203. type="text"
  204. v-model="data.inquestCommander.name"
  205. placeholder=""
  206. style="width: 180px"
  207. />
  208. <span>单位</span>
  209. <el-input
  210. class="input"
  211. type="text"
  212. v-model="data.inquestCommander.unit"
  213. placeholder=""
  214. style="width: 200px"
  215. />
  216. <span>职务</span>
  217. <el-input
  218. class="input"
  219. type="text"
  220. v-model="data.inquestCommander.job"
  221. placeholder=""
  222. style="width: 200px"
  223. />
  224. </div>
  225. <div class="textarea">
  226. <span>现场勘验情况 :</span>
  227. <el-input
  228. type="textarea"
  229. :rows="6"
  230. v-model="data.inquestSituation"
  231. placeholder=""
  232. style="width: 100%"
  233. />
  234. </div>
  235. <div class="line">
  236. <span>现场勘验制图&nbsp; </span>
  237. <el-input-number
  238. class="input"
  239. controls-position="right"
  240. v-model="data.imageNum"
  241. style="width: 130px"
  242. />
  243. <span>张; &nbsp;&nbsp;</span>
  244. <span>照相</span>
  245. <el-input-number
  246. class="input"
  247. controls-position="right"
  248. v-model="data.photographNum"
  249. style="width: 130px"
  250. />
  251. <span>张;&nbsp;&nbsp;</span>
  252. <span>摄像</span>
  253. <el-input-number
  254. class="input"
  255. controls-position="right"
  256. v-model="data.photographyMinNum"
  257. style="width: 130px"
  258. />
  259. <span>分</span>
  260. <el-input-number
  261. class="input"
  262. controls-position="right"
  263. v-model="data.photographySecNum"
  264. style="width: 130px"
  265. />
  266. <span>秒</span>
  267. <span style="margin-left: 10px">录音</span>
  268. <el-input-number
  269. class="input"
  270. controls-position="right"
  271. v-model="data.recordingMinNum"
  272. style="width: 130px"
  273. />
  274. <span>分</span>
  275. <el-input-number
  276. class="input"
  277. controls-position="right"
  278. v-model="data.recordingSecNum"
  279. style="width: 130px"
  280. />
  281. <span>秒</span>
  282. </div>
  283. <div class="line">
  284. 现场勘验记录人员:
  285. <el-button link @click="recorderInfoDialogShow = true"
  286. ><el-icon :size="18"><CirclePlus /> </el-icon>
  287. </el-button>
  288. </div>
  289. <!-- 现场勘验记录人员 -->
  290. <template v-for="(info, index) in data.recorderInfo">
  291. <div class="line info">
  292. <span>{{ info.typeLabel }}: &nbsp;&nbsp; </span>
  293. <span>姓名</span>
  294. <!-- 单位 XX派出所 职务 一级警长 -->
  295. <el-input
  296. class="input"
  297. type="text"
  298. v-model="info.name"
  299. placeholder=""
  300. style="width: 180px"
  301. />
  302. <span>单位</span>
  303. <el-input
  304. class="input"
  305. type="text"
  306. v-model="info.unit"
  307. placeholder=""
  308. style="width: 200px"
  309. />
  310. <span>职务</span>
  311. <el-input
  312. class="input"
  313. type="text"
  314. v-model="info.job"
  315. placeholder=""
  316. style="width: 200px"
  317. />
  318. <el-button
  319. link
  320. class="del-btn"
  321. type="danger"
  322. @click="removeRecorderInfo(index)"
  323. ><el-icon :size="18"><CircleClose /> </el-icon>
  324. </el-button>
  325. </div>
  326. </template>
  327. <div class="line">
  328. 现场勘验人员:
  329. <el-button link @click="addSignatureInfo"
  330. ><el-icon :size="18"><CirclePlus /> </el-icon>
  331. </el-button>
  332. </div>
  333. <template v-for="(sign, index) of data.signatureInfo">
  334. <div class="line info">
  335. <span>本人签名: &nbsp;&nbsp; </span>
  336. <span>_______________ &nbsp;&nbsp;</span>
  337. <span>单位</span>
  338. <el-input
  339. class="input"
  340. type="text"
  341. v-model="sign.unit"
  342. placeholder=""
  343. style="width: 200px"
  344. />
  345. <span>职务</span>
  346. <el-input
  347. class="input"
  348. type="text"
  349. v-model="sign.job"
  350. placeholder=""
  351. style="width: 200px"
  352. />
  353. <el-button
  354. class="del-btn"
  355. link
  356. type="danger"
  357. @click="removeSignatureInfo(index)"
  358. ><el-icon :size="18"><CircleClose /> </el-icon>
  359. </el-button>
  360. </div>
  361. </template>
  362. <div class="line">
  363. 现场勘验见证人:
  364. <el-button link @click="addWitnessInfo"
  365. ><el-icon :size="18"><CirclePlus /> </el-icon>
  366. </el-button>
  367. </div>
  368. <template v-for="(witness, index) of data.witnessInfo">
  369. <div class="line info">
  370. <span>本人签名: &nbsp;&nbsp; </span>
  371. <span>_______________ &nbsp;&nbsp;</span>
  372. <span>性别</span>
  373. <el-select
  374. class="input"
  375. v-model="witness.sex"
  376. placeholder="性别"
  377. style="width: 140px"
  378. >
  379. <el-option :value="0" label="男" />
  380. <el-option :value="1" label="女" />
  381. </el-select>
  382. <span>出生日期</span>
  383. <el-date-picker
  384. class="input"
  385. v-model="witness.birthday"
  386. type="date"
  387. placeholder="出生日期"
  388. style="width: 180px"
  389. />
  390. <!-- <el-input
  391. class="input"
  392. type="text"
  393. v-model="witness.birthday"
  394. placeholder=""
  395. style="width: 200px"
  396. /> -->
  397. <span>住址</span>
  398. <el-input
  399. class="input"
  400. type="text"
  401. v-model="witness.address"
  402. placeholder=""
  403. style="width: 260px"
  404. />
  405. <el-button
  406. link
  407. class="del-btn"
  408. type="danger"
  409. @click="removeWitnessInfo(index)"
  410. ><el-icon :size="18"><CircleClose /> </el-icon>
  411. </el-button>
  412. </div>
  413. </template>
  414. <div class="textarea">
  415. <span>备注:</span>
  416. <el-input
  417. type="textarea"
  418. :rows="6"
  419. v-model="data.remark"
  420. placeholder=""
  421. style="width: 100%"
  422. />
  423. </div>
  424. <div></div>
  425. </div>
  426. <el-dialog
  427. v-model="recorderInfoDialogShow"
  428. title="增加现场勘验记录人员"
  429. width="500"
  430. align-center
  431. @close="recorderInfoDialogSelect = null"
  432. >
  433. <div style="width: 80%; margin: 30px auto">
  434. <el-select
  435. v-model="recorderInfoDialogSelect"
  436. placeholder="请选择现场勘验记录人员"
  437. size="large"
  438. >
  439. <el-option
  440. v-for="item in recorderInfoType"
  441. :key="item.type"
  442. :label="item.typeLabel"
  443. :value="item.type"
  444. />
  445. </el-select>
  446. </div>
  447. <template #footer>
  448. <div class="dialog-footer">
  449. <el-button type="primary" @click="addRecorderInfo"> 确定 </el-button>
  450. </div>
  451. </template>
  452. </el-dialog>
  453. </div>
  454. </template>
  455. <script setup>
  456. import { onMounted, ref, watch, h, computed } from "vue";
  457. import { reactive } from "vue";
  458. import { router, RouteName } from "@/router";
  459. import {
  460. getCaseInquestInfo,
  461. saveCaseInquestInfo,
  462. exportCaseInquestInfo,
  463. getCaseInquestInfoOld,
  464. } from "@/store/case";
  465. import { ElMessage, ElMessageBox } from "element-plus";
  466. import saveAs from "@/util/file-serve";
  467. import { CirclePlus, CircleClose } from "@element-plus/icons-vue";
  468. import { recorderInfoType, ChangeReasonType } from "./formData.ts";
  469. import { confirm } from "@/helper/message";
  470. const props = defineProps({ caseId: Number, title: String });
  471. console.log("router.currentRoute", router.currentRoute.value?.params);
  472. const fileId = computed(() => router.currentRoute.value?.params?.fileId);
  473. const caseId = computed(() => router.currentRoute.value?.params?.caseId);
  474. const isDisableExport = ref(false);
  475. const data = reactive({
  476. title: "",
  477. inquestNum: "", //现场勘验号
  478. deptName: "", //单位名称
  479. sendDept: "", //发送单位
  480. issuanceCount: "", // 份数
  481. makeTime: "", //制作时间
  482. recorder: "", // 笔录人
  483. issuanceOpinion: "", //签发意见
  484. reportDept: "", //报告单位
  485. times: [], // startTime ,endTime
  486. address: "", // 勘验地址
  487. inquestTime: "", //勘验时间
  488. inquestResource:
  489. "报警人:xxx(性别:xxx 电话:xxx)报警称:xxx发生一起:xxx案,现场需勘察。接报后技术科科长:xxx带领技术员:xxx、法医:xxx立即赶赴现场进行勘察.", //勘验范围
  490. protector: {
  491. name: "",
  492. unit: "",
  493. job: "",
  494. }, // 现场保护人
  495. protectionSituation: "", // 现场保护情况
  496. situation: [], //现场情况
  497. changeReason: [],
  498. changeReasonOtherValue: "",
  499. protectionMeasures: [], //保护措施
  500. weatherInfo: {
  501. type: [],
  502. temperature: "",
  503. humidity: "",
  504. windDirection: "",
  505. }, //天气情况
  506. light: [], //光线
  507. painter: "",
  508. photographer: "",
  509. inquestCommander: {
  510. name: "",
  511. unit: "",
  512. job: "",
  513. }, //现场勘验指挥人
  514. inquestSituation: "", //现场勘验情况
  515. imageNum: 0, //现场勘验制图数量
  516. photographNum: 0, //照相数量
  517. photographyMinNum: 0, //摄影数量
  518. photographySecNum: 0, //摄影数量
  519. recorderInfo: recorderInfoType,
  520. signatureInfo: [], //现场勘验人员
  521. witnessInfo: [],
  522. remark: "",
  523. });
  524. const signatureInfoNum = 4;
  525. const witnessInfoNum = 2;
  526. const recorderInfoDialogShow = ref(false);
  527. const recorderInfoDialogSelect = ref();
  528. const initInfo = async (inquestFileId) => {
  529. const res = await getCaseInquestInfoOld(inquestFileId || fileId.value);
  530. console.log("initInfo", res);
  531. if (!res.data) {
  532. isDisableExport.value = true;
  533. } else {
  534. isDisableExport.value = false;
  535. }
  536. for (var k in data) {
  537. if (res.data && res.data.hasOwnProperty(k)) {
  538. // console.log("Key is " + k);
  539. if (res.data[k]) {
  540. data[k] = res.data[k];
  541. }
  542. }
  543. }
  544. setTimeout(() => {
  545. initSignatureAndWitInfo();
  546. }, 500);
  547. };
  548. const initSignatureAndWitInfo = () => {
  549. (data.recorderInfo.length === 0 || !data.recorderInfo) &&
  550. (data.recorderInfo = [...recorderInfoType, recorderInfoType[4]]);
  551. (data.signatureInfo.length === 0 || !data.signatureInfo) &&
  552. Array.from(new Array(signatureInfoNum)).forEach(() => {
  553. data.signatureInfo.push({
  554. unit: "",
  555. job: "",
  556. });
  557. });
  558. (data.witnessInfo.length === 0 || !data.witnessInfo) &&
  559. Array.from(new Array(witnessInfoNum)).forEach(() => {
  560. data.witnessInfo.push({
  561. sex: 0,
  562. birthday: "",
  563. address: "",
  564. });
  565. });
  566. };
  567. onMounted(() => {
  568. initInfo();
  569. });
  570. const addRecorderInfo = () => {
  571. console.log("recorderInfoDialogSelect", recorderInfoType);
  572. recorderInfoDialogShow.value = false;
  573. if (recorderInfoDialogSelect.value) {
  574. const newCrew = recorderInfoType.find(
  575. (i) => i.type === recorderInfoDialogSelect.value
  576. );
  577. console.log("recorderInfoDialogSelect", newCrew);
  578. data.recorderInfo.push({
  579. ...newCrew,
  580. job: "",
  581. name: "",
  582. unit: "",
  583. });
  584. // debugger;
  585. }
  586. };
  587. const removeRecorderInfo = async (index) => {
  588. if (await confirm("确定要删除此数据?")) {
  589. data.recorderInfo.splice(index, 1);
  590. }
  591. };
  592. const addSignatureInfo = async () => {
  593. if (await confirm("确定要添加新的现场勘验人员?")) {
  594. data.signatureInfo.push({
  595. unit: "",
  596. job: "",
  597. });
  598. }
  599. };
  600. const removeSignatureInfo = async (index) => {
  601. if (await confirm("确定要删除此数据?")) {
  602. data.signatureInfo.splice(index, 1);
  603. }
  604. };
  605. const addWitnessInfo = async () => {
  606. if (await confirm("确定要添加新的现场勘验见证人?")) {
  607. data.witnessInfo.push({
  608. sex: 0,
  609. birthday: "",
  610. address: "",
  611. });
  612. }
  613. };
  614. const backPageHandler = () => {
  615. router.back();
  616. };
  617. const removeWitnessInfo = async (index) => {
  618. if (await confirm("确定要删除此数据?")) {
  619. data.witnessInfo.splice(index, 1);
  620. }
  621. };
  622. const handleSave = async () => {
  623. console.log("data", data);
  624. for (var k in data) {
  625. if (data && data.hasOwnProperty(k)) {
  626. // console.log("Key is " + k);
  627. if (Array.isArray(data[k])) {
  628. data[k] = data[k].sort((a, b) => a - b);
  629. }
  630. }
  631. }
  632. let inquestFileId = fileId.value == -1 ? "" : fileId.value;
  633. let params = { ...data, caseId: caseId.value, inquestFileId };
  634. const res = await saveCaseInquestInfo(params);
  635. initInfo(res.data.inquestFileId);
  636. console.log("saveCaseInquestInfo", res);
  637. if (fileId.value == -1) {
  638. router.replace({
  639. name: RouteName.records,
  640. params: { caseId: caseId.value, fileId: res.data?.inquestFileId },
  641. });
  642. return;
  643. }
  644. if (res.code === 0) {
  645. ElMessage.success("保存成功!");
  646. }
  647. };
  648. const handleExport = async () => {
  649. let inquestFileId = fileId.value == -1 ? "" : fileId.value;
  650. let params = { ...data, caseId: caseId.value, inquestFileId };
  651. await saveCaseInquestInfo(params);
  652. const res = await exportCaseInquestInfo(fileId.value);
  653. console.log("res", res);
  654. saveAs(res, `勘验笔录.docx`);
  655. };
  656. </script>
  657. <style lang="scss">
  658. .records {
  659. max-width: 1280px;
  660. margin: 0 auto;
  661. padding: 20px;
  662. position: relative;
  663. background: #fff;
  664. .header {
  665. display: flex;
  666. justify-content: flex-endTime;
  667. position: sticky;
  668. top: 10px;
  669. z-index: 1000;
  670. background-color: white;
  671. }
  672. .input {
  673. height: 32px;
  674. line-height: 32px;
  675. margin: 0 8px;
  676. }
  677. .textarea {
  678. margin-right: 8px;
  679. margin-bottom: 20px;
  680. span {
  681. padding: 10px 0;
  682. display: inline-block;
  683. }
  684. // margin: 0 8px;
  685. }
  686. .line {
  687. display: inline-flex;
  688. width: 100%;
  689. flex-direction: row;
  690. align-items: center;
  691. margin-bottom: 25px;
  692. line-height: 38px;
  693. span {
  694. white-space: nowrap;
  695. }
  696. }
  697. }
  698. .title {
  699. text-align: center;
  700. margin-bottom: 30px;
  701. }
  702. .sub-tit {
  703. display: inline-block;
  704. padding-bottom: 20px;
  705. }
  706. .info {
  707. display: block;
  708. .inner {
  709. display: flex;
  710. flex-direction: row;
  711. width: 100%;
  712. .input {
  713. flex: 1;
  714. }
  715. .sec {
  716. flex: 1;
  717. display: inline-flex;
  718. align-items: center;
  719. justify-content: center;
  720. }
  721. }
  722. }
  723. .witnessInfo {
  724. background: #f5f5f5;
  725. padding: 15px;
  726. margin-top: 20px;
  727. margin-right: 8px;
  728. }
  729. .gap {
  730. margin: 15px 0;
  731. }
  732. .btn-container {
  733. padding: 20px 0;
  734. .btn {
  735. color: #26559b;
  736. width: 100%;
  737. &:hover {
  738. background: #f5f5f5;
  739. border-color: #dcdfe6;
  740. }
  741. }
  742. }
  743. .info {
  744. .del-btn {
  745. display: none;
  746. }
  747. &:hover {
  748. .del-btn {
  749. display: block;
  750. }
  751. }
  752. }
  753. </style>