interface.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643
  1. <template style="height=0px;improtanent">
  2. <div class="app-container">
  3. <el-header style="height: auto;!improtant">
  4. <div class="filter-container" style="padding-bottom: 20px;!improtant">
  5. <el-input v-model="listQuery.id" placeholder="ID" style="width: 80px;" class="filter-item" @keyup.enter.native="handleFilter" />
  6. <el-input v-model="listQuery.customName" placeholder="服务名" style="width: 150px;" class="filter-item" @keyup.enter.native="handleFilter" />
  7. <el-input v-model="listQuery.interfaceName" placeholder="接口类" style="width: 200px;" class="filter-item" @keyup.enter.native="handleFilter" />
  8. <el-input v-model="listQuery.methodName" placeholder="方法名" style="width: 200px;" class="filter-item" @keyup.enter.native="handleFilter" />
  9. <el-input v-model="listQuery.serviceVersion" placeholder="版本" style="width: 100px;" class="filter-item" @keyup.enter.native="handleFilter" />
  10. <el-select v-model="listQuery.value" placeholder="状态" style="width: 100px;" class="filter-item" @change="handleFilter">
  11. <el-option v-for="item in listQuery.options" :key="item.value" :label="item.label" :value="item.value" />
  12. </el-select>
  13. <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="handleFilter">
  14. 搜索
  15. </el-button>
  16. <el-button class="filter-item" style="margin-left: 1px;" type="primary" icon="el-icon-edit" @click="handleCreate">
  17. 新增
  18. </el-button>
  19. <el-checkbox v-model="showReviewer" class="filter-item" style="margin-left:1px;" @change="tableKey=tableKey+1">
  20. 备注
  21. </el-checkbox>
  22. </div>
  23. </el-header>
  24. <!-- <pagination v-show="total>0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" /> -->
  25. <el-table
  26. :key="tableKey"
  27. v-loading="listLoading"
  28. :data="list"
  29. fit
  30. highlight-current-row
  31. style="width: 100%;"
  32. :header-cell-style="styleObj"
  33. @sort-change="sortChange"
  34. >
  35. <el-table-column label="ID" prop="id" sortable align="center" min-width="60">
  36. <template slot-scope="scope">
  37. <span>{{ scope.row.id }}</span>
  38. </template>
  39. </el-table-column>
  40. <el-table-column label="服务名" min-width="150px" align="center">
  41. <template slot-scope="scope">
  42. <span>{{ scope.row.customName }}</span>
  43. </template>
  44. </el-table-column>
  45. <el-table-column label="接口类" min-width="220px" align="center">
  46. <template slot-scope="scope">
  47. <span>{{ scope.row.interfaceName }}</span>
  48. </template>
  49. </el-table-column>
  50. <el-table-column label="版本" min-min-width="60px">
  51. <template slot-scope="{row}">
  52. <span>{{ row.serviceVersion }}</span>
  53. <!-- <el-tag>{{ row.type | typeFilter }}</el-tag> -->
  54. </template>
  55. </el-table-column>
  56. <el-table-column label="方法名" min-width="110px" align="center">
  57. <template slot-scope="scope">
  58. <span>{{ scope.row.methodName }}</span>
  59. </template>
  60. </el-table-column>
  61. <!-- <el-table-column label="Imp" width="80px">
  62. <template slot-scope="scope">
  63. <svg-icon v-for="n in +scope.row.importance" :key="n" icon-class="star" class="meta-item__icon" />
  64. </template>
  65. </el-table-column>
  66. <el-table-column label="Readings" align="center" width="95">
  67. <template slot-scope="{row}">
  68. <span v-if="row.pageviews" class="link-type" @click="handleFetchPv(row.pageviews)">{{ row.pageviews }}</span>
  69. <span v-else>0</span>
  70. </template>
  71. </el-table-column> -->
  72. <el-table-column label="状态" class-name="status-col" min-width="100">
  73. <template slot-scope="{row}">
  74. <el-tag :type="row.methodStatus | statusFilter">
  75. {{ statusMappings.get(row.methodStatus) }}
  76. </el-tag>
  77. </template>
  78. </el-table-column>
  79. <el-table-column label="更新时间" min-width="150px" align="center">
  80. <template slot-scope="scope">
  81. <span>{{ scope.row.updateTimeStr }}</span>
  82. </template>
  83. </el-table-column>
  84. <el-table-column v-if="showReviewer" label="备注" min-width="110px" align="center">
  85. <template slot-scope="scope">
  86. <span style="color:red;">{{ scope.row.remark }}</span>
  87. </template>
  88. </el-table-column>
  89. <el-table-column label="操作" align="center" min-width="370px" class-name="small-padding fixed-width">
  90. <template slot-scope="{row}">
  91. <el-button type="primary" size="mini" @click="handleCheck(row)">
  92. 查看
  93. </el-button>
  94. <el-button type="primary" size="mini" @click="handleUpdate(row)">
  95. 编辑
  96. </el-button>
  97. <el-button type="primary" size="mini" @click="handleCopy(row)">
  98. 复制
  99. </el-button>
  100. <el-button v-if="row.methodStatus!=1" size="mini" type="success" @click="handleModifyStatus(row, 1)">
  101. 开启
  102. </el-button>
  103. <el-button v-if="row.methodStatus!=0" size="mini" type="danger" @click="handleModifyStatus(row, 0)">
  104. 关闭
  105. </el-button>
  106. <el-button type="primary" size="mini" @click="redirectTo(row.id, row.methodName)">
  107. 规则 >>
  108. </el-button>
  109. </template>
  110. </el-table-column>
  111. </el-table>
  112. <pagination v-show="total>0" :total="total" :page.sync="listQuery.curIndex" :limit.sync="listQuery.pageSize" @pagination="getList" />
  113. <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" width="65%" @open="dialogOpenInit()">
  114. <el-form ref="serviceDataForm" :rules="serviceDataRules" :model="serviceData" label-position="left" label-width="120px" style="width: 500px; margin-left:80px;">
  115. <el-form-item label="名称" prop="customName">
  116. <el-input v-model="serviceData.customName" placeholder="dj_order_圈司机" title="自定义,供配置人员查看,建议”业务线_模块_功能" />
  117. </el-form-item>
  118. <div style="display:flex; margin-left:0px;">
  119. <el-form-item label="环境配置" prop="envChannel" style="flex:1;">
  120. <el-select v-model="serviceData.envChannel" class="filter-item" style="width: 190px;" filterable placeholder="环境配置" @change="updateEnvChannel(serviceData.envChannel)">
  121. <el-option v-for="item in envTypeSelections" :key="item.key" :label="item.display_name" :value="item.key" />
  122. </el-select>
  123. </el-form-item>
  124. <el-form-item prop="envId" style="flex:1; margin-left:-120px;">
  125. <el-select v-model="serviceData.envId" class="filter-item" style="width: 190px;" filterable placeholder="环境" @change="showZkAddress">
  126. <el-option v-for="item in envSelections" :key="item.key" :label="item.display_name" :value="item.key" />
  127. </el-select>
  128. </el-form-item>
  129. </div>
  130. <el-form-item label="接口类名" prop="interfaceName">
  131. <el-input v-model="serviceData.interfaceName" placeholder="com.didi.prado.config.api.CampaignRemoteServce" title="包名.接口类名" />
  132. </el-form-item>
  133. <el-form-item label="方法名" prop="methodName">
  134. <el-input v-model="serviceData.methodName" placeholder="addCampaign" />
  135. </el-form-item>
  136. <el-form-item label="服务版本" prop="serviceVersion">
  137. <el-input v-model="serviceData.serviceVersion" placeholder="1.0.0_test" />
  138. </el-form-item>
  139. <el-form-item label="协议" prop="protocol">
  140. <el-select v-model="serviceData.protocol" class="filter-item" filterable clearable placeholder="协议">
  141. <el-option v-for="item in protocols" :key="item.key" :label="item.display_name" :value="item.key" />
  142. </el-select>
  143. </el-form-item>
  144. <el-form-item label="消费者" prop="consumerIds">
  145. <el-select v-model="serviceData.consumerIds" class="filter-item" multiple placeholder="消费者">
  146. <el-option v-for="item in consumerSelections" :key="item.key" :label="item.display_name" :value="item.key" />
  147. </el-select>
  148. </el-form-item>
  149. <!-- <el-form-item label="Date" prop="timestamp">
  150. <el-date-picker v-model="temp.timestamp" type="datetime" placeholder="Please pick a date" />
  151. </el-form-item>
  152. <el-form-item label="Status">
  153. <el-select v-model="temp.status" class="filter-item" placeholder="Please select">
  154. <el-option v-for="item in statusOptions" :key="item" :label="item" :value="item" />
  155. </el-select>
  156. </el-form-item>
  157. <el-form-item label="Imp">
  158. <el-rate v-model="temp.importance" :colors="['#99A9BF', '#F7BA2A', '#FF9900']" :max="3" style="margin-top:8px;" />
  159. </el-form-item> -->
  160. <el-form-item label="入参类型" prop="methodParamsTypes">
  161. <el-input v-model="serviceData.methodParamsTypes" :autosize="{ minRows: 2, maxRows: 8}" type="textarea" title="列表形式,参数有序,多个参数类型以英文”,“分隔" placeholder="[java.lang.Integer, com.didi.prado.config.api.param.CampaignRequest]" />
  162. </el-form-item>
  163. <el-form-item label="返回值类型" prop="returnDataStructure">
  164. <el-input v-model="serviceData.returnDataStructure" :autosize="{ minRows: 2, maxRows: 8}" type="textarea" title="key:每个自定义类型在返回结构中的节点树,以英文“.“分隔;value:自定义类型的全限定类名" placeholder="{'data':'com.didi.order.api.response.BaserOrderInfoResult','data.feeInfo':'com.didi.order.api.response.FeeInfoResult'}" />
  165. </el-form-item>
  166. </el-form>
  167. <div slot="footer" class="dialog-footer">
  168. <el-button @click="dialogFormVisible = false">
  169. 取消
  170. </el-button>
  171. <el-button v-if="showSubmitBtn" type="primary" @click="dialogStatus==='create'?createData():updateData()">
  172. 确定
  173. </el-button>
  174. </div>
  175. </el-dialog>
  176. <el-dialog :visible.sync="dialogPvVisible" title="Reading statistics">
  177. <el-table :data="pvData" border fit highlight-current-row style="width: 100%">
  178. <el-table-column prop="key" label="Channel" />
  179. <el-table-column prop="pv" label="Pv" />
  180. </el-table>
  181. <span slot="footer" class="dialog-footer">
  182. <el-button type="primary" @click="dialogPvVisible = false">Confirm</el-button>
  183. </span>
  184. </el-dialog>
  185. </div>
  186. </template>
  187. <style scoped>
  188. .filter-item {
  189. margin-top: 10px;
  190. }
  191. </style>
  192. <script>
  193. import { fetchEnvInfo, fetchServiceById, fetchServiceList, fetchConsumerList, createService, updateService, changeStatus } from '@/api/interface'
  194. import waves from '@/directive/waves' // waves directive
  195. import { parseTime } from '@/utils'
  196. import Pagination from '@/components/Pagination' // secondary package based on el-pagination
  197. const envTypeSelections = [
  198. { key: 1, display_name: '自定义环境配置' },
  199. { key: 2, display_name: '环境平台' }
  200. ]
  201. var envSelections = []
  202. var consumerSelections = []
  203. const protocols = [
  204. { key: 'dubbo', display_name: 'dubbo' }
  205. // { key: 'http', display_name: 'http' }
  206. ]
  207. // var envTypeID = 1;
  208. // arr to obj, such as { CN : "China", US : "USA" }
  209. // const calendarTypeKeyValue = calendarTypeOptions.reduce((acc, cur) => {
  210. // acc[cur.key] = cur.display_name
  211. // return acc
  212. // }, {})
  213. export default {
  214. name: 'Interface',
  215. components: { Pagination },
  216. directives: { waves },
  217. filters: {
  218. statusFilter(status) {
  219. const statusMap = {
  220. 1: 'success',
  221. draft: 'info',
  222. 0: 'danger'
  223. }
  224. return statusMap[status]
  225. }
  226. },
  227. data() {
  228. return {
  229. styleObj: {
  230. 'color': 'rgba(0, 0, 0, 0.726)'
  231. },
  232. tableKey: 0,
  233. list: null,
  234. total: 0,
  235. listLoading: true,
  236. statusMappings: new Map([[1, '已开启'], [0, '未开启']]),
  237. statusOperateMap: new Map([[1, '开启'], [0, '关闭']]),
  238. listQuery: {
  239. options: [{ value: '0', label: '未开启' }, { value: '1', label: '已开启' }],
  240. value: '',
  241. curIndex: 1,
  242. pageSize: 20,
  243. customName: '',
  244. interfaceName: '',
  245. // page: 1,
  246. // limit: 20,
  247. // importance: undefined,
  248. // title: undefined,
  249. // type: undefined,
  250. sort: '+id',
  251. id: null,
  252. methodName: '',
  253. serviceVersion: '',
  254. methodStatus: null
  255. },
  256. importanceOptions: [1, 2, 3],
  257. envTypeSelections,
  258. envSelections,
  259. consumerSelections,
  260. protocols,
  261. sortOptions: [{ label: 'ID Ascending', key: '+id' }, { label: 'ID Descending', key: '-id' }],
  262. statusOptions: ['published', 'draft', 'deleted'],
  263. showReviewer: false,
  264. showSubmitBtn: true,
  265. temp: {
  266. id: undefined,
  267. importance: 1,
  268. remark: '',
  269. timestamp: new Date(),
  270. title: '',
  271. type: '',
  272. status: 'published'
  273. },
  274. serviceData: {
  275. // bizLine: 0,
  276. // bizModuleId: 0,
  277. customName: '',
  278. interfaceName: '',
  279. protocol: '',
  280. serviceVersion: '',
  281. envChannel: 1,
  282. envId: 0,
  283. methodName: '',
  284. methodParamsTypes: '',
  285. returnDataStructure: '',
  286. methodStatus: 1,
  287. consumerIds: [],
  288. remark: '',
  289. updator: ''
  290. },
  291. // ConsumerIdsStr: this.serviceData.consumerIds.replace('[', '').replace(']', '').split(',').map(Number),
  292. serviceDataExt: {
  293. id: 0,
  294. bizLine: 0,
  295. bizModuleId: 0
  296. },
  297. dialogFormVisible: false,
  298. dialogStatus: '',
  299. textMap: {
  300. update: '编辑',
  301. create: '新增服务'
  302. },
  303. dialogPvVisible: false,
  304. pvData: [],
  305. serviceDataRules: {
  306. customName: [{ required: true, message: '名称不能为空', trigger: 'change' }],
  307. envChannel: [{ required: true, message: '请选择环境配置', trigger: 'change' }],
  308. envId: [{ required: true, message: '请选择环境', trigger: 'change' }],
  309. interfaceName: [{ required: true, message: '接口名称不能为空', trigger: 'change' }],
  310. serviceVersion: [{ required: true, message: '服务版本不能为空', trigger: 'change' }],
  311. protocol: [{ required: true, message: '请选择协议类型', trigger: 'change' }],
  312. consumerIds: [{ required: false, message: '请选择消费者', trigger: 'change' }],
  313. methodName: [{ required: true, message: '方法名称不能为空', trigger: 'change' }]
  314. // methodParamsTypes: [{ required: true, message: '入参类型不能为空', trigger: 'change' }],
  315. // returnDataStructure: [{ required: true, message: '返回值类型不能为空', trigger: 'change' }]
  316. },
  317. downloadLoading: false
  318. }
  319. },
  320. created() {
  321. this.getList()
  322. },
  323. methods: {
  324. getList() {
  325. this.listLoading = true
  326. fetchServiceList(this.listQuery).then(response => {
  327. console.log(this.listQuery)
  328. this.list = response.data.mockMethodList
  329. this.total = response.data.total
  330. // Just to simulate the time of the request
  331. this.listLoading = false
  332. // setTimeout(() => {
  333. // this.listLoading = false
  334. // }, 1.5 * 1000)
  335. })
  336. },
  337. updateEnvChannel(v) {
  338. // console.log(v)
  339. this.serviceData.envChannel = v
  340. this.envSelections = []
  341. fetchEnvInfo(v).then(response => {
  342. for (var sel of response.data) {
  343. var envSel = {}
  344. envSel.key = sel.envId
  345. envSel.display_name = sel.envName
  346. this.envSelections.push(envSel)
  347. }
  348. })
  349. },
  350. getConsumers() {
  351. this.consumerSelections = []
  352. fetchConsumerList().then(response => {
  353. for (var sel of response.data) {
  354. var consumerSel = {}
  355. consumerSel.key = sel.dubboConsumerId
  356. consumerSel.display_name = sel.customizeName
  357. this.consumerSelections.push(consumerSel)
  358. }
  359. // console.log(this.serviceData.consumerIds)
  360. // for (var op of this.consumerSelections) {
  361. // if (op.key in this.serviceData.consumerIds) {
  362. // this.consumerSelected.push(op)
  363. // // this.consumerSelected = op.display_name
  364. // }
  365. // }
  366. // console.log(this.consumerSelected)
  367. })
  368. },
  369. dialogOpenInit() {
  370. this.updateEnvChannel(this.serviceData.envChannel)
  371. this.getConsumers()
  372. },
  373. handleFilter() {
  374. // this.listQuery.page = 1
  375. this.listQuery.methodStatus = this.listQuery.value
  376. this.getList()
  377. },
  378. handleModifyStatus(row, status) {
  379. var statusData = {
  380. id: row.id,
  381. methodStatus: status
  382. }
  383. // console.log(statusData)
  384. changeStatus(statusData).then(response => {
  385. // console.log(response)
  386. if (response.code === 200) {
  387. row.methodStatus = status
  388. this.$message({
  389. message: row.id.toString() + ' ' + this.statusOperateMap.get(status) + '成功!',
  390. type: 'success'
  391. })
  392. } else {
  393. this.$message({
  394. message: row.id.toString() + ' ' + this.statusOperateMap.get(status) + '失败!',
  395. type: 'danger'
  396. })
  397. }
  398. })
  399. },
  400. sortChange(data) {
  401. const { prop, order } = data
  402. if (prop === 'id') {
  403. this.sortByID(order)
  404. }
  405. },
  406. sortByID(order) {
  407. if (order === 'ascending') {
  408. this.listQuery.sort = '+id'
  409. } else {
  410. this.listQuery.sort = '-id'
  411. }
  412. this.handleFilter()
  413. },
  414. resetServiceData() {
  415. this.serviceData = {
  416. // bizLine: 0,
  417. // bizModuleId: 0,
  418. customName: '',
  419. interfaceName: '',
  420. protocol: '',
  421. serviceVersion: '',
  422. envChannel: 1,
  423. envId: 0,
  424. methodName: '',
  425. methodParamsTypes: '[]',
  426. returnDataStructure: '',
  427. methodStatus: 1,
  428. consumerIds: [],
  429. remark: '',
  430. updator: ''
  431. }
  432. },
  433. handleCreate() {
  434. this.resetServiceData()
  435. this.dialogStatus = 'create'
  436. this.dialogFormVisible = true
  437. this.showSubmitBtn = true
  438. this.$nextTick(() => {
  439. this.$refs['serviceDataForm'].clearValidate()
  440. })
  441. },
  442. createData() {
  443. this.$refs['serviceDataForm'].validate((valid) => {
  444. if (valid) {
  445. // this.serviceData.id = parseInt(Math.random() * 100) + 1024 // mock a id
  446. // this.temp.author = 'vue-element-admin'
  447. delete this.serviceData.id
  448. delete this.serviceData.bizLine
  449. delete this.serviceData.bizModuleId
  450. delete this.serviceData.bizName
  451. delete this.serviceData.consumerCustomizeName
  452. delete this.serviceData.consumerNames
  453. delete this.serviceData.createTime
  454. delete this.serviceData.createTimeStr
  455. delete this.serviceData.envName
  456. delete this.serviceData.updateTime
  457. delete this.serviceData.updateTimeStr
  458. delete this.serviceData.zkAddress
  459. if (typeof this.serviceData.consumerIds === 'object') {
  460. this.serviceData.consumerIds = '[' + this.serviceData.consumerIds.toString() + ']'
  461. }
  462. // console.log('#######################')
  463. // console.log(this.serviceData)
  464. // console.log('#######################')
  465. createService(this.serviceData).then(response => {
  466. // this.list.unshift(this.serviceData)
  467. // console.log(response)
  468. if (response.code === 200) {
  469. this.dialogFormVisible = false
  470. this.getList()
  471. this.$notify({
  472. title: 'Success',
  473. message: response.msg,
  474. type: 'success',
  475. duration: 10000
  476. })
  477. } else {
  478. this.$notify({
  479. title: 'Failed',
  480. message: response.msg,
  481. type: 'error',
  482. duration: 10000
  483. })
  484. }
  485. })
  486. }
  487. })
  488. },
  489. handleUpdate(row) {
  490. var queryData = { id: row.id }
  491. fetchServiceById(queryData).then(response => {
  492. // console.log(response)
  493. var rowData = response.data.mockMethodList
  494. // this.serviceData.timestamp = new Date(this.temp.timestamp)
  495. // console.log(this.serviceData)
  496. // console.log(row_data[0])
  497. this.serviceData = Object.assign({}, rowData[0])
  498. this.serviceDataExt.id = row.id
  499. this.serviceDataExt.bizLine = row.bizLine
  500. this.serviceDataExt.bizModuleId = row.bizModuleId
  501. // console.log(this.serviceData.consumerIds.split('[')[1].split(']')[0].split(','))
  502. if (this.serviceData.consumerIds === '[]') {
  503. this.serviceData.consumerIds = []
  504. } else {
  505. this.serviceData.consumerIds = this.serviceData.consumerIds.split('[')[1].split(']')[0].split(',').map(value => { return parseInt(value) })
  506. }
  507. // console.log(this.serviceData)
  508. // this.serviceData.timestamp = new Date(this.temp.timestamp)
  509. this.dialogStatus = 'update'
  510. this.dialogFormVisible = true
  511. this.showSubmitBtn = true
  512. this.$nextTick(() => {
  513. this.$refs['serviceDataForm'].clearValidate()
  514. })
  515. })
  516. },
  517. handleCheck(row) {
  518. var queryData = { id: row.id }
  519. fetchServiceById(queryData).then(response => {
  520. // console.log(response)
  521. var rowData = response.data.mockMethodList
  522. // this.serviceData.timestamp = new Date(this.temp.timestamp)
  523. // console.log(this.serviceData)
  524. // console.log(row_data[0])
  525. this.serviceData = Object.assign({}, rowData[0])
  526. this.serviceDataExt.id = row.id
  527. this.serviceDataExt.bizLine = row.bizLine
  528. this.serviceDataExt.bizModuleId = row.bizModuleId
  529. // console.log(this.serviceData.consumerIds.split('[')[1].split(']')[0].split(','))
  530. if (this.serviceData.consumerIds === '[]') {
  531. this.serviceData.consumerIds = []
  532. } else {
  533. this.serviceData.consumerIds = this.serviceData.consumerIds.split('[')[1].split(']')[0].split(',').map(value => { return parseInt(value) })
  534. }
  535. // console.log(this.serviceData)
  536. // this.serviceData.timestamp = new Date(this.temp.timestamp)
  537. this.dialogStatus = 'update'
  538. this.dialogFormVisible = true
  539. this.showSubmitBtn = false
  540. this.$nextTick(() => {
  541. this.$refs['serviceDataForm'].clearValidate()
  542. })
  543. })
  544. },
  545. handleCopy(row) {
  546. var queryData = { id: row.id }
  547. fetchServiceById(queryData).then(response => {
  548. // console.log(response)
  549. var rowData = response.data.mockMethodList
  550. // this.serviceData.timestamp = new Date(this.temp.timestamp)
  551. // console.log(this.serviceData)
  552. // console.log(row_data[0])
  553. this.serviceData = Object.assign({}, rowData[0])
  554. this.serviceDataExt.id = row.id
  555. this.serviceDataExt.bizLine = row.bizLine
  556. this.serviceDataExt.bizModuleId = row.bizModuleId
  557. // console.log(this.serviceData.consumerIds.split('[')[1].split(']')[0].split(','))
  558. if (this.serviceData.consumerIds === '[]') {
  559. this.serviceData.consumerIds = []
  560. } else {
  561. this.serviceData.consumerIds = this.serviceData.consumerIds.split('[')[1].split(']')[0].split(',').map(value => { return parseInt(value) })
  562. }
  563. // console.log(this.serviceData)
  564. // this.serviceData.timestamp = new Date(this.temp.timestamp)
  565. this.dialogStatus = 'create'
  566. this.dialogFormVisible = true
  567. this.$nextTick(() => {
  568. this.$refs['serviceDataForm'].clearValidate()
  569. })
  570. })
  571. },
  572. updateData() {
  573. this.$refs['serviceDataForm'].validate((valid) => {
  574. if (valid) {
  575. const tempData = {
  576. id: this.serviceDataExt.id,
  577. bizLine: this.serviceDataExt.bizLine,
  578. bizModuleId: this.serviceDataExt.bizModuleId,
  579. customName: this.serviceData.customName,
  580. interfaceName: this.serviceData.interfaceName,
  581. protocol: this.serviceData.protocol,
  582. serviceVersion: this.serviceData.serviceVersion,
  583. envChannel: this.serviceData.envChannel,
  584. envId: this.serviceData.envId,
  585. methodName: this.serviceData.methodName,
  586. methodParamsTypes: this.serviceData.methodParamsTypes,
  587. returnDataStructure: this.serviceData.returnDataStructure,
  588. methodStatus: this.serviceData.methodStatus,
  589. consumerIds: '[' + this.serviceData.consumerIds.toString() + ']',
  590. remark: this.serviceData.remark,
  591. updator: ''
  592. }
  593. // console.log(tempData)
  594. updateService(tempData).then(response => {
  595. if (response.code === 200) {
  596. this.dialogFormVisible = false
  597. this.getList()
  598. this.$notify({
  599. title: 'Success',
  600. message: response.msg,
  601. type: 'success',
  602. duration: 2000
  603. })
  604. } else {
  605. this.$notify({
  606. title: 'Failed',
  607. message: response.msg,
  608. type: 'error',
  609. duration: 2000
  610. })
  611. }
  612. })
  613. }
  614. })
  615. },
  616. formatJson(filterVal, jsonData) {
  617. return jsonData.map(v => filterVal.map(j => {
  618. if (j === 'timestamp') {
  619. return parseTime(v[j])
  620. } else {
  621. return v[j]
  622. }
  623. }))
  624. },
  625. redirectTo(id, methodName) {
  626. // console.log(id,methodName)
  627. this.$router.push({
  628. path: `/mock/interface/${id}`,
  629. query: {
  630. methodName: methodName
  631. }
  632. })
  633. }
  634. }
  635. }
  636. </script>