index.vue 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. <template>
  2. <el-container>
  3. <el-main class="page-main">
  4. <el-card>
  5. <el-container>
  6. <el-header height="120">
  7. <el-form
  8. ref="searchForm"
  9. :model="dataQuery"
  10. :size="size"
  11. label-position="left"
  12. label-width="80px"
  13. >
  14. <el-row :gutter="20">
  15. <el-col :span="6">
  16. <el-form-item label="名称:" class="notice-input" label-width="60px" prop="name">
  17. <el-input
  18. v-model="dataQuery.name"
  19. placeholder="请输入名称"
  20. clearable
  21. @keyup.enter.native="search"
  22. />
  23. </el-form-item>
  24. </el-col>
  25. <el-col :span="6">
  26. <el-form-item label="编码:" class="notice-input" label-width="60px" prop="code">
  27. <el-input
  28. v-model="dataQuery.code"
  29. placeholder="请输入编码"
  30. clearable
  31. @keyup.enter.native="search"
  32. />
  33. </el-form-item>
  34. </el-col>
  35. <el-col :span="12" style="text-align: right">
  36. <el-form-item>
  37. <el-button type="primary" icon="el-icon-search" :size="size" @click="search">查询</el-button>
  38. <el-button icon="el-icon-refresh" :size="size" @click="resetFields">重置</el-button>
  39. </el-form-item>
  40. </el-col>
  41. </el-row>
  42. </el-form>
  43. </el-header>
  44. <el-main>
  45. <sheet
  46. ref="qtable"
  47. :api="this.$api.sysTracker.page"
  48. :columns="tableColumns"
  49. :data-query="dataQuery"
  50. :operates="operates"
  51. :float-type="'right'"
  52. :select-type="'selection'"
  53. />
  54. </el-main>
  55. </el-container>
  56. </el-card>
  57. </el-main>
  58. <el-dialog
  59. :title="dialogStatus==='create'?'新建':'编辑'"
  60. :visible.sync="dialogVisible"
  61. width="40%"
  62. @close="dialogClose"
  63. >
  64. <el-form ref="temp" :size="size" :rules="rules" :model="temp" label-width="120px">
  65. <el-form-item label="名称:" prop="name">
  66. <el-input v-model="temp.name" :size="size" placeholder="请输入名称" />
  67. </el-form-item>
  68. <el-form-item label="编码:" prop="code">
  69. <el-input v-model="temp.code" :size="size" placeholder="请输入编码" />
  70. </el-form-item>
  71. <el-form-item label="备注:" prop="remark">
  72. <el-input v-model="temp.remark" :size="size" placeholder="请输入备注" />
  73. </el-form-item>
  74. <el-form-item
  75. label="键值对:"
  76. label-position="right"
  77. label-width="120px"
  78. class="notice-input"
  79. prop="maps"
  80. >
  81. <div
  82. v-for="(item, index) in maps"
  83. :key="index"
  84. style="width: 100%; float: left; margin-bottom: 5px;"
  85. type="flex"
  86. >
  87. <div style="width: 15%; float: left">
  88. <el-input v-model="item.value" placeholder="value" />
  89. </div>
  90. <div style="width: 35%; float: left;">
  91. <el-input
  92. v-model="item.text"
  93. type="textarea"
  94. :rows="2"
  95. placeholder="text"
  96. clearable
  97. style="border-left: 0px;margin-left: 11px;"
  98. />
  99. </div>
  100. <div style="width: 35%; float: left;margin-left:20px">
  101. <el-input
  102. v-model="item.label"
  103. type="textarea"
  104. :rows="2"
  105. placeholder="请输入说明文字"
  106. clearable
  107. style="border-left: 0px;margin-left: 11px;"
  108. />
  109. </div>
  110. <div style="width: 5%; float: left;padding-left: 23px; ">
  111. <el-button
  112. icon="el-icon-minus"
  113. circle
  114. :size="size"
  115. style="padding: 5px;"
  116. @click="delItem(index)"
  117. />
  118. </div>
  119. </div>
  120. </el-form-item>
  121. </el-form>
  122. <footer slot="footer" class="dialog-footer">
  123. <el-button :size="size" @click="dialogVisible = false">取 消</el-button>
  124. <el-button
  125. :size="size"
  126. type="primary"
  127. @click="dialogStatus==='create'?createData():updateData()"
  128. >确 定</el-button>
  129. </footer>
  130. </el-dialog>
  131. </el-container>
  132. </template>
  133. <script>
  134. import { mapGetters } from 'vuex'
  135. import Sheet from '@/components/Sheet/index'
  136. export default {
  137. name: 'Tracker',
  138. components: {
  139. Sheet
  140. },
  141. data() {
  142. return {
  143. maps: [{ value: '', text: '' }],
  144. tableColumns: [
  145. {
  146. prop: 'user_name',
  147. label: 'User',
  148. align: 'center',
  149. minWidth: 150,
  150. maxWidth: 220
  151. },
  152. {
  153. prop: 'method',
  154. label: 'Method',
  155. align: 'center',
  156. minWidth: 150,
  157. maxWidth: 180
  158. },
  159. {
  160. prop: 'create_time',
  161. label: 'ReqTime',
  162. align: 'center',
  163. minWidth: 150,
  164. maxWidth: 180
  165. },
  166. {
  167. prop: 'path',
  168. label: 'ReqPath',
  169. align: 'center',
  170. minWidth: 180,
  171. maxWidth: 180,
  172. formatter: (row, column) => {
  173. return row.path.split('?')[0]
  174. }
  175. },
  176. {
  177. prop: 'status_code',
  178. label: 'Status',
  179. align: 'center',
  180. minWidth: 150,
  181. maxWidth: 180
  182. }
  183. ],
  184. operates: {
  185. list: [
  186. {
  187. label: '详情',
  188. show: true,
  189. type: 'primary',
  190. method: row => {
  191. this.edit(row)
  192. }
  193. }
  194. ],
  195. width: 150
  196. },
  197. dataQuery: {
  198. page: 1,
  199. rows: 10,
  200. name: '',
  201. code: ''
  202. },
  203. rules: {
  204. name: [{ required: true, message: '请输入名称', trigger: 'blur' }],
  205. code: [{ required: true, message: '请输入编码', trigger: 'blur' }]
  206. },
  207. temp: {
  208. id: undefined,
  209. name: '',
  210. code: '',
  211. value: ''
  212. },
  213. dataLoading: false,
  214. dialogStatus: '',
  215. dialogVisible: false
  216. }
  217. },
  218. computed: {
  219. ...mapGetters(['size', 'minMainHeight'])
  220. },
  221. watch: {
  222. maps(val) {
  223. this.temp.value = JSON.stringify(val)
  224. }
  225. },
  226. created() {},
  227. methods: {
  228. search() {
  229. this.$refs.qtable.getData()
  230. },
  231. resetFields() {
  232. this.$refs['searchForm'].resetFields()
  233. this.$refs.qtable.getData()
  234. },
  235. dialogClose() {
  236. this.$refs['temp'].resetFields()
  237. this.maps = [{ value: '', text: '' }]
  238. },
  239. create() {
  240. this.dialogStatus = 'create'
  241. this.dialogVisible = true
  242. this.$nextTick(() => {
  243. this.$refs['temp'].clearValidate()
  244. })
  245. }
  246. }
  247. }
  248. </script>
  249. <style>
  250. .repair-item .oprate {
  251. color: #409eff;
  252. }
  253. .repair-item .button {
  254. width: 100%;
  255. height: 30px;
  256. line-height: 30px;
  257. text-align: center;
  258. border: 2px dotted #eee;
  259. background-color: white;
  260. }
  261. </style>