goodInfo.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
  1. <template>
  2. <div class="goodInfo layout-pd" >
  3. <!--部件详情-->
  4. <el-row>
  5. <!-- 基础信息 -->
  6. <el-col :xs="24" >
  7. <el-card shadow="hover" header="基础信息">
  8. <div class="basicInformation" v-loading="goods.loadingBasic">
  9. <div class="basicInformation-left">
  10. <div class="item">
  11. <el-popover
  12. placement="top-start"
  13. :width="200"
  14. title="物料名称"
  15. trigger="hover"
  16. :content="goods.basicInformation.bomName"
  17. >
  18. <template #reference>
  19. <span class="m-2"> 物料名称: {{goods.basicInformation.bomName}}</span>
  20. </template>
  21. </el-popover>
  22. </div>
  23. <div class="item">
  24. <el-popover
  25. placement="top-start"
  26. :width="200"
  27. title="物料号"
  28. trigger="hover"
  29. :content="goods.basicInformation.bomNo"
  30. >
  31. <template #reference>
  32. <span class="m-2"> 物料号: {{goods.basicInformation.bomNo}}</span>
  33. </template>
  34. </el-popover>
  35. </div>
  36. <div class="item">
  37. <el-popover
  38. placement="top-start"
  39. :width="200"
  40. title="CPUID"
  41. trigger="hover"
  42. :content="goods.basicInformation.cpuId"
  43. >
  44. <template #reference>
  45. <span class="m-2"> CPUID: {{goods.basicInformation.cpuId}}</span>
  46. </template>
  47. </el-popover>
  48. </div>
  49. <div class="item">
  50. <el-popover
  51. placement="top-start"
  52. :width="200"
  53. title="软件版本"
  54. trigger="hover"
  55. :content="goods.basicInformation.software_v"
  56. >
  57. <template #reference>
  58. <span class="m-2"> 软件版本: {{goods.basicInformation.software_v}}</span>
  59. </template>
  60. </el-popover>
  61. </div>
  62. <div class="item">
  63. <el-popover
  64. placement="top-start"
  65. :width="200"
  66. title="状态"
  67. trigger="hover"
  68. :content="goods.basicInformation.status"
  69. >
  70. <template #reference>
  71. <span class="m-2"> 状态: {{goods.basicInformation.status}}</span>
  72. </template>
  73. </el-popover>
  74. </div>
  75. <div class="item">
  76. <el-popover
  77. placement="top-start"
  78. :width="200"
  79. title="密钥状态"
  80. trigger="hover"
  81. :content="goods.basicInformation.key_name"
  82. >
  83. <template #reference>
  84. <span class="m-2"> 密钥状态: {{goods.basicInformation.key_name}}</span>
  85. </template>
  86. </el-popover>
  87. </div>
  88. <div class="item">
  89. <el-popover
  90. placement="top-start"
  91. :width="200"
  92. title="团标状态"
  93. trigger="hover"
  94. :content="goods.basicInformation.stand_name"
  95. >
  96. <template #reference>
  97. <span class="m-2"> 团标状态: {{goods.basicInformation.stand_name}}</span>
  98. </template>
  99. </el-popover>
  100. </div>
  101. <div class="item">
  102. <el-popover
  103. placement="top-start"
  104. :width="200"
  105. title="创建时间"
  106. trigger="hover"
  107. :content="goods.basicInformation.createTime"
  108. >
  109. <template #reference>
  110. <span class="m-2"> 创建时间: {{goods.basicInformation.createTime}}</span>
  111. </template>
  112. </el-popover>
  113. </div>
  114. <div class="item">
  115. <el-popover
  116. placement="top-start"
  117. :width="200"
  118. trigger="hover"
  119. title="备注"
  120. :content="goods.basicInformation.remark"
  121. >
  122. <template #reference>
  123. <span class="m-2"> 备注: {{goods.basicInformation.remark}}</span>
  124. </template>
  125. </el-popover>
  126. </div>
  127. <div class="item">
  128. <el-popover
  129. placement="top-start"
  130. :width="200"
  131. title="检测时间"
  132. trigger="hover"
  133. :content="goods.basicInformation.detectionTime"
  134. >
  135. <template #reference>
  136. <span class="m-2"> 检测时间: {{goods.basicInformation.detectionTime}}</span>
  137. </template>
  138. </el-popover>
  139. </div>
  140. <div class="item">
  141. <el-popover
  142. placement="top-start"
  143. :width="200"
  144. title="检测员"
  145. trigger="hover"
  146. :content="goods.basicInformation.detectionEmployee"
  147. >
  148. <template #reference>
  149. <span class="m-2"> 检测员: {{goods.basicInformation.detectionEmployee}}</span>
  150. </template>
  151. </el-popover>
  152. </div>
  153. </div>
  154. <div class="basicInformation-right" >
  155. <div @click="showBigPic(goods.basicInformation.img)" v-if="goods.basicInformation.img">
  156. <el-image loading="lazy"
  157. alt="fgg"
  158. class="img"
  159. fit="fill"
  160. :src="goods.basicInformation.img" />
  161. </div>
  162. <div @click="showBigPic(goods.basicInformation.img)" v-else>
  163. <div >
  164. 暂无图片
  165. </div>
  166. </div>
  167. </div>
  168. </div>
  169. </el-card>
  170. </el-col>
  171. <!-- 生产日志 -->
  172. <el-col :xs="24" >
  173. <el-card style="height: 35vh" class="my-fill mt8" shadow="hover" header="生产日志">
  174. <el-table v-loading="goods.loadingProduct" :data="goods.productionLog.tableData" row-key="id" style="width: 100%">
  175. <el-table-column v-for="column in goods.productionLog.dynamicColumns" :key="column.prop" :prop="column.prop" :label="column.label" />
  176. </el-table>
  177. <div class="my-flex my-flex-end" style="margin-top: 20px">
  178. <el-pagination
  179. v-model:currentPage="goods.productionLog.pageInput.CurrentPage"
  180. v-model:page-size="goods.productionLog.pageInput.PageSize"
  181. :total="goods.productionLog.total"
  182. :page-sizes="[5, 10, 20, 50, 100]"
  183. small
  184. background
  185. @size-change="onProductionLogSizeChange"
  186. @current-change="onProductionLogCurrentChange"
  187. layout="total, sizes, prev, pager, next, jumper"
  188. />
  189. </div>
  190. </el-card>
  191. </el-col>
  192. <!-- 报警日志 -->
  193. <el-col :span="24" >
  194. <el-card style="height: 35vh" class="my-fill mt8" shadow="hover" header="报警日志">
  195. <el-table v-loading="goods.loadingAlarm" :data="goods.alarmLog.tableData" row-key="id" style="width: 100%">
  196. <el-table-column v-for="column in goods.alarmLog.dynamicColumns" :key="column.prop" :prop="column.prop" :label="column.label" />
  197. </el-table>
  198. <div class="my-flex my-flex-end" style="margin-top: 20px">
  199. <el-pagination
  200. v-model:currentPage="goods.alarmLog.pageInput.CurrentPage"
  201. v-model:page-size="goods.alarmLog.pageInput.PageSize"
  202. :total="goods.alarmLog.total"
  203. :page-sizes="[5, 10, 20, 50, 100]"
  204. small
  205. background
  206. @size-change="onAlarmLogSizeChange"
  207. @current-change="onAlarmLogCurrentChange"
  208. layout="total, sizes, prev, pager, next, jumper"
  209. />
  210. </div>
  211. </el-card>
  212. </el-col>
  213. </el-row>
  214. <!--大图显示-->
  215. <el-dialog
  216. v-model="goods.showBig"
  217. :close-on-click-modal="true"
  218. :show-close="false"
  219. width="80%"
  220. >
  221. <img :src="goods.imageUrl" class="fullscreen-image" alt="放大的图片"/>
  222. </el-dialog>
  223. </div>
  224. </template>
  225. <script setup lang="ts" name="goodInfo">
  226. import {onMounted, reactive} from "vue";
  227. import {ComponentDetails} from "/@/api/admin/productionManagement/ComponentDetails";
  228. import router from "/@/router";
  229. import type {
  230. alarmLog,
  231. goodsInformationBasic,
  232. productionLog
  233. } from "/@/api/admin/productionManagement/ComponentDetailsDto";
  234. import {adminProductGoodsInfoDto, filterData} from "/@/api/admin/productionManagement/ComponentDetailsDto";
  235. import type {columnsProps, pageInput} from "/@/api/admin/shareDto/shareDto";
  236. //组件的页面对象
  237. const goods = reactive({
  238. /**部件id */
  239. id:"",
  240. /**页面请求参数*/
  241. data:{} as filterData,
  242. /**显示加载效果 */
  243. loadingBasic: false,
  244. loadingProduct: false,
  245. loadingAlarm: false,
  246. /**图片是否方法显示 */
  247. showBig: false,
  248. /**放大图片的url */
  249. imageUrl: "",
  250. /**基础信息 */
  251. basicInformation: {} as goodsInformationBasic,
  252. /**生产日志 */
  253. productionLog: {
  254. /**表格数据 */
  255. tableData: [] as Array<productionLog>,
  256. /**动态表头 */
  257. dynamicColumns: [] as Array<columnsProps>,
  258. /**页面分页 */
  259. pageInput: {
  260. currentPage: 1,
  261. pageSize: 5
  262. } as pageInput,
  263. /**总数 */
  264. total: 0
  265. } as productionLog,
  266. /**报警日志 */
  267. alarmLog: {
  268. /**表格数据 */
  269. tableData: [] as Array<alarmLog>,
  270. /**动态表头 */
  271. dynamicColumns: [] as Array<columnsProps>,
  272. /**页面分页 */
  273. pageInput: {
  274. CurrentPage: 1,
  275. PageSize: 5
  276. } as pageInput,
  277. /**总数 */
  278. total: 0
  279. } as alarmLog,
  280. } as adminProductGoodsInfoDto)
  281. //查看大图
  282. const showBigPic = (val) => {
  283. // eslint-disable-next-line no-console
  284. console.log(val)
  285. goods.imageUrl = val
  286. goods.showBig = true
  287. }
  288. /**生产日志分页size变化 */
  289. const onProductionLogSizeChange = (val) => {
  290. goods.productionLog.pageInput.PageSize = val
  291. initProductionLog()
  292. }
  293. /**生产日志分页Current变化 */
  294. const onProductionLogCurrentChange = (val) => {
  295. goods.productionLog.pageInput.CurrentPage = val
  296. initProductionLog()
  297. }
  298. /**报警日志分页size变化 */
  299. const onAlarmLogSizeChange = (val) => {
  300. goods.alarmLog.pageInput.CurrentPage = val
  301. initAlarmLog()
  302. }
  303. /**报警日志分页Current变化 */
  304. const onAlarmLogCurrentChange = (val) => {
  305. goods.alarmLog.pageInput.CurrentPage = val
  306. initAlarmLog()
  307. }
  308. /**
  309. * 初始化数据
  310. */
  311. const initBasicInformation = async () => {
  312. goods.loadingBasic = true
  313. const res = await new ComponentDetails().getBasicInfo({filter:goods.data}).catch(() => {
  314. goods.loadingBasic = false
  315. })
  316. goods.basicInformation = res?.data?.list[0]
  317. goods.loadingBasic = false
  318. }
  319. const initProductionLog = async () => {
  320. goods.loadingProduct = true
  321. goods.productionLog = await new ComponentDetails().getProductionLog(goods.productionLog.pageInput, goods.id)
  322. goods.loadingProduct = false
  323. // console.log(goods.productionLog)
  324. }
  325. const initAlarmLog = async () => {
  326. goods.loadingAlarm = true
  327. goods.alarmLog = await new ComponentDetails().getAlarmLog(goods.productionLog.pageInput, goods.id)
  328. goods.loadingAlarm = false
  329. // console.log(goods.alarmLog)
  330. }
  331. onMounted(() => {
  332. goods.id = <string>router.currentRoute.value.params.id
  333. goods.data = { ...router.currentRoute.value.query as filterData}
  334. /**初始化 */
  335. initBasicInformation()
  336. initProductionLog()
  337. initAlarmLog()
  338. })
  339. </script>
  340. <style scoped lang="scss">
  341. .goodInfo{
  342. font-weight: 500;
  343. .el-card{
  344. margin-bottom: 20px;
  345. }
  346. .basicInformation{
  347. display: flex;
  348. display: -webkit-flex; /* Safari */
  349. justify-content: space-around;
  350. align-items:center;
  351. align-content:space-around;
  352. flex-wrap: wrap-reverse;
  353. .basicInformation-left{
  354. display: flex;
  355. display: -webkit-flex; /* Safari */
  356. justify-content: space-around;
  357. flex-wrap: wrap;
  358. height: 100%;
  359. max-width: 65%;
  360. min-width: 300px;
  361. .item{
  362. cursor: pointer;
  363. width: 240px;/*设置显示的最大宽度*/
  364. height:40px;
  365. overflow:hidden;/*超出部分隐藏*/
  366. white-space:nowrap;/*强制单行显示*/
  367. text-overflow: ellipsis;
  368. }
  369. }
  370. .basicInformation-right{
  371. width: 50%;
  372. height: 100%;
  373. max-width: 300px;
  374. min-width: 200px;
  375. padding: 0 10px;
  376. .img {
  377. cursor: pointer;
  378. box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 8px;
  379. }
  380. .img:hover {
  381. box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;
  382. }
  383. div{
  384. width: 300px;
  385. height: 200px;
  386. cursor: pointer;
  387. box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 8px;
  388. }
  389. div:hover{
  390. ox-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;
  391. }
  392. }
  393. }
  394. .fullscreen-image {
  395. width: 100%;
  396. max-height: 80vh;
  397. object-fit: contain;
  398. }
  399. }
  400. </style>