index.vue 10 KB

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