details.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542
  1. <!-- @format -->
  2. <template>
  3. <view class="container">
  4. <view class="contentItems">
  5. <view class="content">
  6. <view class="title">器具类型</view>
  7. <view class="message">{{ ledgerDetails.typeName }} </view>
  8. </view>
  9. <view class="content">
  10. <view class="title">器具用途</view>
  11. <view class="message">{{ ledgerDetails.purposeName }} </view>
  12. </view>
  13. <view class="content">
  14. <view class="title">器具名称</view>
  15. <view class="message">{{ ledgerDetails.name }}</view>
  16. </view>
  17. <view class="content">
  18. <view class="title">器具项别</view>
  19. <view class="message">{{ ledgerDetails.categoryName }}</view>
  20. </view>
  21. <view class="content">
  22. <view class="title">器具种别 </view>
  23. <view class="message">{{ ledgerDetails.className }}</view>
  24. </view>
  25. <view class="content">
  26. <view class="title">专业类别 </view>
  27. <view class="message">{{ ledgerDetails.majorName }}</view>
  28. </view>
  29. <view class="content">
  30. <view class="title">规格型号</view>
  31. <view class="message">{{ ledgerDetails.modelSpecific }}</view>
  32. </view>
  33. <view class="content">
  34. <view class="title">出厂编号</view>
  35. <view class="message">{{ ledgerDetails.serialNumber }}</view>
  36. </view>
  37. <view class="content">
  38. <view class="title">内部编号</view>
  39. <view class="message">{{ ledgerDetails.internalNumber }}</view>
  40. </view>
  41. <view class="content">
  42. <view class="title">使用状态</view>
  43. <view class="message">{{ useStatus(ledgerDetails.useStatus) }}</view>
  44. </view>
  45. <view class="content">
  46. <view class="title">使用区域</view>
  47. <view class="message">{{ ledgerDetails.useAddrName }}</view>
  48. </view>
  49. <view class="content">
  50. <view class="title">使用地点</view>
  51. <view class="message">{{
  52. ledgerDetails.setupPlace ? ledgerDetails.setupPlace : ""
  53. }}</view>
  54. </view>
  55. <view class="content">
  56. <view class="title">申请状态</view>
  57. <view
  58. class="message"
  59. :style="{
  60. color:
  61. applicationColor[applicationStatus(ledgerDetails.checkStatus)],
  62. }"
  63. >{{ applicationStatus(ledgerDetails.checkStatus) }}</view
  64. >
  65. </view>
  66. <view class="content">
  67. <view class="title">器具检定状态</view>
  68. <view
  69. class="message"
  70. :style="{
  71. color:
  72. verificationColor[verificationStatus(ledgerDetails.checkStatus)],
  73. }"
  74. >{{ verificationStatus(ledgerDetails.checkStatus) }}</view
  75. >
  76. </view>
  77. <view class="content">
  78. <view class="title">检定到期日期</view>
  79. <view class="message">{{ ledgerDetails.lastExpireDate }}</view>
  80. </view>
  81. <view class="content">
  82. <view class="title">备案状态</view>
  83. <view
  84. class="message"
  85. :style="{
  86. color: recordColor[recordStatus(ledgerDetails.fillingStatus)],
  87. }"
  88. >{{ recordStatus(ledgerDetails.fillingStatus) }}</view
  89. >
  90. </view>
  91. <view class="content">
  92. <view class="title">制造单位</view>
  93. <view class="message">{{ ledgerDetails.manufactoryName }}</view>
  94. </view>
  95. <view class="content">
  96. <view class="title">使用单位</view>
  97. <view class="message">{{ ledgerDetails.useUnitName }}</view>
  98. </view>
  99. <view class="content">
  100. <view class="title">单位区域</view>
  101. <view class="message">{{ ledgerDetails.orgAddrName }}</view>
  102. </view>
  103. <!--<view class="content">
  104. <view class="title">
  105. <u-button
  106. @click="showBindWxModal=true"
  107. type="error"
  108. size="small"
  109. :customStyle="{ width: '180rpx' }"
  110. >删除</u-button
  111. >
  112. </view>
  113. &lt;!&ndash;<view class="message">
  114. <u-button
  115. @click="handleEdit"
  116. type="primary"
  117. size="small"
  118. :customStyle="{ width: '180rpx' }"
  119. >编辑</u-button
  120. >
  121. </view>&ndash;&gt;
  122. </view>-->
  123. <!-- <view class="content">
  124. <view class="title">购置日期</view>
  125. <view class="message">{{ }}</view>
  126. </view> -->
  127. </view>
  128. <u-divider text="技术参数" :textSize="18" textColor="black"></u-divider>
  129. <view class="contentItems">
  130. <view class="content">
  131. <view class="title">测量范围</view>
  132. <view class="message">
  133. <u-parse :content="ledgerDetails.measureRange"></u-parse
  134. ></view>
  135. </view>
  136. <view class="content">
  137. <view class="title">准确度等级</view>
  138. <view class="message">
  139. <u-parse :content="ledgerDetails.accuracyLevel"></u-parse
  140. ></view>
  141. </view>
  142. <view class="content">
  143. <view class="title">允许误差</view>
  144. <view class="message">
  145. <u-parse :content="ledgerDetails.indicationError"></u-parse
  146. ></view>
  147. </view>
  148. </view>
  149. <u-divider text="其他信息" :textSize="18" textColor="black"></u-divider>
  150. <view class="contentItems">
  151. <view class="content">
  152. <view class="title">生产日期</view>
  153. <view class="message">{{ ledgerDetails.productionDate }}</view>
  154. </view>
  155. <view class="content">
  156. <view class="title">购置日期</view>
  157. <view class="message">{{ ledgerDetails.purchaseDate }}</view>
  158. </view>
  159. <view class="content">
  160. <view class="title">使用位置</view>
  161. <view class="message">{{ ledgerDetails.setupPlace }}</view>
  162. </view>
  163. <view class="content">
  164. <view class="title">使用部门</view>
  165. <view class="message">{{ ledgerDetails.useDeptName }}</view>
  166. </view>
  167. <view class="content">
  168. <view class="title">保管人员</view>
  169. <view class="message">{{ ledgerDetails.custodianName }}</view>
  170. </view>
  171. <view class="content">
  172. <view class="title">保管手机号</view>
  173. <view class="message">{{ ledgerDetails.custodianMobile }}</view>
  174. </view>
  175. <view class="content">
  176. <view class="title">保管身份证号</view>
  177. <view class="message">{{ ledgerDetails.custodianIdCard }}</view>
  178. </view>
  179. </view>
  180. <u-divider text="强检证明材料" :textSize="18" textColor="black"></u-divider>
  181. <view class="contentItems">
  182. <view
  183. class="content"
  184. v-for="(value, key, index) in imgMapping"
  185. :key="key"
  186. >
  187. <view class="title">{{ value[0].name }}</view>
  188. <view
  189. v-if="
  190. value[0].url != null &&
  191. value[0].url != '' &&
  192. !isImageFile(value[0].url)
  193. "
  194. class="message"
  195. @click="previewPdf(value)"
  196. >
  197. <u--image
  198. width="150rpx"
  199. height="150rpx"
  200. mode="aspectFit"
  201. :src="baseUrl + '/ruoyi/PDF.png'"
  202. />
  203. </view>
  204. <view
  205. v-if="value[0].url != null && value[0].url != ''"
  206. @click="previewImage(value)"
  207. class="message"
  208. >
  209. <u--image
  210. width="150rpx"
  211. height="150rpx"
  212. mode="aspectFit"
  213. :src="
  214. baseUrl + '/api/instrument/sysFileDownload?path=' + value[0].url
  215. "
  216. />
  217. </view>
  218. </view>
  219. <view
  220. class="content"
  221. v-if="
  222. ledgerDetails.name == '出租汽车计价器' ||
  223. ledgerDetails.name == '出租汽车税控计价器'
  224. "
  225. >
  226. <view class="title">
  227. <u-button
  228. @click="showBindWxModal = true"
  229. type="error"
  230. size="small"
  231. :customStyle="{ width: '180rpx' }"
  232. >删除</u-button
  233. >
  234. </view>
  235. <view class="message">
  236. <u-button
  237. @click="handleEdit"
  238. type="primary"
  239. size="small"
  240. :customStyle="{ width: '180rpx' }"
  241. >编辑</u-button
  242. >
  243. </view>
  244. </view>
  245. </view>
  246. <view class="history">
  247. <u-button
  248. @click="handleVerificationHistory"
  249. :customStyle="{ width: '300rpx' }"
  250. type="success"
  251. shape="circle"
  252. :plain="true"
  253. size="small"
  254. >检定记录</u-button
  255. >
  256. <u-button
  257. @click="handleRecordHistory"
  258. :customStyle="{ width: '300rpx' }"
  259. type="primary"
  260. shape="circle"
  261. :plain="true"
  262. size="small"
  263. >备案记录</u-button
  264. >
  265. </view>
  266. <view style="height: 100rpx"></view>
  267. <u-modal
  268. showCancelButton
  269. cancelText="取消"
  270. @cancel="showBindWxModal = false"
  271. @close="showBindWxModal = false"
  272. confirmText="确认"
  273. @confirm="handleDelete"
  274. :show="showBindWxModal"
  275. :title="'提示'"
  276. :content="'确定删除该器具吗?'"
  277. ></u-modal>
  278. </view>
  279. </template>
  280. <script>
  281. import { getLedgerDetails } from "@/api/Ledger";
  282. import { useDict, paraseDict } from "@/utils/index";
  283. import { deleteExternal } from "@/api/qj";
  284. import UImage from "../../uni_modules/uview-ui/components/u--image/u--image";
  285. export default {
  286. components: { UImage },
  287. data() {
  288. return {
  289. baseUrl: this.$baseUrl,
  290. showBindWxModal: false,
  291. ledgerDetails: {},
  292. verificationColor: {
  293. 未检定: "#909399",
  294. 已校准: "#19be6b",
  295. 已检定: "#19be6b",
  296. 不合格: "#fa3534",
  297. 已超期: "#fa3534",
  298. },
  299. applicationColor: {
  300. 已中止: "#fa3534",
  301. 已完成: "#19be6b",
  302. 未申请: "#909399",
  303. 不受理: "#fa3534",
  304. 办理中: "#2979ff",
  305. },
  306. recordColor: {
  307. 已撤回: "#fa3534",
  308. 已接收: "#19be6b",
  309. 待提交: "#2979ff",
  310. 备案中: "#2979ff",
  311. 已拒绝: "#fa3534",
  312. 勿备案: "#fa3534",
  313. 未备案: "#909399",
  314. 免备案: "#909399",
  315. 已退回: "#fa3534",
  316. },
  317. verification: [], //检定字典
  318. verification: [], //检定字典
  319. application: [], //申请字典
  320. record: [], //备案字典
  321. qjsyzt: [], // 使用状态
  322. imgMapping: {
  323. tradeProved: [
  324. {
  325. name: "贸易结算的相关证明",
  326. url: null,
  327. },
  328. ],
  329. lastTest: [
  330. {
  331. name: "最近一次检定证书或新购置器具的购销合同或发票",
  332. url: null,
  333. },
  334. ],
  335. modelImage: [
  336. {
  337. name: "含有出厂编号规格型号的铭牌图片",
  338. url: null,
  339. },
  340. ],
  341. },
  342. };
  343. },
  344. computed: {
  345. //检定状态
  346. verificationStatus() {
  347. return (row) => {
  348. return paraseDict(this.verification, row);
  349. };
  350. },
  351. //申请状态
  352. applicationStatus() {
  353. return (row) => {
  354. return paraseDict(this.application, row);
  355. };
  356. },
  357. //备案状态
  358. recordStatus() {
  359. return (row) => {
  360. return paraseDict(this.record, row);
  361. };
  362. },
  363. //使用状态
  364. useStatus() {
  365. return (row) => {
  366. return paraseDict(this.qjsyzt, row);
  367. };
  368. },
  369. },
  370. onLoad(options) {
  371. getLedgerDetails({ id: options.id }).then((res) => {
  372. this.ledgerDetails = res.data;
  373. if (this.ledgerDetails.imgPath != null) {
  374. this.imgMapping = JSON.parse(this.ledgerDetails.imgPath);
  375. }
  376. });
  377. useDict("ejian_instrCheckStatus").then((res) => {
  378. this.verification = res;
  379. });
  380. useDict("ejian_instrCheckRecordStatusV2").then((res) => {
  381. this.application = res;
  382. });
  383. useDict("ejian_instrFillingStatus").then((res) => {
  384. this.record = res;
  385. });
  386. useDict("ejian_qjsyzt").then((res) => {
  387. this.qjsyzt = res;
  388. });
  389. },
  390. methods: {
  391. isImageFile(url) {
  392. // 获取文件扩展名
  393. const extension = url.substring(url.lastIndexOf(".") + 1).toLowerCase();
  394. // 支持的图片扩展名列表
  395. const imageExtensions = ["jpg", "jpeg", "png", "gif", "bmp"];
  396. // 判断当前文件扩展名是否为图片扩展名
  397. if (imageExtensions.includes(extension)) {
  398. return true;
  399. }
  400. return false;
  401. },
  402. previewImage: function (path) {
  403. uni.previewImage({
  404. indictor: "none",
  405. loop: false,
  406. urls: [
  407. this.baseUrl + "/api/instrument/sysFileDownload?path=" + path[0].url,
  408. ],
  409. });
  410. },
  411. previewPdf: function (path) {
  412. console.log(path[0].url);
  413. uni.downloadFile({
  414. url:
  415. this.baseUrl + "/api/instrument/sysFileDownload?path=" + path[0].url,
  416. success: (res) => {
  417. var filePath = res.tempFilePath;
  418. uni.openDocument({
  419. filePath: filePath,
  420. showMenu: true,
  421. success: function (res) {
  422. console.log("打开文档成功");
  423. uni.hideLoading();
  424. },
  425. });
  426. },
  427. });
  428. },
  429. async handleDelete() {
  430. uni.showLoading({
  431. title: "删除中...",
  432. });
  433. await deleteExternal(this.ledgerDetails.id);
  434. uni.showToast({
  435. title: "删除成功",
  436. duration: 1000,
  437. });
  438. this.showBindWxModal = false;
  439. setTimeout(() => {
  440. uni.navigateBack();
  441. }, 1000);
  442. },
  443. //检定记录
  444. handleVerificationHistory() {
  445. console.log(this.ledgerDetails);
  446. uni.navigateTo({
  447. url: `/pagesB/Ledger/verificationHistory?id=${this.ledgerDetails.id}`,
  448. success: (res) => {},
  449. fail: () => {},
  450. complete: () => {},
  451. });
  452. },
  453. //备案记录
  454. handleRecordHistory() {
  455. uni.navigateTo({
  456. url: `/pagesB/Ledger/recordHistory?id=${this.ledgerDetails.id}`,
  457. success: (res) => {},
  458. fail: () => {},
  459. complete: () => {},
  460. });
  461. },
  462. handleEdit() {
  463. uni.navigateTo({
  464. url: "/pagesB/Ledger/edit?id=" + this.ledgerDetails.id,
  465. success: (res) => {},
  466. fail: () => {},
  467. complete: () => {},
  468. });
  469. },
  470. },
  471. };
  472. </script>
  473. <style lang="scss" scoped>
  474. .history {
  475. display: flex;
  476. padding: 20rpx 10rpx;
  477. background: #fff;
  478. width: 100%;
  479. position: fixed;
  480. bottom: 0;
  481. left: 0;
  482. }
  483. .container {
  484. height: 100vh;
  485. background: rgb(243, 244, 249);
  486. padding: 30rpx 0 110rpx;
  487. .contentItems {
  488. width: 95%;
  489. border-radius: 6px;
  490. background: #fff;
  491. margin: 0rpx auto 30rpx;
  492. padding: 20rpx 30rpx 20rpx;
  493. .content {
  494. border-bottom: 1px solid rgb(242, 242, 242);
  495. padding: 24rpx 0;
  496. display: flex;
  497. justify-content: space-between;
  498. }
  499. .content:last-child {
  500. border-bottom: none;
  501. }
  502. .title {
  503. font-size: 26rpx;
  504. color: black;
  505. letter-spacing: 3rpx;
  506. }
  507. .message {
  508. font-size: 26rpx;
  509. color: rgb(146, 146, 146);
  510. }
  511. }
  512. }
  513. </style>