1
0

sceneImg.vue 45 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417
  1. <template>
  2. <div class="scene abstract sceneImg">
  3. <el-dialog v-model="casePhotoItem.show" title="重命名" width="500">
  4. <el-form :model="casePhotoItem">
  5. <el-form-item :label-width="0">
  6. <el-input v-model="casePhotoItem.name" maxlength="15" show-word-limit autocomplete="off" />
  7. </el-form-item>
  8. </el-form>
  9. <template #footer>
  10. <div class="dialog-footer text-center" >
  11. <el-button @click="casePhotoItem.show = false">取消</el-button>
  12. <el-button type="primary" @click="handleConfirm">
  13. 确定
  14. </el-button>
  15. </div>
  16. </template>
  17. </el-dialog>
  18. <!-- <el-button class="w-full" @click="handledrawCasePhotos">照片卷</el-button> -->
  19. <div class="demo-image__preview">
  20. <el-image-viewer
  21. hide-on-click-modal
  22. @close="
  23. () => {
  24. urlindex = -1;
  25. }
  26. "
  27. :initial-index="urlindex"
  28. show-progress
  29. v-if="urlindex != -1"
  30. :url-list="ImgsrcList"
  31. fit="cover"
  32. />
  33. </div>
  34. <div class="scene-list">
  35. <div class="list">
  36. <el-tabs
  37. v-model="active1"
  38. class="demo-tabs"
  39. ref="tabsRef"
  40. @tab-click="handleClick"
  41. >
  42. <!-- //new 0 现场图 1 照片卷 2 现场照片 3 勘验笔录 -->
  43. <el-tab-pane
  44. v-for="(item, index) in list"
  45. :key="item.filesTypeName"
  46. :label="showText?item.filesTypeName:''"
  47. :childrenList="item.childrenList"
  48. :class="`handleIsShow show${handleIsShow(item)}`"
  49. :name="item.filesTypeName"
  50. >
  51. <div class="leftCenter" v-if="active1 == '现场图'">
  52. <div v-for="(a, b) in item.childrenList" :key="b">
  53. <div
  54. class="listTitle"
  55. v-if="!show || (a.caseFilesList && a.caseFilesList.length)"
  56. >
  57. <span>{{ a.filesTypeName }}</span>
  58. <el-dropdown
  59. v-show="!show"
  60. @command="
  61. (command) => {
  62. handleCommand(command, a);
  63. }
  64. "
  65. >
  66. <span class="el-dropdown-link">
  67. <el-icon class="el-icon--right" title="新增"><Plus /></el-icon>
  68. </span>
  69. <template #dropdown>
  70. <el-dropdown-menu>
  71. <el-dropdown-item command="绘图">新增</el-dropdown-item>
  72. <el-dropdown-item command="导入">导入</el-dropdown-item>
  73. </el-dropdown-menu>
  74. </template>
  75. </el-dropdown>
  76. </div>
  77. <div
  78. class="itemList"
  79. v-for="(items, indexs) in a.caseFilesList"
  80. @click="handlItem0(items)"
  81. :class="{
  82. active:
  83. childrenList.src == items.filesUrl &&
  84. childrenList.filesId == items.filesId,
  85. }"
  86. :key="indexs"
  87. >
  88. <div class="ItemTitle">
  89. <div class="text" :title="items.filesTypeName || items.filesTitle">
  90. {{ items.filesTypeName || items.filesTitle }}
  91. </div>
  92. <div
  93. class="operation"
  94. v-if="
  95. !show &&
  96. childrenList.src == items.filesUrl &&
  97. childrenList.filesId == items.filesId
  98. "
  99. >
  100. <el-icon title="下载"
  101. v-if="items.filesUrl"
  102. @click="
  103. downloadByUrl({
  104. url: items.filesUrl,
  105. fileName: items.filesTitle,
  106. })
  107. "
  108. ><Download
  109. /></el-icon>
  110. <el-icon title="编辑"
  111. v-if="items.oldData != 1"
  112. @click="handleoverviewEdit(a.filesTypeName, items)"
  113. ><Edit
  114. /></el-icon>
  115. <el-icon @click="OverviewDel(items, a.filesTypeName)" title="删除"
  116. ><CircleClose
  117. /></el-icon>
  118. </div>
  119. </div>
  120. </div>
  121. </div>
  122. </div>
  123. <div class="leftCenter" v-if="active1 == '现场照片'">
  124. <div v-for="(a, b) in item.childrenList" :key="b" v-show="show?recursiveSearch(a.childrenList):true">
  125. <div class="listTitle">{{ a.filesTypeName }}</div>
  126. <div
  127. class="itemList"
  128. v-for="(items, indexs) in a.childrenList"
  129. @click="handleClick2(items)"
  130. :class="{ active: childrenList.value == items.filesTypeId }"
  131. :key="indexs"
  132. >
  133. <div class="ItemTitle">{{ items.filesTypeName }}</div>
  134. </div>
  135. </div>
  136. </div>
  137. <div class="leftCenter" v-if="active1 == '勘验笔录'">
  138. <div
  139. class="addButton flex"
  140. v-show="!show"
  141. style="margin-bottom: 10px"
  142. >
  143. <el-button
  144. class="newbut"
  145. :icon="Edit"
  146. @click="handleRecords(-1)"
  147. >填写</el-button
  148. >
  149. <el-upload
  150. class="upload-demo"
  151. style="display: inline-block"
  152. :show-file-list="false"
  153. :before-upload="upload"
  154. :http-request="uploadNewFile"
  155. :on-success="handleSuccess"
  156. :on-preview="previewFile"
  157. :accept="accept"
  158. :before-remove="removeFile"
  159. multiple
  160. >
  161. <el-button class="newbut" :icon="Upload">上传</el-button>
  162. </el-upload>
  163. </div>
  164. <div
  165. class="itemList"
  166. v-for="(items, indexs) in item.caseFilesList"
  167. @click="handlItem1(items)"
  168. :class="{ active: childrenList.value == items.filesId }"
  169. :key="indexs"
  170. >
  171. <div class="ItemTitle">
  172. <div class="text">
  173. {{ items.filesTypeName || items.filesTitle }}
  174. </div>
  175. <div
  176. class="operation"
  177. v-if="childrenList.value == items.filesId"
  178. >
  179. <el-icon title="下载"
  180. @click="
  181. downloadByUrl({
  182. url: items.filesUrl,
  183. fileName: items.filesTitle,
  184. })
  185. "
  186. ><Download
  187. /></el-icon>
  188. <el-icon title="编辑"
  189. v-if="!show && items.createType != 'upload'"
  190. @click="handleRecords(items.filesId)"
  191. ><Edit
  192. /></el-icon>
  193. <el-icon v-if="!show" @click="del(items)" title="删除"
  194. ><CircleClose
  195. /></el-icon>
  196. </div>
  197. </div>
  198. </div>
  199. </div>
  200. <div class="leftCenter" v-if="active1 == '照片卷'">
  201. <div
  202. class="addButton flex"
  203. v-show="!show"
  204. style="margin-bottom: 10px"
  205. >
  206. <el-button
  207. class="newbut"
  208. :icon="Edit"
  209. @click="handledrawCasePhotos([])"
  210. >制卷</el-button
  211. >
  212. <el-button class="newbut" @click="exportToPDF(true)" :icon="Download">下载</el-button>
  213. <!-- @visible-change="handleOpen" -->
  214. <!-- <el-dropdown trigger="click" @command="exportToPDF">
  215. <span class="el-dropdown-link">
  216. <el-button class="newbut" :icon="Download">下载</el-button>
  217. </span>
  218. <template #dropdown>
  219. <el-dropdown-menu>
  220. <el-dropdown-item command="four">4联卡纸</el-dropdown-item>
  221. <el-dropdown-item command="a4">A4纸</el-dropdown-item>
  222. <el-dropdown-item command="a3">A3纸</el-dropdown-item>
  223. </el-dropdown-menu>
  224. </template>
  225. </el-dropdown> -->
  226. </div>
  227. <div
  228. class="itemList"
  229. v-for="(items, indexs) in casePhotoList"
  230. @click="handlItem2(items)"
  231. :class="{ active: childrenList.value == items.id }"
  232. :key="indexs"
  233. >
  234. <div class="ItemTitle">
  235. <div class="text">
  236. {{ items.name }}
  237. </div>
  238. <div
  239. class="operation"
  240. v-if="childrenList.value == items.id"
  241. >
  242. <el-icon title="下载" @click="exportToPDF"><Download/></el-icon>
  243. <!-- <el-dropdown trigger="click" @command="exportToPDF">
  244. <span class="el-dropdown-link">
  245. <el-icon title="下载"><Download/></el-icon>
  246. </span>
  247. <template #dropdown>
  248. <el-dropdown-menu>
  249. <el-dropdown-item command="four">4联卡纸</el-dropdown-item>
  250. <el-dropdown-item command="a4">A4纸</el-dropdown-item>
  251. <el-dropdown-item command="a3">A3纸</el-dropdown-item>
  252. </el-dropdown-menu>
  253. </template>
  254. </el-dropdown> -->
  255. <i title="重命名" class="el-icon iconfont icon-rename" @click="handlemtk(items)"></i>
  256. <!-- <el-icon title="重命名"
  257. @click="
  258. downloadByUrl({
  259. url: items.filesUrl,
  260. fileName: items.filesTitle,
  261. })
  262. "
  263. ><Download
  264. /></el-icon> -->
  265. <el-icon title="编辑"
  266. v-if="!show && items.createType != 'upload'"
  267. @click="handledrawCasePhotos(items.id)"
  268. ><Edit
  269. /></el-icon>
  270. <el-icon v-if="!show" @click="del2(items)" title="删除"
  271. ><CircleClose
  272. /></el-icon>
  273. </div>
  274. </div>
  275. </div>
  276. </div>
  277. </el-tab-pane>
  278. </el-tabs>
  279. </div>
  280. </div>
  281. <!-- 现场照片 -->
  282. <div class="abstractCentenr" v-if="active1 == '现场照片'">
  283. <div class="centerTop" v-show="!show">
  284. <div class="import" @click="handleYr">
  285. <el-icon size="26" color="#26559B">
  286. <i
  287. style="font-size: 26px; color: #26559b"
  288. class="iconfont icon-import"
  289. ></i
  290. ></el-icon>
  291. <div class="name">导入</div>
  292. </div>
  293. <el-upload
  294. class="upload-demo upload"
  295. multiple
  296. :show-file-list="false"
  297. :before-upload="imgupload"
  298. :file-list="imgfileLists"
  299. :http-request="uploadNewFile"
  300. :on-success="handleSuccess"
  301. :on-preview="imgpreviewFile"
  302. :accept="imgaccept"
  303. drag
  304. action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"
  305. >
  306. <el-icon class="el-icon--upload" style="margin-top: 20px" size="26">
  307. <i
  308. style="font-size: 26px; color: #26559b"
  309. class="iconfont icon-Upload"
  310. ></i
  311. ></el-icon>
  312. <div class="el-upload__text">
  313. 点击或拖拽文件上传<br />支持 jpg、png、jpeg ≤ 50MB
  314. </div>
  315. </el-upload>
  316. </div>
  317. <div class="centerBottom">
  318. <div class="imgList">
  319. <viewImg
  320. :key="childrenList.value"
  321. :list="childrenList.caseFilesList || []"
  322. @handleEdit="handleEdit"
  323. @refresh="getList"
  324. />
  325. </div>
  326. </div>
  327. </div>
  328. <!-- 现场图 -->
  329. <div class="abstractCentenr" v-if="active1 == '现场图'">
  330. <div class="imgSrcimport noView" v-if="!childrenList.src">暂无数据</div>
  331. <div class="imgSrccentenr" v-else>
  332. <img
  333. @click="handleView(childrenList.src)"
  334. :src="childrenList.src"
  335. class="noView viewImg"
  336. alt=""
  337. />
  338. </div>
  339. </div>
  340. <!-- 勘验笔录 -->
  341. <div class="abstractCentenr" v-if="active1 == '勘验笔录'">
  342. <div
  343. class="kybl"
  344. v-if="childrenList.item && childrenList.item.createType == 'online'"
  345. >
  346. <div class="title">现场勘验笔录</div>
  347. <div class="kyblid">勘验号:{{ data.inquestNum }}</div>
  348. <div>现场勘验单位:{{ data.deptName }}</div>
  349. <div>指派/报告单位:{{ data.reportDept }}</div>
  350. <div>时间:{{ data.inquestTime }}</div>
  351. <div>勘验事由:{{ data.inquestResource }}</div>
  352. <div>现场勘验时间:
  353. <span v-if="data.times && data.times[0]">{{ dayjs(data.times[0]).format("YYYY-MM-DD HH:mm:ss") }} ~ {{ dayjs(data.times[1]).format("YYYY-MM-DD HH:mm:ss") }}</span>
  354. </div>
  355. <div>现场地点:{{ data.address }}</div>
  356. <div>现场保护情况:{{ data.protectionSituation }}</div>
  357. <div>
  358. 现场保护人:姓名 {{ data.protector.name }}单位
  359. {{ data.protector.unit }}职务 {{ data.protector.job }}
  360. </div>
  361. <div>
  362. 保护措施:
  363. <el-checkbox-group class="checkbox" v-model="data.protectionMeasures">
  364. <el-checkbox :value="0" label="专人看护现场,防止他人进入" />
  365. <el-checkbox :value="1" checked label="设立警戒带,划定禁行区域" />
  366. <el-checkbox :value="2" label="其他措施" />
  367. </el-checkbox-group>
  368. </div>
  369. <div>
  370. 现场情况:
  371. <el-checkbox-group class="checkbox" v-model="data.situation">
  372. <el-checkbox :value="0" label="原始现场" />
  373. <el-checkbox :value="1" checked label="变动现场" />
  374. </el-checkbox-group>
  375. </div>
  376. <div>
  377. 变动原因:
  378. <el-checkbox-group class="checkbox" v-model="data.changeReason">
  379. <el-checkbox :value="0" label="事主进入" />
  380. <el-checkbox :value="1" label="报案人进入" />
  381. <el-checkbox :value="2" label="其他" />
  382. </el-checkbox-group>
  383. <span style="margin-left: 20px" v-if="data.changeReasonOtherValue">{{ data.changeReasonOtherValue }}</span>
  384. </div>
  385. <div>
  386. 天气:
  387. <el-checkbox-group class="checkbox" v-model="data.weatherInfo.type">
  388. <el-checkbox :value="0" label="阴" />
  389. <el-checkbox :value="1" label="晴" />
  390. <el-checkbox :value="2" label="雨" />
  391. <el-checkbox :value="3" label="雾" />
  392. </el-checkbox-group>
  393. <span>温度:{{ data.weatherInfo.temperature }}℃</span>
  394. <span>湿度:{{ data.weatherInfo.humidity }}%</span>
  395. <span>风向:{{ data.weatherInfo.windDirection }}</span>
  396. </div>
  397. <div>
  398. 现场勘验利用的光线:
  399. <el-checkbox-group class="checkbox" v-model="data.light">
  400. <el-checkbox :value="0" checked label="自然光" />
  401. <el-checkbox :value="1" checked label="灯光" />
  402. <el-checkbox :value="2" label="特种光" />
  403. </el-checkbox-group>
  404. </div>
  405. <div>
  406. 现场勘验指挥人:姓名{{ data.inquestCommander.name }}单位{{
  407. data.inquestCommander.unit
  408. }}职务{{ data.inquestCommander.job }}
  409. </div>
  410. <div>现场勘验情况:{{ data.inquestSituation }}</div>
  411. <div>
  412. 现场勘验制图 {{ data.imageNum }} 张;照相 {{
  413. data.photographNum
  414. }} 张;摄像 {{ data.photographyMinNum }} 分{{
  415. data.photographySecNum
  416. }}秒;录音{{ data.recordingMinNum }} 分{{ data.recordingSecNum }}秒;
  417. </div>
  418. <div>
  419. 现场勘验记录人员:
  420. <div class="list">
  421. <div
  422. v-for="(info, index) in data.recorderInfo"
  423. :key="index"
  424. v-show="info.name || info.unit || info.job"
  425. >
  426. {{ info.typeLabel }} 姓名: {{ info.name }} 单位:
  427. {{ info.unit }} 职务:
  428. {{ info.job }}
  429. </div>
  430. </div>
  431. </div>
  432. <div>
  433. 现场勘验人员:
  434. <div class="list">
  435. <div
  436. v-for="(info, index) of data.signatureInfo"
  437. :key="index"
  438. v-show="info.name || info.unit || info.job"
  439. >
  440. 姓名: {{ info.name || "_____" }} 单位: {{ info.unit }} 职务:
  441. {{ info.job }}
  442. </div>
  443. </div>
  444. </div>
  445. <div>
  446. 现场勘验见证人:
  447. <div class="list">
  448. <div
  449. v-for="(info, index) of data.witnessInfo"
  450. :key="index"
  451. v-show="info.sex || info.birthday || info.address"
  452. >
  453. 姓名: {{ info.name || "_____" }} 性别:
  454. {{ info.sex ? "女" : "男" }}出生日期:
  455. {{
  456. info.birthday && dayjs(info.birthday).format("YYYY-MM-DD")
  457. }}
  458. 住址: {{ info.address }}
  459. </div>
  460. </div>
  461. </div>
  462. <div>备注:{{ data.remark }}</div>
  463. </div>
  464. <div class="imgSrccentenr" v-else-if="isImage(childrenList.src)">
  465. <img
  466. @click="handleView(childrenList.src)"
  467. :src="childrenList.src"
  468. class="noView viewImg"
  469. alt=""
  470. />
  471. </div>
  472. <div class="noView" v-else>
  473. <div
  474. class="noViewTitle"
  475. v-if="childrenList.item && childrenList.item.filesUrl"
  476. >
  477. <div class="zbzc">暂不支持预览</div>
  478. <div
  479. class="cursor-pointer down"
  480. @click="
  481. downloadByUrl({
  482. fileName: childrenList.item && childrenList.item.filesTitle,
  483. url: childrenList.item && childrenList.item.filesUrl,
  484. })
  485. "
  486. >
  487. 下载
  488. </div>
  489. </div>
  490. <div v-else class="noViewTitle">暂无数据</div>
  491. </div>
  492. </div>
  493. <div class="abstractCentenr" style="padding: 0" v-if="active1 == '照片卷'">
  494. <showpages ref="showPagesRef" :photos="photos" v-if="childrenList.src" :content="childrenList.src"/>
  495. <div v-else class="noView" >
  496. <div
  497. class="noViewTitle"
  498. v-if="childrenList.item && childrenList.item.filesUrl"
  499. >
  500. <div class="zbzc">暂不支持预览</div>
  501. </div>
  502. <div v-else class="noViewTitle">暂无数据</div>
  503. </div>
  504. </div>
  505. </div>
  506. </template>
  507. <script setup lang="ts">
  508. import viewImg from "@/components/viewImg/list.vue";
  509. import { computed, ref, reactive } from "vue";
  510. import { addCaseScenes, exportCasePhotos } from "./quisk";
  511. import showpages from "./showpages.vue";
  512. import {
  513. updateByTreeFileLists,
  514. getByTreeFileLists,
  515. getCasePhotoRollList,
  516. caseExportImg,
  517. overviewAdd,
  518. TabulationAdd,
  519. } from "@/store/case";
  520. import { ElMessage, ElMessageBox, ElLoading } from "element-plus";
  521. import { delCaseFile } from "@/store/caseFile";
  522. import {
  523. uploadNewFile,
  524. addByMediaLiBrary,
  525. getSceneListHasAi,
  526. getCaseInquestInfoOld,
  527. casePhotoUpdate,
  528. casePhotodel,
  529. getAllPhotoList,
  530. show,
  531. } from "@/store/case";
  532. import {
  533. downloadFile,
  534. downloadByUrl,
  535. isImage,
  536. recursiveSearch,
  537. } from "@/util/index.ts";
  538. import { caseOverviewDel } from "@/store/case";
  539. import dayjs from "dayjs";
  540. import { recorderInfoType, ChangeReasonType } from "./formData.ts";
  541. import {
  542. Upload,
  543. DocumentAdd,
  544. CircleCheck,
  545. Delete,
  546. Download,
  547. CircleClose,
  548. Edit,
  549. Plus,
  550. } from "@element-plus/icons-vue";
  551. import { RouteName, router } from "@/router";
  552. import { useUpload } from "@/hook/upload";
  553. import { addCaseFile, setTypeFile, addSceneImg1, addSceneImg2 } from "./quisk";
  554. const caseId = computed(() => router.currentRoute.value?.params?.caseId);
  555. const filesTypeId = ref(0);
  556. const ImgsrcList = ref([]);
  557. const active1 = ref('现场图');
  558. const active = ref(true);
  559. const urlindex = ref(-1);
  560. const canvas = ref(null);
  561. const editor = ref(null);
  562. const tabsRef = ref(null);
  563. const showText = ref(show.value?false:true);
  564. const settype = ref(false);
  565. const childrenList = ref({
  566. list: [],
  567. value: "",
  568. parentId: 0,
  569. src: "",
  570. filesId: 0,
  571. item: {},
  572. caseFilesList: [],
  573. });
  574. const casePhotoItem = ref({
  575. id: '',
  576. name: '',
  577. content: '',
  578. show: false,
  579. })
  580. const showPagesRef = ref(null);
  581. const data = reactive({
  582. title: "",
  583. inquestNum: "", //现场勘验号
  584. deptName: "", //单位名称
  585. sendDept: "", //发送单位
  586. issuanceCount: "", // 份数
  587. makeTime: "", //制作时间
  588. recorder: "", // 笔录人
  589. issuanceOpinion: "", //签发意见
  590. reportDept: "", //报告单位
  591. times: [], // startTime ,endTime
  592. address: "", // 勘验地址
  593. inquestTime: "", //勘验时间
  594. inquestResource:
  595. "x年x月x日x单位接到报警称;x年x月x日x地点发生一起什么案事件,需要勘验现场, 接通知后,技术员xx,xx前往现场考察", //勘验范围
  596. protector: {
  597. name: "",
  598. unit: "",
  599. job: "",
  600. }, // 现场保护人
  601. protectionSituation: "", // 现场保护情况
  602. situation: [], //现场情况
  603. changeReason: [],
  604. changeReasonOtherValue: "",
  605. protectionMeasures: [], //保护措施
  606. weatherInfo: {
  607. type: [],
  608. temperature: "",
  609. humidity: "",
  610. windDirection: "",
  611. }, //天气情况
  612. light: [], //光线
  613. painter: "",
  614. photographer: "",
  615. inquestCommander: {
  616. name: "",
  617. unit: "",
  618. job: "",
  619. }, //现场勘验指挥人
  620. inquestSituation:
  621. "案发现场以XXX小区为中心,东侧为XXX路,西侧是XXX街,北侧为XXX路,南侧是XXX路。", //现场勘验情况
  622. imageNum: 0, //现场勘验制图数量
  623. photographNum: 0, //照相数量
  624. photographyMinNum: 0, //摄影数量
  625. photographySecNum: 0, //摄影数量
  626. recordingMinNum: "",
  627. recordingSecNum: "",
  628. recorderInfo: JSON.parse(JSON.stringify(recorderInfoType)),
  629. signatureInfo: [], //现场勘验人员
  630. witnessInfo: [],
  631. remark: "",
  632. });
  633. const xczpfilesTypeId = ref(1);
  634. const photos = ref([]);
  635. const showModal = ref(false);
  636. const srcList = ref([]);
  637. const klblId = ref(0);
  638. const fileLists = ref([]);
  639. const imgfileLists = ref([]);
  640. const list = ref([]);
  641. const fileList = ref([]);
  642. const casePhotoList = ref([{
  643. id: 0,
  644. name: '现场照片',
  645. caseId: 336,
  646. content:'现场照片',
  647. }]);
  648. const activeNames = ref(["1"]);
  649. const { size, upload, removeFile, previewFile, file, accept } = useUpload({
  650. maxSize: 10 * 1024 * 1024,
  651. formats: [".doc", ".docx", ".pdf"],
  652. });
  653. const {
  654. size: imgSize,
  655. fileList: imgfileList,
  656. upload: imgupload,
  657. file: imgfile,
  658. previewFile: imgpreviewFile,
  659. accept: imgaccept,
  660. } = useUpload({
  661. maxSize: 50 * 1024 * 1024,
  662. formats: [".jpg", ".png", ".jpeg", ".bmp"], //".mp4", ".wav", ".mp3", ".shp"
  663. });
  664. const handleChange = (val: string[]) => {
  665. console.log(val);
  666. };
  667. const getImgList = async () => {
  668. let imgList = await getAllPhotoList(filesTypeId.value)
  669. photos.value = imgList.map(ele => ({...ele, url: ele.filesUrl,id: ele.filesId, name: ele.filesTitle})) || [];
  670. }
  671. getList();
  672. function handleActive(params) {
  673. console.log("handleActive", params);
  674. }
  675. const initInfo = async (inquestFileId) => {
  676. const res = await getCaseInquestInfoOld(inquestFileId || fileId.value);
  677. for (var k in data) {
  678. if (res.data && res.data.hasOwnProperty(k)) {
  679. // console.log("Key is " + k);
  680. if (res.data[k]) {
  681. data[k] = res.data[k];
  682. }else{
  683. data[k] = '';
  684. }
  685. }
  686. }
  687. };
  688. function handleSuccess(item) {
  689. let uploadId = item?.data.id;
  690. addByMediaLiBrary({
  691. caseId: caseId.value,
  692. filesTypeId: active1.value == '勘验笔录' ? klblId.value : childrenList.value.value,
  693. uploadId,
  694. }).then((res) => {
  695. fileLists.value = [];
  696. imgfileLists.value = [];
  697. getList(true);
  698. });
  699. }
  700. function getList(refresh = false) {
  701. //new 0 现场图 1 照片卷 2 现场照片 3 勘验笔录
  702. //old 0 现场照片 1 现场图 2 勘验笔录
  703. getCasePhotoRollList(caseId.value).then(res => {
  704. casePhotoList.value = res || []
  705. if(active1.value == '照片卷' && res && res.length){
  706. handlItem2(res[0])
  707. }
  708. })
  709. updateByTreeFileLists(caseId.value).then((res) => {
  710. list.value =
  711. res.find((ele) => ele.filesTypeName == "三录材料")?.childrenList || [];
  712. klblId.value = list.value.find(
  713. (ele) => ele.filesTypeName == "勘验笔录"
  714. ).filesTypeId;
  715. let zpj = list.value.find((ele) => ele.filesTypeName == "现场照片");
  716. filesTypeId.value = zpj.filesTypeId
  717. getImgList()
  718. if (show.value) {
  719. //展示也过滤现场照片空数据
  720. list.value[0].childrenList.map((ele) => {
  721. ele.childrenList =
  722. ele.childrenList?.filter((element) => element.caseFilesList) || [];
  723. return ele;
  724. });
  725. console.log("list", list.value);
  726. list.value[1].childrenList.map((ele) => {
  727. ele.caseFilesList =
  728. ele.caseFilesList?.filter((element) => element.filesUrl) || [];
  729. return ele;
  730. });
  731. }
  732. if (!refresh) {
  733. handleClick({
  734. paneName: active1.value,
  735. childrenListvalue: childrenList.value,
  736. });
  737. return;
  738. }
  739. let item = list.value.find((item) => item.filesTypeName == active1.value);
  740. let arr2 = [];
  741. if (active1.value == '现场照片' || active1.value == '现场图') {//现场图和勘验笔录
  742. item.childrenList.map((ele) => {
  743. if (ele.caseFilesList && ele.caseFilesList.length) {
  744. ele.caseFilesList.map((element) => {
  745. element.filesUrl && arr2.push(element);
  746. });
  747. } else {
  748. arr2.push(...ele.childrenList);
  749. }
  750. });
  751. }
  752. if (active1.value == '现场照片' && childrenList.value.parentId) {//现场照片
  753. item = item.childrenList.find(
  754. (ele) => ele.filesTypeId == childrenList.value.parentId
  755. );
  756. }
  757. if (active1.value == '现场图' && !childrenList.value.parentId) {
  758. item = item.childrenList[0];
  759. }
  760. console.log("activeItem", list.value, "arr2", arr2, item);
  761. srcList.value =
  762. active1.value == '现场照片' || active1.value == '现场图' ? arr2 : item.childrenList;
  763. console.log("srcList", srcList.value, item, childrenList, active1.value);
  764. let activeIndex =
  765. srcList.value.findIndex(
  766. (item) => item.filesTypeId == childrenList.value.value
  767. ) || 0;
  768. if (!childrenList.value.value) {
  769. activeIndex = 0;
  770. }
  771. let activeItem = srcList.value[activeIndex];
  772. console.log(
  773. "activeItem",
  774. activeItem,
  775. activeIndex,
  776. "arr2",
  777. list.value,
  778. item
  779. );
  780. if (!activeItem) return;
  781. childrenList.value.value = activeItem.filesTypeId;
  782. childrenList.value.parentId = activeItem.parentId;
  783. childrenList.value.filesId = activeItem.filesId;
  784. childrenList.value.item = activeItem;
  785. childrenList.value.src =
  786. activeItem.filesUrl ||
  787. (activeItem.caseFilesList && activeItem.caseFilesList[0]?.filesUrl);
  788. childrenList.value.caseFilesList =
  789. active1.value == '勘验笔录' || active1.value == '现场照片'
  790. ? activeItem.caseFilesList
  791. : activeItem.childrenList;
  792. });
  793. }
  794. async function handleAdd() {
  795. await addCaseFile({ caseId: caseId.value, filesTypeName: ["三录材料"] });
  796. getList(true);
  797. }
  798. const handleClick = (a) => {
  799. let { paneName, childrenListvalue } = a;
  800. let newImgsrcList = [];
  801. let index = list.value.findIndex((item) => item.filesTypeName == paneName);
  802. console.log("handleClick", a ,paneName, list.value, index);
  803. let childrenLists = list.value[index].childrenList;
  804. console.log("handleClickchildrenLists", list.value, index, childrenLists);
  805. if (childrenListvalue && show.value) {
  806. setTimeout(() => {
  807. let indexshow1 = recursiveSearch(list.value[0].childrenList);
  808. let indexshow2 = recursiveSearch(list.value[2].childrenList);
  809. let indexshow3 = recursiveSearch([list.value[3]]);
  810. let tabsdom0 = document.getElementById("tab-现场图");
  811. let tabsdom1 = document.getElementById("tab-现场照片");
  812. let tabsdom2 = document.getElementById("tab-勘验笔录");
  813. if (!indexshow1 && tabsdom0) tabsdom0.style.display = "none";
  814. if (!indexshow2 && tabsdom1) tabsdom1.style.display = "none";
  815. if (!indexshow3 && tabsdom2) tabsdom2.style.display = "none";
  816. if (indexshow1) {
  817. } else if (indexshow2) {
  818. active1.value = '现场照片';
  819. handleClick({paneName: active1.value})
  820. } else {
  821. active1.value = '勘验笔录 ';
  822. handleClick({paneName: active1.value})
  823. }
  824. showText.value = true
  825. }, 500);
  826. }
  827. if (paneName == '现场照片') {
  828. //现场照片
  829. let ArrList = [];
  830. childrenLists.map(ele => {
  831. ArrList.push(...ele.childrenList)
  832. })
  833. let newindex = ArrList.findIndex(
  834. (items) => items.caseFilesList && items.caseFilesList.length
  835. );
  836. newindex = newindex == -1?0:newindex
  837. let activeItem =ArrList[newindex] || {};
  838. console.log("handleClick", activeItem, childrenLists);
  839. if(!activeItem) return
  840. childrenList.value.value = activeItem.filesTypeId;
  841. childrenList.value.parentId = activeItem.parentId;
  842. childrenList.value.filesId = activeItem.filesId;
  843. childrenList.value.src = activeItem.filesUrl;
  844. childrenList.value.caseFilesList = activeItem.caseFilesList || [];
  845. let newSrc = [];
  846. childrenLists &&
  847. childrenLists.map((ele) => {
  848. ele.caseFilesList && newSrc.push(...ele.caseFilesList);
  849. });
  850. newImgsrcList = newSrc.map((ele) => ele.filesUrl);
  851. } else if (paneName == '勘验笔录') {
  852. //笔录
  853. let activeItem =
  854. (list.value[index].caseFilesList && list.value[index].caseFilesList[0]) ||
  855. {};
  856. childrenList.value.value = activeItem.filesId;
  857. childrenList.value.parentId = activeItem.parentId;
  858. childrenList.value.src = activeItem.filesUrl;
  859. childrenList.value.item = activeItem;
  860. childrenList.value.caseFilesList = [];
  861. activeItem.createType == "online" && initInfo(activeItem.filesId);
  862. let newSrc =
  863. (list.value[index].caseFilesList &&
  864. list.value[index].caseFilesList.map((ele) => ele.filesUrl)) ||
  865. [];
  866. console.log("handleClick", newSrc, childrenLists.caseFilesList);
  867. newImgsrcList = newSrc.filter((ele) => isImage(ele));
  868. } else if (paneName == '照片卷') {
  869. childrenList.value.src =''
  870. //照片卷
  871. let activeItem = casePhotoList.value[0]
  872. console.log("handleClick", childrenLists,activeItem);
  873. childrenList.value.src = activeItem.content;
  874. childrenList.value.item = activeItem;
  875. childrenList.value.filesId = activeItem.id;
  876. childrenList.value.value = activeItem.id;
  877. } else {
  878. //现场图
  879. let ArrList = [];
  880. let index1 = 0,
  881. index2 = 0;
  882. index1 = childrenLists.findIndex((ele) => {
  883. index2 = ele.childrenList.findIndex(
  884. (element) => element.caseFilesList && element.caseFilesList.length
  885. );
  886. return index2 != -1;
  887. });
  888. console.log("handleClick", childrenLists, ArrList,index1,index2);
  889. let activeItem =
  890. list.value[index].childrenList[index1 == -1?0:index1]?.childrenList[index2 == -1?0:index2] || {};
  891. childrenList.value.value = activeItem.filesTypeId;
  892. childrenList.value.parentId = activeItem.parentId;
  893. childrenList.value.caseFilesList = activeItem.caseFilesList || [];
  894. }
  895. getList(true);
  896. ImgsrcList.value = newImgsrcList.filter((ele) => isImage(ele));
  897. };
  898. function handlItem0(item) {
  899. childrenList.value.value = item.filesTypeId;
  900. childrenList.value.parentId = item.parentId;
  901. childrenList.value.src = item.filesUrl;
  902. childrenList.value.filesId = item.filesId;
  903. childrenList.value.caseFilesList = item.caseFilesList;
  904. console.log("handleClick", item, childrenList.value);
  905. }
  906. function handlItem1(item) {
  907. childrenList.value.value = item.filesId;
  908. childrenList.value.filesId = item.filesId;
  909. childrenList.value.item = item;
  910. childrenList.value.src = item.filesUrl;
  911. item.createType == "online" && initInfo(item.filesId);
  912. // childrenList.value.caseFilesList = item.caseFilesList || [];
  913. console.log("handleClick", item, childrenList.value);
  914. }
  915. const handlItem2 = (item) => {
  916. console.log("handlItem2", item, childrenList.value);
  917. childrenList.value.value = item.id;
  918. childrenList.value.filesId = item.id;
  919. childrenList.value.item = item;
  920. childrenList.value.src = item.content;
  921. }
  922. const handleClick2 = (item) => {
  923. console.log("handleClick2", item);
  924. childrenList.value.value = item.filesTypeId;
  925. childrenList.value.parentId = item.parentId;
  926. childrenList.value.caseFilesList =
  927. (item.caseFilesList &&
  928. item.caseFilesList.map((ele) => {
  929. return {
  930. ...ele,
  931. checked: false,
  932. };
  933. })) ||
  934. [];
  935. console.log("handleClick2", item);
  936. };
  937. const handleCommand = async (command, a) => {
  938. if (command == "绘图") {
  939. let addurl = a.filesTypeName == "方位图" ? TabulationAdd : overviewAdd;
  940. let resData = await addurl({
  941. type: a.filesTypeName == "方位图" ? 1 : 0,
  942. title: "",
  943. caseId: caseId.value,
  944. });
  945. // let params = {
  946. // caseId: caseId.value,
  947. // tabulationIds: a.filesTypeName == "方位图" ? [resData.id] : undefined,
  948. // overviewIds : a.filesTypeName != "方位图" ? [resData.id] : undefined,
  949. // };
  950. // await caseExportImg(params);
  951. getList(true);
  952. // window.open(a.filesTypeName != "方位图"?`/draw/#/overview?caseId=${caseId.value}&overviewId=${resData.id}`:`/draw/#/tabulation?caseId=${caseId.value}&tabulationId=${resData.id}`);
  953. } else {
  954. let addFun = a.filesTypeName == "方位图" ? addSceneImg1 : addSceneImg2;
  955. let ids = await addFun({
  956. type: a.filesTypeName == "方位图" ? 1 : 0,
  957. title: a.filesTypeName,
  958. // dictId: filesTypeId,
  959. });
  960. let params = {
  961. caseId: caseId.value,
  962. overviewIds: a.filesTypeName != "方位图" ? ids : undefined,
  963. tabulationIds: a.filesTypeName == "方位图" ? ids : undefined,
  964. };
  965. if (ids && ids.length) {
  966. await caseExportImg(params);
  967. getList(true);
  968. }
  969. }
  970. };
  971. const del = async (file) => {
  972. console.log(file, "file");
  973. ElMessageBox.confirm("确定删除?", "提示", {
  974. confirmButtonText: "确定",
  975. cancelButtonText: "取消",
  976. type: "warning",
  977. }).then(async () => {
  978. await delCaseFile({ caseId: caseId.value, filesId: file.filesId });
  979. ElMessage({
  980. type: "success",
  981. message: "删除成功",
  982. });
  983. childrenList.value.src = "";
  984. childrenList.value.value = "";
  985. getList(true);
  986. });
  987. };
  988. const del2 = async (file) => {
  989. console.log(file, "file");
  990. ElMessageBox.confirm("确定删除?", "提示", {
  991. confirmButtonText: "确定",
  992. cancelButtonText: "取消",
  993. type: "warning",
  994. }).then(async () => {
  995. await casePhotodel({ caseId: caseId.value, id: file.id });
  996. ElMessage({
  997. type: "success",
  998. message: "删除成功",
  999. });
  1000. childrenList.value.src = "";
  1001. childrenList.value.value = "";
  1002. getList(true);
  1003. });
  1004. };
  1005. const OverviewDel = async (file, filesTypeName) => {
  1006. console.log(file, "file");
  1007. ElMessageBox.confirm("确定删除?", "提示", {
  1008. confirmButtonText: "确定",
  1009. cancelButtonText: "取消",
  1010. type: "warning",
  1011. }).then(async () => {
  1012. await delCaseFile({ caseId: caseId.value, filesId: file.filesId });
  1013. // await caseOverviewDel({ tabulationId: file.tabulationId ,overviewId:file.overviewId, type: filesTypeName });
  1014. ElMessage({
  1015. type: "success",
  1016. message: "删除成功",
  1017. });
  1018. childrenList.value.value = "";
  1019. childrenList.value.src = "";
  1020. getList(true);
  1021. });
  1022. };
  1023. async function handleItem(type, item) {
  1024. console.log("handleItem", type, item);
  1025. if (type == "edit") {
  1026. await setTypeFile({
  1027. ...item,
  1028. caseId: caseId.value,
  1029. fileOptions: list.value,
  1030. });
  1031. }
  1032. getList(true);
  1033. }
  1034. function handleoverviewEdit(type, item) {
  1035. let url = `/draw/#/tabulation?caseId=${caseId.value}&tabulationId=${item.tabulationId}`;
  1036. if ("平面图" == type) {
  1037. url = `/draw/#/overview?caseId=${caseId.value}&overviewId=${item.overviewId}&title=${item.filesTypeName}`;
  1038. // gotoDraw(item.filesTypeId != pmtId.value? BoardType.scene : BoardType.map, item.filesId)
  1039. }
  1040. window.open(url);
  1041. // getList();
  1042. }
  1043. function handleRecords(fileId) {
  1044. router.push({
  1045. name: RouteName.records,
  1046. params: { caseId: caseId.value, fileId: fileId || -1 },
  1047. });
  1048. }
  1049. async function handleYr() {
  1050. let uploadIds = await addCaseScenes({
  1051. caseId: caseId.value,
  1052. fileTypes: [0],
  1053. formats: [".jpg", ".png", ".jpeg", ".bmp"],
  1054. filesTypeId: childrenList.value.value,
  1055. });
  1056. if (uploadIds == false || (uploadIds && uploadIds.length == 0)) {
  1057. return;
  1058. }
  1059. await addByMediaLiBrary({
  1060. caseId: caseId.value,
  1061. uploadIds,
  1062. filesTypeId: childrenList.value.value,
  1063. });
  1064. getList(true);
  1065. }
  1066. const handleEdit = async (lists) => {
  1067. console.log(
  1068. "handleEdit",
  1069. list.value,
  1070. lists,
  1071. lists.map((ele) => ele.filesId)
  1072. );
  1073. let item = list.value.find(ele => ele.filesTypeName == active1.value);
  1074. await setTypeFile({
  1075. caseId: caseId.value,
  1076. // filesId: lists.map(ele => ele.filesId),
  1077. filesTypeId: childrenList.value.value,
  1078. fileOptions: item.childrenList,
  1079. filesIds: lists.map((ele) => ele.filesId),
  1080. });
  1081. getList(true);
  1082. };
  1083. async function handledrawCasePhotos(val) {
  1084. const id = Array.isArray(val) ? val.toString() : val;
  1085. router.push({
  1086. name: RouteName.drawCasePhotos,
  1087. params: { caseId: caseId.value! },
  1088. query: {
  1089. id: id,
  1090. filesTypeId: filesTypeId.value,
  1091. }
  1092. });
  1093. console.log("handleAdd");
  1094. }
  1095. const handleView = (src) => {
  1096. if (src && !ImgsrcList.value.includes(src)) {
  1097. ImgsrcList.value.push(src);
  1098. }
  1099. urlindex.value = ImgsrcList.value.findIndex((ele) => ele == src);
  1100. };
  1101. const handleIsShow = (item) => {
  1102. if (!show.value) return true;
  1103. return !recursiveSearch(item && item.childrenList);
  1104. };
  1105. const handlemtk = (item) => {
  1106. casePhotoItem.value = {
  1107. show: true,
  1108. ...item,
  1109. };
  1110. // ElMessageBox.prompt("", "重命名", {
  1111. // confirmButtonText: "确定",
  1112. // customClass: "promptClass",
  1113. // cancelButtonText: "取消",
  1114. // showClose: true,
  1115. // inputValue: item.name,
  1116. // inputValidator: (value) => {
  1117. // if (!value) {
  1118. // return false;
  1119. // }
  1120. // return true;
  1121. // },
  1122. // inputErrorMessage: "请输入名称",
  1123. // })
  1124. // .then(async ({ value }) => {
  1125. // ElMessage({
  1126. // type: "success",
  1127. // message: `修改成功`,
  1128. // });
  1129. // })
  1130. // .catch(() => {
  1131. // });
  1132. };
  1133. const handleConfirm = async () => {
  1134. let value = casePhotoItem.value.name;
  1135. if(!value){
  1136. return ElMessage.error("请输入修改名称");;
  1137. }
  1138. await casePhotoUpdate({
  1139. ...casePhotoItem.value,
  1140. name: value,
  1141. });
  1142. ElMessage({
  1143. type: "success",
  1144. message: `修改成功`,
  1145. });
  1146. casePhotoItem.value.show = false;
  1147. await getList()
  1148. }
  1149. const exportToPDF = async (isAll) => {
  1150. if(isAll === true){
  1151. await handleOpen(true)
  1152. }
  1153. await exportCasePhotos({showPagesRef: showPagesRef.value})
  1154. console.log("exportToPDF完毕");
  1155. if(isAll){
  1156. await handleOpen(false)
  1157. }
  1158. // showPagesRef.value.exportToPDF(paperType, childrenList.value?.item?.name);
  1159. }
  1160. const handleOpen = (val) => {
  1161. if(!val){
  1162. handleClick({paneName: '照片卷'})
  1163. }else{
  1164. console.log("handleOpen");
  1165. let Alllist = {
  1166. pages: [],
  1167. indexingLineList: [],
  1168. }
  1169. casePhotoList.value.map(ele => {
  1170. let content = ele.content && JSON.parse(ele.content);
  1171. let { pages , indexingLineList } = content
  1172. let xAdd = (600 + 4)*Alllist.pages.length
  1173. if(xAdd){
  1174. indexingLineList = indexingLineList.map(element => {
  1175. let points = element.points.map(item => ({...item,x:item.x+xAdd}))
  1176. return {...element,points}
  1177. })
  1178. }
  1179. Alllist.pages.push(...pages)
  1180. Alllist.indexingLineList.push(...indexingLineList)
  1181. console.log("handleOpen", content);
  1182. })
  1183. childrenList.value.src = Alllist;
  1184. childrenList.value.value = -1;
  1185. console.log("handleOpen", Alllist);
  1186. }
  1187. }
  1188. </script>
  1189. <style scoped lang="scss">
  1190. .scene {
  1191. height: 100%;
  1192. display: flex;
  1193. .scene-list {
  1194. width: var(--leftwidth);
  1195. height: 100%;
  1196. overflow-x: scroll;
  1197. .list {
  1198. .addButton {
  1199. padding: 20px 34px 0 34px;
  1200. margin-left: 0px;
  1201. }
  1202. .listTitle {
  1203. padding: 29px 48px 13px 48px;
  1204. font-weight: bold;
  1205. font-size: 16px;
  1206. color: rgba(0, 0, 0, 0.85);
  1207. line-height: 22px;
  1208. display: flex;
  1209. justify-content: space-between;
  1210. align-items: center;
  1211. .el-icon {
  1212. cursor: pointer;
  1213. }
  1214. }
  1215. .itemList {
  1216. &:hover{
  1217. background: rgba(69,144,255,0.1);;
  1218. }
  1219. .ItemTitle {
  1220. padding: 25px 48px;
  1221. font-weight: 400;
  1222. font-size: 14px;
  1223. color: rgba(0, 0, 0, 0.85);
  1224. line-height: 22px;
  1225. .text{
  1226. overflow: hidden;
  1227. text-overflow: ellipsis;
  1228. display: -webkit-box;
  1229. -webkit-line-clamp: 2;
  1230. /*! autoprefixer: off */
  1231. -webkit-box-orient: vertical;
  1232. word-break: break-all;
  1233. }
  1234. }
  1235. .operation {
  1236. text-align: right;
  1237. margin-top: 16px;
  1238. .el-icon {
  1239. cursor: pointer;
  1240. margin-left: 32px;
  1241. }
  1242. }
  1243. }
  1244. .active {
  1245. background: rgba(69, 144, 255, 0.1);
  1246. }
  1247. }
  1248. }
  1249. .abstractCentenr {
  1250. background: #f5f5f5;
  1251. height: 100%;
  1252. width: calc(100% - var(--leftwidth));
  1253. padding: 32px;
  1254. position: relative;
  1255. .noView {
  1256. position: absolute;
  1257. left: 50%;
  1258. top: 50%;
  1259. transform: translate(-50%, -50%);
  1260. text-align: center;
  1261. .down {
  1262. margin-top: 20px;
  1263. line-height: 32px;
  1264. box-shadow: 0px 2px 0px 0px rgba(0, 0, 0, 0.04);
  1265. border-radius: 2px;
  1266. border: 1px solid #26559b;
  1267. font-size: 14px;
  1268. color: #26559b;
  1269. }
  1270. }
  1271. .viewImg {
  1272. max-width: 95%;
  1273. max-height: 95%;
  1274. object-fit: contain;
  1275. }
  1276. .import {
  1277. margin-right: 20px;
  1278. padding-top: 40px;
  1279. height: 100%;
  1280. width: 148px;
  1281. text-align: center;
  1282. background: #fafafa;
  1283. cursor: pointer;
  1284. }
  1285. .centerTop {
  1286. height: 148px;
  1287. display: flex;
  1288. justify-content: space-between;
  1289. margin-bottom: 32px;
  1290. .upload {
  1291. height: 100%;
  1292. width: calc(100% - 170px);
  1293. }
  1294. }
  1295. .centerBottom {
  1296. .selcet {
  1297. // float: right;
  1298. // text-align: right;
  1299. display: flex;
  1300. justify-content: space-between;
  1301. }
  1302. }
  1303. .kybl {
  1304. padding: 60px;
  1305. background: #ffffff;
  1306. font-weight: 400;
  1307. font-size: 14px;
  1308. color: #000000;
  1309. margin: 24px auto;
  1310. line-height: 28px;
  1311. text-align: left;
  1312. max-width: 1024px;
  1313. word-break: break-all;
  1314. .checkbox {
  1315. display: inline-block;
  1316. }
  1317. .title {
  1318. font-weight: 600;
  1319. font-size: 18px;
  1320. color: rgba(0, 0, 0, 0.85);
  1321. line-height: 24px;
  1322. text-align: center;
  1323. }
  1324. .kyblid {
  1325. text-align: right;
  1326. margin: 16px 0;
  1327. }
  1328. }
  1329. .imgSrcimport {
  1330. display: flex;
  1331. height: 148px;
  1332. }
  1333. .imgSrccentenr {
  1334. max-width: 100%;
  1335. height: auto;
  1336. }
  1337. }
  1338. .title0 {
  1339. font-family: Microsoft YaHei, Microsoft YaHei;
  1340. font-weight: bold;
  1341. font-size: 16px;
  1342. color: rgba(0, 0, 0, 0.85);
  1343. line-height: 22px;
  1344. }
  1345. .demo-tabs {
  1346. margin: 12px 0;
  1347. }
  1348. }
  1349. </style>
  1350. <style lang="scss">
  1351. .sceneImg {
  1352. .el-tabs__header {
  1353. padding: 17px 0 13px 24px;
  1354. .el-tabs__active-bar {
  1355. display: none;
  1356. }
  1357. .el-tabs__item {
  1358. font-weight: 400;
  1359. font-size: 16px;
  1360. color: rgba(0, 0, 0, 0.45);
  1361. &:hover {
  1362. // font-weight: bold;
  1363. font-size: 16px;
  1364. color: #26559b;
  1365. line-height: 22px;
  1366. }
  1367. }
  1368. .is-active {
  1369. // font-weight: bold;
  1370. font-size: 16px;
  1371. color: #26559b;
  1372. line-height: 22px;
  1373. }
  1374. }
  1375. .el-icon:focus-visible {
  1376. outline: none !important;
  1377. }
  1378. .el-dropdown {
  1379. width: auto;
  1380. .el-dropdown-link {
  1381. outline: none !important;
  1382. }
  1383. &:focus-visible {
  1384. }
  1385. }
  1386. .el-checkbox {
  1387. height: 28px;
  1388. // pointer-events: none;
  1389. }
  1390. .kybl {
  1391. .el-checkbox {
  1392. height: 28px;
  1393. pointer-events: none;
  1394. }
  1395. }
  1396. .el-checkbox__label {
  1397. color: rgba(0, 0, 0, 0.85) !important;
  1398. }
  1399. .el-tabs__nav-next, .el-tabs__nav-prev{
  1400. top: -9px;
  1401. }
  1402. }
  1403. </style>