This commit is contained in:
shilin
2025-02-21 17:55:50 +08:00
parent 78aaca142b
commit 129037c757
8 changed files with 176 additions and 92 deletions

Binary file not shown.

BIN
m.rar Normal file

Binary file not shown.

View File

@ -51,4 +51,20 @@ export function getSameSymbol(params) {
params
})
}
// 导出交易对
export function exportSymbols(params) {
return request({
url: '/api/v1/line-symbol/export',
method: 'get',
responseType: 'blob',
params
})
}
export function symbolAll(params) {
return request({
url: '/api/v1/line-symbol/all',
method: 'get',
params
})
}

View File

@ -44,6 +44,9 @@ service.interceptors.response.use(
* You can also judge the status by HTTP Status Code
*/
response => {
if (['blob'].includes(response.config.responseType)) {
return response.data
}
const code = response.data.code
if (code === 401) {
store.dispatch('user/resetToken')

View File

@ -32,17 +32,15 @@ export function downLoadFile(str) {
* @param {*} res blob响应内容
* @param {String} mimeType MIME类型
*/
export function resolveBlob(res, mimeType) {
export function resolveBlob(res, name, mimeType) {
const aLink = document.createElement('a')
var blob = new Blob([res.data], { type: mimeType })
var blob = new Blob([res], { type: mimeType || 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' })
// //从response的headers中获取filename, 后端response.setHeader("Content-disposition", "attachment; filename=xxxx.docx") 设置的文件名;
var patt = new RegExp('filename=([^;]+\\.[^\\.;]+);*')
var contentDisposition = decodeURI(res.headers['content-disposition'])
var result = patt.exec(contentDisposition)
var fileName = result[1]
fileName = fileName.replace(/\"/g, '')
// var patt = new RegExp('filename=([^;]+\\.[^\\.;]+);*')
// var contentDisposition = decodeURI(res.headers['content-disposition'])
// var result = patt.exec(contentDisposition)
aLink.href = URL.createObjectURL(blob)
aLink.setAttribute('download', fileName) // 设置下载文件名称
aLink.setAttribute('download', name) // 设置下载文件名称
document.body.appendChild(aLink)
aLink.click()
document.body.appendChild(aLink)

View File

@ -84,6 +84,32 @@
/>
</el-select>
</el-form-item>
<el-form-item label="减仓状态" prop="hedgeStatus"><el-select
v-model="queryParams.hedgeStatus"
placeholder="请选择减仓状态"
size="small"
>
<el-option
v-for="dict in [{l:'全部',v:-1},{l:'未减仓',v:0},{l:'已减仓',v:1}]"
:key="dict.k"
:label="dict.l"
:value="dict.v"
/>
</el-select>
</el-form-item>
<el-form-item label="加仓状态" prop="addPositionStatus"><el-select
v-model="queryParams.addPositionStatus"
placeholder="请选择加仓状态"
size="small"
>
<el-option
v-for="dict in [{l:'全部',v:-1},{l:'未加仓',v:0},{l:'已加仓',v:1}]"
:key="dict.k"
:label="dict.l"
:value="dict.v"
/>
</el-select>
</el-form-item>
<el-form-item label="状态" prop="status"><el-select
v-model="queryParams.status"
placeholder="请选择状态"

View File

@ -130,92 +130,95 @@
<!-- 添加或修改对话框 -->
<el-dialog :title="title" :visible.sync="open" width="600px">
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-form-item label="交易所" prop="exchangeType">
<el-select
v-model="form.exchangeType"
style="width: 100%;"
placeholder="请选择交易所"
clearable
filterable
size="small"
@change="onchangeForm"
>
<el-option
v-for="dict in exchangeTypes"
:key="dict.value"
:label="dict.label"
:value="dict.value"
<div v-loading="formLoading">
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-form-item label="交易所" prop="exchangeType">
<el-select
v-model="form.exchangeType"
style="width: 100%;"
placeholder="请选择交易所"
clearable
filterable
size="small"
@change="onchangeForm"
>
<el-option
v-for="dict in exchangeTypes"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="交易对组名称" prop="groupName">
<el-input
v-model="form.groupName"
placeholder="交易对组名称"
/>
</el-select>
</el-form-item>
<el-form-item label="交易对组名称" prop="groupName">
<el-input
v-model="form.groupName"
placeholder="交易对组名称"
/>
</el-form-item>
</el-form-item>
<!-- <el-form-item label="分组类型:1=普通类型" prop="groupType">
<!-- <el-form-item label="分组类型:1=普通类型" prop="groupType">
<el-input v-model="form.groupType" placeholder="分组类型:1=普通类型"
/>
</el-form-item> -->
<el-form-item label="类型" prop="type">
<el-radio-group v-model="form.type" @change="onchangeForm">
<el-radio label="1">现货</el-radio>
<el-radio label="2">合约</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="交易对" prop="curChange">
<el-radio-group v-model="curChange" @change="form.symbol = undefined">
<el-radio :label="1">输入</el-radio>
<el-radio :label="2">选择</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="curChange===2" label="" prop="symbol">
<el-select
v-model="form.symbol"
style="width: 100%;"
placeholder="请选择交易对"
multiple
clearable
filterable
:remote-method="getSymbol"
:loading="searchLoding"
remote
size="small"
>
<el-option
v-for="dict in symbol.symbolList"
:key="dict.id"
:label="dict.symbol"
:value="dict.symbol"
/>
<div class="page">
<pagination
v-show="symbol.total>0"
:background="false"
:total="symbol.total"
layout="prev, pager, next"
:page.sync="symbol.pageIndex"
:limit.sync="symbol.pageSize"
@pagination="getSymbol"
<el-form-item label="类型" prop="type">
<el-radio-group v-model="form.type" @change="onchangeForm">
<el-radio label="1">现货</el-radio>
<el-radio label="2">合约</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="交易对" prop="curChange">
<el-radio-group v-model="curChange" @change="form.symbol = undefined">
<el-radio :label="1">输入</el-radio>
<el-radio :label="2">选择</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="curChange===2" label="" prop="symbol">
<el-select
v-model="form.symbol"
style="width: 100%;"
placeholder="请选择交易对"
multiple
clearable
filterable
:remote-method="getSymbol"
:loading="searchLoding"
remote
size="small"
>
<el-option
v-for="dict in symbol.symbolList"
:key="dict.id"
:label="dict.symbol"
:value="dict.symbol"
/>
</div>
</el-select>
</el-form-item>
<el-form-item v-else label="" prop="symbol">
<el-input
v-model="form.symbol"
type="textarea"
:autosize="{ minRows: 4, maxRows: 8 }"
placeholder="请输入交易对"
/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
<div class="page">
<pagination
v-show="symbol.total>0"
:background="false"
:total="symbol.total"
layout="prev, pager, next"
:page.sync="symbol.pageIndex"
:limit.sync="symbol.pageSize"
@pagination="getSymbol"
/>
</div>
</el-select>
</el-form-item>
<el-form-item v-else label="" prop="symbol">
<el-input
v-model="form.symbol"
type="textarea"
:autosize="{ minRows: 4, maxRows: 10 }"
placeholder="请输入交易对"
/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer" style="text-align: right;">
<el-button @click="onAll">所有交易对</el-button>
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</div>
</el-dialog>
</el-card>
@ -224,7 +227,7 @@
</template>
<script>
import { listLineSymbol } from '@/api/admin/line-symbol'
import { symbolAll, listLineSymbol } from '@/api/admin/line-symbol'
import { addLineSymbolGroup, delLineSymbolGroup, getLineSymbolGroup, listLineSymbolGroup, updateLineSymbolGroup } from '@/api/admin/line-symbol-group'
export default {
@ -278,7 +281,8 @@ export default {
},
searchLoding: false,
exchangeTypes: [],
curChange: 1
curChange: 1,
formLoading: false
}
},
created() {
@ -296,6 +300,15 @@ export default {
this.form.symbol = undefined
this.getSymbol({})
},
onAll() {
this.formLoading = true
const { exchangeType, type } = this.form
symbolAll({ exchangeType, type }).then(response => {
this.form.symbol = response.data.toString()
}).finally(() => {
this.formLoading = false
})
},
// 交易对列表
getSymbol(e, type) {
this.searchLoding = true
@ -388,23 +401,28 @@ export default {
submitForm: function() {
this.$refs['form'].validate(valid => {
if (valid) {
this.formLoading = true
if (this.form.id !== undefined) {
updateLineSymbolGroup({ ...this.form, symbol: this.form.symbol.toString() }).then(response => {
if (response.code === 200) {
this.formLoading = false
this.msgSuccess(response.msg)
this.open = false
this.getList()
} else {
this.formLoading = false
this.msgError(response.msg)
}
})
} else {
addLineSymbolGroup({ ...this.form, symbol: this.form.symbol.toString() }).then(response => {
if (response.code === 200) {
this.formLoading = false
this.msgSuccess(response.msg)
this.open = false
this.getList()
} else {
this.formLoading = false
this.msgError(response.msg)
}
})

View File

@ -62,6 +62,16 @@
>修改
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-permisaction="['admin:lineSymbol:edit']"
type="warning"
icon="el-icon-upload"
size="mini"
@click="handleExport"
>导出
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-permisaction="['admin:lineSymbol:remove']"
@ -212,7 +222,8 @@
</template>
<script>
import { addLineSymbol, delLineSymbol, getLineSymbol, listLineSymbol, updateLineSymbol } from '@/api/admin/line-symbol'
import { resolveBlob } from '@/utils/zipdownload'
import { addLineSymbol, delLineSymbol, getLineSymbol, listLineSymbol, updateLineSymbol, exportSymbols } from '@/api/admin/line-symbol'
export default {
name: 'LineSymbol',
@ -308,7 +319,7 @@ export default {
/** 查询参数列表 */
getList() {
this.loading = true
listLineSymbol(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
listLineSymbol(this.queryParams).then(response => {
this.lineSymbolList = response.data.list
this.total = response.data.count
this.loading = false
@ -426,6 +437,18 @@ export default {
}
}).catch(function() {
})
},
handleExport() {
this.$confirm('确认导出当前页面数据吗?', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
exportSymbols(this.queryParams).then(res => {
resolveBlob(res, '交易对导出数据')
this.msgSuccess('导出成功')
})
})
}
}
}