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 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 * You can also judge the status by HTTP Status Code
*/ */
response => { response => {
if (['blob'].includes(response.config.responseType)) {
return response.data
}
const code = response.data.code const code = response.data.code
if (code === 401) { if (code === 401) {
store.dispatch('user/resetToken') store.dispatch('user/resetToken')

View File

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

View File

@ -84,6 +84,32 @@
/> />
</el-select> </el-select>
</el-form-item> </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 <el-form-item label="状态" prop="status"><el-select
v-model="queryParams.status" v-model="queryParams.status"
placeholder="请选择状态" placeholder="请选择状态"

View File

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

View File

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