codeList.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. <template>
  2. <div>
  3. <div class="gva-search-box">
  4. <el-form ref="searchForm" :inline="true" :model="searchInfo">
  5. <el-form-item label="游戏id">
  6. <el-input v-model="searchInfo.game_id" placeholder="游戏id" />
  7. </el-form-item>
  8. <el-form-item label="日期" prop="create_date">
  9. <el-date-picker
  10. v-model="searchInfo.create_date"
  11. popper-class="picker-popovers"
  12. class="timefilter"
  13. type="datetime"
  14. placeholder="选择日期时间"
  15. value-format="YYYY-MM-DD"
  16. >
  17. </el-date-picker>
  18. </el-form-item>
  19. <el-form-item>
  20. <el-button size="small" type="primary" icon="search" @click="onSubmit">查询</el-button>
  21. <el-button size="small" icon="refresh" @click="onReset">重置</el-button>
  22. </el-form-item>
  23. </el-form>
  24. </div>
  25. <div class="gva-table-box">
  26. <el-table :data="tableData" @sort-change="sortChange" @selection-change="handleSelectionChange" height="500" style="width: 100%">
  27. <el-table-column
  28. type="selection"
  29. width="55"
  30. />
  31. <el-table-column fixed="left" align="left" label="游戏id" min-width="90" prop="game_id" sortable="custom" />
  32. <el-table-column fixed="left" align="left" label="日期" min-width="90" prop="create_date" />
  33. <el-table-column fixed="left" align="left" label="脚本负责人" min-width="90" prop="operator" />
  34. <el-table-column fixed="left" align="left" label="类型" min-width="60" prop="type" sortable="custom">
  35. <template #default="scope">
  36. <div>
  37. {{ typeFiletr(scope.row.type) }}
  38. </div>
  39. </template>
  40. </el-table-column>
  41. <el-table-column label="拉取账号">
  42. <el-table-column prop="pull_account_ok" label="成功" width="60" />
  43. <el-table-column prop="pull_account_fail" label="失败" width="60" />
  44. </el-table-column>
  45. <el-table-column label="启动代理">
  46. <el-table-column prop="start_proxy_ok" label="成功" width="60" />
  47. <el-table-column prop="start_proxy_fail" label="失败" width="60" />
  48. </el-table-column>
  49. <el-table-column label="模拟器启动">
  50. <el-table-column prop="simulator_start_ok" label="成功" width="60" />
  51. <el-table-column prop="start_proxy_fail" label="失败" width="60" />
  52. </el-table-column>
  53. <el-table-column label="网络检查">
  54. <el-table-column prop="network_check_ok" label="成功" width="60" />
  55. <el-table-column prop="network_check_fail" label="失败" width="60" />
  56. </el-table-column>
  57. <el-table-column label="启动游戏">
  58. <el-table-column prop="enter_start_game" label="进入" width="60" />
  59. <el-table-column prop="game_start_ok" label="成功" width="60" />
  60. <el-table-column prop="game_start_fail" label="失败" width="60" />
  61. </el-table-column>
  62. <el-table-column label="登录游戏">
  63. <el-table-column prop="enter_login" label="进入" width="60" />
  64. <el-table-column prop="login_ok" label="成功" width="60" />
  65. <el-table-column prop="login_fail" label="失败" width="60" />
  66. </el-table-column>
  67. <el-table-column label="实名认证">
  68. <el-table-column prop="enter_authentication" label="进入" width="60" />
  69. <el-table-column prop="authentication_ok" label="成功" width="60" />
  70. <el-table-column prop="authentication_fail" label="失败" width="60" />
  71. </el-table-column>
  72. <el-table-column label="选区">
  73. <el-table-column prop="enter_constituency" label="进入" width="60" />
  74. <el-table-column prop="constituency_ok" label="成功" width="60" />
  75. <el-table-column prop="constituency_fail" label="失败" width="60" />
  76. </el-table-column>
  77. <el-table-column label="角色">
  78. <el-table-column prop="has_role" label="有" width="60" />
  79. <el-table-column prop="not_role" label="无" width="60" />
  80. </el-table-column>
  81. <el-table-column label="进入游戏">
  82. <el-table-column prop="enter_game" label="进入" width="60" />
  83. <el-table-column prop="enter_game_ok" label="成功" width="60" />
  84. <el-table-column prop="enter_game_fail" label="失败" width="60" />
  85. </el-table-column>
  86. <el-table-column label="主线教程">
  87. <el-table-column prop="enter_main" label="进入" width="60" />
  88. <el-table-column prop="enter_main_ok" label="成功" width="60" />
  89. <el-table-column prop="enter_main_fail" label="失败" width="60" />
  90. </el-table-column>
  91. <el-table-column label="付费">
  92. <el-table-column prop="enter_fee" label="进入" width="60" />
  93. <el-table-column prop="fee_ok" label="成功" width="60" />
  94. <el-table-column prop="fee_fail" label="失败" width="60" />
  95. </el-table-column>
  96. <el-table-column label="封号" min-width="60" prop="ban_off" />
  97. <el-table-column label="冻结" min-width="60" prop="freeze" />
  98. </el-table>
  99. <div class="gva-pagination">
  100. <el-pagination
  101. :current-page="page"
  102. :page-size="pageSize"
  103. :page-sizes="[10, 30, 50, 100]"
  104. :total="total"
  105. layout="total, sizes, prev, pager, next, jumper"
  106. @current-change="handleCurrentChange"
  107. @size-change="handleSizeChange"
  108. />
  109. </div>
  110. </div>
  111. <el-dialog v-model="dialogFormVisible" :before-close="closeDialog" :title="dialogTitle">
  112. <el-table :data="tableData" @sort-change="sortChange" @selection-change="handleSelectionChange" height="500" style="width: 100%">
  113. <el-table-column
  114. type="selection"
  115. width="55"
  116. />
  117. <el-table-column fixed="left" align="left" label="游戏id" min-width="90" prop="game_id" sortable="custom" />
  118. <el-table-column fixed="left" align="left" label="日期" min-width="90" prop="create_date" />
  119. <el-table-column fixed="left" align="left" label="脚本负责人" min-width="90" prop="operator" />
  120. </el-table>
  121. </el-dialog>
  122. </div>
  123. </template>
  124. <script>
  125. export default {
  126. name: 'LogNodeStatisticsList',
  127. }
  128. </script>
  129. <script setup>
  130. import {
  131. logNodeStatistics,
  132. } from '@/api/log'
  133. import { toSQLLine } from '@/utils/stringFun'
  134. import { ref } from 'vue'
  135. import { ElMessage, ElMessageBox } from 'element-plus'
  136. import warningBar from '@/components/warningBar/warningBar.vue'
  137. const apis = ref([])
  138. const form = ref({
  139. game_name: '',
  140. game_package_name: ''
  141. })
  142. const type = ref('')
  143. const rules = ref({
  144. game_name: [{ required: true, message: '请输入游戏名称', trigger: 'blur' }],
  145. game_package_name: [
  146. { required: true, message: '请输入游戏包名', trigger: 'blur' }
  147. ]
  148. })
  149. const page = ref(1)
  150. const total = ref(0)
  151. const pageSize = ref(10)
  152. const tableData = ref([])
  153. const tableFailData = ref([])
  154. const searchInfo = ref({})
  155. const onReset = () => {
  156. searchInfo.value = {}
  157. }
  158. // 搜索
  159. const onSubmit = () => {
  160. page.value = 1
  161. pageSize.value = 10
  162. searchInfo.value.game_id = Number(searchInfo.value.game_id)
  163. searchInfo.value.coding = Number(searchInfo.value.coding)
  164. getTableData()
  165. }
  166. const searchFailData = (gameid) => {
  167. //form.value.parent_id = String(id)
  168. getTableFailData
  169. dialogFormVisible.value = true
  170. }
  171. // 查询
  172. const getTableFailData = async() => {
  173. const table = await logNodeStatistics({ page: page.value, pageSize: pageSize.value, ...searchInfo.value })
  174. if (table.code === 0) {
  175. tableData.value = table.data
  176. }
  177. }
  178. const typeFiletr = (value) => {
  179. const target = typeOptions.value.filter(item => item.value === value)[0]
  180. return target && `${target.label}`
  181. }
  182. const typeOptions = ref([
  183. {
  184. value: 0,
  185. label: '新增',
  186. type: ''
  187. },
  188. {
  189. value: 1,
  190. label: '活跃',
  191. type: ''
  192. }
  193. ])
  194. // 分页
  195. const handleSizeChange = (val) => {
  196. pageSize.value = val
  197. getTableData()
  198. }
  199. const handleCurrentChange = (val) => {
  200. page.value = val
  201. getTableData()
  202. }
  203. // 排序
  204. const sortChange = ({ prop, order }) => {
  205. if (prop) {
  206. if (prop === 'id') {
  207. prop = 'id'
  208. }
  209. searchInfo.value.orderKey = toSQLLine(prop)
  210. searchInfo.value.desc = order === 'descending'
  211. }
  212. getTableData()
  213. }
  214. // 查询
  215. const getTableData = async() => {
  216. const table = await logNodeStatistics({ page: page.value, pageSize: pageSize.value, ...searchInfo.value })
  217. if (table.code === 0) {
  218. tableData.value = table.data.list
  219. total.value = table.data.total
  220. page.value = table.data.page
  221. pageSize.value = table.data.pageSize
  222. }
  223. }
  224. getTableData()
  225. // 批量操作
  226. const handleSelectionChange = (val) => {
  227. apis.value = val
  228. }
  229. const deleteVisible = ref(false)
  230. // 弹窗相关
  231. const apiForm = ref(null)
  232. const initForm = () => {
  233. apiForm.value.resetFields()
  234. form.value = {
  235. game_name: '',
  236. game_package_name: ''
  237. }
  238. }
  239. const dialogTitle = ref('新增game')
  240. const dialogFormVisible = ref(false)
  241. const openDialog = (key) => {
  242. switch (key) {
  243. case 'addGame':
  244. dialogTitle.value = '新增game'
  245. break
  246. case 'edit':
  247. dialogTitle.value = '编辑game'
  248. break
  249. default:
  250. break
  251. }
  252. type.value = key
  253. dialogFormVisible.value = true
  254. }
  255. const closeDialog = () => {
  256. dialogFormVisible.value = false
  257. }
  258. const editCardFunc = async(row) => {
  259. const res = await getGameById({ id: row.id })
  260. form.value = res.data
  261. openDialog('edit')
  262. }
  263. const enterDialog = async() => {
  264. apiForm.value.validate(async valid => {
  265. if (valid) {
  266. switch (type.value) {
  267. case 'addGame':
  268. {
  269. const res = await cuGame(form.value)
  270. if (res.code === 0) {
  271. ElMessage({
  272. type: 'success',
  273. message: '添加成功',
  274. showClose: true
  275. })
  276. }
  277. getTableData()
  278. closeDialog()
  279. }
  280. break
  281. case 'edit':
  282. {
  283. const res = await cuGame(form.value)
  284. if (res.code === 0) {
  285. ElMessage({
  286. type: 'success',
  287. message: '编辑成功',
  288. showClose: true
  289. })
  290. }
  291. getTableData()
  292. closeDialog()
  293. }
  294. break
  295. default:
  296. // eslint-disable-next-line no-lone-blocks
  297. {
  298. ElMessage({
  299. type: 'error',
  300. message: '未知操作',
  301. showClose: true
  302. })
  303. }
  304. break
  305. }
  306. }
  307. })
  308. }
  309. </script>
  310. <style scoped lang="scss">
  311. .button-box {
  312. padding: 10px 20px;
  313. .el-button {
  314. float: right;
  315. }
  316. }
  317. .warning {
  318. color: #dc143c;
  319. }
  320. </style>