index.vue 11 KB

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