index.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544
  1. <template>
  2. <div class="draught-fan-list" id="draughtFan">
  3. <div class="query mg-b-8">
  4. <div class="query-items">
  5. <div class="query-item">
  6. <div class="lable">场站:</div>
  7. <div class="search-input">
  8. <el-select v-model="wpId" clearable placeholder="请选择" popper-class="select" @change="getProject(true)">
  9. <el-option v-for="item in wpArray" :key="item.id" :value="item.id" :label="item.name" />
  10. </el-select>
  11. </div>
  12. </div>
  13. <div class="query-item">
  14. <div class="lable">项目:</div>
  15. <div class="search-input">
  16. <el-select v-model="projectId" clearable placeholder="请选择" popper-class="select">
  17. <el-option v-for="item in projectArray" :key="item.id" :value="item.id" :label="item.name" />
  18. </el-select>
  19. </div>
  20. </div>
  21. <div class="query-item">
  22. <div class="lable">日期:</div>
  23. <div class="search-input">
  24. <el-date-picker v-model="recorddate" type="year" value-format="YYYY" placeholder="选择日期" popper-class="date-select">
  25. </el-date-picker>
  26. </div>
  27. </div>
  28. </div>
  29. <div class="query-actions">
  30. <button class="btn green" @click="search()">查询</button>
  31. <button class="btn green" @click="dialogShow = true">新增</button>
  32. <button class="btn green" @click="exportExcel()" v-if="tableData.data.length">导出</button>
  33. </div>
  34. </div>
  35. <div class="df-table">
  36. <ComTable height="78vh" :data="tableData"></ComTable>
  37. </div>
  38. <el-dialog title="新增计划发电量" v-model="dialogShow" width="85%" top="10vh" custom-class="modal curDialog"
  39. :close-on-click-modal="false" @closed="resetForm">
  40. <el-form ref="form" :model="form" :rules="rules" inline label-width="80px">
  41. <el-form-item label="场站" prop="submitWpId">
  42. <el-select v-model="form.submitWpId" clearable placeholder="请选择" popper-class="select" @change="reGetProject()">
  43. <el-option v-for="item in wpArray" :key="item.id" :value="item.id" :label="item.name" />
  44. </el-select>
  45. </el-form-item>
  46. <el-form-item label="项目" prop="submitProjectId">
  47. <el-select v-model="form.submitProjectId" clearable placeholder="请选择" popper-class="select">
  48. <el-option v-for="item in projectArray2" :key="item.id" :value="item.id" :label="item.name" />
  49. </el-select>
  50. </el-form-item>
  51. <el-form-item label="时间" prop="submitData">
  52. <el-date-picker v-model="form.submitData" type="year" value-format="YYYY" placeholder="选择日期" popper-class="date-select">
  53. </el-date-picker>
  54. </el-form-item>
  55. <el-form-item class="curFlex" label="1月份计划发电量(万kWh):" prop="gc01">
  56. <el-input v-model="form.gc01"></el-input>
  57. </el-form-item>
  58. <el-form-item class="curFlex" label="2月份计划发电量(万kWh):" prop="gc02">
  59. <el-input v-model="form.gc02"></el-input>
  60. </el-form-item>
  61. <el-form-item class="curFlex" label="3月份计划发电量(万kWh):" prop="gc03">
  62. <el-input v-model="form.gc03"></el-input>
  63. </el-form-item>
  64. <el-form-item class="curFlex" label="4月份计划发电量(万kWh):" prop="gc04">
  65. <el-input v-model="form.gc04"></el-input>
  66. </el-form-item>
  67. <el-form-item class="curFlex" label="5月份计划发电量(万kWh):" prop="gc05">
  68. <el-input v-model="form.gc05"></el-input>
  69. </el-form-item>
  70. <el-form-item class="curFlex" label="6月份计划发电量(万kWh):" prop="gc06">
  71. <el-input v-model="form.gc06"></el-input>
  72. </el-form-item>
  73. <el-form-item class="curFlex" label="7月份计划发电量(万kWh):" prop="gc07">
  74. <el-input v-model="form.gc07"></el-input>
  75. </el-form-item>
  76. <el-form-item class="curFlex" label="8月份计划发电量(万kWh):" prop="gc08">
  77. <el-input v-model="form.gc08"></el-input>
  78. </el-form-item>
  79. <el-form-item class="curFlex" label="9月份计划发电量(万kWh):" prop="gc09">
  80. <el-input v-model="form.gc09"></el-input>
  81. </el-form-item>
  82. <el-form-item class="curFlex" label="10月份计划发电量(万kWh):" prop="gc10">
  83. <el-input v-model="form.gc10"></el-input>
  84. </el-form-item>
  85. <el-form-item class="curFlex" label="11月份计划发电量(万kWh):" prop="gc11">
  86. <el-input v-model="form.gc11"></el-input>
  87. </el-form-item>
  88. <el-form-item class="curFlex" label="12月份计划发电量(万kWh):" prop="gc12">
  89. <el-input v-model="form.gc12"></el-input>
  90. </el-form-item>
  91. </el-form>
  92. <template #footer>
  93. <span class="dialog-footer">
  94. <button class="btn green" @click="submit">提交</button>
  95. <button class="btn green" @click="dialogShow = false">取消</button>
  96. </span>
  97. </template>
  98. </el-dialog>
  99. </div>
  100. </template>
  101. <script>
  102. import ComTable from "@com/coms/table/table.vue";
  103. export default {
  104. // 名称
  105. name: "cutAnalyse",
  106. // 使用组件
  107. components: {
  108. ComTable
  109. },
  110. // 数据
  111. data () {
  112. const that = this;
  113. return {
  114. isAsc: "asc",
  115. wpArray: [],
  116. wpId: "",
  117. projectArray: [],
  118. projectId: "",
  119. projectArray2: [],
  120. recorddate: new Date((new Date().getTime() - 3600 * 1000 * 24)).formatDate("yyyy"),
  121. dialogShow: false,
  122. tableData: {
  123. column: [
  124. {
  125. name: "名称",
  126. field: "projectName",
  127. is_num: false,
  128. is_light: false,
  129. sortable: true
  130. },
  131. {
  132. name: "年",
  133. field: "year",
  134. is_num: false,
  135. is_light: false,
  136. sortable: true
  137. },
  138. {
  139. name: "1月",
  140. field: "gc01",
  141. is_num: false,
  142. is_light: false,
  143. sortable: true
  144. },
  145. {
  146. name: "2月",
  147. field: "gc02",
  148. is_num: false,
  149. is_light: false,
  150. sortable: true
  151. },
  152. {
  153. name: "3月",
  154. field: "gc03",
  155. is_num: false,
  156. is_light: false,
  157. sortable: true
  158. },
  159. {
  160. name: "4月",
  161. field: "gc04",
  162. is_num: false,
  163. is_light: false,
  164. sortable: true
  165. },
  166. {
  167. name: "5月",
  168. field: "gc05",
  169. is_num: false,
  170. is_light: false,
  171. sortable: true
  172. },
  173. {
  174. name: "6月",
  175. field: "gc06",
  176. is_num: false,
  177. is_light: false,
  178. sortable: true
  179. },
  180. {
  181. name: "7月",
  182. field: "gc07",
  183. is_num: false,
  184. is_light: false,
  185. sortable: true
  186. },
  187. {
  188. name: "8月",
  189. field: "gc08",
  190. is_num: false,
  191. is_light: false,
  192. sortable: true
  193. },
  194. {
  195. name: "9月",
  196. field: "gc09",
  197. is_num: false,
  198. is_light: false,
  199. sortable: true
  200. },
  201. {
  202. name: "10月",
  203. field: "gc10",
  204. is_num: false,
  205. is_light: false,
  206. sortable: true
  207. },
  208. {
  209. name: "11月",
  210. field: "gc11",
  211. is_num: false,
  212. is_light: false,
  213. sortable: true
  214. },
  215. {
  216. name: "12月",
  217. field: "gc12",
  218. is_num: false,
  219. is_light: false,
  220. sortable: true
  221. },
  222. {
  223. name: "合计",
  224. field: "generatingcapacity",
  225. is_num: false,
  226. is_light: false,
  227. sortable: true
  228. },
  229. {
  230. name: "操作",
  231. field: "generatingcapacity",
  232. is_num: false,
  233. is_light: false,
  234. sortable: true,
  235. template () {
  236. return "<el-button type='text' style='cursor: pointer;'>编辑</el-button>";
  237. },
  238. click (e, row) {
  239. that.editData(row)
  240. }
  241. }
  242. ],
  243. data: [],
  244. },
  245. form: {
  246. outagehours: 0.0,
  247. submitWpId: "",
  248. submitProjectId: "",
  249. submitData: "",
  250. gc01: "",
  251. gc02: "",
  252. gc03: "",
  253. gc04: "",
  254. gc05: "",
  255. gc06: "",
  256. gc07: "",
  257. gc08: "",
  258. gc09: "",
  259. gc10: "",
  260. gc11: "",
  261. gc12: "",
  262. },
  263. rules: {
  264. submitWpId: [
  265. { required: true, message: '请选择场站', trigger: 'change' },
  266. ],
  267. submitProjectId: [
  268. { required: true, message: '请选择项目', trigger: 'change' },
  269. ],
  270. submitData: [
  271. { required: true, message: '请选择时间', trigger: 'change' },
  272. ],
  273. gc01: [
  274. { required: true, validator: this.BASE.elCkeck.isNumber, trigger: 'change' },
  275. ],
  276. gc02: [
  277. { required: true, validator: this.BASE.elCkeck.isNumber, trigger: 'change' },
  278. ],
  279. gc03: [
  280. { required: true, validator: this.BASE.elCkeck.isNumber, trigger: 'change' },
  281. ],
  282. gc04: [
  283. { required: true, validator: this.BASE.elCkeck.isNumber, trigger: 'change' },
  284. ],
  285. gc05: [
  286. { required: true, validator: this.BASE.elCkeck.isNumber, trigger: 'change' },
  287. ],
  288. gc06: [
  289. { required: true, validator: this.BASE.elCkeck.isNumber, trigger: 'change' },
  290. ],
  291. gc07: [
  292. { required: true, validator: this.BASE.elCkeck.isNumber, trigger: 'change' },
  293. ],
  294. gc08: [
  295. { required: true, validator: this.BASE.elCkeck.isNumber, trigger: 'change' },
  296. ],
  297. gc09: [
  298. { required: true, validator: this.BASE.elCkeck.isNumber, trigger: 'change' },
  299. ],
  300. gc10: [
  301. { required: true, validator: this.BASE.elCkeck.isNumber, trigger: 'change' },
  302. ],
  303. gc11: [
  304. { required: true, validator: this.BASE.elCkeck.isNumber, trigger: 'change' },
  305. ],
  306. gc12: [
  307. { required: true, validator: this.BASE.elCkeck.isNumber, trigger: 'change' },
  308. ],
  309. }
  310. };
  311. },
  312. // 函数
  313. methods: {
  314. // 请求服务
  315. requestData () {
  316. let that = this;
  317. that.API.requestData({
  318. method: "GET",
  319. subUrl: "powercompare/windfarmAllAjax",
  320. success (res) {
  321. that.wpArray = res.data;
  322. that.wpId = that.wpId || res.data[0].id;
  323. that.getProject();
  324. }
  325. });
  326. },
  327. // 获取期数
  328. getProject (skipRequest) {
  329. let that = this;
  330. that.API.requestData({
  331. method: "GET",
  332. subUrl: "powercompare/projectAjax",
  333. data: {
  334. wpIds: that.wpId
  335. },
  336. success (res) {
  337. that.projectArray = res.data;
  338. that.projectArray2 = res.data;
  339. that.projectId = res.data[0].id;
  340. if (!skipRequest) {
  341. that.getTableData();
  342. }
  343. }
  344. });
  345. },
  346. // 弹窗获取期数
  347. reGetProject (wpIds = this.form.submitWpId) {
  348. let that = this;
  349. that.API.requestData({
  350. method: "GET",
  351. subUrl: "powercompare/projectAjax",
  352. data: {
  353. wpIds
  354. },
  355. success (res) {
  356. that.projectArray2 = res.data;
  357. that.form.submitProjectId = res.data[0].id
  358. that.dialogShow = true;
  359. }
  360. });
  361. },
  362. getTableData () {
  363. let that = this;
  364. if (!that.recorddate) {
  365. that.BASE.showMsg({
  366. msg: "时间不可为空"
  367. });
  368. } else {
  369. that.API.requestData({
  370. method: "POST",
  371. subUrl: "projectplan/getProjectPlanVo",
  372. data: {
  373. isAsc: that.isAsc,
  374. wpId: that.wpId || "",
  375. pjId: that.projectId || "",
  376. year: new Date(that.recorddate).getFullYear()
  377. },
  378. success (res) {
  379. that.tableData.data = res.data;
  380. }
  381. });
  382. }
  383. },
  384. // 导出excel
  385. exportExcel () {
  386. this.BASE.exportExcel(this.tableData);
  387. },
  388. submit () {
  389. let that = this;
  390. that.$refs.form.validate((valid) => {
  391. if (valid) {
  392. let data = that.BASE.deepCopy(that.form);
  393. data.windpower = that.form.submitWpId;
  394. data.projectid = that.form.submitProjectId;
  395. data.year = new Date(that.form.submitData).getFullYear();
  396. data.generatingcapacity = (parseFloat(data.gc01) + parseFloat(data.gc02) + parseFloat(data.gc03) + parseFloat(data.gc04) + parseFloat(data.gc05) + parseFloat(data.gc06) + parseFloat(data.gc07) + parseFloat(data.gc08) + parseFloat(data.gc09) + parseFloat(data.gc10) + parseFloat(data.gc11) + parseFloat(data.gc12));
  397. that.API.requestData({
  398. method: "POST",
  399. subUrl: "projectplan/saveData",
  400. data,
  401. success (res) {
  402. that.getTableData();
  403. that.BASE.showMsg({
  404. type: "success",
  405. msg: "保存成功"
  406. });
  407. that.dialogShow = false;
  408. }
  409. });
  410. } else {
  411. return false;
  412. }
  413. });
  414. },
  415. editData (item) {
  416. let that = this;
  417. that.API.requestData({
  418. method: "POST",
  419. subUrl: "projectplan/getSingleProjectPlan",
  420. data: {
  421. pjId: item.projectid,
  422. year: item.year
  423. },
  424. success (res) {
  425. that.reGetProject(res.data.windpower || "");
  426. that.form = res.data;
  427. that.form.submitWpId = res.data.windpower;
  428. that.form.submitProjectId = res.data.projectid;
  429. that.form.submitData = res.data.year;
  430. that.form.outagehours = 0.0;
  431. that.dialogShow = true;
  432. }
  433. });
  434. },
  435. resetForm () {
  436. for (let key in this.form) {
  437. if(key === "outagehours"){
  438. this.form[key] = 0.0;
  439. }
  440. this.form[key] = "";
  441. }
  442. this.$refs.form.resetFields();
  443. },
  444. search () {
  445. this.getTableData();
  446. }
  447. },
  448. created () {
  449. this.requestData();
  450. },
  451. mounted () { },
  452. unmounted () { },
  453. };
  454. </script>
  455. <style lang="less" scoped>
  456. .draught-fan-list {
  457. width: 100%;
  458. height: 100%;
  459. display: flex;
  460. flex-direction: column;
  461. .btn-group-tabs {
  462. display: flex;
  463. flex-direction: row;
  464. .photovoltaic {
  465. margin-left: 1.481vh;
  466. }
  467. }
  468. .df-table {
  469. border: 0.093vh solid fade(@darkgray, 50%);
  470. position: relative;
  471. overflow: auto;
  472. flex-grow: 1;
  473. margin-top: 1.481vh;
  474. &:before {
  475. content: '';
  476. width: 0.37vh;
  477. height: 0.37vh;
  478. background: @write;
  479. position: absolute;
  480. left: 0.278vh;
  481. top: 0.278vh;
  482. }
  483. tbody {
  484. height: calc(100vh - 166px);
  485. }
  486. }
  487. }
  488. </style>
  489. <style lang="less">
  490. .el-form {
  491. .el-form-item {
  492. margin-bottom: 30px;
  493. }
  494. .el-form-item.curFlex {
  495. width: 100%;
  496. .el-form-item__label {
  497. width: 210px !important;
  498. }
  499. .el-form-item__content {
  500. display: flex;
  501. justify-content: start;
  502. align-items: center;
  503. width: 100%;
  504. }
  505. }
  506. }
  507. .curDialog {
  508. #draughtFan .el-dialog__body {
  509. max-height: 600px;
  510. overflow-y: scroll;
  511. }
  512. .dialog-footer {
  513. width: 100%;
  514. margin-top: 20px;
  515. display: flex;
  516. justify-content: center;
  517. align-items: center;
  518. }
  519. }
  520. </style>