track.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503
  1. <template>
  2. <div class="track-info">
  3. <div class="form-info">
  4. <div class="work-flow">
  5. <div class="work-flow-line"></div>
  6. <div class="work-flow-item">
  7. <div class="work-flow-icon-item">
  8. <div class="work-flow-icon-o"></div>
  9. <div class="work-flow-icon-i"></div>
  10. <span class="svg-icon">
  11. <SvgIcon svgid="svg-qx-warn"></SvgIcon>
  12. </span>
  13. </div>
  14. <div class="work-flow-text">流程未启动</div>
  15. </div>
  16. <div class="work-flow-item">
  17. <div class="work-flow-icon-item">
  18. <div class="work-flow-icon-o"></div>
  19. <div class="work-flow-icon-i"></div>
  20. <span class="svg-icon">
  21. <SvgIcon svgid="svg-qx-down"></SvgIcon>
  22. </span>
  23. </div>
  24. <div class="work-flow-text">消缺单已下达</div>
  25. </div>
  26. <div class="work-flow-item">
  27. <div class="work-flow-icon-item">
  28. <div class="work-flow-icon-o"></div>
  29. <div class="work-flow-icon-i"></div>
  30. <span class="svg-icon">
  31. <SvgIcon svgid="svg-qx-hour-hand"></SvgIcon>
  32. </span>
  33. </div>
  34. <div class="work-flow-text">消缺单处理中</div>
  35. </div>
  36. <div class="work-flow-item active">
  37. <div class="work-flow-icon-item">
  38. <div class="work-flow-icon-o"></div>
  39. <div class="work-flow-icon-i"></div>
  40. <span class="svg-icon">
  41. <SvgIcon svgid="svg-对"></SvgIcon>
  42. </span>
  43. </div>
  44. <div class="work-flow-text">消缺完成</div>
  45. </div>
  46. <div class="work-flow-item">
  47. <div class="work-flow-icon-item">
  48. <div class="work-flow-icon-o"></div>
  49. <div class="work-flow-icon-i"></div>
  50. <span class="svg-icon">
  51. <SvgIcon svgid="svg-qx-flag"></SvgIcon>
  52. </span>
  53. </div>
  54. <div class="work-flow-text">消缺验收</div>
  55. </div>
  56. </div>
  57. <div class="form-body">
  58. <el-form ref="form" :model="form" label-width="120px">
  59. <el-row>
  60. <el-col :span="12">
  61. <el-form-item label="风场:">
  62. <el-input v-model="form.fc" placeholder="请填写风场名称"></el-input>
  63. </el-form-item>
  64. </el-col>
  65. <el-col :span="12">
  66. <el-form-item label="风机:">
  67. <el-input v-model="form.fj" placeholder="请输入风机名称"></el-input>
  68. </el-form-item>
  69. </el-col>
  70. </el-row>
  71. <el-row>
  72. <el-col :span="12">
  73. <el-form-item label="推荐检修时间:">
  74. <el-input v-model="form.tjjxsj" placeholder="请填写推荐检修时间"></el-input>
  75. <!-- <el-date-picker v-model="form.tjjxsj" type="datetime" placeholder="请填写推荐检修时间" popper-class="date-select"></el-date-picker> -->
  76. </el-form-item>
  77. </el-col>
  78. <el-col :span="12">
  79. <el-form-item label="预计检修风速:">
  80. <el-input v-model="form.yjjxfs" placeholder="请填写预计检修风速"></el-input>
  81. </el-form-item>
  82. </el-col>
  83. </el-row>
  84. <el-row>
  85. <el-col :span="24">
  86. <el-form-item label="推荐理由:">
  87. <el-input type="textarea" :rows="3" v-model="form.tjly" placeholder="请填写推荐理由"></el-input>
  88. </el-form-item>
  89. </el-col>
  90. </el-row>
  91. <el-row>
  92. <el-col :span="12">
  93. <el-form-item label="下单时间:">
  94. <el-input v-model="form.xdsj" placeholder="请填写下单时间"></el-input>
  95. </el-form-item>
  96. </el-col>
  97. <el-col :span="12">
  98. <el-form-item label="主要负责人:">
  99. <el-input v-model="form.zyfzr" placeholder="请填写主要负责人"></el-input>
  100. </el-form-item>
  101. </el-col>
  102. </el-row>
  103. <el-row>
  104. <el-col :span="12">
  105. <el-form-item label="出发时间:">
  106. <el-input v-model="form.cfsj" placeholder="请填写出发时间"></el-input>
  107. </el-form-item>
  108. </el-col>
  109. <el-col :span="12">
  110. <el-form-item label="到达时间:">
  111. <el-input v-model="form.ddsj" placeholder="请填写到达时间"></el-input>
  112. </el-form-item>
  113. </el-col>
  114. </el-row>
  115. <el-row>
  116. <el-col :span="24">
  117. <el-form-item label="排查方法:">
  118. <el-input type="textarea" :rows="3" v-model="form.pcff" placeholder="请填写排查方法"></el-input>
  119. </el-form-item>
  120. </el-col>
  121. </el-row>
  122. <el-row>
  123. <el-col :span="24">
  124. <el-form-item label="处理方法:">
  125. <el-input type="textarea" :rows="3" v-model="form.clff" placeholder="请填写处理方法"></el-input>
  126. </el-form-item>
  127. </el-col>
  128. </el-row>
  129. <el-row>
  130. <el-col :span="12">
  131. <el-form-item label="消缺时间:">
  132. <el-input v-model="form.qxsj" placeholder="请填写消缺时间"></el-input>
  133. </el-form-item>
  134. </el-col>
  135. <el-col :span="12">
  136. <el-form-item label="故障时长:">
  137. <el-input v-model="form.gzsc" placeholder="请填写故障时长"></el-input>
  138. </el-form-item>
  139. </el-col>
  140. </el-row>
  141. <el-row>
  142. <el-col :span="12">
  143. <el-form-item label="验收人:">
  144. <el-input v-model="form.ysr" placeholder="请填写验收人"></el-input>
  145. </el-form-item>
  146. </el-col>
  147. <el-col :span="12">
  148. <el-form-item label="验收时间:">
  149. <el-input v-model="form.yssj" placeholder="请填写验收时间"></el-input>
  150. </el-form-item>
  151. </el-col>
  152. </el-row>
  153. <el-row>
  154. <el-col :span="24">
  155. <el-form-item label="验收意见:">
  156. <el-input type="textarea" :rows="3" v-model="form.ysyj" placeholder="请填写验收意见"></el-input>
  157. </el-form-item>
  158. </el-col>
  159. </el-row>
  160. </el-form>
  161. </div>
  162. </div>
  163. <div class="evaluate">
  164. <div class="white">评价</div>
  165. <div class="evaluate-item">
  166. <div class="evaluate-label">任务分配时长</div>
  167. <el-input-number class="input-number" v-model="evaluate.rwfpsc" :controls="false" controls-position="right" :min="0" :max="1000"></el-input-number>
  168. <div class="evaluate-unit">min</div>
  169. </div>
  170. <div class="evaluate-item">
  171. <div class="evaluate-label">任务分配平均时长</div>
  172. <el-input-number class="input-number" v-model="evaluate.rwfppjsc" :controls="false" controls-position="right" :min="0" :max="1000"></el-input-number>
  173. <div class="evaluate-unit">min</div>
  174. </div>
  175. <div class="evaluate-item">
  176. <div class="evaluate-label">到达现场时长</div>
  177. <el-input-number class="input-number" v-model="evaluate.ddxcsc" :controls="false" controls-position="right" :min="0" :max="1000"></el-input-number>
  178. <div class="evaluate-unit">min</div>
  179. </div>
  180. <div class="evaluate-item">
  181. <div class="evaluate-label">到达现场平均时长</div>
  182. <el-input-number class="input-number" v-model="evaluate.ddxcpjsc" :controls="false" controls-position="right" :min="0" :max="1000"></el-input-number>
  183. <div class="evaluate-unit">min</div>
  184. </div>
  185. <div class="evaluate-item">
  186. <div class="evaluate-label">缺陷处理时长</div>
  187. <el-input-number class="input-number" v-model="evaluate.qxclsc" :controls="false" controls-position="right" :min="0" :max="1000"></el-input-number>
  188. <div class="evaluate-unit">min</div>
  189. </div>
  190. <div class="evaluate-item">
  191. <div class="evaluate-label">缺陷处理平均时长</div>
  192. <el-input-number class="input-number" v-model="evaluate.qxclpjsc" :controls="false" controls-position="right" :min="0" :max="1000"></el-input-number>
  193. <div class="evaluate-unit">min</div>
  194. </div>
  195. <div class="evaluate-item">
  196. <div class="evaluate-label">验收时长</div>
  197. <el-input-number class="input-number" v-model="evaluate.yssc" :controls="false" controls-position="right" :min="0" :max="1000"></el-input-number>
  198. <div class="evaluate-unit">min</div>
  199. </div>
  200. <div class="evaluate-item">
  201. <div class="evaluate-label">验收平均时长</div>
  202. <el-input-number class="input-number" v-model="evaluate.yspjsc" :controls="false" controls-position="right" :min="0" :max="1000"></el-input-number>
  203. <div class="evaluate-unit">min</div>
  204. </div>
  205. </div>
  206. <div class="tabs">
  207. <div class="tab-box">
  208. <div class="tab-item" v-for="(tab, index) of tabs" :key="index" :class="{ active: activeTab == index }" @click="selectTab(index)">
  209. <span class="svg-icon svg-icon-md" :class="activeTab == index ? 'svg-icon-green' : 'svg-icon-write'">
  210. <SvgIcon :svgid="tab.icon"></SvgIcon>
  211. </span>
  212. <span>{{ tab.text }}</span>
  213. </div>
  214. </div>
  215. </div>
  216. <DefectEliminationTracking ref="det" :show="showDefectEliminationTracking"></DefectEliminationTracking>
  217. </div>
  218. </template>
  219. <script>
  220. import SvgIcon from "@com/coms/icon/svg-icon.vue";
  221. import DefectEliminationTracking from "./defect-elimination-tracking.vue";
  222. export default {
  223. components: {
  224. SvgIcon,
  225. DefectEliminationTracking,
  226. },
  227. data() {
  228. return {
  229. tabs: [
  230. {
  231. icon: "svg-gis",
  232. text: "GIS地貌",
  233. },
  234. {
  235. icon: "svg-jkp",
  236. text: "手环监控",
  237. },
  238. {
  239. icon: "svg-jk",
  240. text: "监控视频",
  241. },
  242. ],
  243. activeTab: 0,
  244. form: {
  245. name: "",
  246. region: "",
  247. date1: "",
  248. date2: "",
  249. delivery: false,
  250. type: [],
  251. resource: "",
  252. desc: "",
  253. fc: "",
  254. fj: "",
  255. tjjxsj: "",
  256. yjjxfs: "",
  257. tjly: "",
  258. xdsj: "",
  259. zyfzr: "",
  260. cfsj: "",
  261. ddsj: "",
  262. pcff: "",
  263. clff: "",
  264. qxsj: "",
  265. gzsc: "",
  266. ysr: "",
  267. yssj: "",
  268. ysyj: "",
  269. },
  270. evaluate: {
  271. rwfpsc: 11,
  272. rwfppjsc: 11,
  273. ddxcsc: 11,
  274. ddxcpjsc: 11,
  275. qxclsc: 11,
  276. qxclpjsc: 11,
  277. yssc: 11,
  278. yspjsc: 11,
  279. },
  280. };
  281. },
  282. // 函数
  283. methods: {
  284. selectTab: function(index) {
  285. this.activeTab = index;
  286. switch (index) {
  287. case 0:
  288. case 2:
  289. this.$refs.det.close();
  290. break;
  291. case 1:
  292. this.$refs.det.show();
  293. break;
  294. default:
  295. break;
  296. }
  297. },
  298. },
  299. };
  300. </script>
  301. <style lang="less">
  302. .track-info {
  303. display: flex;
  304. position: relative;
  305. .form-info {
  306. flex: 0 0 720px;
  307. .work-flow {
  308. height: 132px;
  309. width: 100%;
  310. background: fade(@gray, 20);
  311. margin-bottom: 8px;
  312. padding: 26px 69px;
  313. display: flex;
  314. position: relative;
  315. .work-flow-line {
  316. position: absolute;
  317. width: 600px;
  318. height: 4px;
  319. left: calc(50% - 300px);
  320. top: calc(50% - 11px);
  321. background: @green;
  322. }
  323. .work-flow-item {
  324. flex: 1;
  325. display: flex;
  326. flex-direction: column;
  327. align-items: center;
  328. justify-content: center;
  329. &.active {
  330. .work-flow-icon-item {
  331. .work-flow-icon-o {
  332. border: 1px solid @green;
  333. opacity: 0.4;
  334. }
  335. .work-flow-icon-i {
  336. border: 2px solid @green;
  337. background: linear-gradient(to bottom, #1F2B2B 0%,#1F2B2B 20%,@green 100%);
  338. }
  339. .svg-icon {
  340. svg {
  341. use {
  342. fill: @green;
  343. }
  344. }
  345. }
  346. }
  347. .work-flow-text {
  348. color: @green;
  349. }
  350. }
  351. .work-flow-icon-item {
  352. width: 60px;
  353. height: 60px;
  354. position: relative;
  355. .work-flow-icon-o {
  356. position: absolute;
  357. top: 0;
  358. left: 0;
  359. width: 60px;
  360. height: 60px;
  361. border-radius: 50%;
  362. border: 1px solid #B3BDC0;
  363. opacity: 0.4;
  364. }
  365. .work-flow-icon-m {
  366. position: absolute;
  367. top: 1px;
  368. left: 1px;
  369. width: 59px;
  370. height: 59px;
  371. border-radius: 50%;
  372. border: 4px solid #212b2b;
  373. }
  374. .work-flow-icon-i {
  375. position: absolute;
  376. top: 5px;
  377. left: 5px;
  378. width: 50px;
  379. height: 50px;
  380. border-radius: 50%;
  381. border: 2px solid #606769;
  382. background: linear-gradient(to bottom, #1F2B2B 0%,#1F2B2B 20%,#606769 100%);
  383. }
  384. .svg-icon {
  385. position: absolute;
  386. width: 26px;
  387. height: 26px;
  388. top: calc(50% - 10px);
  389. left: calc(50% - 13px);
  390. svg {
  391. width: 26px;
  392. height: 26px;
  393. use {
  394. fill: @gray-l;
  395. }
  396. }
  397. }
  398. }
  399. .work-flow-text {
  400. color: @gray-l;
  401. margin-top: 8px;
  402. font-size: @fontsize-s;
  403. }
  404. }
  405. }
  406. }
  407. .evaluate {
  408. flex: 0 0 358px;
  409. margin-left: 69px;
  410. .evaluate-item {
  411. display: flex;
  412. align-items: center;
  413. margin-top: 8px;
  414. .evaluate-label {
  415. width: 120px;
  416. text-align: right;
  417. }
  418. .evaluate-label,
  419. .evaluate-unit {
  420. font-size: @fontsize;
  421. color: @gray-l;
  422. }
  423. .input-number {
  424. display: inline-block;
  425. width: 62px;
  426. margin: 0 16px;
  427. }
  428. }
  429. }
  430. .tabs {
  431. flex: 0 0 220px;
  432. height: 619px;
  433. border-left: 1px solid #53626833;
  434. .tab-box {
  435. margin: 1.852vh 2.778vh;
  436. display: inline-block;
  437. z-index: 2;
  438. position: relative;
  439. margin: 26px auto;
  440. .tab-item {
  441. display: flex;
  442. align-items: center;
  443. // justify-content: center;
  444. font-size: @fontsize-l;
  445. cursor: pointer;
  446. // width: 120px;
  447. padding: 8px;
  448. margin-bottom: 16px;
  449. &.active {
  450. color: @green;
  451. position: relative;
  452. background-image: @greenLinearTop;
  453. &::after {
  454. content: "";
  455. position: absolute;
  456. width: 100%;
  457. height: 5px;
  458. border: 1px solid @green;
  459. border-top: 0;
  460. left: 0;
  461. bottom: 0;
  462. box-sizing: border-box;
  463. }
  464. }
  465. .svg-icon {
  466. margin-right: 16px;
  467. }
  468. }
  469. }
  470. }
  471. }
  472. </style>