index.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442
  1. <template>
  2. <div class="app-container home">
  3. <el-carousel :interval="5000" type="card" height="380px">
  4. <el-carousel-item>
  5. <img src="@/assets/images/img4.png" alt="图片无法加载" style="width:100%;height:100%" class="image" @click="recommend">
  6. <span style="position: absolute; bottom: 10px;right: 250px;font-size: 30px;font-family: 新宋体;color: rgb(84 242 161);font-weight: bold">元器件推荐</span>
  7. </el-carousel-item>
  8. <el-carousel-item>
  9. <img src="@/assets/images/img7.png" alt="图片无法加载" style="width:100%;height:100%" class="image" @click="task">
  10. <span style="position: absolute; bottom: 10px;right: 250px;font-size: 30px;font-family: 新宋体;color: rgb(84 242 161);font-weight: bold">长稳评分</span>
  11. </el-carousel-item>
  12. <el-carousel-item>
  13. <span v-if="ac===null" style="color:#FFFFFF">该任务还没有运行得到准确率和召回率</span>
  14. <div id="piechart" style="width: 640px;height:400px;" />
  15. </el-carousel-item>
  16. </el-carousel>
  17. <div align="center" style="font-size: 18px;">
  18. <div style="margin: 10px;color:rgb(255 0 0)">评分最高的10个元器件</div>
  19. <el-row>
  20. <el-col v-for="(idx,index) in topten.length" :key="idx" :span="11" :offset="index%2 > 0 ? 1 : 0">
  21. <el-card class="bgimg" :body-style="{ padding: '0px' }" style="font-size: 20px;background-color: revert;margin-bottom: 20px;">
  22. <div style="padding: 34px;">
  23. <p>
  24. <span>
  25. <el-button
  26. type="text"
  27. style="font-size:20px;color: #f7ba2a;"
  28. @click="handleDetail(topten[idx-1].componentId)"
  29. >{{ topten[idx-1].componentName }} </el-button>
  30. </span>
  31. </p>
  32. <div class="block">
  33. <span style="font-size: 14px;color: #f7ba2a;"> 评分:</span>
  34. <el-rate
  35. v-model="topten[idx-1].score"
  36. disabled
  37. show-score
  38. text-color="#ff9900"
  39. />
  40. </div>
  41. </div>
  42. </el-card>
  43. </el-col>
  44. </el-row>
  45. </div>
  46. <el-dialog v-loading="loading" :title="title" :visible.sync="open" width="800px" append-to-body @close="closedialog">
  47. <el-form ref="form" style="border:1px solid #C0C0C0;padding: 5px;margin: auto" :model="form" label-width="200px">
  48. <h2><b>元器件基本信息</b></h2>
  49. <el-form-item label="元器件名称" prop="componentName">
  50. <el-input v-model="form.componentName" readonly="true" />
  51. </el-form-item>
  52. <el-form-item label="生产厂家" prop="manufacturer">
  53. <el-input v-model="form.manufacturer" readonly="true" />
  54. </el-form-item>
  55. <el-form-item label="国产型号" prop="componentModel">
  56. <el-input v-model="form.componentModel" readonly="true" />
  57. </el-form-item>
  58. <el-form-item label="国产型号替代型号" prop="replaceDomesticModel">
  59. <el-input v-model="form.replaceDomesticModel" readonly="true" />
  60. </el-form-item>
  61. <el-form-item label="质量等级" prop="qualityGrade">
  62. <el-input v-model="form.qualityGrade" readonly="true" />
  63. </el-form-item>
  64. <el-form-item label="供货周期" prop="deliveryCycle">
  65. <el-input v-model="form.deliveryCycle" readonly="true" />
  66. </el-form-item>
  67. <el-form-item label="供货量(个/年)" prop="supplyQuantity">
  68. <el-input v-model="form.supplyQuantity" readonly="true" />
  69. </el-form-item>
  70. <el-form-item label="价格" prop="unitPrice">
  71. <el-input v-model="form.unitPrice" readonly="true" />
  72. </el-form-item>
  73. <el-form-item label="ZZKK等级" prop="zzkkLevel">
  74. <el-input v-model="form.zzkkLevel" readonly="true" />
  75. </el-form-item>
  76. <el-form-item label="是否在优选目录内" prop="inPreference">
  77. <el-input v-model="form.inPreference" readonly="true" />
  78. </el-form-item>
  79. <el-form-item label="停产断档日期" prop="shutdownDate">
  80. <el-date-picker
  81. v-model="form.shutdownDate"
  82. clearable
  83. type="date"
  84. value-format="yyyy-MM-dd"
  85. readonly="true"
  86. />
  87. </el-form-item>
  88. <el-form-item label="封装形式" prop="encapsulationMode">
  89. <el-input v-model="form.encapsulationMode" readonly="true" />
  90. </el-form-item>
  91. <el-form-item v-if="form.paramIfm!==null && form.paramIfm!==''" label="最大正向电流IFM" prop="paramIfm">
  92. <el-input v-model="form.paramIfm" readonly="true" />
  93. </el-form-item>
  94. <el-form-item v-if="form.paramVrrm!==null && form.paramVrrm!==''" label="最大反向工作电压VRRM" prop="paramVrrm">
  95. <el-input v-model="form.paramVrrm" readonly="true" />
  96. </el-form-item>
  97. <el-form-item v-if="form.paramIfsm!==null && form.paramIfsm!==''" label="最大浪涌电流IFSM" prop="paramIfsm">
  98. <el-input v-model="form.paramIfsm" readonly="true" />
  99. </el-form-item>
  100. <el-form-item v-if="form.paramZz!==null && form.paramZz!==''" label="稳压状态下的动态电阻ZZ" prop="paramZz">
  101. <el-input v-model="form.paramZz" readonly="true" />
  102. </el-form-item>
  103. <el-form-item v-if="form.paramPcm!==null && form.paramPcm!==''" label="最大额定功率PCM" prop="paramPcm">
  104. <el-input v-model="form.paramPcm" readonly="true" />
  105. </el-form-item>
  106. <el-form-item v-if="form.paramIcm!==null && form.paramIcm!==''" label="最大集电极电流ICM" prop="paramIcm">
  107. <el-input v-model="form.paramIcm" readonly="true" />
  108. </el-form-item>
  109. <el-form-item v-if="form.paramVcbo!==null && form.paramVcbo!==''" label="最大集电极-基极电压VCBO" prop="paramVcbo">
  110. <el-input v-model="form.paramVcbo" readonly="true" />
  111. </el-form-item>
  112. <el-form-item v-if="form.paramVceo!==null && form.paramVceo!==''" label="集电极-发射极电压VCEO" prop="paramVceo">
  113. <el-input v-model="form.paramVceo" readonly="true" />
  114. </el-form-item>
  115. <el-form-item v-if="form.paramVebo!==null && form.paramVebo!==''" label="发射极-基极电压VEBO" prop="paramVebo">
  116. <el-input v-model="form.paramVebo" readonly="true" />
  117. </el-form-item>
  118. <el-form-item v-if="form.paramVdss!==null && form.paramVdss!==''" label="漏源电压VDSS" prop="paramVdss">
  119. <el-input v-model="form.paramVdss" readonly="true" />
  120. </el-form-item>
  121. <el-form-item v-if="form.paramId!==null && form.paramId!==''" label="漏极直流电流ID" prop="paramId">
  122. <el-input v-model="form.paramId" readonly="true" />
  123. </el-form-item>
  124. <el-form-item v-if="form.paramRdsOn!==null && form.paramRdsOn!==''" label="漏-源通态电阻RDS(on)" prop="paramRdsOn">
  125. <el-input v-model="form.paramRdsOn" readonly="true" />
  126. </el-form-item>
  127. <el-form-item label="抗静电能力" prop="antistaticCapacity">
  128. <el-input v-model="form.antistaticCapacity" readonly="true" />
  129. </el-form-item>
  130. <el-form-item label="抗辐照能力" prop="radiationResistance">
  131. <el-input v-model="form.radiationResistance" readonly="true" />
  132. </el-form-item>
  133. <el-form-item label="材料" prop="materials">
  134. <el-input v-model="form.materials" type="textarea" readonly="true" />
  135. </el-form-item>
  136. <el-form-item label="工艺" prop="craft">
  137. <el-input v-model="form.craft" type="textarea" readonly="true" />
  138. </el-form-item>
  139. <el-form-item label="重量" prop="weight">
  140. <el-input v-model="form.weight" readonly="true" />
  141. </el-form-item>
  142. <el-form-item label="备注" prop="remark">
  143. <el-input v-model="form.remark" type="textarea" readonly="true" />
  144. </el-form-item>
  145. </el-form>
  146. </el-dialog>
  147. </div>
  148. </template>
  149. <script>
  150. import { get_top10 } from '@/api/biz/evaluation'
  151. import { getComponent, getBycomponentId, addTime } from '@/api/biz/recommend'
  152. import { getLastTask } from '@/api/biz/task'
  153. import * as echarts from 'echarts'
  154. export default {
  155. name: 'Index',
  156. data() {
  157. return {
  158. // 版本号
  159. currentTime: 0,
  160. startTime: 0,
  161. version: '1.0.0',
  162. form: {},
  163. title: '',
  164. topten: [],
  165. currentDate: new Date(),
  166. open: false,
  167. ac: '',
  168. callback: '',
  169. pageviewTime: {},
  170. loading: false
  171. }
  172. },
  173. created() {
  174. this.get_top_ten()
  175. },
  176. mounted() {
  177. this.myEcharts()
  178. },
  179. methods: {
  180. task() {
  181. this.$router.push('/marking')
  182. },
  183. goTarget(href) {
  184. window.open(href, '_blank')
  185. },
  186. get_top_ten() {
  187. get_top10().then(res => {
  188. this.topten = res.data
  189. console.log(this.topten)
  190. })
  191. },
  192. recommend() {
  193. this.$router.push('/recommend')
  194. },
  195. handleDetail(id) {
  196. this.loading = true
  197. getComponent(id).then(response => {
  198. this.form = response.data
  199. this.title = '元器件详情'
  200. })
  201. getBycomponentId(id).then(res => {
  202. this.useInfoList = res.data
  203. })
  204. this.open = true
  205. this.startTime = Date.now()
  206. this.pageviewTime.componentId = id
  207. // this.pageviewTime.usedBy = row.applications.toString()
  208. this.loading = false
  209. },
  210. // 监听元器件详情dialog关闭
  211. closedialog() {
  212. // this.currentTime = Date.now()
  213. // this.pageviewTime.viewTime = this.currentTime - this.startTime
  214. // // this.pageviewTime.useScene = this.use_scene
  215. // // console.log(this.use_scene)
  216. // this.pageviewTime.searchCondition = this.searchCondition
  217. // addTime(this.pageviewTime).then(res=>{
  218. // // this.$modal.msgSuccess("详情浏览时间成功")
  219. // })
  220. this.open = false
  221. },
  222. myEcharts() {
  223. getLastTask().then(res => {
  224. this.ac = res.data.accuracyRate
  225. this.callback = res.data.recallRate
  226. const chartDom = document.getElementById('piechart')
  227. const myChart = echarts.init(chartDom)
  228. let ac = 0
  229. let callback = 0
  230. if (this.ac !== null && this.callback !== null) {
  231. let endidx = this.ac.indexOf('%')
  232. ac = endidx !== -1 ? parseFloat(this.ac) / 100.0 : parseFloat(this.ac)
  233. endidx = this.callback.indexOf('%')
  234. callback = endidx !== -1 ? parseFloat(this.callback) / 100.0 : parseFloat(this.callback)
  235. }
  236. let option
  237. option = {
  238. title: [
  239. {
  240. text: '任务:' + res.data.taskName,
  241. textStyle: {
  242. color: 'rgb(84 242 161)'
  243. },
  244. left: 'center',
  245. top: '6%'
  246. },
  247. {
  248. left: '30%',
  249. top: '78%',
  250. textAlign: 'center',
  251. text: '任务准确率',
  252. textStyle: {
  253. fontSize :15,
  254. color: '#43CD80'
  255. }
  256. },
  257. {
  258. left: '75%',
  259. top: '78%',
  260. textAlign: 'center',
  261. text: '任务召回率',
  262. textStyle: {
  263. fontSize :15,
  264. color: '#43CD80'
  265. }
  266. }
  267. ],
  268. tooltip: {
  269. trigger: 'item',
  270. formatter: '{b} : {d}%<br/>'
  271. },
  272. legend: {
  273. orient: 'vertical',
  274. left: 'left',
  275. textStyle: {
  276. color: '#fff'
  277. }
  278. },
  279. series: [
  280. {
  281. name: res.data.taskName,
  282. type: 'pie',
  283. radius: '50%',
  284. center: ['30%', '50%'],
  285. data: [
  286. { value: (1 - ac).toFixed(4), name: 'Error Rate' },
  287. { value: ac.toFixed(4), name: 'Accuracy Rate' }
  288. ],
  289. label: {
  290. show: true, // 显示标签
  291. position: 'inside', // 在饼图内部显示标签
  292. formatter: '{b}:{d}%'
  293. },
  294. emphasis: {
  295. itemStyle: {
  296. shadowBlur: 10,
  297. shadowOffsetX: 0,
  298. shadowColor: 'rgba(0, 0, 0, 0.5)'
  299. }
  300. }
  301. },
  302. {
  303. name: res.data.taskName,
  304. type: 'pie',
  305. radius: '50%',
  306. center: ['75%', '50%'],
  307. data: [
  308. { value: callback.toFixed(4), name: 'Recall Rate' },
  309. { value: (1 - callback).toFixed(4), name: 'Other...' }
  310. ],
  311. label: {
  312. show: true, // 显示标签
  313. position: 'inside', // 在饼图内部显示标签
  314. formatter: '{b}:{d}%'
  315. },
  316. emphasis: {
  317. itemStyle: {
  318. shadowBlur: 10,
  319. shadowOffsetX: 0,
  320. shadowColor: 'rgba(0, 0, 0, 0.5)'
  321. }
  322. }
  323. }
  324. ]
  325. }
  326. myChart.setOption(option)
  327. })
  328. }
  329. }
  330. }
  331. </script>
  332. <style scoped lang="scss">
  333. .bgimg{
  334. border: 2px solid #cad1db91;
  335. -webkit-box-shadow: #cad1db 0 0 10px;
  336. -moz-box-shadow: #cad1db 0 0 10px;
  337. box-shadow: inset 0 0 30px #cad1db;
  338. position: relative;
  339. }
  340. .home {
  341. background: radial-gradient(circle at 10% 20%, #ffffff 0%, #e6e9ed 90%);
  342. //border-radius: 20px;
  343. blockquote {
  344. padding: 10px 20px;
  345. margin: 0 0 20px;
  346. font-size: 17.5px;
  347. border-left: 5px solid #eee;
  348. }
  349. hr {
  350. margin-top: 20px;
  351. margin-bottom: 20px;
  352. border: 0;
  353. border-top: 1px solid #eee;
  354. }
  355. .col-item {
  356. margin-bottom: 20px;
  357. }
  358. ul {
  359. padding: 0;
  360. margin: 0;
  361. }
  362. font-family: "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
  363. font-size: 13px;
  364. color: #676a6c;
  365. overflow-x: hidden;
  366. ul {
  367. list-style-type: none;
  368. }
  369. h4 {
  370. margin-top: 0px;
  371. }
  372. h2 {
  373. margin-top: 10px;
  374. font-size: 26px;
  375. font-weight: 100;
  376. }
  377. p {
  378. margin-top: 10px;
  379. b {
  380. font-weight: 700;
  381. }
  382. }
  383. .update-log {
  384. ol {
  385. display: block;
  386. list-style-type: decimal;
  387. margin-block-start: 1em;
  388. margin-block-end: 1em;
  389. margin-inline-start: 0;
  390. margin-inline-end: 0;
  391. padding-inline-start: 40px;
  392. }
  393. }
  394. .el-carousel__item:nth-child(2n) {
  395. background-color: #99a9bf;
  396. }
  397. .el-carousel__item:nth-child(2n+1) {
  398. background-color:#004d8c;
  399. }
  400. }
  401. </style>