index.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  1. <template>
  2. <div class="app-container">
  3. <el-card class="box-carde">
  4. <div slot="header" class="clearfix">
  5. <span>升压站信息</span>
  6. <el-button
  7. style="float: right;padding:3px 10px 3px 3px;"
  8. type="text"
  9. :loading="btnLonding"
  10. @click="exportDataEvent"
  11. >导出数据
  12. </el-button>
  13. </div>
  14. <el-button
  15. type="primary"
  16. size="small"
  17. style="round-clip: 10px"
  18. :loading="btnLonding"
  19. @click="insertEvent"
  20. >新增</el-button>
  21. <div style="padding-top: 10px">
  22. <vxe-table
  23. ref="xTable"
  24. v-show="showTable"
  25. :keep-source="true"
  26. align="center"
  27. :loading="loading"
  28. highlight-current-row
  29. auto-resize
  30. border
  31. resizable
  32. show-overflow
  33. :edit-rules="rules"
  34. :data="tableData"
  35. :edit-config="{trigger: 'manual', mode: 'row',autoClear: false,icon:'none'}"
  36. >
  37. <vxe-table-column title="升压站信息">
  38. <vxe-table-column
  39. field="name"
  40. title="名称"
  41. width="13%"
  42. :edit-render="{name: '$input', attrs: {type: 'text'}}"
  43. />
  44. <vxe-table-column
  45. field="manufacturer"
  46. title="生产商"
  47. width="13%"
  48. :edit-render="{name: '$input', attrs: {type: 'text'}}"
  49. />
  50. <vxe-table-column
  51. field="modelNumber"
  52. title="型号"
  53. width="13%"
  54. :edit-render="{name: '$input', attrs: {type: 'text'}}"
  55. />
  56. <vxe-table-column
  57. min-width="60px"
  58. width="15%"
  59. field="installationTime"
  60. title="安装时间"
  61. :edit-render="{props: {type: 'default'}}"
  62. >
  63. <template v-slot:edit="{ row }">
  64. <el-date-picker
  65. v-model="row.installationTime"
  66. size="mini"
  67. style="width: 100%"
  68. type="date"
  69. placeholder="选择日期:"
  70. />
  71. </template>
  72. <template v-slot="{ row }">{{ timestampToTime(row.installationTime) }}</template>
  73. </vxe-table-column>
  74. <vxe-table-column
  75. field="report"
  76. title="是否上报"
  77. width="8%"
  78. :edit-render="{name: '$select', options: options}"
  79. />
  80. <vxe-table-column
  81. field="interval"
  82. title="入库间隔(单位s)"
  83. width="10%"
  84. align="center"
  85. :edit-render="{name: '$select', options: intervals}"
  86. />
  87. <vxe-table-column min-width="30px" width="15%" title="操作">
  88. <template v-slot="{ row }">
  89. <template v-if="$refs.xTable.isActiveByRow(row)">
  90. <el-button
  91. style="padding: 3px 4px 3px 4px;margin: 2px"
  92. size="mini"
  93. icon="el-icon-edit"
  94. @click="saveRowEvent(row)"
  95. >保存
  96. </el-button>
  97. <el-button
  98. style="padding: 3px 4px 3px 4px;margin: 2px"
  99. size="mini"
  100. icon="el-icon-edit"
  101. @click="cancelRowEvent(row)"
  102. >取消
  103. </el-button>
  104. </template>
  105. <template v-else>
  106. <el-button
  107. style="padding: 3px 4px 3px 4px;margin: 2px"
  108. size="mini"
  109. icon="el-icon-edit"
  110. :loading="btnLonding"
  111. @click="editRowEvent(row)"
  112. >编辑
  113. </el-button>
  114. <el-button
  115. type="danger"
  116. style="padding: 3px 4px 3px 4px;margin: 2px"
  117. size="mini"
  118. icon="el-icon-delete"
  119. :loading="btnLonding"
  120. @click="deleteRowEvent(row)"
  121. >删除
  122. </el-button>
  123. </template>
  124. </template>
  125. </vxe-table-column>
  126. </vxe-table-column>
  127. </vxe-table>
  128. <vxe-pager
  129. v-show="!btnLonding&&showTable"
  130. perfect
  131. :current-page.sync="currentPage"
  132. :page-size.sync="pageSize"
  133. :total="total"
  134. :page-sizes="[10,50,100]"
  135. :layouts="['PrevJump', 'PrevPage','JumpNumber', 'NextPage', 'NextJump', 'Sizes', 'FullJump', 'Total']"
  136. />
  137. </div>
  138. <!-- 删除提示框 -->
  139. <el-dialog :visible.sync="delVisible" title="提示" width="300px" center>
  140. <div class="del-dialog-cnt">删除不可恢复,是否确定删除?</div>
  141. <span slot="footer" class="dialog-footer">
  142. <el-button type="primary" @click="deleteCancel()">取 消</el-button>
  143. <el-button type="primary" @click="deleteInfo()">确 定</el-button>
  144. </span>
  145. </el-dialog>
  146. </el-card>
  147. </div>
  148. </template>
  149. <script>
  150. export default {
  151. name: 'Index',
  152. data() {
  153. const checkName = (rule, value, callback) => {
  154. var s6 = this.tableData
  155. if (value == null || value === '') {
  156. callback(new Error('请填写逆变器名称'))
  157. }
  158. for (let i = 0; i < s6.length; i++) {
  159. if (this.mid == '' || this.mid == undefined) {
  160. // 新增
  161. if ((value == s6[i].name)) {
  162. callback(new Error('名称不能重复'))
  163. }
  164. } else {
  165. // 修改
  166. if (this.mid != s6[i].id) {
  167. if ((value == s6[i].name)) {
  168. callback(new Error('名称不能重复'))
  169. }
  170. }
  171. }
  172. }
  173. callback()
  174. }
  175. return {
  176. mid: '',
  177. rowId: '',
  178. btnLonding: false,
  179. loading: false,
  180. showTable: true,
  181. delVisible: false,
  182. currentPage: 1,
  183. pageSize: 10,
  184. total: 0,
  185. tableData: [],
  186. options: [{ label: '是', value: true }, { label: '否', value: false }],
  187. intervals: [{ key: 0, value: 0, label: '不入库' },{ key: 60, value: 60, label: '一分钟' }, { key: 900, value: 900, label: '十五分钟' }],
  188. // 是否为编辑
  189. isEdit: false,
  190. // 表单验证规则
  191. rules: {
  192. name: [
  193. { required: true, validator: checkName }
  194. ],
  195. modelNumber: [
  196. { required: true, message: '升压站型号不能为空', trigger: 'blur' }
  197. ],
  198. manufacturer: [
  199. { required: true, message: '制造商名称不能为空' }
  200. ],
  201. installationTime: [
  202. { required: true, message: '请选择日期' }
  203. ],
  204. report: [
  205. { required: true, message: '是否上报不能为空', trigger: 'change' }
  206. ]
  207. }
  208. }
  209. },
  210. mounted() {
  211. this.getInfo()
  212. },
  213. methods: {
  214. getInfo() {
  215. this.$axios.get('/boosterStationInfo/').then(res => {
  216. this.tableData = res.data
  217. })
  218. },
  219. saveRowEvent(row) {
  220. this.$refs.xTable.validate(this.$refs.xTable.getCurrentRecord(),valid => {
  221. if (valid) {
  222. this.$refs.xTable.clearActived().then(() => {
  223. if (this.isEdit) {
  224. console.log(row)
  225. row.equipmentType = row.equipmentType.code
  226. // 编辑保存
  227. this.$axios.put('/boosterStationInfo/', row).then(res => {
  228. this.$message({
  229. message: '修改成功',
  230. type: 'success'
  231. })
  232. this.btnLonding = false
  233. this.getInfo()
  234. }).catch((error) => {
  235. this.$refs.xTable.setActiveRow(row)
  236. this.$message.error('修改升压站出错' + error)
  237. })
  238. } else {
  239. // 新增保存
  240. this.$axios.post('/boosterStationInfo/', row).then(res => {
  241. this.$message({
  242. message: '保存成功',
  243. type: 'success'
  244. })
  245. this.btnLonding = false
  246. this.getInfo()
  247. }).catch((error) => {
  248. this.$refs.xTable.setActiveRow(row)
  249. this.$message.error('保存升压站出错' + error)
  250. })
  251. }
  252. })
  253. } else {
  254. this.$XModal.message({status: 'error', message: '校验不通过!'})
  255. }
  256. })
  257. },
  258. editRowEvent(row) {
  259. this.mid = row.id
  260. this.isEdit = true
  261. this.btnLonding = true
  262. this.$refs.xTable.setActiveRow(row)
  263. },
  264. insertEvent(row) {
  265. this.mid = ''
  266. this.showTable = true
  267. this.piadd = false
  268. this.isEdit = false
  269. this.btnLonding = true
  270. this.$refs.xTable.insert({ interval: 60 }).then(({ row }) => this.$refs.xTable.setActiveRow(row))
  271. },
  272. exportDataEvent() {
  273. this.$axios.get('/boosterStationInfo/').then(res => {
  274. const data = res.data
  275. this.$refs.xTable.exportData({
  276. filename: '升压站信息',
  277. type: 'csv',
  278. isHeader: true,
  279. isFooter: true,
  280. data
  281. })
  282. })
  283. },
  284. cancelRowEvent(row) {
  285. const xTable = this.$refs.xTable
  286. xTable.clearActived().then(() => {
  287. // 还原行数据
  288. if (this.isEdit) {
  289. //编辑
  290. xTable.revertData(row)
  291. } else {
  292. //新增
  293. xTable.remove(row)
  294. }
  295. this.loadButton = false;
  296. })
  297. },
  298. // 删除场站信息
  299. deleteRowEvent(row) {
  300. this.rowId = row.id
  301. this.delVisible = true
  302. },
  303. deleteCancel() {
  304. this.delVisible = false
  305. },
  306. deleteInfo() {
  307. this.$axios.delete('/boosterStationInfo/' + this.rowId).then(res => {
  308. this.$message({
  309. message: '删除成功',
  310. type: 'success'
  311. })
  312. this.delVisible = false
  313. this.getInfo()
  314. }).catch((error) => {
  315. this.$message.error('删除升压站信息出错' + error)
  316. })
  317. },
  318. timestampToTime(time) {
  319. const date = new Date(time) // 时间戳为10位需*1000,时间戳为13位的话不需乘1000
  320. const Y = date.getFullYear() + '-'
  321. const M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'
  322. const D = date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()
  323. return Y + M + D
  324. }
  325. }
  326. }
  327. </script>
  328. <style scoped>
  329. </style>