carry-spot-checks.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506
  1. <template>
  2. <div>
  3. <HcDrawer :show="isDrawer" to-id="carry-spot-checks-layout-target"
  4. uis="hc-carry-spot-checks-target" @close="onCarrySpotChecksDrawerClose">
  5. <div class="hc-carry-spot-checks-pdf">
  6. <HcPdf
  7. src="https://bladex-test-info.oss-cn-chengdu.aliyuncs.com//upload/20221212/ce9799c7d18efc03efefd6f242439f2e.pdf"/>
  8. <el-tooltip :disabled="!isBubble" content="展开/收起 右侧目录" placement="top">
  9. <div class="hc-csc-pdf-btn" @click="onCarryDataShow">
  10. <HcIcon v-show="isCarryDataShow" name="arrow-right-s"/>
  11. <HcIcon v-show="!isCarryDataShow" name="arrow-left-s"/>
  12. </div>
  13. </el-tooltip>
  14. </div>
  15. <div v-show="isCarryDataShow" class="hc-carry-spot-checks-data">
  16. <div class="hc-csc-switch">
  17. <HcNewSwitch :datas="tabTypeTab" :keys="tabTypeKey" :round="false" size="default"
  18. @change="tabTypeChange"/>
  19. </div>
  20. <div class="hc-csc-info-box">
  21. <el-scrollbar>
  22. <div class="hc-info-text-item">
  23. <div class="title">案卷题名:</div>
  24. <div class="content">
  25. 安康至来凤国家高速公路奉节至巫山(渝鄂界)段干岩洞隧道LK3+425~LK3+393初期支护钢筋网分项开工报告、检验申请批复单、质量检验报告单、记录表、试验检测记录及评定报告、中间交工证书
  26. </div>
  27. </div>
  28. <div class="hc-info-text-item">
  29. <div class="title">
  30. <span>密</span>
  31. <span class="ml-7">级:</span>
  32. </div>
  33. <div class="content">机密</div>
  34. </div>
  35. <div class="hc-info-text-item">
  36. <div class="title">保管期限:</div>
  37. <div class="content">永久</div>
  38. </div>
  39. <div class="hc-info-text-item">
  40. <div class="title">卷内文件:</div>
  41. <div class="content">9</div>
  42. </div>
  43. <div class="hc-info-text-item">
  44. <div class="title">起止日期:</div>
  45. <div class="content">2022.02.12~2023.11.02</div>
  46. </div>
  47. <div class="hc-info-text-item">
  48. <div class="title">立卷单位:</div>
  49. <div class="content">贵州路桥集团xxxxx</div>
  50. </div>
  51. </el-scrollbar>
  52. </div>
  53. <div class="hc-csc-data-box">
  54. <HcTable v-if="tabTypeKey === 'tab1'" :column="cscTableColumn1" :datas="cscTableData1"
  55. :isIndex="false" :loading="cscTableLoading">
  56. <template #name="{row}">
  57. <div :class="row.id === 2 ? 'text-link' : 'text-hover'">{{ row?.name }}</div>
  58. </template>
  59. </HcTable>
  60. <HcTable v-if="tabTypeKey === 'tab2'" :column="cscTableColumn2" :datas="cscTableData2"
  61. :isIndex="false" :loading="cscTableLoading">
  62. <template #name="{row}">
  63. <div :class="row.id === 2 ? 'text-link' : 'text-hover'">{{ row?.name }}</div>
  64. </template>
  65. </HcTable>
  66. <HcTable v-if="tabTypeKey === 'tab3'" :column="cscTableColumn3" :datas="cscTableData3"
  67. :isIndex="false" :loading="cscTableLoading">
  68. <template #name="{row}">
  69. <div :class="row.id === 2 ? 'text-link' : 'text-hover'">{{ row?.name }}</div>
  70. </template>
  71. </HcTable>
  72. <HcTable v-if="tabTypeKey === 'tab4'" :column="cscTableColumn4" :datas="cscTableData4"
  73. :isIndex="false" :loading="cscTableLoading">
  74. <template #name="{row}">
  75. <div :class="row.id === 2 ? 'text-link' : 'text-hover'" class="hc-csc-associated-row">
  76. <el-tag effect="dark">{{ row?.tag }}</el-tag>
  77. <span class="ml-3">{{ row?.name }}</span>
  78. </div>
  79. </template>
  80. </HcTable>
  81. <MetaTable v-if="tabTypeKey === 'tab5'" :loading="cscTableLoading"/>
  82. <HcTable v-if="tabTypeKey === 'tab6'" :column="cscTableColumn5" :datas="cscTableData5"
  83. :loading="cscTableLoading"/>
  84. <el-tooltip v-if="tabTypeKey === 'tab6' || tabTypeKey === 'tab5'" :disabled="!isBubble"
  85. content="使用弹窗查看数据"
  86. placement="top">
  87. <div class="hc-table-info-btn" @click="cscTableDataModalShow">
  88. <HcIcon name="airplay"/>
  89. </div>
  90. </el-tooltip>
  91. </div>
  92. <div class="hc-csc-action-box">
  93. <div class="header-box">
  94. <div class="title">抽检意见:</div>
  95. <div class="extra">
  96. <el-checkbox v-model="reform.type" class="size-xl">需要整改</el-checkbox>
  97. </div>
  98. </div>
  99. <div class="textarea-box">
  100. <el-input v-model="reform.content" :autosize="{ minRows: 5}" placeholder="请填写抽检意见"
  101. resize="none"
  102. type="textarea"/>
  103. </div>
  104. <div class="btn-box">
  105. <el-button hc-btn @click="onCarrySpotChecksDrawerClose">
  106. <HcIcon name="close"/>
  107. <span>{{ closeText }}</span>
  108. </el-button>
  109. <el-button hc-btn type="primary" @click="checkClick">
  110. <HcIcon name="check"/>
  111. <span>{{ checkText }}</span>
  112. </el-button>
  113. </div>
  114. </div>
  115. </div>
  116. </HcDrawer>
  117. <!--使用弹窗查看数据-->
  118. <HcDialog :footer="false" :show="cscTableDataModal" :title="cscTableDataTitle" isTable widths="1080px"
  119. @close="cscTableDataModalClose">
  120. <MetaTable v-if="tabTypeKey === 'tab5'" :loading="cscTableLoading"/>
  121. <HcTable v-if="tabTypeKey === 'tab6'" :column="cscTableColumn51" :datas="cscTableData5"
  122. :loading="cscTableLoading"/>
  123. </HcDialog>
  124. </div>
  125. </template>
  126. <script setup>
  127. import {ref, watch} from "vue";
  128. import {useAppStore} from "~src/store";
  129. import MetaTable from "./meta-table.vue"
  130. const useAppState = useAppStore()
  131. //参数
  132. const props = defineProps({
  133. projectId: {
  134. type: [String, Number],
  135. default: ''
  136. },
  137. contractId: {
  138. type: [String, Number],
  139. default: ''
  140. },
  141. show: {
  142. type: Boolean,
  143. default: false
  144. },
  145. closeText: {
  146. type: [String, Number],
  147. default: '取消查阅'
  148. },
  149. checkText: {
  150. type: [String, Number],
  151. default: '保存抽检意见'
  152. }
  153. })
  154. //变量
  155. const projectId = ref(props.projectId);
  156. const contractId = ref(props.contractId);
  157. const nodeData = ref(props.treeData);
  158. const isBubble = ref(useAppState.getBubble);
  159. const isDrawer = ref(props.show)
  160. //监听
  161. watch(() => [
  162. props.show,
  163. useAppState.getBubble,
  164. ], ([show, bubble]) => {
  165. isDrawer.value = show;
  166. isBubble.value = bubble
  167. })
  168. //类型tab数据和相关处理
  169. const tabTypeKey = ref('tab1')
  170. const tabTypeTab = ref([
  171. {key: 'tab1', name: '卷内文件'},
  172. {key: 'tab2', name: '竣工资料'},
  173. {key: 'tab3', name: '计量资料'},
  174. {key: 'tab4', name: '关联资料'},
  175. {key: 'tab5', name: '元数据'},
  176. {key: 'tab6', name: '验签包'},
  177. ]);
  178. const tabTypeChange = ({key}) => {
  179. tabTypeKey.value = key
  180. }
  181. const cscTableLoading = ref(false)
  182. //卷内目录
  183. const cscTableColumn1 = [
  184. {key: 'name', name: '卷内文件题名', align: 'center'}
  185. ];
  186. const cscTableData1 = ref([
  187. // {id: 1, name: '[K8+450阳光大桥第x联(跨)墩顶负弯矩张拉压浆].PDF'},
  188. // {id: 2, name: '[K8+450阳光大桥第x联(跨)墩顶负弯矩张拉压浆].PDF'},
  189. // {id: 3, name: '[K8+450阳光大桥第x联(跨)墩顶负弯矩张拉压浆].PDF'},
  190. // {id: 4, name: '[K8+450阳光大桥第x联(跨)墩顶负弯矩张拉压浆].PDF'},
  191. // {id: 5, name: '[K8+450阳光大桥第x联(跨)墩顶负弯矩张拉压浆].PDF'},
  192. // {id: 6, name: '[K8+450阳光大桥第x联(跨)墩顶负弯矩张拉压浆].PDF'},
  193. // {id: 7, name: '[K8+450阳光大桥第x联(跨)墩顶负弯矩张拉压浆].PDF'}
  194. ])
  195. //竣工资料
  196. const cscTableColumn2 = [
  197. {key: 'name', name: '竣工图资料', align: 'center'}
  198. ];
  199. const cscTableData2 = ref([
  200. // {id: 1, name: 'S6-3-2-Q-8-32 箱梁梁底支座垫石钢筋构造图111-箱梁梁底调平垫块及支座垫石钢筋构造图.pdf'},
  201. // {id: 2, name: 'J6-3-2-Q-8-34 桥墩一般构造图(1-9).pdf'},
  202. // {id: 3, name: 'S6-3-2-Q-8-32 箱梁梁底支座垫石钢筋构造图111-箱梁梁底调平垫块及支座垫石钢筋构造图.pdf'},
  203. // {id: 4, name: 'J6-3-2-Q-8-34 桥墩一般构造图(1-9).pdf'},
  204. // {id: 5, name: 'J6-3-2-Q-8-34 桥墩一般构造图(1-9).pdf'},
  205. // {id: 6, name: 'S6-3-2-Q-8-32 箱梁梁底支座垫石钢筋构造图111-箱梁梁底调平垫块及支座垫石钢筋构造图.pdf'},
  206. // {id: 7, name: 'S6-3-2-Q-8-32 箱梁梁底支座垫石钢筋构造图111-箱梁梁底调平垫块及支座垫石钢筋构造图.pdf'}
  207. ])
  208. //计量资料
  209. const cscTableColumn3 = [
  210. {key: 'name', name: '计量资料', align: 'center'}
  211. ];
  212. const cscTableData3 = ref([
  213. // {id: 1, name: 'ZB2-17.pdf'},
  214. // {id: 2, name: 'ZB2-18.pdf'},
  215. // {id: 3, name: 'ZB2-19.pdf'},
  216. // {id: 4, name: 'ZB2-20.pdf'},
  217. // {id: 5, name: 'ZB2-21.pdf'},
  218. // {id: 6, name: 'ZB2-22.pdf'},
  219. // {id: 7, name: 'ZB2-23.pdf'}
  220. ])
  221. //计量资料
  222. const cscTableColumn4 = [
  223. {key: 'name', name: '关联文件', align: 'center'}
  224. ];
  225. const cscTableData4 = ref([
  226. // {id: 1, name: 'xxxxxxxxxxxxxxxxxxx.pdf', tag: '开工'},
  227. // {id: 2, name: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pdf', tag: '工序'},
  228. // {id: 3, name: 'xxxxxxxxxxxxxxxxxxxxxxxxxx.pdf', tag: '评定'},
  229. // {id: 4, name: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx.pdf', tag: '交工'},
  230. // {id: 5, name: '', tag: '抽检'},
  231. // {id: 6, name: '', tag: '隐蔽'}
  232. ])
  233. //验签包
  234. const cscTableColumn5 = [
  235. {key: 'user', name: '签名者'},
  236. {key: 'time', name: '签名时间'},
  237. {key: 'val', name: '摘要'},
  238. ];
  239. const cscTableColumn51 = [
  240. {key: 'user', name: '签名者', width: 300},
  241. {key: 'time', name: '签名时间', width: 200},
  242. {key: 'val', name: '摘要'},
  243. ];
  244. const cscTableData5 = ref([
  245. // {
  246. // id: 1,
  247. // user: '051@王海军@0422431197502148151@1',
  248. // time: '2022-05-13 08:54:15',
  249. // val: '签名有效。由051@王海军@0422431197502148151@1签名。自应用本签名以来,文档未被修改过。签名者身份有效。'
  250. // },
  251. // {
  252. // id: 2,
  253. // user: '051@王海军@0422431197502148151@1',
  254. // time: '2022-05-13 08:54:15',
  255. // val: '签名有效。由051@王海军@0422431197502148151@1签名。自应用本签名以来,文档未被修改过。签名者身份有效。'
  256. // },
  257. // {
  258. // id: 3,
  259. // user: '051@王海军@0422431197502148151@1',
  260. // time: '2022-05-13 08:54:15',
  261. // val: '签名有效。由051@王海军@0422431197502148151@1签名。自应用本签名以来,文档未被修改过。签名者身份有效。'
  262. // },
  263. // {
  264. // id: 4,
  265. // user: '051@王海军@0422431197502148151@1',
  266. // time: '2022-05-13 08:54:15',
  267. // val: '签名有效。由051@王海军@0422431197502148151@1签名。自应用本签名以来,文档未被修改过。签名者身份有效。'
  268. // },
  269. // {
  270. // id: 5,
  271. // user: '051@王海军@0422431197502148151@1',
  272. // time: '2022-05-13 08:54:15',
  273. // val: '签名有效。由051@王海军@0422431197502148151@1签名。自应用本签名以来,文档未被修改过。签名者身份有效。'
  274. // },
  275. // {
  276. // id: 6,
  277. // user: '051@王海军@0422431197502148151@1',
  278. // time: '2022-05-13 08:54:15',
  279. // val: '签名有效。由051@王海军@0422431197502148151@1签名。自应用本签名以来,文档未被修改过。签名者身份有效。'
  280. // }
  281. ])
  282. //抽检意见
  283. const reform = ref({
  284. type: false, content: ''
  285. })
  286. //显示右侧目录
  287. const isCarryDataShow = ref(true)
  288. const onCarryDataShow = () => {
  289. isCarryDataShow.value = !isCarryDataShow.value
  290. }
  291. //事件
  292. const emit = defineEmits(['close', 'check'])
  293. //使用弹窗查看数据
  294. const cscTableDataModal = ref(false)
  295. const cscTableDataTitle = ref('')
  296. //显示弹窗
  297. const cscTableDataModalShow = () => {
  298. const key = tabTypeKey.value;
  299. if (key === 'tab5') {
  300. cscTableDataTitle.value = '元数据'
  301. } else if (key === 'tab6') {
  302. cscTableDataTitle.value = '验签包'
  303. }
  304. cscTableDataModal.value = true
  305. }
  306. //关闭弹窗
  307. const cscTableDataModalClose = () => {
  308. cscTableDataModal.value = false
  309. }
  310. //关闭抽查
  311. const onCarrySpotChecksDrawerClose = () => {
  312. isDrawer.value = false
  313. emit('close', false)
  314. }
  315. const checkClick = () => {
  316. emit('check')
  317. }
  318. </script>
  319. <style lang="scss" scoped>
  320. .hc-carry-spot-checks-pdf {
  321. position: relative;
  322. flex: 1 1 auto;
  323. height: 100%;
  324. transition: 0.2s;
  325. .hc-csc-pdf-btn {
  326. position: absolute;
  327. right: 0;
  328. top: 50%;
  329. color: white;
  330. font-size: 25px;
  331. z-index: 111;
  332. cursor: pointer;
  333. width: 36px;
  334. height: 40px;
  335. display: flex;
  336. padding-left: 6px;
  337. align-items: center;
  338. justify-content: center;
  339. border-radius: 150px 0 0 150px;
  340. background: linear-gradient(to right, var(--el-color-primary-light-5), var(--el-color-primary), var(--el-color-primary-dark-2));
  341. box-shadow: -2px 0 10px 0 rgba(32, 37, 50, 0.03), 0 10px 21px 20px rgba(32, 37, 50, 0.03);
  342. background-size: 200%;
  343. transition: background-position 0.5s;
  344. &:hover {
  345. background-position: 100% 0;
  346. }
  347. }
  348. }
  349. .hc-carry-spot-checks-data {
  350. position: relative;
  351. height: 100%;
  352. width: 480px;
  353. padding-left: 14px;
  354. border-left: 1px solid #e9e9e9;
  355. transition: 0.2s;
  356. .hc-csc-switch {
  357. position: relative;
  358. margin-bottom: 10px;
  359. }
  360. .hc-csc-info-box {
  361. position: relative;
  362. background: #E7EEF4;
  363. border-radius: 10px;
  364. padding: 12px;
  365. height: 244px;
  366. margin-bottom: 20px;
  367. .hc-info-text-item {
  368. position: relative;
  369. font-size: 14px;
  370. display: flex;
  371. align-items: flex-start;
  372. .title {
  373. font-weight: bold;
  374. }
  375. .content {
  376. flex: 1;
  377. position: relative;
  378. color: #101010;
  379. }
  380. }
  381. .hc-info-text-item + .hc-info-text-item {
  382. margin-top: 8px;
  383. }
  384. }
  385. .hc-csc-data-box {
  386. position: relative;
  387. background: #E7EEF4;
  388. border-radius: 10px;
  389. padding: 12px;
  390. height: calc(100% - 562px);
  391. margin-bottom: 16px;
  392. .hc-csc-associated-row {
  393. position: relative;
  394. text-align: left;
  395. display: flex;
  396. align-items: center;
  397. }
  398. .hc-table-info-btn {
  399. position: absolute;
  400. right: -5px;
  401. top: -12px;
  402. color: white;
  403. font-size: 20px;
  404. z-index: 111;
  405. cursor: pointer;
  406. border-radius: 50px;
  407. width: 34px;
  408. height: 34px;
  409. display: flex;
  410. align-items: center;
  411. justify-content: center;
  412. background: linear-gradient(to right, var(--el-color-primary-light-5), var(--el-color-primary), var(--el-color-primary-dark-2));
  413. box-shadow: -2px 0 10px 0 rgba(32, 37, 50, 0.03), 0 10px 21px 20px rgba(32, 37, 50, 0.03);
  414. background-size: 200%;
  415. transition: background-position 0.5s;
  416. &:hover {
  417. background-position: 100% 0;
  418. }
  419. }
  420. }
  421. .hc-csc-action-box {
  422. position: relative;
  423. background: white;
  424. border-radius: 10px;
  425. padding: 12px;
  426. height: 240px;
  427. .header-box {
  428. position: relative;
  429. display: flex;
  430. align-items: center;
  431. .title {
  432. flex: 1;
  433. color: #9A9A9A;
  434. font-size: 15px;
  435. }
  436. }
  437. .textarea-box {
  438. margin-top: 12px;
  439. }
  440. .btn-box {
  441. position: relative;
  442. margin-top: 20px;
  443. text-align: center;
  444. }
  445. }
  446. }
  447. </style>
  448. <style lang="scss">
  449. .hc-carry-spot-checks-target.el-overlay {
  450. position: absolute;
  451. margin: -24px;
  452. height: revert;
  453. background-color: transparent;
  454. .hc-drawer-box.el-drawer {
  455. --el-drawer-bg-color: transparent;
  456. .el-drawer__body {
  457. padding: 24px;
  458. overflow: hidden;
  459. .el-card__body {
  460. padding: 10px;
  461. }
  462. .hc-card-main-box {
  463. display: flex;
  464. }
  465. }
  466. }
  467. }
  468. .hc-csc-action-box .btn-box {
  469. .el-button + .el-button {
  470. margin-left: 50px;
  471. }
  472. }
  473. </style>