Files
intc-vue3/src/views/invest/futureStandardInfor/index.vue
2025-05-10 18:49:11 +08:00

471 lines
17 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div class="app-container">
<div class="search-con">
<div class="title">查询条件</div>
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="交易品种" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入交易品种" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="类型" prop="type">
<el-select v-model="queryParams.type" placeholder="请选择类型" clearable>
<el-option v-for="dict in future_type" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="交易代码" prop="code">
<el-input v-model="queryParams.code" placeholder="请输入交易代码" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="交易所" prop="exchangeId">
<el-select v-model="queryParams.exchangeId" placeholder="请选择交易所" clearable>
<el-option v-for="exchange in exchangeList" :key="exchange.id" :label="exchange.name" :value="exchange.id" />
</el-select>
</el-form-item>
</el-form>
<div class="search-btn-con">
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
<el-button type="info" icon="Refresh" @click="resetQuery">重置</el-button>
</div>
</div>
<div class="main-con">
<div class="title-con">
<div class="title">基本信息</div>
<div class="operate-btn-con">
<el-button @click="handleAdd" icon="Plus" v-hasPermi="['invest:futureStandardInfor:add']">新增</el-button>
<el-button :disabled="multiple" icon="Delete" @click="handleDelete" v-hasPermi="['invest:futureStandardInfor:remove']">删除</el-button>
<!-- <el-button
@click="handleExport"
icon="Download"
v-hasPermi="['invest:futureStandardInfor:export']"
>导出</el-button> -->
</div>
</div>
<div class="content-con" v-loading="loading">
<el-table v-loading="loading" :data="futureStandardInforList" @selection-change="handleSelectionChange" height="calc(100% - 0.62rem)">
<el-table-column type="selection" width="55" align="center" />
<el-table-column type="index" label="序号" :index="indexMethod" width="50"></el-table-column>
<el-table-column label="交易品种" width="150" align="center" prop="name" />
<el-table-column label="类型" width="120" align="center" prop="type">
<template #default="scope">
<dict-tag :options="future_type" :value="scope.row.type" />
</template>
</el-table-column>
<el-table-column label="交易代码" width="120" align="center" prop="code" />
<el-table-column label="上市交易所" width="200" align="center" prop="exchangeName" />
<el-table-column label="交易时间" align="center" prop="tradingTimeName"> </el-table-column>
<el-table-column label="交割月份" align="center" prop="deliveryMonthName"> </el-table-column>
<el-table-column label="涨跌停板限制(%" width="150" align="center" prop="priceLimit" />
<!-- <el-table-column label="保证金比例" align="center" prop="marginRatio" /> -->
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template v-slot="scope">
<div class="ctrl-btn d-flex">
<el-tooltip v-for="item in operateList" :key="item.id" class="item" effect="dark" :content="item.title" placement="top">
<el-button :icon="item.icon" :v-hasPermi="item.hasPermi" circle @click="handleOperate(item.id, scope.row)"></el-button>
</el-tooltip>
</div>
</template>
</el-table-column>
</el-table>
<el-pagination
small
background
layout="total,sizes, prev, pager, next"
:total="total"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</div>
</div>
<!-- 添加或修改期货品种标准合约对话框 -->
<el-dialog :title="title" v-model="open" width="880px" append-to-body>
<el-form ref="futureStandardInforRef" :model="form" :inline="true" :rules="rules" label-width="120px">
<el-form-item label="交易品种" prop="name">
<el-input v-model="form.name" placeholder="请输入交易品种" />
</el-form-item>
<el-form-item label="类型" prop="type">
<el-select v-model="form.type" placeholder="请选择类型">
<el-option v-for="dict in future_type" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="交易代码" prop="code">
<el-input v-model="form.code" placeholder="请输入交易代码" />
</el-form-item>
<el-form-item label="交易所" prop="exchangeId">
<el-select v-model="form.exchangeId" placeholder="请选择交易所" clearable>
<el-option v-for="exchange in exchangeList" :key="exchange.id" :label="exchange.name" :value="exchange.id" />
</el-select>
</el-form-item>
<el-form-item label="交易单位" prop="tradingUnit">
<el-select v-model="form.tradingUnit" placeholder="请选择交易单位">
<el-option v-for="dict in trading_unit" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="最小变动价位" prop="minimumPriceFluctuation">
<el-select v-model="form.minimumPriceFluctuation" placeholder="请选择最小变动价位">
<el-option v-for="dict in minimum_price_fluctuation" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="交割方式" prop="deliveryMethod">
<el-select v-model="form.deliveryMethod" placeholder="请选择交割方式">
<el-option v-for="dict in delivery_method" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="交易时间" prop="tradingTime">
<el-select v-model="tradingTimeSelect" multiple placeholder="请选择交易时间" @change="changeTradingTime">
<el-option v-for="item in trading_time" :key="item.value" :label="item.label" :value="item.value"> </el-option>
</el-select>
</el-form-item>
<el-form-item label="涨跌停板限制" prop="priceLimit">
<el-input v-model="form.priceLimit" type="number" placeholder="请输入涨跌停板限制">
<template #suffix>%</template>
</el-input>
</el-form-item>
<el-form-item label="交割月份" prop="deliveryMonth">
<el-select v-model="deliveryMonthSelect" multiple placeholder="请选择交割月份" @change="changeDeliveryMonth">
<el-option v-for="item in month" :key="item.value" :label="item.label" :value="item.value"> </el-option>
</el-select>
</el-form-item>
<el-form-item label="保证金比例" prop="marginRatio">
<el-input v-model="form.marginRatio" type="number" placeholder="请输入保证金比例">
<template #suffix>%</template>
</el-input>
</el-form-item>
<el-form-item label="报价单位" prop="pricingUnit">
<el-select v-model="form.pricingUnit" placeholder="请选择报价单位">
<el-option v-for="dict in pricing_unit" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="最后交易日" prop="lastTradingDay">
<el-input v-model="form.lastTradingDay" placeholder="请输入最后交易日" />
</el-form-item>
<el-form-item label="交割日期" prop="deliveryDate">
<el-input v-model="form.deliveryDate" placeholder="请输入交割日期" />
</el-form-item>
<el-form-item label="交割地点" style="width: 792px" prop="deliveryLocation">
<el-input v-model="form.deliveryLocation" placeholder="请输入交割地点" />
</el-form-item>
<el-form-item label="备注" style="width: 792px" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入备注" />
</el-form-item>
</el-form>
<template v-if="title !== '查看期货品种标准合约'" #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
</div>
</template>
<script setup name="FutureStandardInfor">
import {
listFutureStandardInfor,
getFutureStandardInfor,
delFutureStandardInfor,
addFutureStandardInfor,
updateFutureStandardInfor
} from '@/api/invest/futureStandardInfor'
import { listExchange } from '@/api/invest/exchange'
// eslint-disable-next-line no-unused-vars
import { require } from '@/utils/require'
const { proxy } = getCurrentInstance()
const { trading_time, minimum_price_fluctuation, delivery_method, future_type, trading_unit, pricing_unit, month } = proxy.useDict(
'trading_time',
'minimum_price_fluctuation',
'delivery_method',
'future_type',
'trading_unit',
'pricing_unit',
'month'
)
const tradingTimeSelect = ref([])
const deliveryMonthSelect = ref([])
const futureStandardInforList = ref([])
const exchangeList = ref([])
const open = ref(false)
const loading = ref(true)
const showSearch = ref(true)
const ids = ref([])
const single = ref(true)
const multiple = ref(true)
const total = ref(0)
const title = ref('')
const operateList = ref([
{ id: 'view', icon: 'View', title: '查看', hasPermi: ['invest:futureStandardInfor:query'] },
{ id: 'edit', icon: 'Edit', title: '修改', hasPermi: ['invest:futureStandardInfor:edit'] },
{ id: 'delete', icon: 'Delete', title: '删除', hasPermi: ['invest:futureStandardInfor:remove'] }
])
const data = reactive({
form: {},
queryParams: {
pageNum: 1,
pageSize: 10,
name: null,
type: null,
code: null,
exchangeId: null
},
queryExchangeParams: {
pageNum: 1,
pageSize: 100,
type: '1'
},
rules: {
name: [{ required: true, message: '交易品种不能为空', trigger: 'blur' }],
type: [{ required: true, message: '类型不能为空', trigger: 'change' }],
code: [{ required: true, message: '交易代码不能为空', trigger: 'blur' }],
exchangeId: [{ required: true, message: '上市交易所不能为空', trigger: 'blur' }]
}
})
const handleOperate = (operate, row) => {
switch (operate) {
case 'view':
handleView(row)
break
case 'edit':
handleUpdate(row)
break
case 'delete':
handleDelete(row)
break
default:
break
}
}
const { queryParams, queryExchangeParams, form, rules } = toRefs(data)
//item下拉框选择
function changeTradingTime(e) {
form.value.tradingTime = ''
tradingTimeSelect.value.forEach((e) => {
form.value.tradingTime += e + '@'
})
}
//item下拉框选择
function changeDeliveryMonth(e) {
form.value.deliveryMonth = ''
deliveryMonthSelect.value.forEach((e) => {
form.value.deliveryMonth += e + '、'
})
}
/** 查询交易所基础信息列表 */
function getExchangeList() {
loading.value = true
listExchange(queryExchangeParams.value).then((response) => {
exchangeList.value = response.rows
})
}
/** 查询期货品种标准合约列表 */
function getList() {
loading.value = true
listFutureStandardInfor(queryParams.value).then((response) => {
futureStandardInforList.value = response.rows
total.value = response.total
loading.value = false
})
}
// 取消按钮
function cancel() {
open.value = false
reset()
}
// 表单重置
function reset() {
form.value = {
id: null,
name: null,
type: null,
code: null,
exchangeId: null,
tradingUnit: null,
minimumPriceFluctuation: null,
tradingTime: null,
priceLimit: null,
deliveryMonth: null,
deliveryMethod: null,
deliveryLocation: null,
marginRatio: null,
pricingUnit: null,
lastTradingDay: null,
deliveryDate: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
delFlag: null,
remark: null
}
proxy.resetForm('futureStandardInforRef')
}
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNum = 1
getList()
}
/** 重置按钮操作 */
function resetQuery() {
proxy.resetForm('queryRef')
handleQuery()
}
// 分页
const handleCurrentChange = (val) => {
queryParams.value.pageNum = val
getList()
}
//每页显示条数改变
const handleSizeChange = (val) => {
queryParams.value.pageSize = val
getList()
}
// 序号翻页递增
const indexMethod = (index) => {
const nowPage = queryParams.value.pageNum //当前第几页,根据组件取值即可
const nowLimit = queryParams.value.pageSize //当前每页显示几条,根据组件取值即可
return index + 1 + (nowPage - 1) * nowLimit // 这里可以理解成一个公式
}
// 多选框选中数据
function handleSelectionChange(selection) {
ids.value = selection.map((item) => item.id)
single.value = selection.length !== 1
multiple.value = !selection.length
}
// 查看
const handleView = (row) => {
title.value = '查看期货品种标准合约'
form.value = row
open.value = true
tradingTimeSelect.value = []
if (form.value.tradingTime.indexOf('@') == -1 && form.value.tradingTime !== '') {
tradingTimeSelect.value.push(this.form.tradingTime)
} else {
const arr = form.value.tradingTime.split('@')
arr.forEach((e) => {
if (e !== '') {
tradingTimeSelect.value.push(e)
}
})
}
deliveryMonthSelect.value = []
if (form.value.deliveryMonth.indexOf('、') == -1 && form.value.deliveryMonth !== '') {
deliveryMonthSelect.value.push(this.form.deliveryMonth)
} else {
const arr = form.value.deliveryMonth.split('、')
arr.forEach((e) => {
if (e !== '') {
deliveryMonthSelect.value.push(e)
}
})
}
}
/** 新增按钮操作 */
function handleAdd() {
reset()
tradingTimeSelect.value = []
deliveryMonthSelect.value = []
open.value = true
title.value = '添加期货品种标准合约'
}
/** 修改按钮操作 */
function handleUpdate(row) {
reset()
const _id = row.id || ids.value
getFutureStandardInfor(_id).then((response) => {
form.value = response.data
open.value = true
tradingTimeSelect.value = []
if (form.value.tradingTime.indexOf('@') == -1 && form.value.tradingTime !== '') {
tradingTimeSelect.value.push(this.form.tradingTime)
} else {
const arr = form.value.tradingTime.split('@')
arr.forEach((e) => {
if (e !== '') {
tradingTimeSelect.value.push(e)
}
})
}
deliveryMonthSelect.value = []
if (form.value.deliveryMonth.indexOf('、') == -1 && form.value.deliveryMonth !== '') {
deliveryMonthSelect.value.push(this.form.deliveryMonth)
} else {
const arr = form.value.deliveryMonth.split('、')
arr.forEach((e) => {
if (e !== '') {
deliveryMonthSelect.value.push(e)
}
})
}
open.value = true
title.value = '修改期货品种标准合约'
})
}
/** 提交按钮 */
function submitForm() {
proxy.$refs.futureStandardInforRef.validate((valid) => {
if (valid) {
if (form.value.id != null) {
updateFutureStandardInfor(form.value).then((response) => {
proxy.$modal.msgSuccess('修改成功')
open.value = false
getList()
})
} else {
addFutureStandardInfor(form.value).then((response) => {
proxy.$modal.msgSuccess('新增成功')
open.value = false
getList()
})
}
}
})
}
/** 删除按钮操作 */
function handleDelete(row) {
const _ids = row.id || ids.value
proxy.$modal
.confirm('是否确认删除选中的数据项?')
.then(function () {
return delFutureStandardInfor(_ids)
})
.then(() => {
getList()
proxy.$modal.msgSuccess('删除成功')
})
.catch(() => {})
}
/** 导出按钮操作 */
function handleExport() {
proxy.download(
'invest/futureStandardInfor/export',
{
...queryParams.value
},
`futureStandardInfor_${new Date().getTime()}.xlsx`
)
}
getList()
getExchangeList()
</script>