wan.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <template>
  2. <el-container>
  3. <el-header class="header">
  4. <div class="headers">
  5. <h3>WAN配置</h3>
  6. <el-button class="rebootcard" size="mini" type="primary" @click="reboot">重启网络</el-button>
  7. </div>
  8. </el-header>
  9. <el-main class="main">
  10. <el-form :model="ruleForm" :rules="rules" ref="form" label-width="100px" class="demo-ruleForm" size="small">
  11. <el-form-item label="上网方式" prop="type">
  12. <el-select class="select" @change="typeChage" v-model="ruleForm.type" placeholder="请选择上网方式">
  13. <el-option label="自动获取IP" :value="'0'"></el-option>
  14. <el-option label="手动获取IP" :value="'1'"></el-option>
  15. </el-select>
  16. </el-form-item>
  17. <el-form-item v-if="ruleForm.type == '0'" label="静态DNS" prop="staticip">
  18. <el-switch v-model="ruleForm.staticip" :active-value="'0'" :inactive-value="'1'" active-color="#13ce66" inactive-color="#ff4949"></el-switch>
  19. </el-form-item>
  20. <el-form-item v-if="ruleForm.type == '1'" label="IP地址" prop="address" :required="true">
  21. <el-input v-model="ruleForm.address"></el-input>
  22. </el-form-item>
  23. <el-form-item v-if="ruleForm.type == '1'" label="子网掩码" prop="netmask" :required="true">
  24. <el-input v-model="ruleForm.netmask"></el-input>
  25. </el-form-item>
  26. <el-form-item v-if="ruleForm.type == '1'" label="网关" prop="gateway" :required="true">
  27. <el-input v-model="ruleForm.gateway"></el-input>
  28. </el-form-item>
  29. <el-form-item v-if="ruleForm.staticip == '0'" label="DNS地址" prop="dns">
  30. <el-input v-model="ruleForm.dns"></el-input>
  31. </el-form-item>
  32. <el-form-item>
  33. <el-button type="primary" @click="onSubmit">立即提交</el-button>
  34. </el-form-item>
  35. </el-form>
  36. </el-main>
  37. </el-container>
  38. </template>
  39. <script>
  40. import { mapState, mapActions } from 'vuex'
  41. export default {
  42. name: 'wan',
  43. components: {},
  44. computed: {
  45. ...mapState(['wandata'])
  46. },
  47. data () {
  48. const ipaddr = { pattern: /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/, message: '请输入正确的IP地址' }
  49. return {
  50. ruleForm: {
  51. type: '0',
  52. staticip: '0'
  53. },
  54. rules: {
  55. address: [
  56. { required: true, message: 'IP地址不能为空' },
  57. ipaddr
  58. ],
  59. netmask: [
  60. { required: true, message: '子网掩码不能为空' },
  61. { pattern: /^(254|252|248|240|224|192|128|0)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(254|252|248|240|224|192|128|0)$/, message: '请输入正确掩码' }
  62. ],
  63. gateway: [
  64. { required: true, message: '网关不能为空' },
  65. ipaddr
  66. ],
  67. dns: [ipaddr]
  68. }
  69. }
  70. },
  71. async mounted () {
  72. const res = await this.wanquery()
  73. if (res && res.errcode === 0) {
  74. console.log(res)
  75. this.ruleForm = res.data
  76. }
  77. },
  78. methods: {
  79. ...mapActions(['setwan', 'wandown', 'wanup', 'wanquery']),
  80. // type类型改变
  81. typeChage () {
  82. this.ruleForm.staticip = 0
  83. },
  84. // 提交数据
  85. async onSubmit () {
  86. this.$refs.form.validate(async (valid) => {
  87. if (!valid) return false
  88. const res = await this.setwan(this.ruleForm)
  89. if (res && res.errcode === 0) {
  90. this.$message.success('设置成功')
  91. }
  92. })
  93. },
  94. // 重启网卡 (先调用停止,在调用启动)
  95. async reboot () {
  96. const dw = await this.wandown()
  97. if (dw && dw.errcode === 0) {
  98. const up = await this.wanup()
  99. if (up && up.errcode === 0) {
  100. this.$message.success('重启成功')
  101. }
  102. }
  103. }
  104. }
  105. }
  106. </script>
  107. <style lang="less" scoped>
  108. .headers {
  109. display: flex;
  110. width: 100%;
  111. border-bottom: 1px solid #999;
  112. }
  113. .rebootcard {
  114. line-height: 1em;
  115. height: 3em;
  116. margin-top: 1%;
  117. }
  118. h3 {
  119. width: 90%;
  120. text-align: left;
  121. text-indent: 1em;
  122. }
  123. .demo-ruleForm {
  124. width: 50%;
  125. margin: 5% auto;
  126. /deep/ .el-form-item .el-form-item__content .select {
  127. width: 100%;
  128. }
  129. }
  130. </style>