index.vue 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <template>
  2. <div>
  3. <!-- <bread></bread> -->
  4. <div class="margin-view"></div>
  5. <div class="btn-view">
  6. <el-button class="btn" @click="btnClick">{{ id? '保存修改': '新建'}}</el-button>
  7. </div>
  8. <div class="content-view">
  9. <el-form label-width="10px" style="width:400px;" :model="formData" class="dcenter">
  10. <el-form-item label="">
  11. <el-input v-model="formData.Name" placeholder="请输入新项目名称"></el-input>
  12. </el-form-item>
  13. </el-form>
  14. <el-input type="textarea" class="edit-textarea dcenter block" v-model="formData.Description" placeholder="数据源的说明再次编辑维护..."></el-input>
  15. <el-form label-width="120px" style="width:400px;" :model="formData" class="dcenter">
  16. <el-form-item label="协议类型">
  17. <el-select v-model="formData.ProtocolType" filterable placeholder="请选择">
  18. <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
  19. </el-select>
  20. </el-form-item>
  21. <el-form-item label="主机IP地址">
  22. <ip-input :ip="formData.ProtocolInfo.Ip" :port="formData.ProtocolInfo.Port" @change="changeItem"></ip-input>
  23. </el-form-item>
  24. <el-form-item label="用户名/密码" v-if="(passWordArr.indexOf(formData.ProtocolType) > -1)">
  25. <el-input v-model="formData.ProtocolInfo.User" style="display:inline-block;width:100px;"></el-input>/
  26. <el-input v-model="formData.ProtocolInfo.Password" style="display:inline-block;width:100px;"></el-input>
  27. </el-form-item>
  28. <el-form-item label="ProgID" v-if="formData.ProtocolType == 'opc'">
  29. <el-input v-model="formData.ProtocolInfo.ProgID" style="display:inline-block;width:100px;"></el-input>
  30. </el-form-item>
  31. </el-form>
  32. </div>
  33. </div>
  34. </template>
  35. <script>
  36. import ipInput from "@/components/config_point/ip_input"
  37. // import bread from "components/common/bread_crumb"
  38. import tools from "@/utils/tools"
  39. import {
  40. queryDataSource,
  41. updateDataSource,
  42. createDataSource
  43. } from "@/fetch/point_http"
  44. import {
  45. mapGetters,
  46. mapActions
  47. } from "vuex";
  48. export default {
  49. computed: {
  50. ...mapGetters("project", [
  51. "projectId"
  52. ])
  53. },
  54. data() {
  55. return {
  56. passWordArr: ['mqtt', 'amqp', 'opc'],
  57. formData: {
  58. "ProtocolType": "", //协议类型
  59. "Name": "",
  60. ProtocolInfo: {
  61. "Ip": "", //ip
  62. "Port": "", //端口号,有些协议类型没有该信息
  63. "User": "", //用户名
  64. "Password": "", //密码
  65. "ProgID": "", //progID
  66. },
  67. Description: ""
  68. },
  69. options: [{
  70. value: 'modbus-tcp',
  71. label: 'Modbus TCP'
  72. }, {
  73. value: 'bacnet-ip',
  74. label: 'BACNet IP'
  75. }, {
  76. value: 'opc',
  77. label: 'OPC'
  78. }, {
  79. value: 'knx',
  80. label: 'KNX'
  81. }, {
  82. value: 'mqtt',
  83. label: 'MQTT'
  84. }, {
  85. value: 'amqp',
  86. label: 'AMQP'
  87. }],
  88. id: this.$route.query.key
  89. }
  90. },
  91. components: {
  92. ipInput,
  93. // bread
  94. },
  95. created() {
  96. },
  97. mounted() {
  98. if (!!this.id) {
  99. this.getDataSouse()
  100. }
  101. },
  102. methods: {
  103. changeItem(ip, port) {
  104. this.formData.ProtocolInfo.Ip = ip
  105. this.formData.ProtocolInfo.Port = port
  106. },
  107. getDataSouse() {
  108. let param = {
  109. Filters: {
  110. ProjectId: this.projectId,
  111. Id: this.id
  112. },
  113. "PageNumber": 1,
  114. "PageSize": 50,
  115. "Projection": [
  116. ]
  117. }
  118. queryDataSource(param, res => {
  119. let data = res.Content[0]
  120. if (!data.ProtocolInfo) {
  121. //信息点为空时
  122. data.ProtocolInfo = {
  123. "Ip": "", //ip
  124. "Port": "",
  125. "User": "", //用户名
  126. "Password": "", //密码
  127. "ProgID": "", //progID
  128. }
  129. } else {
  130. //有信息点时
  131. }
  132. this.formData = data
  133. console.log(this.formData, "formData")
  134. })
  135. },
  136. btnClick() {
  137. console.log(this.formData, "form")
  138. let param = tools.deepCopy(this.formData)
  139. tools.delObjKey(param, "CreateTime")
  140. tools.delObjKey(param, "LastUpdate")
  141. if (!!this.id) {
  142. console.log(param.ProtocolInfo.Port)
  143. if(param.ProtocolInfo.Port == ""){
  144. delete param.ProtocolType.Port
  145. }
  146. updateDataSource({
  147. Content: [param],
  148. Projection: []
  149. }, res => {
  150. console.log(res, 'res')
  151. this.$router.push({
  152. path: '/configPoint'
  153. })
  154. this.$message.success("更新成功!")
  155. })
  156. } else {
  157. param.ProjectId = this.projectId
  158. console.log(param, "param")
  159. createDataSource(param, res => {
  160. console.log(res)
  161. this.$router.push({
  162. path: '/configPoint'
  163. })
  164. this.$message.success("创建成功!")
  165. })
  166. }
  167. },
  168. }
  169. }
  170. </script>
  171. <style lang="scss">
  172. .margin-view {
  173. height: 60px;
  174. }
  175. .btn-view {
  176. overflow: hidden;
  177. .btn {
  178. float: right;
  179. margin-right: 40px;
  180. }
  181. }
  182. .content-view {
  183. width: 928px;
  184. margin: auto;
  185. .edit-textarea {
  186. margin: 10px 0;
  187. height: 117px;
  188. textarea {
  189. height: 100%;
  190. background-color: #EEFAFF;
  191. }
  192. }
  193. }
  194. </style>