9 changed files with 1230 additions and 1541 deletions
-
2390package-lock.json
-
8package.json
-
7src/api/heihu/heihuApiLog.js
-
231src/views/modules/api/heihuSfdcLog.vue
-
27test/e2e/custom-assertions/elementCount.js
-
46test/e2e/nightwatch.conf.js
-
48test/e2e/runner.js
-
19test/e2e/specs/test.js
-
11test/unit/specs/HelloWorld.spec.js
2390
package-lock.json
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,7 @@ |
|||||
|
import { createAPI } from '@/utils/httpRequest.js' |
||||
|
|
||||
|
// 报工接口调用记录分页查询
|
||||
|
export const heihuApiLogSearch = data => createAPI('/api/heihulog/heihuApiLogSearch', 'post', data) |
||||
|
|
||||
|
// 报工接口调用记录导出
|
||||
|
export const heihuApiLogExport = data => createAPI('/api/heihulog/heihuApiLogExport', 'post', data, 'download') |
||||
@ -0,0 +1,231 @@ |
|||||
|
<template> |
||||
|
<div class="mod-config"> |
||||
|
<el-form :inline="true" label-position="top" :model="searchData" @keyup.enter.native="searchHandle"> |
||||
|
<el-form-item label="调用日期"> |
||||
|
<el-date-picker |
||||
|
v-model="searchData.startDate" |
||||
|
type="date" |
||||
|
value-format="yyyy-MM-dd" |
||||
|
format="yyyy-MM-dd" |
||||
|
clearable |
||||
|
placeholder="开始日期" |
||||
|
style="width: 130px"> |
||||
|
</el-date-picker> |
||||
|
- |
||||
|
<el-date-picker |
||||
|
v-model="searchData.endDate" |
||||
|
type="date" |
||||
|
value-format="yyyy-MM-dd" |
||||
|
format="yyyy-MM-dd" |
||||
|
clearable |
||||
|
placeholder="结束日期" |
||||
|
style="width: 130px"> |
||||
|
</el-date-picker> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="黑湖参数"> |
||||
|
<el-input |
||||
|
v-model="searchData.searchInParamJson" |
||||
|
clearable |
||||
|
placeholder="支持模糊查询" |
||||
|
style="width: 360px"> |
||||
|
</el-input> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="是否处理成功"> |
||||
|
<el-select v-model="searchData.searchSuccess" clearable placeholder="全部" style="width: 120px"> |
||||
|
<el-option label="成功" value="Y"></el-option> |
||||
|
<el-option label="失败" value="N"></el-option> |
||||
|
</el-select> |
||||
|
</el-form-item> |
||||
|
<el-form-item label=" "> |
||||
|
<el-button type="primary" @click="searchHandle">查询</el-button> |
||||
|
<el-button @click="resetHandle">重置</el-button> |
||||
|
<el-button type="primary" :loading="exportLoading" @click="exportHandle">导出</el-button> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
|
||||
|
<el-table |
||||
|
:height="tableHeight" |
||||
|
:data="dataList" |
||||
|
border |
||||
|
v-loading="dataListLoading" |
||||
|
style="width: 100%;"> |
||||
|
<el-table-column |
||||
|
prop="id" |
||||
|
header-align="center" |
||||
|
align="center" |
||||
|
width="90" |
||||
|
label="ID"> |
||||
|
</el-table-column> |
||||
|
<el-table-column |
||||
|
prop="createTime" |
||||
|
header-align="center" |
||||
|
align="center" |
||||
|
width="180" |
||||
|
label="调用时间"> |
||||
|
</el-table-column> |
||||
|
<el-table-column |
||||
|
prop="inParamJson" |
||||
|
header-align="center" |
||||
|
align="left" |
||||
|
min-width="420" |
||||
|
:show-overflow-tooltip="true" |
||||
|
label="黑湖参数"> |
||||
|
</el-table-column> |
||||
|
<el-table-column |
||||
|
prop="success" |
||||
|
header-align="center" |
||||
|
align="center" |
||||
|
width="120" |
||||
|
label="是否处理成功"> |
||||
|
<template slot-scope="scope"> |
||||
|
<span>{{ scope.row.success === 'Y' ? '成功' : (scope.row.success === 'N' ? '失败' : scope.row.success) }}</span> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column |
||||
|
prop="errorMessage" |
||||
|
header-align="center" |
||||
|
align="left" |
||||
|
min-width="260" |
||||
|
:show-overflow-tooltip="true" |
||||
|
label="错误记录"> |
||||
|
</el-table-column> |
||||
|
<el-table-column |
||||
|
prop="durationMs" |
||||
|
header-align="center" |
||||
|
align="center" |
||||
|
width="140" |
||||
|
label="处理时间(毫秒)"> |
||||
|
</el-table-column> |
||||
|
</el-table> |
||||
|
|
||||
|
<el-pagination |
||||
|
@size-change="sizeChangeHandle" |
||||
|
@current-change="currentChangeHandle" |
||||
|
:current-page="pageIndex" |
||||
|
:page-sizes="[20, 50, 100, 200, 500]" |
||||
|
:page-size="pageSize" |
||||
|
:total="totalPage" |
||||
|
layout="total, sizes, prev, pager, next, jumper"> |
||||
|
</el-pagination> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { heihuApiLogSearch, heihuApiLogExport } from '@/api/heihu/heihuApiLog' |
||||
|
|
||||
|
export default { |
||||
|
name: 'heihuSfdcLog', |
||||
|
data () { |
||||
|
return { |
||||
|
searchData: { |
||||
|
startDate: '', |
||||
|
endDate: '', |
||||
|
searchInParamJson: '', |
||||
|
searchSuccess: '' |
||||
|
}, |
||||
|
dataList: [], |
||||
|
dataListLoading: false, |
||||
|
exportLoading: false, |
||||
|
pageIndex: 1, |
||||
|
pageSize: 20, |
||||
|
totalPage: 0, |
||||
|
tableHeight: 200 |
||||
|
} |
||||
|
}, |
||||
|
created () { |
||||
|
this.getDataList() |
||||
|
}, |
||||
|
mounted () { |
||||
|
this.$nextTick(() => { |
||||
|
this.tableHeight = window.innerHeight - 260 |
||||
|
}) |
||||
|
}, |
||||
|
methods: { |
||||
|
searchHandle () { |
||||
|
this.pageIndex = 1 |
||||
|
this.getDataList() |
||||
|
}, |
||||
|
resetHandle () { |
||||
|
this.searchData.startDate = '' |
||||
|
this.searchData.endDate = '' |
||||
|
this.searchData.searchInParamJson = '' |
||||
|
this.searchData.searchSuccess = '' |
||||
|
this.pageIndex = 1 |
||||
|
this.getDataList() |
||||
|
}, |
||||
|
sizeChangeHandle (val) { |
||||
|
this.pageSize = val |
||||
|
this.pageIndex = 1 |
||||
|
this.getDataList() |
||||
|
}, |
||||
|
currentChangeHandle (val) { |
||||
|
this.pageIndex = val |
||||
|
this.getDataList() |
||||
|
}, |
||||
|
buildQuery () { |
||||
|
return { |
||||
|
startDate: this.searchData.startDate, |
||||
|
endDate: this.searchData.endDate, |
||||
|
searchInParamJson: this.searchData.searchInParamJson, |
||||
|
searchSuccess: this.searchData.searchSuccess, |
||||
|
page: this.pageIndex, |
||||
|
limit: this.pageSize |
||||
|
} |
||||
|
}, |
||||
|
getDataList () { |
||||
|
this.dataListLoading = true |
||||
|
heihuApiLogSearch(this.buildQuery()) |
||||
|
.then(({ data }) => { |
||||
|
if (data && data.code === 0 && data.page) { |
||||
|
this.dataList = data.page.list || [] |
||||
|
this.pageIndex = data.page.currPage || this.pageIndex |
||||
|
this.pageSize = data.page.pageSize || this.pageSize |
||||
|
this.totalPage = data.page.totalCount || 0 |
||||
|
} else { |
||||
|
this.dataList = [] |
||||
|
this.totalPage = 0 |
||||
|
this.$message.error((data && data.msg) ? data.msg : '查询失败') |
||||
|
} |
||||
|
}) |
||||
|
.catch(() => { |
||||
|
this.$message.error('查询失败') |
||||
|
this.dataList = [] |
||||
|
this.totalPage = 0 |
||||
|
}) |
||||
|
.finally(() => { |
||||
|
this.dataListLoading = false |
||||
|
}) |
||||
|
}, |
||||
|
exportHandle () { |
||||
|
if (this.exportLoading) { |
||||
|
return |
||||
|
} |
||||
|
this.exportLoading = true |
||||
|
heihuApiLogExport(this.buildQuery()) |
||||
|
.then((response) => { |
||||
|
const blob = new Blob([response.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }) |
||||
|
const url = window.URL.createObjectURL(blob) |
||||
|
const link = document.createElement('a') |
||||
|
link.href = url |
||||
|
link.download = '报工接口调用记录.xlsx' |
||||
|
link.click() |
||||
|
window.URL.revokeObjectURL(url) |
||||
|
}) |
||||
|
.catch(() => { |
||||
|
this.$message.error('导出失败') |
||||
|
}) |
||||
|
.finally(() => { |
||||
|
this.exportLoading = false |
||||
|
}) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style scoped> |
||||
|
.mod-config /deep/ .el-input__inner, |
||||
|
.mod-config /deep/ .el-textarea__inner { |
||||
|
box-sizing: border-box; |
||||
|
} |
||||
|
</style> |
||||
|
|
||||
@ -1,27 +0,0 @@ |
|||||
// A custom Nightwatch assertion.
|
|
||||
// The assertion name is the filename.
|
|
||||
// Example usage:
|
|
||||
//
|
|
||||
// browser.assert.elementCount(selector, count)
|
|
||||
//
|
|
||||
// For more information on custom assertions see:
|
|
||||
// http://nightwatchjs.org/guide#writing-custom-assertions
|
|
||||
|
|
||||
exports.assertion = function (selector, count) { |
|
||||
this.message = 'Testing if element <' + selector + '> has count: ' + count |
|
||||
this.expected = count |
|
||||
this.pass = function (val) { |
|
||||
return val === this.expected |
|
||||
} |
|
||||
this.value = function (res) { |
|
||||
return res.value |
|
||||
} |
|
||||
this.command = function (cb) { |
|
||||
var self = this |
|
||||
return this.api.execute(function (selectorToCount) { |
|
||||
return document.querySelectorAll(selectorToCount).length |
|
||||
}, [selector], function (res) { |
|
||||
cb.call(self, res) |
|
||||
}) |
|
||||
} |
|
||||
} |
|
||||
@ -1,46 +0,0 @@ |
|||||
require('babel-register') |
|
||||
var config = require('../../config') |
|
||||
|
|
||||
// http://nightwatchjs.org/gettingstarted#settings-file
|
|
||||
module.exports = { |
|
||||
src_folders: ['test/e2e/specs'], |
|
||||
output_folder: 'test/e2e/reports', |
|
||||
custom_assertions_path: ['test/e2e/custom-assertions'], |
|
||||
|
|
||||
selenium: { |
|
||||
start_process: true, |
|
||||
server_path: require('selenium-server').path, |
|
||||
host: '127.0.0.1', |
|
||||
port: 4444, |
|
||||
cli_args: { |
|
||||
'webdriver.chrome.driver': require('chromedriver').path |
|
||||
} |
|
||||
}, |
|
||||
|
|
||||
test_settings: { |
|
||||
default: { |
|
||||
selenium_port: 4444, |
|
||||
selenium_host: 'localhost', |
|
||||
silent: true, |
|
||||
globals: { |
|
||||
devServerURL: 'http://localhost:' + (process.env.PORT || config.dev.port) |
|
||||
} |
|
||||
}, |
|
||||
|
|
||||
chrome: { |
|
||||
desiredCapabilities: { |
|
||||
browserName: 'chrome', |
|
||||
javascriptEnabled: true, |
|
||||
acceptSslCerts: true |
|
||||
} |
|
||||
}, |
|
||||
|
|
||||
firefox: { |
|
||||
desiredCapabilities: { |
|
||||
browserName: 'firefox', |
|
||||
javascriptEnabled: true, |
|
||||
acceptSslCerts: true |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,48 +0,0 @@ |
|||||
// 1. start the dev server using production config
|
|
||||
process.env.NODE_ENV = 'testing' |
|
||||
|
|
||||
const webpack = require('webpack') |
|
||||
const DevServer = require('webpack-dev-server') |
|
||||
|
|
||||
const webpackConfig = require('../../build/webpack.prod.conf') |
|
||||
const devConfigPromise = require('../../build/webpack.dev.conf') |
|
||||
|
|
||||
let server |
|
||||
|
|
||||
devConfigPromise.then(devConfig => { |
|
||||
const devServerOptions = devConfig.devServer |
|
||||
const compiler = webpack(webpackConfig) |
|
||||
server = new DevServer(compiler, devServerOptions) |
|
||||
const port = devServerOptions.port |
|
||||
const host = devServerOptions.host |
|
||||
return server.listen(port, host) |
|
||||
}) |
|
||||
.then(() => { |
|
||||
// 2. run the nightwatch test suite against it
|
|
||||
// to run in additional browsers:
|
|
||||
// 1. add an entry in test/e2e/nightwatch.conf.json under "test_settings"
|
|
||||
// 2. add it to the --env flag below
|
|
||||
// or override the environment flag, for example: `npm run e2e -- --env chrome,firefox`
|
|
||||
// For more information on Nightwatch's config file, see
|
|
||||
// http://nightwatchjs.org/guide#settings-file
|
|
||||
let opts = process.argv.slice(2) |
|
||||
if (opts.indexOf('--config') === -1) { |
|
||||
opts = opts.concat(['--config', 'test/e2e/nightwatch.conf.js']) |
|
||||
} |
|
||||
if (opts.indexOf('--env') === -1) { |
|
||||
opts = opts.concat(['--env', 'chrome']) |
|
||||
} |
|
||||
|
|
||||
const spawn = require('cross-spawn') |
|
||||
const runner = spawn('./node_modules/.bin/nightwatch', opts, { stdio: 'inherit' }) |
|
||||
|
|
||||
runner.on('exit', function (code) { |
|
||||
server.close() |
|
||||
process.exit(code) |
|
||||
}) |
|
||||
|
|
||||
runner.on('error', function (err) { |
|
||||
server.close() |
|
||||
throw err |
|
||||
}) |
|
||||
}) |
|
||||
@ -1,19 +0,0 @@ |
|||||
// For authoring Nightwatch tests, see
|
|
||||
// http://nightwatchjs.org/guide#usage
|
|
||||
|
|
||||
module.exports = { |
|
||||
'default e2e tests': function (browser) { |
|
||||
// automatically uses dev Server port from /config.index.js
|
|
||||
// default: http://localhost:8080
|
|
||||
// see nightwatch.conf.js
|
|
||||
const devServer = browser.globals.devServerURL |
|
||||
|
|
||||
browser |
|
||||
.url(devServer) |
|
||||
.waitForElementVisible('#app', 5000) |
|
||||
.assert.elementPresent('.hello') |
|
||||
.assert.containsText('h1', 'Welcome to Your Vue.js App') |
|
||||
.assert.elementCount('img', 1) |
|
||||
.end() |
|
||||
} |
|
||||
} |
|
||||
@ -1,11 +0,0 @@ |
|||||
import Vue from 'vue' |
|
||||
import HelloWorld from '@/components/HelloWorld' |
|
||||
|
|
||||
describe('HelloWorld.vue', () => { |
|
||||
it('should render correct contents', () => { |
|
||||
const Constructor = Vue.extend(HelloWorld) |
|
||||
const vm = new Constructor().$mount() |
|
||||
expect(vm.$el.querySelector('.hello h1').textContent) |
|
||||
.toEqual('Welcome to Your Vue.js App') |
|
||||
}) |
|
||||
}) |
|
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue