Compare commits
	
		
			7 Commits
		
	
	
		
			4a0a1f929e
			...
			ce4d14c11c
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| ce4d14c11c | |||
| 425ff32236 | |||
| 9fdcbd2060 | |||
| 27ef79d25a | |||
| f37617ab42 | |||
| c248dcc929 | |||
| 6c43454aa3 | 
| @ -2,5 +2,5 @@ | |||||||
| ENV = 'development' | ENV = 'development' | ||||||
|  |  | ||||||
| # base api | # base api | ||||||
| VUE_APP_BASE_API = 'http://192.168.2.102:6789' | VUE_APP_BASE_API = 'http://127.0.0.1:6789' | ||||||
|  |  | ||||||
|  | |||||||
| @ -51,3 +51,11 @@ export function getMainUser(data) { | |||||||
|   }) |   }) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // 获取未绑定下反单列表 | ||||||
|  | export function getLineApiUserUnBindReverse(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/api/v1/line-api-user/unbind-reverse', | ||||||
|  |     method: 'get', | ||||||
|  |     params: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | |||||||
							
								
								
									
										46
									
								
								src/api/admin/line-reverse-order-ext.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								src/api/admin/line-reverse-order-ext.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,46 @@ | |||||||
|  | import request from '@/utils/request' | ||||||
|  |  | ||||||
|  | // 查询LineReverseOrderExt列表 | ||||||
|  | export function listLineReverseOrderExt(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/api/v1/line-reverse-order-ext', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 查询LineReverseOrderExt详细 | ||||||
|  | export function getLineReverseOrderExt(id) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/api/v1/line-reverse-order-ext/' + id, | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 新增LineReverseOrderExt | ||||||
|  | export function addLineReverseOrderExt(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/api/v1/line-reverse-order-ext', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 修改LineReverseOrderExt | ||||||
|  | export function updateLineReverseOrderExt(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/api/v1/line-reverse-order-ext/' + data.id, | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 删除LineReverseOrderExt | ||||||
|  | export function delLineReverseOrderExt(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/api/v1/line-reverse-order-ext', | ||||||
|  |     method: 'delete', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										46
									
								
								src/api/admin/line-reverse-order.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								src/api/admin/line-reverse-order.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,46 @@ | |||||||
|  | import request from '@/utils/request' | ||||||
|  |  | ||||||
|  | // 查询LineReverseOrder列表 | ||||||
|  | export function listLineReverseOrder(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/api/v1/line-reverse-order', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 查询LineReverseOrder详细 | ||||||
|  | export function getLineReverseOrder(id) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/api/v1/line-reverse-order/' + id, | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 新增LineReverseOrder | ||||||
|  | export function addLineReverseOrder(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/api/v1/line-reverse-order', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 修改LineReverseOrder | ||||||
|  | export function updateLineReverseOrder(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/api/v1/line-reverse-order/' + data.id, | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 删除LineReverseOrder | ||||||
|  | export function delLineReverseOrder(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/api/v1/line-reverse-order', | ||||||
|  |     method: 'delete', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										69
									
								
								src/api/admin/line-reverse-position.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								src/api/admin/line-reverse-position.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,69 @@ | |||||||
|  | import request from '@/utils/request' | ||||||
|  |  | ||||||
|  | // 查询LineReversePosition列表 | ||||||
|  | export function listLineReversePosition(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/api/v1/line-reverse-position', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 查询LineReversePosition详细 | ||||||
|  | export function getLineReversePosition(id) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/api/v1/line-reverse-position/' + id, | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 新增LineReversePosition | ||||||
|  | export function addLineReversePosition(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/api/v1/line-reverse-position', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 修改LineReversePosition | ||||||
|  | export function updateLineReversePosition(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/api/v1/line-reverse-position/' + data.id, | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 删除LineReversePosition | ||||||
|  | export function delLineReversePosition(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/api/v1/line-reverse-position', | ||||||
|  |     method: 'delete', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 平仓 | ||||||
|  | export function closePosition(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/api/v1/line-reverse-position/close/' + data.id, | ||||||
|  |     method: 'PUT' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 批量平仓 | ||||||
|  | export function batchClosePosition(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/api/v1/line-reverse-position/close-batch', | ||||||
|  |     method: 'PUT', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  | // 清除所有仓位 | ||||||
|  | export function cleanAllPosition() { | ||||||
|  |   return request({ | ||||||
|  |     url: '/api/v1/line-reverse-position/clean-all', | ||||||
|  |     method: 'DELETE' | ||||||
|  |   }) | ||||||
|  | } | ||||||
							
								
								
									
										46
									
								
								src/api/admin/line-reverse-setting.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								src/api/admin/line-reverse-setting.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,46 @@ | |||||||
|  | import request from '@/utils/request' | ||||||
|  |  | ||||||
|  | // 查询LineReverseSetting列表 | ||||||
|  | export function listLineReverseSetting(query) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/api/v1/line-reverse-setting', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 查询LineReverseSetting详细 | ||||||
|  | export function getLineReverseSetting(id) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/api/v1/line-reverse-setting/' + id, | ||||||
|  |     method: 'get' | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 新增LineReverseSetting | ||||||
|  | export function addLineReverseSetting(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/api/v1/line-reverse-setting', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 修改LineReverseSetting | ||||||
|  | export function updateLineReverseSetting(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/api/v1/line-reverse-setting/' + data.id, | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 删除LineReverseSetting | ||||||
|  | export function delLineReverseSetting(data) { | ||||||
|  |   return request({ | ||||||
|  |     url: '/api/v1/line-reverse-setting', | ||||||
|  |     method: 'delete', | ||||||
|  |     data: data | ||||||
|  |   }) | ||||||
|  | } | ||||||
|  |  | ||||||
| @ -83,48 +83,6 @@ | |||||||
|             prop="ipAddress" |             prop="ipAddress" | ||||||
|             :show-overflow-tooltip="true" |             :show-overflow-tooltip="true" | ||||||
|           /> |           /> | ||||||
|           <!-- <el-table-column |  | ||||||
|             label="代码账号密码" |  | ||||||
|             align="center" |  | ||||||
|             prop="userPass" |  | ||||||
|             :show-overflow-tooltip="true" |  | ||||||
|           /> --> |  | ||||||
|           <!-- <el-table-column |  | ||||||
|             label="归属" |  | ||||||
|             align="center" |  | ||||||
|             prop="affiliation" |  | ||||||
|             :show-overflow-tooltip="true" |  | ||||||
|           > |  | ||||||
|             <template #default="{row}">{{ ['现货','合约','现货合约'][row.affiliation-1] }}</template> |  | ||||||
|           </el-table-column> --> |  | ||||||
|           <!-- <el-table-column |  | ||||||
|             label="是否超管可见" |  | ||||||
|             align="center" |  | ||||||
|             prop="adminShow" |  | ||||||
|             :show-overflow-tooltip="true" |  | ||||||
|           > |  | ||||||
|             <template #default="{row}">{{ ['否','是'][row.adminShow] }}</template> |  | ||||||
|           </el-table-column> --> |  | ||||||
|           <!-- <el-table-column |  | ||||||
|             label="允许下单的方向" |  | ||||||
|             align="center" |  | ||||||
|             prop="site" |  | ||||||
|             :show-overflow-tooltip="true" |  | ||||||
|           > |  | ||||||
|             <template #default="{row}">{{ ['多','空','多空'][row.site-1] }}</template> |  | ||||||
|           </el-table-column> --> |  | ||||||
|           <!-- <el-table-column |  | ||||||
|             label="从属关系" |  | ||||||
|             align="center" |  | ||||||
|             prop="subordinate" |  | ||||||
|             :show-overflow-tooltip="true" |  | ||||||
|           > |  | ||||||
|             <template #default="{row}">{{ ['','主账号','副帐号'][row.subordinate] }}</template> |  | ||||||
|           </el-table-column><el-table-column label="所属组id" align="center" prop="groupId" :formatter="groupIdFormat" width="100"> |  | ||||||
|             <template slot-scope="scope"> |  | ||||||
|               {{ groupIdFormat(scope.row) }} |  | ||||||
|             </template> |  | ||||||
|           </el-table-column> --> |  | ||||||
|           <el-table-column |           <el-table-column | ||||||
|             label="开启状态" |             label="开启状态" | ||||||
|             align="center" |             align="center" | ||||||
| @ -195,14 +153,6 @@ | |||||||
|         <el-dialog :title="title" :visible.sync="open" width="500px"> |         <el-dialog :title="title" :visible.sync="open" width="500px"> | ||||||
|           <el-form ref="form" :model="form" :rules="rules" label-width="120px"> |           <el-form ref="form" :model="form" :rules="rules" label-width="120px"> | ||||||
|  |  | ||||||
|             <!-- <el-form-item label="用户id" prop="userId"> |  | ||||||
|                                         <el-input v-model="form.userId" placeholder="用户id" |  | ||||||
|                                                       /> |  | ||||||
|                                     </el-form-item> --> |  | ||||||
|             <!-- <el-form-item label="关联交易所账号id" prop="jysId"> |  | ||||||
|                                         <el-input v-model="form.jysId" placeholder="关联交易所账号id" |  | ||||||
|                                                       /> |  | ||||||
|                                     </el-form-item> --> |  | ||||||
|             <el-form-item label="交易所" prop="exchangeType"> |             <el-form-item label="交易所" prop="exchangeType"> | ||||||
|               <el-select |               <el-select | ||||||
|                 v-model="form.exchangeType" |                 v-model="form.exchangeType" | ||||||
| @ -250,42 +200,25 @@ | |||||||
|                 placeholder="代码账号密码" |                 placeholder="代码账号密码" | ||||||
|               /> |               /> | ||||||
|             </el-form-item> |             </el-form-item> | ||||||
|             <!-- <el-form-item label="管理员id" prop="adminId"> |  | ||||||
|                                         <el-input v-model="form.adminId" placeholder="管理员id" |  | ||||||
|                                                       /> |  | ||||||
|                                     </el-form-item> --> |  | ||||||
|             <!-- <el-form-item label="归属" prop="affiliation"> |  | ||||||
|               <el-radio-group v-model="form.affiliation"> |  | ||||||
|                 <el-radio :label="3">现货合约</el-radio> |  | ||||||
|                 <el-radio :label="1">现货</el-radio> |  | ||||||
|                 <el-radio :label="2">合约</el-radio> |  | ||||||
|               </el-radio-group> |  | ||||||
|             </el-form-item> --> |  | ||||||
|             <!-- <el-form-item label="是否超管可见" prop="adminShow"> |  | ||||||
|                                         <el-input v-model="form.adminShow" placeholder="是否超管可见" |  | ||||||
|                                                       /> |  | ||||||
|                                     </el-form-item> --> |  | ||||||
|             <!-- <el-form-item label="允许下单的方向" prop="site"> |  | ||||||
|               <el-radio-group v-model="form.site"> |  | ||||||
|                 <el-radio label="3">多空</el-radio> |  | ||||||
|                 <el-radio label="1">多</el-radio> |  | ||||||
|                 <el-radio label="2">空</el-radio> |  | ||||||
|               </el-radio-group> |  | ||||||
|             </el-form-item> --> |  | ||||||
|             <!-- <el-form-item label="从属关系" prop="subordinate"> |  | ||||||
|                                         <el-input v-model="form.subordinate" placeholder="从属关系" |  | ||||||
|                                                       /> |  | ||||||
|                                     </el-form-item> --> |  | ||||||
|             <!-- <el-form-item label="所属组id" prop="groupId"> |  | ||||||
|                                         <el-input v-model="form.groupId" placeholder="所属组id" |  | ||||||
|                                                       /> |  | ||||||
|                                     </el-form-item> --> |  | ||||||
|             <el-form-item label="开启状态" prop="openStatus"> |             <el-form-item label="开启状态" prop="openStatus"> | ||||||
|               <el-radio-group v-model="form.openStatus"> |               <el-radio-group v-model="form.openStatus"> | ||||||
|                 <el-radio :label="1">开启</el-radio> |                 <el-radio :label="1">开启</el-radio> | ||||||
|                 <el-radio :label="0">关闭</el-radio> |                 <el-radio :label="0">关闭</el-radio> | ||||||
|               </el-radio-group> |               </el-radio-group> | ||||||
|             </el-form-item> |             </el-form-item> | ||||||
|  |             <el-form-item label="反单状态" prop="reverseStatus"> | ||||||
|  |               <el-radio-group v-model="form.reverseStatus"> | ||||||
|  |                 <el-radio v-for="(item,index) in reverseStatusOptions" :key="'formReverseStatus'+index" :label="item.value">{{ item.label }}</el-radio> | ||||||
|  |               </el-radio-group> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item v-if="form.reverseStatus==1" label="反单Api" prop="reverseApiId"> | ||||||
|  |               <el-select v-model="form.reverseApiId" placeholder="请选择反单Api" filterable clearable> | ||||||
|  |                 <el-option v-for="item in unBindReverseList" :key="'formReverseApi'+item.id" :label="item.apiName" :disabled="item.disabled" :value="item.id" /> | ||||||
|  |               </el-select> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item v-if="form.reverseStatus==1" label="下单比例" prop="orderProportion"> | ||||||
|  |               <el-input v-model="form.orderProportion" placeholder="下单比例" /> | ||||||
|  |             </el-form-item> | ||||||
|           </el-form> |           </el-form> | ||||||
|           <div slot="footer" class="dialog-footer"> |           <div slot="footer" class="dialog-footer"> | ||||||
|             <el-button type="primary" @click="submitForm">确 定</el-button> |             <el-button type="primary" @click="submitForm">确 定</el-button> | ||||||
| @ -298,10 +231,9 @@ | |||||||
| </template> | </template> | ||||||
|  |  | ||||||
| <script> | <script> | ||||||
| import { addLineApiUser, delLineApiUser, getLineApiUser, listLineApiUser, updateLineApiUser } from '@/api/admin/line-api-user' | import { addLineApiUser, delLineApiUser, getLineApiUser, listLineApiUser, updateLineApiUser, getLineApiUserUnBindReverse } from '@/api/admin/line-api-user' | ||||||
|  |  | ||||||
| import { listLineUser } from '@/api/admin/line-user' | import { listLineUser } from '@/api/admin/line-user' | ||||||
| // import { listLineApiGroup } from '@/api/admin/line-api-group' |  | ||||||
| export default { | export default { | ||||||
|   name: 'LineApiUser', |   name: 'LineApiUser', | ||||||
|   components: { |   components: { | ||||||
| @ -326,7 +258,15 @@ export default { | |||||||
|       // 类型数据字典 |       // 类型数据字典 | ||||||
|       typeOptions: [], |       typeOptions: [], | ||||||
|       lineApiUserList: [], |       lineApiUserList: [], | ||||||
|  |       unBindReverseList: [], | ||||||
|  |       // 下反单状态 | ||||||
|  |       reverseStatusOptions: [{ | ||||||
|  |         label: '开启', | ||||||
|  |         value: 1 | ||||||
|  |       }, { | ||||||
|  |         label: '关闭', | ||||||
|  |         value: 2 | ||||||
|  |       }], | ||||||
|       // 关系表类型 |       // 关系表类型 | ||||||
|       userIdOptions: [], |       userIdOptions: [], | ||||||
|       groupIdOptions: [], |       groupIdOptions: [], | ||||||
| @ -342,7 +282,8 @@ export default { | |||||||
|       }, |       }, | ||||||
|       // 表单校验 |       // 表单校验 | ||||||
|       rules: { |       rules: { | ||||||
|         exchangeType: [{ required: true, message: '交易所不能为空', trigger: 'blur' }] |         exchangeType: [{ required: true, message: '交易所不能为空', trigger: 'blur' }], | ||||||
|  |         orderProportion: [{ required: true, message: '下单比例不能为空', trigger: 'blur' }] | ||||||
|       }, |       }, | ||||||
|       exchangeTypes: [] |       exchangeTypes: [] | ||||||
|     } |     } | ||||||
| @ -393,7 +334,9 @@ export default { | |||||||
|         site: '3', |         site: '3', | ||||||
|         subordinate: '0', |         subordinate: '0', | ||||||
|         groupId: undefined, |         groupId: undefined, | ||||||
|         openStatus: 1 |         openStatus: 1, | ||||||
|  |         reverseStatus: 2, | ||||||
|  |         orderProportion: undefined | ||||||
|       } |       } | ||||||
|       this.resetForm('form') |       this.resetForm('form') | ||||||
|     }, |     }, | ||||||
| @ -409,17 +352,23 @@ export default { | |||||||
|     groupIdFormat(row) { |     groupIdFormat(row) { | ||||||
|       return this.selectItemsLabel(this.groupIdOptions || [], row.groupId) |       return this.selectItemsLabel(this.groupIdOptions || [], row.groupId) | ||||||
|     }, |     }, | ||||||
|  |     getUnBindReverse(exchangeType, apiId) { | ||||||
|  |       this.loading = true | ||||||
|  |       getLineApiUserUnBindReverse({ exchangeType, apiId }) | ||||||
|  |         .then(response => { | ||||||
|  |           if (response && response.code === 200) { | ||||||
|  |             this.unBindReverseList = response.data | ||||||
|  |           } | ||||||
|  |         }).finally(() => { | ||||||
|  |           this.loading = false | ||||||
|  |         }) | ||||||
|  |     }, | ||||||
|     // 关系 |     // 关系 | ||||||
|     getLineUserItems() { |     getLineUserItems() { | ||||||
|       this.getItems(listLineUser, undefined).then(res => { |       this.getItems(listLineUser, undefined).then(res => { | ||||||
|         this.userIdOptions = this.setItems(res, 'id', 'username') |         this.userIdOptions = this.setItems(res, 'id', 'username') | ||||||
|       }) |       }) | ||||||
|     }, |     }, | ||||||
|     // getLineApiGroupItems() { |  | ||||||
|     //   this.getItems(listLineApiGroup, undefined).then(res => { |  | ||||||
|     //     this.groupIdOptions = this.setItems(res, 'id', 'groupName') |  | ||||||
|     //   }) |  | ||||||
|     // }, |  | ||||||
|     // 文件 |     // 文件 | ||||||
|     /** 搜索按钮操作 */ |     /** 搜索按钮操作 */ | ||||||
|     handleQuery() { |     handleQuery() { | ||||||
| @ -438,6 +387,8 @@ export default { | |||||||
|       this.open = true |       this.open = true | ||||||
|       this.title = '添加api用户管理' |       this.title = '添加api用户管理' | ||||||
|       this.isEdit = false |       this.isEdit = false | ||||||
|  |  | ||||||
|  |       this.getUnBindReverse(this.form.exchangeType, null) | ||||||
|     }, |     }, | ||||||
|     // 多选框选中数据 |     // 多选框选中数据 | ||||||
|     handleSelectionChange(selection) { |     handleSelectionChange(selection) { | ||||||
| @ -455,12 +406,17 @@ export default { | |||||||
|         this.open = true |         this.open = true | ||||||
|         this.title = '修改api用户管理' |         this.title = '修改api用户管理' | ||||||
|         this.isEdit = true |         this.isEdit = true | ||||||
|  |  | ||||||
|  |         this.getUnBindReverse(this.form.exchangeType, id) | ||||||
|       }) |       }) | ||||||
|     }, |     }, | ||||||
|     /** 提交按钮 */ |     /** 提交按钮 */ | ||||||
|     submitForm: function() { |     submitForm: function() { | ||||||
|       this.$refs['form'].validate(valid => { |       this.$refs['form'].validate(valid => { | ||||||
|         if (valid) { |         if (valid) { | ||||||
|  |           this.form.reverseApiId = this.form.reverseApiId ? Number(this.form.reverseApiId) : null | ||||||
|  |           this.form.orderProportion = this.form.orderProportion ? Number(this.form.orderProportion) : null | ||||||
|  |  | ||||||
|           if (this.form.id !== undefined) { |           if (this.form.id !== undefined) { | ||||||
|             updateLineApiUser(this.form).then(response => { |             updateLineApiUser(this.form).then(response => { | ||||||
|               if (response.code === 200) { |               if (response.code === 200) { | ||||||
|  | |||||||
							
								
								
									
										230
									
								
								src/views/admin/line-reverse-order/ReverseOrderModal.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										230
									
								
								src/views/admin/line-reverse-order/ReverseOrderModal.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,230 @@ | |||||||
|  | <template> | ||||||
|  |   <!-- 添加或修改对话框 --> | ||||||
|  |   <el-dialog title="反向订单详情" :visible.sync="visible" width="500px" @open="handleOpen" @close="handleClose"> | ||||||
|  |     <el-form ref="form" :model="form" label-width="80px"> | ||||||
|  |  | ||||||
|  |       <el-form-item label="主单id" prop="pId"> | ||||||
|  |         <el-input v-model="form.pId" placeholder="主单id" /> | ||||||
|  |       </el-form-item> | ||||||
|  |       <el-form-item label="订单号" prop="orderSn"> | ||||||
|  |         <el-input v-model="form.orderSn" placeholder="订单号" /> | ||||||
|  |       </el-form-item> | ||||||
|  |       <el-form-item label="币安订单号" prop="orderId"> | ||||||
|  |         <el-input v-model="form.orderId" placeholder="币安订单号" /> | ||||||
|  |       </el-form-item> | ||||||
|  |       <el-form-item label="跟随币安订单号" prop="followOrderSn"> | ||||||
|  |         <el-input v-model="form.followOrderSn" placeholder="跟随币安订单号" /> | ||||||
|  |       </el-form-item> | ||||||
|  |       <el-form-item label="交易对" prop="symbol"> | ||||||
|  |         <el-input v-model="form.symbol" placeholder="交易对" /> | ||||||
|  |       </el-form-item> | ||||||
|  |       <el-form-item label="订单类型" prop="orderType"> | ||||||
|  |         <el-input v-model="form.orderType" placeholder="订单类型 0-主单 1-止损单 2-加仓 3-减仓" /> | ||||||
|  |       </el-form-item> | ||||||
|  |       <el-form-item label="购买金额" prop="buyPrice"> | ||||||
|  |         <el-input v-model="form.buyPrice" placeholder="购买金额" /> | ||||||
|  |       </el-form-item> | ||||||
|  |       <el-form-item label="委托价格" prop="price"> | ||||||
|  |         <el-input v-model="form.price" placeholder="委托价格" /> | ||||||
|  |       </el-form-item> | ||||||
|  |       <el-form-item label="委托价格(U)" prop="priceU"> | ||||||
|  |         <el-input v-model="form.priceU" placeholder="委托价格(U)" /> | ||||||
|  |       </el-form-item> | ||||||
|  |       <el-form-item label="实际成交价" prop="finalPrice"> | ||||||
|  |         <el-input v-model="form.finalPrice" placeholder="实际成交价" /> | ||||||
|  |       </el-form-item> | ||||||
|  |       <el-form-item label="持仓方向" prop="positionSide"> | ||||||
|  |         {{ positionSideFormat(form.positionSide) }} | ||||||
|  |       </el-form-item> | ||||||
|  |       <el-form-item label="买卖方向" prop="side"> | ||||||
|  |         {{ sideFormat(form.side) }} | ||||||
|  |       </el-form-item> | ||||||
|  |       <el-form-item label="行情价" prop="signPrice"> | ||||||
|  |         <el-input v-model="form.signPrice" placeholder="行情价" /> | ||||||
|  |       </el-form-item> | ||||||
|  |       <el-form-item label="触发时间" prop="triggerTime"> | ||||||
|  |         <el-date-picker v-model="form.triggerTime" type="datetime" placeholder="选择日期" /> | ||||||
|  |       </el-form-item> | ||||||
|  |       <el-form-item label="状态" prop="status"> | ||||||
|  |         {{ statusFormat(form.status) }} | ||||||
|  |       </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> | ||||||
|  |   </el-dialog> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { addLineReverseOrder, getLineReverseOrder, updateLineReverseOrder } from '@/api/admin/line-reverse-order' | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   name: 'ReverseOrderModal', | ||||||
|  |   props: { | ||||||
|  |     visible: { | ||||||
|  |       type: Boolean, | ||||||
|  |       default: false | ||||||
|  |     }, | ||||||
|  |     id: { | ||||||
|  |       type: Number, | ||||||
|  |       default: null | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       loading: false, | ||||||
|  |       // 表单参数 | ||||||
|  |       form: { | ||||||
|  |       }, | ||||||
|  |       // 表单校验 | ||||||
|  |       rules: { | ||||||
|  |         orderSn: [{ required: true, message: '订单号不能为空', trigger: 'blur' }], | ||||||
|  |         orderId: [{ required: true, message: '币安订单号不能为空', trigger: 'blur' }], | ||||||
|  |         followOrderSn: [{ required: true, message: '跟随币安订单号不能为空', trigger: 'blur' }], | ||||||
|  |         orderType: [{ required: true, message: '订单类型 0-主单 1-止损单 2-加仓 3-减仓不能为空', trigger: 'blur' }], | ||||||
|  |         positionSide: [{ required: true, message: '持仓方向 LONG-多 SHORT-空不能为空', trigger: 'blur' }], | ||||||
|  |         side: [{ required: true, message: '买卖方向 SELL-卖 BUY-买不能为空', trigger: 'blur' }], | ||||||
|  |         status: [{ required: true, message: '状态 1-待下单 2-已下单 3-已成交 4-已平仓 5-已止损不能为空', trigger: 'blur' }] | ||||||
|  |       }, | ||||||
|  |       typeOptions: [{ | ||||||
|  |         label: '主单', | ||||||
|  |         value: 0 | ||||||
|  |       }, { | ||||||
|  |         label: '止损单', | ||||||
|  |         value: 1 | ||||||
|  |       }, { | ||||||
|  |         label: '加仓', | ||||||
|  |         value: 2 | ||||||
|  |       }, { | ||||||
|  |         label: '减仓', | ||||||
|  |         value: 3 | ||||||
|  |       }], | ||||||
|  |       positionSideOptions: [{ | ||||||
|  |         label: '多', | ||||||
|  |         value: 'LONG' | ||||||
|  |       }, { | ||||||
|  |         label: '空', | ||||||
|  |         value: 'SHORT' | ||||||
|  |       }], | ||||||
|  |       sideOptions: [{ | ||||||
|  |         label: '卖', | ||||||
|  |         value: 'SELL' | ||||||
|  |       }, { | ||||||
|  |         label: '买', | ||||||
|  |         value: 'BUY' | ||||||
|  |       }], | ||||||
|  |       statusOptions: [{ | ||||||
|  |         label: '待下单', | ||||||
|  |         value: 1 | ||||||
|  |       }, { | ||||||
|  |         label: '已下单', | ||||||
|  |         value: 2 | ||||||
|  |       }, { | ||||||
|  |         label: '已成交', | ||||||
|  |         value: 3 | ||||||
|  |       }, { | ||||||
|  |         label: '已平仓', | ||||||
|  |         value: 4 | ||||||
|  |       }, { | ||||||
|  |         label: '已止损', | ||||||
|  |         value: 5 | ||||||
|  |       }] | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     sideFormat(val) { | ||||||
|  |       const side = this.sideOptions.filter(item => item.value === val) | ||||||
|  |       return side.length ? side[0].label : '' | ||||||
|  |     }, | ||||||
|  |     positionSideFormat(val) { | ||||||
|  |       const positionSide = this.positionSideOptions.filter(item => item.value === val) | ||||||
|  |       return positionSide.length ? positionSide[0].label : '' | ||||||
|  |     }, | ||||||
|  |     statusFormat(val) { | ||||||
|  |       const status = this.statusOptions.filter(item => item.value === val) | ||||||
|  |       return status.length ? status[0].label : '' | ||||||
|  |     }, | ||||||
|  |     typeFormat(val) { | ||||||
|  |       const type = this.typeOptions.filter(item => item.value === val) | ||||||
|  |       return type.length ? type[0].label : '' | ||||||
|  |     }, | ||||||
|  |     handleOpen() { | ||||||
|  |       this.loading = true | ||||||
|  |       this.reset() | ||||||
|  |  | ||||||
|  |       if (this.id !== null) { | ||||||
|  |         getLineReverseOrder(this.id).then(response => { | ||||||
|  |           if (response.code === 200) { | ||||||
|  |             this.form = response.data | ||||||
|  |             // this.form.triggerTime = new Date(this.form.triggerTime) | ||||||
|  |           } | ||||||
|  |         }).finally(() => { | ||||||
|  |           this.loading = false | ||||||
|  |         }) | ||||||
|  |       } else { | ||||||
|  |         this.loading = false | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     // 取消按钮 | ||||||
|  |     cancel() { | ||||||
|  |       this.visible = false | ||||||
|  |       this.reset() | ||||||
|  |     }, | ||||||
|  |     // 表单重置 | ||||||
|  |     reset() { | ||||||
|  |       this.form = { | ||||||
|  |  | ||||||
|  |         id: undefined, | ||||||
|  |         pId: undefined, | ||||||
|  |         orderSn: undefined, | ||||||
|  |         orderId: undefined, | ||||||
|  |         followOrderSn: undefined, | ||||||
|  |         symbol: undefined, | ||||||
|  |         orderType: undefined, | ||||||
|  |         buyPrice: undefined, | ||||||
|  |         price: undefined, | ||||||
|  |         priceU: undefined, | ||||||
|  |         finalPrice: undefined, | ||||||
|  |         positionSide: undefined, | ||||||
|  |         side: undefined, | ||||||
|  |         signPrice: undefined, | ||||||
|  |         triggerTime: undefined, | ||||||
|  |         status: undefined | ||||||
|  |       } | ||||||
|  |       this.resetForm('form') | ||||||
|  |     }, | ||||||
|  |     /** 提交按钮 */ | ||||||
|  |     submitForm: function() { | ||||||
|  |       this.$refs['form'].validate(valid => { | ||||||
|  |         if (valid) { | ||||||
|  |           if (this.form.id !== undefined) { | ||||||
|  |             updateLineReverseOrder(this.form).then(response => { | ||||||
|  |               if (response.code === 200) { | ||||||
|  |                 this.msgSuccess(response.msg) | ||||||
|  |                 this.open = false | ||||||
|  |                 this.getList() | ||||||
|  |               } else { | ||||||
|  |                 this.msgError(response.msg) | ||||||
|  |               } | ||||||
|  |             }) | ||||||
|  |           } else { | ||||||
|  |             addLineReverseOrder(this.form).then(response => { | ||||||
|  |               if (response.code === 200) { | ||||||
|  |                 this.msgSuccess(response.msg) | ||||||
|  |                 this.open = false | ||||||
|  |                 this.getList() | ||||||
|  |               } else { | ||||||
|  |                 this.msgError(response.msg) | ||||||
|  |               } | ||||||
|  |             }) | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     handleClose() { | ||||||
|  |       this.$emit('update:visible', false) | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										366
									
								
								src/views/admin/line-reverse-order/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										366
									
								
								src/views/admin/line-reverse-order/index.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,366 @@ | |||||||
|  | <template> | ||||||
|  |   <BasicLayout> | ||||||
|  |     <template #wrapper> | ||||||
|  |       <el-card class="box-card"> | ||||||
|  |         <el-form ref="queryForm" :model="queryParams" :inline="true" label-width="88px"> | ||||||
|  |           <el-form-item label="订单号" prop="orderSn"><el-input | ||||||
|  |             v-model="queryParams.orderSn" | ||||||
|  |             placeholder="请输入订单号" | ||||||
|  |             clearable | ||||||
|  |             size="small" | ||||||
|  |             @keyup.enter.native="handleQuery" | ||||||
|  |           /> | ||||||
|  |           </el-form-item> | ||||||
|  |           <el-form-item label="币安订单号" prop="orderId"><el-input | ||||||
|  |             v-model="queryParams.orderId" | ||||||
|  |             placeholder="请输入币安订单号" | ||||||
|  |             clearable | ||||||
|  |             size="small" | ||||||
|  |             @keyup.enter.native="handleQuery" | ||||||
|  |           /> | ||||||
|  |           </el-form-item> | ||||||
|  |           <el-form-item label="跟随订单号" prop="followOrderSn"><el-input | ||||||
|  |             v-model="queryParams.followOrderSn" | ||||||
|  |             placeholder="请输入跟随币安订单号" | ||||||
|  |             clearable | ||||||
|  |             size="small" | ||||||
|  |             @keyup.enter.native="handleQuery" | ||||||
|  |           /> | ||||||
|  |           </el-form-item> | ||||||
|  |           <el-form-item label="订单类型" prop="orderType"> | ||||||
|  |             <el-select v-model="queryParams.orderType" clearable> | ||||||
|  |               <el-option | ||||||
|  |                 v-for="(item, index) in typeOptions" | ||||||
|  |                 :key="'queryOrderType' + index" | ||||||
|  |                 :label="item.label" | ||||||
|  |                 :value="item.value" | ||||||
|  |               /> | ||||||
|  |             </el-select> | ||||||
|  |           </el-form-item> | ||||||
|  |           <el-form-item label="持仓方向" prop="positionSide"> | ||||||
|  |             <el-select v-model="queryParams.positionSide" clearable> | ||||||
|  |               <el-option | ||||||
|  |                 v-for="(item, index) in positionSideOptions" | ||||||
|  |                 :key="'queryPositionSide' + index" | ||||||
|  |                 :label="item.label" | ||||||
|  |                 :value="item.value" | ||||||
|  |               /> | ||||||
|  |             </el-select> | ||||||
|  |           </el-form-item> | ||||||
|  |           <el-form-item label="买卖方向" prop="side"> | ||||||
|  |             <el-select v-model="queryParams.side" clearable> | ||||||
|  |               <el-option | ||||||
|  |                 v-for="(item, index) in sideOptions" | ||||||
|  |                 :key="'querySide' + index" | ||||||
|  |                 :label="item.label" | ||||||
|  |                 :value="item.value" | ||||||
|  |               /> | ||||||
|  |             </el-select> | ||||||
|  |           </el-form-item> | ||||||
|  |           <el-form-item label="状态" prop="status"> | ||||||
|  |             <el-select v-model="queryParams.status" clearable> | ||||||
|  |               <el-option | ||||||
|  |                 v-for="(item, index) in statusOptions" | ||||||
|  |                 :key="'queryStatus' + index" | ||||||
|  |                 :label="item.label" | ||||||
|  |                 :value="item.value" | ||||||
|  |               /> | ||||||
|  |             </el-select> | ||||||
|  |           </el-form-item> | ||||||
|  |  | ||||||
|  |           <el-form-item> | ||||||
|  |             <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> | ||||||
|  |             <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> | ||||||
|  |           </el-form-item> | ||||||
|  |         </el-form> | ||||||
|  |  | ||||||
|  |         <el-row :gutter="10" class="mb8"> | ||||||
|  |           <el-col :span="1.5"> | ||||||
|  |             <el-button | ||||||
|  |               v-permisaction="['admin:lineReverseOrder:add']" | ||||||
|  |               type="primary" | ||||||
|  |               icon="el-icon-plus" | ||||||
|  |               size="mini" | ||||||
|  |               @click="handleAdd" | ||||||
|  |             >新增 | ||||||
|  |             </el-button> | ||||||
|  |           </el-col> | ||||||
|  |           <el-col :span="1.5"> | ||||||
|  |             <el-button | ||||||
|  |               v-permisaction="['admin:lineReverseOrder:edit']" | ||||||
|  |               type="success" | ||||||
|  |               icon="el-icon-edit" | ||||||
|  |               size="mini" | ||||||
|  |               :disabled="single" | ||||||
|  |               @click="handleUpdate" | ||||||
|  |             >修改 | ||||||
|  |             </el-button> | ||||||
|  |           </el-col> | ||||||
|  |           <el-col :span="1.5"> | ||||||
|  |             <el-button | ||||||
|  |               v-permisaction="['admin:lineReverseOrder:remove']" | ||||||
|  |               type="danger" | ||||||
|  |               icon="el-icon-delete" | ||||||
|  |               size="mini" | ||||||
|  |               :disabled="multiple" | ||||||
|  |               @click="handleDelete" | ||||||
|  |             >删除 | ||||||
|  |             </el-button> | ||||||
|  |           </el-col> | ||||||
|  |         </el-row> | ||||||
|  |  | ||||||
|  |         <el-table v-loading="loading" :data="lineReverseOrderList" @selection-change="handleSelectionChange"> | ||||||
|  |           <el-table-column type="selection" width="55" align="center" /> | ||||||
|  |           <el-table-column label="订单号" align="center" prop="orderSn" :show-overflow-tooltip="true" /> | ||||||
|  |           <el-table-column label="币安订单号" align="center" prop="orderId" :show-overflow-tooltip="true" /> | ||||||
|  |           <el-table-column | ||||||
|  |             label="跟随币安订单号" | ||||||
|  |             align="center" | ||||||
|  |             prop="followOrderSn" | ||||||
|  |             :show-overflow-tooltip="true" | ||||||
|  |           /> | ||||||
|  |           <el-table-column label="交易对" align="center" prop="symbol" :show-overflow-tooltip="true" /> | ||||||
|  |           <el-table-column label="订单类型" align="center" prop="orderType" :show-overflow-tooltip="true" /> | ||||||
|  |           <el-table-column label="购买金额" align="center" prop="buyPrice" :show-overflow-tooltip="true" /> | ||||||
|  |           <el-table-column label="委托价格" align="center" prop="price" :show-overflow-tooltip="true" /> | ||||||
|  |           <el-table-column label="实际成交价" align="center" prop="finalPrice" :show-overflow-tooltip="true" /> | ||||||
|  |           <el-table-column label="持仓方向" align="center" prop="positionSide" :show-overflow-tooltip="true" /> | ||||||
|  |           <el-table-column label="买卖方向" align="center" prop="side" :show-overflow-tooltip="true" /> | ||||||
|  |           <el-table-column label="行情价" align="center" prop="signPrice" :show-overflow-tooltip="true" /> | ||||||
|  |           <el-table-column label="触发时间" align="center" prop="triggerTime" :show-overflow-tooltip="true"> | ||||||
|  |             <template slot-scope="scope"> | ||||||
|  |               <span>{{ parseTime(scope.row.triggerTime) }}</span> | ||||||
|  |             </template> | ||||||
|  |           </el-table-column> | ||||||
|  |           <el-table-column label="状态" align="center" prop="status" :show-overflow-tooltip="true" /> | ||||||
|  |           <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> | ||||||
|  |             <template slot-scope="scope"> | ||||||
|  |               <el-popconfirm | ||||||
|  |                 class="delete-popconfirm" | ||||||
|  |                 title="确认要修改吗?" | ||||||
|  |                 confirm-button-text="修改" | ||||||
|  |                 @confirm="handleUpdate(scope.row)" | ||||||
|  |               > | ||||||
|  |                 <el-button | ||||||
|  |                   slot="reference" | ||||||
|  |                   v-permisaction="['admin:lineReverseOrder:edit']" | ||||||
|  |                   size="mini" | ||||||
|  |                   type="text" | ||||||
|  |                   icon="el-icon-edit" | ||||||
|  |                 >修改 | ||||||
|  |                 </el-button> | ||||||
|  |               </el-popconfirm> | ||||||
|  |               <el-popconfirm | ||||||
|  |                 class="delete-popconfirm" | ||||||
|  |                 title="确认要删除吗?" | ||||||
|  |                 confirm-button-text="删除" | ||||||
|  |                 @confirm="handleDelete(scope.row)" | ||||||
|  |               > | ||||||
|  |                 <el-button | ||||||
|  |                   slot="reference" | ||||||
|  |                   v-permisaction="['admin:lineReverseOrder:remove']" | ||||||
|  |                   size="mini" | ||||||
|  |                   type="text" | ||||||
|  |                   icon="el-icon-delete" | ||||||
|  |                 >删除 | ||||||
|  |                 </el-button> | ||||||
|  |               </el-popconfirm> | ||||||
|  |             </template> | ||||||
|  |           </el-table-column> | ||||||
|  |         </el-table> | ||||||
|  |  | ||||||
|  |         <pagination | ||||||
|  |           v-show="total > 0" | ||||||
|  |           :total="total" | ||||||
|  |           :page.sync="queryParams.pageIndex" | ||||||
|  |           :limit.sync="queryParams.pageSize" | ||||||
|  |           @pagination="getList" | ||||||
|  |         /> | ||||||
|  |  | ||||||
|  |       </el-card> | ||||||
|  |     </template> | ||||||
|  |   </BasicLayout> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { delLineReverseOrder, getLineReverseOrder, listLineReverseOrder } from '@/api/admin/line-reverse-order' | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   name: 'LineReverseOrder', | ||||||
|  |   components: { | ||||||
|  |   }, | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       // 遮罩层 | ||||||
|  |       loading: true, | ||||||
|  |       // 选中数组 | ||||||
|  |       ids: [], | ||||||
|  |       // 非单个禁用 | ||||||
|  |       single: true, | ||||||
|  |       // 非多个禁用 | ||||||
|  |       multiple: true, | ||||||
|  |       // 总条数 | ||||||
|  |       total: 0, | ||||||
|  |       // 弹出层标题 | ||||||
|  |       title: '', | ||||||
|  |       // 是否显示弹出层 | ||||||
|  |       open: false, | ||||||
|  |       detailId: null, | ||||||
|  |       isEdit: false, | ||||||
|  |       // 类型数据字典 | ||||||
|  |       typeOptions: [{ | ||||||
|  |         label: '主单', | ||||||
|  |         value: 0 | ||||||
|  |       }, { | ||||||
|  |         label: '止损单', | ||||||
|  |         value: 1 | ||||||
|  |       }, { | ||||||
|  |         label: '加仓', | ||||||
|  |         value: 2 | ||||||
|  |       }, { | ||||||
|  |         label: '减仓', | ||||||
|  |         value: 3 | ||||||
|  |       }], | ||||||
|  |       lineReverseOrderList: [], | ||||||
|  |       positionSideOptions: [{ | ||||||
|  |         label: '多', | ||||||
|  |         value: 'LONG' | ||||||
|  |       }, { | ||||||
|  |         label: '空', | ||||||
|  |         value: 'SHORT' | ||||||
|  |       }], | ||||||
|  |       sideOptions: [{ | ||||||
|  |         label: '卖', | ||||||
|  |         value: 'SELL' | ||||||
|  |       }, { | ||||||
|  |         label: '买', | ||||||
|  |         value: 'BUY' | ||||||
|  |       }], | ||||||
|  |       statusOptions: [{ | ||||||
|  |         label: '待下单', | ||||||
|  |         value: 1 | ||||||
|  |       }, { | ||||||
|  |         label: '已下单', | ||||||
|  |         value: 2 | ||||||
|  |       }, { | ||||||
|  |         label: '已成交', | ||||||
|  |         value: 3 | ||||||
|  |       }, { | ||||||
|  |         label: '已平仓', | ||||||
|  |         value: 4 | ||||||
|  |       }, { | ||||||
|  |         label: '已止损', | ||||||
|  |         value: 5 | ||||||
|  |       }], | ||||||
|  |       // 查询参数 | ||||||
|  |       queryParams: { | ||||||
|  |         pageIndex: 1, | ||||||
|  |         pageSize: 10, | ||||||
|  |         orderSn: undefined, | ||||||
|  |         orderId: undefined, | ||||||
|  |         followOrderSn: undefined, | ||||||
|  |         orderType: undefined, | ||||||
|  |         positionSide: undefined, | ||||||
|  |         side: undefined, | ||||||
|  |         status: undefined | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   created() { | ||||||
|  |     this.getList() | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     /** 查询参数列表 */ | ||||||
|  |     getList() { | ||||||
|  |       this.loading = true | ||||||
|  |       listLineReverseOrder(this.addDateRange(this.queryParams, this.dateRange)).then(response => { | ||||||
|  |         this.lineReverseOrderList = response.data.list | ||||||
|  |         this.total = response.data.count | ||||||
|  |       } | ||||||
|  |       ).finally(() => { | ||||||
|  |         this.loading = false | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     typeFormat(val) { | ||||||
|  |       const type = this.typeOptions.filter(item => item.value === val) | ||||||
|  |       return type.length ? type[0].label : '' | ||||||
|  |     }, | ||||||
|  |     sideFormat(val) { | ||||||
|  |       const side = this.sideOptions.filter(item => item.value === val) | ||||||
|  |       return side.length ? side[0].label : '' | ||||||
|  |     }, | ||||||
|  |     positionSideFormat(val) { | ||||||
|  |       const positionSide = this.positionSideOptions.filter(item => item.value === val) | ||||||
|  |       return positionSide.length ? positionSide[0].label : '' | ||||||
|  |     }, | ||||||
|  |     statusFormat(val) { | ||||||
|  |       const status = this.statusOptions.filter(item => item.value === val) | ||||||
|  |       return status.length ? status[0].label : '' | ||||||
|  |     }, | ||||||
|  |     getImgList: function() { | ||||||
|  |       this.form[this.fileIndex] = this.$refs['fileChoose'].resultList[0].fullUrl | ||||||
|  |     }, | ||||||
|  |     fileClose: function() { | ||||||
|  |       this.fileOpen = false | ||||||
|  |     }, | ||||||
|  |     // 关系 | ||||||
|  |     // 文件 | ||||||
|  |     /** 搜索按钮操作 */ | ||||||
|  |     handleQuery() { | ||||||
|  |       this.queryParams.pageIndex = 1 | ||||||
|  |       this.getList() | ||||||
|  |     }, | ||||||
|  |     /** 重置按钮操作 */ | ||||||
|  |     resetQuery() { | ||||||
|  |       this.dateRange = [] | ||||||
|  |       this.resetForm('queryForm') | ||||||
|  |       this.handleQuery() | ||||||
|  |     }, | ||||||
|  |     /** 新增按钮操作 */ | ||||||
|  |     handleAdd() { | ||||||
|  |       this.reset() | ||||||
|  |       this.open = true | ||||||
|  |       this.title = '添加反单下单列表' | ||||||
|  |       this.isEdit = false | ||||||
|  |     }, | ||||||
|  |     // 多选框选中数据 | ||||||
|  |     handleSelectionChange(selection) { | ||||||
|  |       this.ids = selection.map(item => item.id) | ||||||
|  |       this.single = selection.length !== 1 | ||||||
|  |       this.multiple = !selection.length | ||||||
|  |     }, | ||||||
|  |     /** 修改按钮操作 */ | ||||||
|  |     handleUpdate(row) { | ||||||
|  |       const id = | ||||||
|  |                 row.id || this.ids | ||||||
|  |       getLineReverseOrder(id).then(response => { | ||||||
|  |         this.form = response.data | ||||||
|  |         this.open = true | ||||||
|  |         this.title = '修改反单下单列表' | ||||||
|  |         this.isEdit = true | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     /** 删除按钮操作 */ | ||||||
|  |     handleDelete(row) { | ||||||
|  |       var Ids = (row.id && [row.id]) || this.ids | ||||||
|  |  | ||||||
|  |       this.$confirm('是否确认删除编号为"' + Ids + '"的数据项?', '警告', { | ||||||
|  |         confirmButtonText: '确定', | ||||||
|  |         cancelButtonText: '取消', | ||||||
|  |         type: 'warning' | ||||||
|  |       }).then(function() { | ||||||
|  |         return delLineReverseOrder({ 'ids': Ids }) | ||||||
|  |       }).then((response) => { | ||||||
|  |         if (response.code === 200) { | ||||||
|  |           this.msgSuccess(response.msg) | ||||||
|  |           this.open = false | ||||||
|  |           this.getList() | ||||||
|  |         } else { | ||||||
|  |           this.msgError(response.msg) | ||||||
|  |         } | ||||||
|  |       }).catch(function() { | ||||||
|  |       }) | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										201
									
								
								src/views/admin/line-reverse-position/close-position.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										201
									
								
								src/views/admin/line-reverse-position/close-position.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,201 @@ | |||||||
|  | <template> | ||||||
|  |  | ||||||
|  |   <!-- 添加或修改对话框 --> | ||||||
|  |   <el-dialog title="批量平仓" :visible.sync="open" width="500px" @close="handleClose" @open="handleOpen"> | ||||||
|  |     <el-form ref="form" :model="form" :rules="rules" label-width="80px"> | ||||||
|  |  | ||||||
|  |       <el-form-item label="下单Api" prop="reverseApiId"> | ||||||
|  |         <el-select v-model="form.reverseApiId" placeholder="请选择"> | ||||||
|  |           <el-option | ||||||
|  |             v-for="dict in reverseApiIdOptions" | ||||||
|  |             :key="'reverseApiId' + dict.id" | ||||||
|  |             :label="dict.name" | ||||||
|  |             :value="dict.id" | ||||||
|  |           /> | ||||||
|  |         </el-select> | ||||||
|  |       </el-form-item> | ||||||
|  |       <el-form-item label="持仓方向" prop="positionSide"> | ||||||
|  |         <el-select v-model="form.positionSide" placeholder="请选择"> | ||||||
|  |           <el-option | ||||||
|  |             v-for="dict in positionSideOptions" | ||||||
|  |             :key="dict.value" | ||||||
|  |             :label="dict.label" | ||||||
|  |             :value="dict.value" | ||||||
|  |           /> | ||||||
|  |         </el-select> | ||||||
|  |       </el-form-item> | ||||||
|  |       <el-form-item label="交易对" prop="symbol"> | ||||||
|  |         <template #label> | ||||||
|  |           <span>交易对</span> | ||||||
|  |           <el-popover trigger="hover" content="交易对为空时,代表平仓全部"> | ||||||
|  |             <template #reference> | ||||||
|  |               <i class="el-icon-question" /> | ||||||
|  |             </template> | ||||||
|  |           </el-popover> | ||||||
|  |         </template> | ||||||
|  |         <el-select | ||||||
|  |           v-model="form.symbol" | ||||||
|  |           style="width: 100%;" | ||||||
|  |           placeholder="请选择交易对" | ||||||
|  |           clearable | ||||||
|  |           filterable | ||||||
|  |           :remote-method="(e) => getSymbol(e, 1, 'binance')" | ||||||
|  |           :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($event, 1, 'binance')" | ||||||
|  |             /> | ||||||
|  |           </div> | ||||||
|  |         </el-select> | ||||||
|  |       </el-form-item> | ||||||
|  |     </el-form> | ||||||
|  |     <div slot="footer" class="dialog-footer"> | ||||||
|  |       <el-button type="primary" :loading="loading" @click="submitForm">确 定</el-button> | ||||||
|  |       <el-button @click="cancel">取 消</el-button> | ||||||
|  |     </div> | ||||||
|  |   </el-dialog> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { batchClosePosition } from '@/api/admin/line-reverse-position' | ||||||
|  | import { listLineSymbol } from '@/api/admin/line-symbol' | ||||||
|  | import { getReverseOptionsAll } from '@/api/admin/line-api-user' | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   name: 'Detail', | ||||||
|  |   props: { | ||||||
|  |     open: { | ||||||
|  |       type: Boolean, | ||||||
|  |       default: false | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       reverseApiIdOptions: [], | ||||||
|  |       positionSideOptions: [{ | ||||||
|  |         value: 'LONG', | ||||||
|  |         label: '多' | ||||||
|  |       }, { | ||||||
|  |         value: 'SHORT', | ||||||
|  |         label: '空' | ||||||
|  |       }], | ||||||
|  |       sideOptions: [{ | ||||||
|  |         value: 'SELL', | ||||||
|  |         label: '卖' | ||||||
|  |       }, { | ||||||
|  |         value: 'BUY', | ||||||
|  |         label: '买' | ||||||
|  |       }], | ||||||
|  |       form: { | ||||||
|  |         reverseApiId: undefined, | ||||||
|  |         positionSide: undefined, | ||||||
|  |         symbol: undefined | ||||||
|  |       }, | ||||||
|  |       // 表单校验 | ||||||
|  |       rules: { | ||||||
|  |         apiId: [{ required: true, message: 'api_id不能为空', trigger: 'blur' }], | ||||||
|  |         reverseApiId: [{ required: true, message: '反单api_id不能为空', trigger: 'blur' }], | ||||||
|  |         side: [{ required: true, message: '买卖方向 BUY SELL不能为空', trigger: 'blur' }], | ||||||
|  |         positionSide: [{ required: true, message: '持仓方向 LONG SHORT不能为空', trigger: 'blur' }] | ||||||
|  |       }, | ||||||
|  |       loading: false, | ||||||
|  |       searchLoding: false, | ||||||
|  |       symbol: { | ||||||
|  |         symbolList: [], | ||||||
|  |         total: 0, | ||||||
|  |         pageIndex: 1, | ||||||
|  |         pageSize: 6 | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     // 取消按钮 | ||||||
|  |     cancel() { | ||||||
|  |       this.handleClose() | ||||||
|  |     }, | ||||||
|  |     // 表单重置 | ||||||
|  |     reset() { | ||||||
|  |       this.form = { | ||||||
|  |         reverseApiId: undefined, | ||||||
|  |         positionSide: undefined, | ||||||
|  |         symbol: undefined | ||||||
|  |       } | ||||||
|  |       this.resetForm('form') | ||||||
|  |     }, | ||||||
|  |     /** 提交按钮 */ | ||||||
|  |     submitForm: function() { | ||||||
|  |       this.$refs['form'].validate(valid => { | ||||||
|  |         if (valid) { | ||||||
|  |           this.loading = true | ||||||
|  |  | ||||||
|  |           batchClosePosition(this.form).then(res => { | ||||||
|  |             console.log('res', res) | ||||||
|  |             if (res.code === 200) { | ||||||
|  |               if (res.data === null || res.data === undefined || res.data === '') { | ||||||
|  |                 this.$message.success('批量平仓成功') | ||||||
|  |                 this.handleClose() | ||||||
|  |               } else { | ||||||
|  |                 this.$notify.error({ | ||||||
|  |                   title: '错误', | ||||||
|  |                   message: res.data | ||||||
|  |                 }) | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |           }).catch(err => { | ||||||
|  |             console.log(err) | ||||||
|  |           }).finally(() => { | ||||||
|  |             this.loading = false | ||||||
|  |           }) | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     handleClose() { | ||||||
|  |       this.reset() | ||||||
|  |       this.$emit('update:open', false) | ||||||
|  |     }, | ||||||
|  |     // 交易对列表 | ||||||
|  |     getSymbol(e, type, exchangeType) { | ||||||
|  |       this.searchLoding = true | ||||||
|  |       const { pageIndex } = this.symbol | ||||||
|  |       const symbol = typeof e === 'object' ? '' : e | ||||||
|  |       listLineSymbol({ pageIndex, pageSize: 6, type: 1, symbol, exchangeType: 'binance' }).then(res => { | ||||||
|  |         this.symbol.total = res.data.count | ||||||
|  |         this.symbol.symbolList = res.data.list | ||||||
|  |       }).finally(() => { | ||||||
|  |         this.searchLoding = false | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     // 打开弹窗 | ||||||
|  |     handleOpen() { | ||||||
|  |       this.getSymbol('', 1, 'binance') | ||||||
|  |       this.getApiOptions() | ||||||
|  |     }, | ||||||
|  |     // 获取api列表 | ||||||
|  |     getApiOptions() { | ||||||
|  |       getReverseOptionsAll({}).then(res => { | ||||||
|  |         if (res.code === 200) { | ||||||
|  |           this.reverseApiIdOptions = res.data | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |         .catch(err => { | ||||||
|  |           console.log(err) | ||||||
|  |         }) | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										139
									
								
								src/views/admin/line-reverse-position/detail.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										139
									
								
								src/views/admin/line-reverse-position/detail.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,139 @@ | |||||||
|  | <template> | ||||||
|  |  | ||||||
|  |   <!-- 添加或修改对话框 --> | ||||||
|  |   <el-dialog :title="title" :visible.sync="open" width="500px" @close="handleClose"> | ||||||
|  |     <el-form ref="form" :model="form" :rules="rules" label-width="80px"> | ||||||
|  |  | ||||||
|  |       <el-form-item label="api_id" prop="apiId"> | ||||||
|  |         <el-select v-model="form.apiId" placeholder="请选择"> | ||||||
|  |           <el-option v-for="dict in apiIdOptions" :key="dict.value" :label="dict.label" :value="dict.value" /> | ||||||
|  |         </el-select> | ||||||
|  |       </el-form-item> | ||||||
|  |       <el-form-item label="反单api_id" prop="reverseApiId"> | ||||||
|  |         <el-select v-model="form.reverseApiId" placeholder="请选择"> | ||||||
|  |           <el-option v-for="dict in reverseApiIdOptions" :key="dict.value" :label="dict.label" :value="dict.value" /> | ||||||
|  |         </el-select> | ||||||
|  |       </el-form-item> | ||||||
|  |       <el-form-item label="反单仓位" prop="reverseAmount"> | ||||||
|  |         <el-input v-model="form.reverseAmount" placeholder="反单仓位" /> | ||||||
|  |       </el-form-item> | ||||||
|  |       <el-form-item label="买卖方向 BUY SELL" prop="side"> | ||||||
|  |         <el-select v-model="form.side" placeholder="请选择"> | ||||||
|  |           <el-option v-for="dict in sideOptions" :key="dict.value" :label="dict.label" :value="dict.value" /> | ||||||
|  |         </el-select> | ||||||
|  |       </el-form-item> | ||||||
|  |       <el-form-item label="持仓方向 LONG SHORT" prop="positionSide"> | ||||||
|  |         <el-select v-model="form.positionSide" placeholder="请选择"> | ||||||
|  |           <el-option v-for="dict in positionSideOptions" :key="dict.value" :label="dict.label" :value="dict.value" /> | ||||||
|  |         </el-select> | ||||||
|  |       </el-form-item> | ||||||
|  |       <el-form-item label="交易对" prop="symbol"> | ||||||
|  |         <el-input v-model="form.symbol" placeholder="交易对" /> | ||||||
|  |       </el-form-item> | ||||||
|  |       <el-form-item label="仓位状态 1-已开仓 2-已平仓" prop="status"> | ||||||
|  |         <el-input v-model="form.status" placeholder="仓位状态 1-已开仓 2-已平仓" /> | ||||||
|  |       </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> | ||||||
|  |   </el-dialog> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   name: 'Detail', | ||||||
|  |   props: { | ||||||
|  |     open: { | ||||||
|  |       type: Boolean, | ||||||
|  |       default: false | ||||||
|  |     }, | ||||||
|  |     title: { | ||||||
|  |       type: String, | ||||||
|  |       default: '添加' | ||||||
|  |     }, | ||||||
|  |     form: { | ||||||
|  |       type: Object, | ||||||
|  |       default: () => ({}) | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       reverseApiIdOptions: [], | ||||||
|  |       positionSideOptions: [], | ||||||
|  |       apiIdOptions: [], | ||||||
|  |       sideOptions: [{ | ||||||
|  |         value: 'SELL', | ||||||
|  |         label: '卖' | ||||||
|  |       }, { | ||||||
|  |         value: 'BUY', | ||||||
|  |         label: '买' | ||||||
|  |       }], | ||||||
|  |       // 表单校验 | ||||||
|  |       rules: { | ||||||
|  |         apiId: [{ required: true, message: 'api_id不能为空', trigger: 'blur' }], | ||||||
|  |         reverseApiId: [{ required: true, message: '反单api_id不能为空', trigger: 'blur' }], | ||||||
|  |         side: [{ required: true, message: '买卖方向 BUY SELL不能为空', trigger: 'blur' }], | ||||||
|  |         positionSide: [{ required: true, message: '持仓方向 LONG SHORT不能为空', trigger: 'blur' }], | ||||||
|  |         symbol: [{ required: true, message: '交易对不能为空', trigger: 'blur' }] | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |  | ||||||
|  |     // 取消按钮 | ||||||
|  |     cancel() { | ||||||
|  |       this.open = false | ||||||
|  |       this.reset() | ||||||
|  |     }, | ||||||
|  |     // 表单重置 | ||||||
|  |     reset() { | ||||||
|  |       this.form = { | ||||||
|  |  | ||||||
|  |         id: undefined, | ||||||
|  |         apiId: undefined, | ||||||
|  |         reverseApiId: undefined, | ||||||
|  |         reverseAmount: undefined, | ||||||
|  |         side: undefined, | ||||||
|  |         positionSide: undefined, | ||||||
|  |         symbol: undefined, | ||||||
|  |         status: undefined | ||||||
|  |       } | ||||||
|  |       this.resetForm('form') | ||||||
|  |     }, | ||||||
|  |     /** 提交按钮 */ | ||||||
|  |     submitForm: function() { | ||||||
|  |       this.$refs['form'].validate(valid => { | ||||||
|  |         if (valid) { | ||||||
|  |           // if (this.form.id !== undefined) { | ||||||
|  |           //     updateLineReversePosition(this.form).then(response => { | ||||||
|  |           //         if (response.code === 200) { | ||||||
|  |           //             this.msgSuccess(response.msg) | ||||||
|  |           //             this.handleClose() | ||||||
|  |           //         } else { | ||||||
|  |           //             this.msgError(response.msg) | ||||||
|  |           //         } | ||||||
|  |           //     }) | ||||||
|  |           // } else { | ||||||
|  |           //     addLineReversePosition(this.form).then(response => { | ||||||
|  |           //         if (response.code === 200) { | ||||||
|  |           //             this.msgSuccess(response.msg) | ||||||
|  |           //             this.handleClose() | ||||||
|  |           //         } else { | ||||||
|  |           //             this.msgError(response.msg) | ||||||
|  |           //         } | ||||||
|  |           //     }) | ||||||
|  |           // } | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     handleClose() { | ||||||
|  |       this.$emit('update:open', false) | ||||||
|  |       this.$emit('close') | ||||||
|  |       this.reset() | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										397
									
								
								src/views/admin/line-reverse-position/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										397
									
								
								src/views/admin/line-reverse-position/index.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,397 @@ | |||||||
|  | <template> | ||||||
|  |   <BasicLayout> | ||||||
|  |     <template #wrapper> | ||||||
|  |       <el-card class="box-card"> | ||||||
|  |         <el-form ref="queryForm" :model="queryParams" :inline="true" label-width="100px"> | ||||||
|  |  | ||||||
|  |           <el-form-item label="反单买卖方向" prop="side"> | ||||||
|  |             <el-select v-model="queryParams.side" prop="side" size="small" clearable> | ||||||
|  |               <el-option | ||||||
|  |                 v-for="item in sideOptions" | ||||||
|  |                 :key="'query-side-' + item.value" | ||||||
|  |                 :value="item.value" | ||||||
|  |                 :label="item.label" | ||||||
|  |               /> | ||||||
|  |             </el-select> | ||||||
|  |           </el-form-item> | ||||||
|  |           <el-form-item label="反单持仓方向" prop="positionSide"> | ||||||
|  |             <el-select v-model="queryParams.positionSide" clearable size="small"> | ||||||
|  |               <el-option | ||||||
|  |                 v-for="item in positionSideOptions" | ||||||
|  |                 :key="'query-positionSide-' + item.value" | ||||||
|  |                 :value="item.value" | ||||||
|  |                 :label="item.label" | ||||||
|  |               /> | ||||||
|  |             </el-select> | ||||||
|  |           </el-form-item> | ||||||
|  |           <el-form-item label="交易对" prop="symbol"><el-input | ||||||
|  |             v-model="queryParams.symbol" | ||||||
|  |             placeholder="请输入交易对" | ||||||
|  |             clearable | ||||||
|  |             size="small" | ||||||
|  |             @keyup.enter.native="handleQuery" | ||||||
|  |           /> | ||||||
|  |           </el-form-item> | ||||||
|  |  | ||||||
|  |           <el-form-item> | ||||||
|  |             <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> | ||||||
|  |             <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> | ||||||
|  |           </el-form-item> | ||||||
|  |         </el-form> | ||||||
|  |  | ||||||
|  |         <el-row :gutter="10" class="mb8"> | ||||||
|  |           <el-col :span="1.5"> | ||||||
|  |             <el-button | ||||||
|  |               v-permisaction="['admin:lineReversePosition:closePosition']" | ||||||
|  |               type="primary" | ||||||
|  |               icon="el-icon-s-flag" | ||||||
|  |               size="mini" | ||||||
|  |               @click="handleCloseBatches" | ||||||
|  |             >平仓 | ||||||
|  |             </el-button> | ||||||
|  |           </el-col> | ||||||
|  |  | ||||||
|  |           <!-- <el-col :span="1.5"> | ||||||
|  |             <el-button v-permisaction="['admin:lineReversePosition:add']" type="primary" icon="el-icon-plus" size="mini" | ||||||
|  |               @click="handleAdd">新增 | ||||||
|  |             </el-button> | ||||||
|  |           </el-col> | ||||||
|  |           <el-col :span="1.5"> | ||||||
|  |             <el-button v-permisaction="['admin:lineReversePosition:edit']" type="success" icon="el-icon-edit" | ||||||
|  |               size="mini" :disabled="single" @click="handleUpdate">修改 | ||||||
|  |             </el-button> | ||||||
|  |           </el-col> --> | ||||||
|  |           <el-col :span="1.5"> | ||||||
|  |             <el-button | ||||||
|  |               v-permisaction="['admin:lineReversePosition:remove']" | ||||||
|  |               type="danger" | ||||||
|  |               icon="el-icon-delete" | ||||||
|  |               size="mini" | ||||||
|  |               :disabled="multiple" | ||||||
|  |               @click="handleDelete" | ||||||
|  |             >删除 | ||||||
|  |             </el-button> | ||||||
|  |           </el-col> | ||||||
|  |           <el-col :span="1.5"> | ||||||
|  |             <el-popconfirm | ||||||
|  |               class="delete-popconfirm" | ||||||
|  |               title="确认要清除所有吗?" | ||||||
|  |               confirm-button-text="清除" | ||||||
|  |               @confirm="handleCleanPosition()" | ||||||
|  |             > | ||||||
|  |               <el-button | ||||||
|  |                 slot="reference" | ||||||
|  |                 v-permisaction="['admin:lineReversePosition:cleanAll']" | ||||||
|  |                 type="danger" | ||||||
|  |                 icon="el-icon-delete" | ||||||
|  |                 size="mini" | ||||||
|  |               >清除所有 | ||||||
|  |               </el-button> | ||||||
|  |             </el-popconfirm> | ||||||
|  |           </el-col> | ||||||
|  |         </el-row> | ||||||
|  |  | ||||||
|  |         <el-table v-loading="loading" :data="lineReversePositionList" @selection-change="handleSelectionChange"> | ||||||
|  |           <el-table-column type="selection" width="55" align="center" /> | ||||||
|  |           <el-table-column label="交易对" align="center" prop="symbol" width="120px" /> | ||||||
|  |           <el-table-column label="主单用户" align="center" prop="apiName" width="100px" /> | ||||||
|  |           <el-table-column label="反单用户" align="center" prop="reverseApiName" width="100px" /> | ||||||
|  |           <el-table-column label="主单仓位" align="center" prop="amount" :show-overflow-tooltip="true" /> | ||||||
|  |           <el-table-column label="主单总仓位" align="center" prop="totalAmount" /> | ||||||
|  |           <el-table-column label="主单持仓方向" align="center" prop="side" width="100px" /> | ||||||
|  |           <el-table-column label="反单仓位" align="center" prop="reverseAmount" :show-overflow-tooltip="true" /> | ||||||
|  |           <el-table-column label="反单总仓位" align="center" prop="totalReverseAmount" /> | ||||||
|  |           <el-table-column label="反单持仓方向" align="center" prop="positionSide" width="100px"> | ||||||
|  |             <template slot-scope="scope"> | ||||||
|  |               {{ scope.row.positionSide === 'LONG' ? '多' : '空' }} | ||||||
|  |             </template> | ||||||
|  |           </el-table-column> | ||||||
|  |           <el-table-column label="主单仓位" align="center" prop="status"> | ||||||
|  |             <template slot-scope="scope"> | ||||||
|  |               <el-tag v-if="scope.row.status === 0">正常</el-tag> | ||||||
|  |               <el-tag v-else-if="scope.row.status === 1" type="primary">开仓</el-tag> | ||||||
|  |               <el-tag v-else type="success">平仓</el-tag> | ||||||
|  |             </template> | ||||||
|  |           </el-table-column> | ||||||
|  |           <el-table-column label="反单仓位" align="center" prop="reverseStatus" width="80px"> | ||||||
|  |             <template slot-scope="scope"> | ||||||
|  |               <el-tag v-if="scope.row.reverseStatus === 0">正常</el-tag> | ||||||
|  |               <el-tag v-else-if="scope.row.reverseStatus === 1" type="primary">开仓</el-tag> | ||||||
|  |               <el-tag v-else type="success">平仓</el-tag> | ||||||
|  |             </template> | ||||||
|  |           </el-table-column> | ||||||
|  |           <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> | ||||||
|  |             <template slot-scope="scope"> | ||||||
|  |               <!-- <el-popconfirm class="delete-popconfirm" title="确认要修改吗?" confirm-button-text="修改" | ||||||
|  |                 @confirm="handleUpdate(scope.row)"> | ||||||
|  |                 <el-button slot="reference" v-permisaction="['admin:lineReversePosition:edit']" size="mini" type="text" | ||||||
|  |                   icon="el-icon-edit">修改 | ||||||
|  |                 </el-button> | ||||||
|  |               </el-popconfirm> --> | ||||||
|  |               <el-popconfirm | ||||||
|  |                 class="delete-popconfirm" | ||||||
|  |                 title="确认要删除吗?" | ||||||
|  |                 confirm-button-text="删除" | ||||||
|  |                 @confirm="handleDelete(scope.row)" | ||||||
|  |               > | ||||||
|  |                 <el-button | ||||||
|  |                   slot="reference" | ||||||
|  |                   v-permisaction="['admin:lineReversePosition:remove']" | ||||||
|  |                   size="mini" | ||||||
|  |                   type="text" | ||||||
|  |                   icon="el-icon-delete" | ||||||
|  |                 >删除 | ||||||
|  |                 </el-button> | ||||||
|  |               </el-popconfirm> | ||||||
|  |               <el-popconfirm | ||||||
|  |                 class="delete-popconfirm" | ||||||
|  |                 title="确认要平仓吗?" | ||||||
|  |                 confirm-button-text="平仓" | ||||||
|  |                 @confirm="handleClosePosition(scope.row)" | ||||||
|  |               > | ||||||
|  |                 <el-button | ||||||
|  |                   v-if="scope.row.reverseStatus === 1" | ||||||
|  |                   slot="reference" | ||||||
|  |                   v-permisaction="['admin:lineReversePosition:closePosition']" | ||||||
|  |                   size="mini" | ||||||
|  |                   type="text" | ||||||
|  |                   icon="el-icon-s-flag" | ||||||
|  |                 >平仓 | ||||||
|  |                 </el-button> | ||||||
|  |               </el-popconfirm> | ||||||
|  |  | ||||||
|  |               <el-button | ||||||
|  |                 v-permisaction="['admin:lineReversePosition:edit']" | ||||||
|  |                 size="mini" | ||||||
|  |                 type="text" | ||||||
|  |                 icon="el-icon-s-order" | ||||||
|  |                 @click="handleShowOrders(scope.row)" | ||||||
|  |               >订单明细 | ||||||
|  |               </el-button> | ||||||
|  |             </template> | ||||||
|  |           </el-table-column> | ||||||
|  |         </el-table> | ||||||
|  |  | ||||||
|  |         <pagination | ||||||
|  |           v-show="total > 0" | ||||||
|  |           :total="total" | ||||||
|  |           :page.sync="queryParams.pageIndex" | ||||||
|  |           :limit.sync="queryParams.pageSize" | ||||||
|  |           @pagination="getList" | ||||||
|  |         /> | ||||||
|  |  | ||||||
|  |         <!--仓位详情--> | ||||||
|  |         <detail :open.sync="open" :title="title" :form="form" :is-edit="isEdit" @close="handleClose" /> | ||||||
|  |         <!--仓位订单明细--> | ||||||
|  |         <order-list :show.sync="showOrders" :position-id="selectedPositionId" /> | ||||||
|  |         <!--平仓操作--> | ||||||
|  |         <close-position :open.sync="showClosePosition" /> | ||||||
|  |       </el-card> | ||||||
|  |     </template> | ||||||
|  |   </BasicLayout> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { delLineReversePosition, listLineReversePosition, getLineReversePosition, closePosition, cleanAllPosition } from '@/api/admin/line-reverse-position' | ||||||
|  | import Detail from './detail.vue' | ||||||
|  | import OrderList from './order-list.vue' | ||||||
|  | import ClosePosition from './close-position.vue' | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   name: 'LineReversePosition', | ||||||
|  |   components: { | ||||||
|  |     Detail, | ||||||
|  |     OrderList, | ||||||
|  |     ClosePosition | ||||||
|  |   }, | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       // 遮罩层 | ||||||
|  |       loading: true, | ||||||
|  |       // 选中数组 | ||||||
|  |       ids: [], | ||||||
|  |       // 非单个禁用 | ||||||
|  |       single: true, | ||||||
|  |       // 非多个禁用 | ||||||
|  |       multiple: true, | ||||||
|  |       // 总条数 | ||||||
|  |       total: 0, | ||||||
|  |       // 弹出层标题 | ||||||
|  |       title: '', | ||||||
|  |       // 是否显示弹出层 | ||||||
|  |       open: false, | ||||||
|  |       isEdit: false, | ||||||
|  |       // 类型数据字典 | ||||||
|  |       typeOptions: [], | ||||||
|  |       lineReversePositionList: [], | ||||||
|  |       positionSideOptions: [{ | ||||||
|  |         label: '多', | ||||||
|  |         value: 'LONG' | ||||||
|  |       }, { | ||||||
|  |         label: '空', | ||||||
|  |         value: 'SHORT' | ||||||
|  |       }], | ||||||
|  |       sideOptions: [{ | ||||||
|  |         label: '买', | ||||||
|  |         value: 'BUY' | ||||||
|  |       }, { | ||||||
|  |         label: '卖', | ||||||
|  |         value: 'SELL' | ||||||
|  |       }], | ||||||
|  |       // 关系表类型 | ||||||
|  |  | ||||||
|  |       // 查询参数 | ||||||
|  |       queryParams: { | ||||||
|  |         pageIndex: 1, | ||||||
|  |         pageSize: 10, | ||||||
|  |         apiId: undefined, | ||||||
|  |         reverseApiId: undefined, | ||||||
|  |         side: undefined, | ||||||
|  |         positionSide: undefined, | ||||||
|  |         symbol: undefined, | ||||||
|  |         idOrder: 'desc' | ||||||
|  |       }, | ||||||
|  |       // 表单参数 | ||||||
|  |       form: { | ||||||
|  |       }, | ||||||
|  |  | ||||||
|  |       showOrders: false, | ||||||
|  |       selectedPositionId: null, | ||||||
|  |  | ||||||
|  |       showClosePosition: false | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   created() { | ||||||
|  |     this.getList() | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     /** 查询参数列表 */ | ||||||
|  |     getList() { | ||||||
|  |       this.loading = true | ||||||
|  |       listLineReversePosition(this.addDateRange(this.queryParams, this.dateRange)).then(response => { | ||||||
|  |         this.lineReversePositionList = response.data.list | ||||||
|  |         this.total = response.data.count | ||||||
|  |         this.loading = false | ||||||
|  |       } | ||||||
|  |       ) | ||||||
|  |     }, | ||||||
|  |     getImgList: function() { | ||||||
|  |       this.form[this.fileIndex] = this.$refs['fileChoose'].resultList[0].fullUrl | ||||||
|  |     }, | ||||||
|  |     fileClose: function() { | ||||||
|  |       this.fileOpen = false | ||||||
|  |     }, | ||||||
|  |     // 关系 | ||||||
|  |     // 文件 | ||||||
|  |     /** 搜索按钮操作 */ | ||||||
|  |     handleQuery() { | ||||||
|  |       this.queryParams.pageIndex = 1 | ||||||
|  |       this.getList() | ||||||
|  |     }, | ||||||
|  |     /** 重置按钮操作 */ | ||||||
|  |     resetQuery() { | ||||||
|  |       this.dateRange = [] | ||||||
|  |       this.resetForm('queryForm') | ||||||
|  |       this.handleQuery() | ||||||
|  |     }, | ||||||
|  |     /** 新增按钮操作 */ | ||||||
|  |     handleAdd() { | ||||||
|  |       this.reset() | ||||||
|  |       this.open = true | ||||||
|  |       this.title = '添加反单管理-仓位' | ||||||
|  |       this.isEdit = false | ||||||
|  |     }, | ||||||
|  |     // 多选框选中数据 | ||||||
|  |     handleSelectionChange(selection) { | ||||||
|  |       this.ids = selection.map(item => item.id) | ||||||
|  |       this.single = selection.length !== 1 | ||||||
|  |       this.multiple = !selection.length | ||||||
|  |     }, | ||||||
|  |     /** 修改按钮操作 */ | ||||||
|  |     handleUpdate(row) { | ||||||
|  |       this.reset() | ||||||
|  |       const id = | ||||||
|  |         row.id || this.ids | ||||||
|  |       getLineReversePosition(id).then(response => { | ||||||
|  |         this.form = response.data | ||||||
|  |         this.open = true | ||||||
|  |         this.title = '修改反单管理-仓位' | ||||||
|  |         this.isEdit = true | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     handleClose() { | ||||||
|  |       this.getList() | ||||||
|  |     }, | ||||||
|  |     /** 删除按钮操作 */ | ||||||
|  |     handleDelete(row) { | ||||||
|  |       var Ids = (row.id && [row.id]) || this.ids | ||||||
|  |  | ||||||
|  |       this.$confirm('是否确认删除编号为"' + Ids + '"的数据项?', '警告', { | ||||||
|  |         confirmButtonText: '确定', | ||||||
|  |         cancelButtonText: '取消', | ||||||
|  |         type: 'warning' | ||||||
|  |       }).then(function() { | ||||||
|  |         return delLineReversePosition({ 'ids': Ids }) | ||||||
|  |       }).then((response) => { | ||||||
|  |         if (response.code === 200) { | ||||||
|  |           this.msgSuccess(response.msg) | ||||||
|  |           this.open = false | ||||||
|  |           this.getList() | ||||||
|  |         } else { | ||||||
|  |           this.msgError(response.msg) | ||||||
|  |         } | ||||||
|  |       }).catch(function() { | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     // 仓位订单明细 | ||||||
|  |     handleShowOrders(row) { | ||||||
|  |       this.showOrders = true | ||||||
|  |       this.selectedPositionId = row.id | ||||||
|  |     }, | ||||||
|  |     // 批量平仓 | ||||||
|  |     handleCloseBatches() { | ||||||
|  |       this.showClosePosition = true | ||||||
|  |     }, | ||||||
|  |     // 平仓 | ||||||
|  |     handleClosePosition(row) { | ||||||
|  |       this.loading = true | ||||||
|  |       const data = { | ||||||
|  |         id: Number(row.id) | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       closePosition(data).then(response => { | ||||||
|  |         if (response.code === 200) { | ||||||
|  |           this.msgSuccess(response.msg) | ||||||
|  |         } else { | ||||||
|  |           this.msgError(response.msg) | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |         .catch(error => { | ||||||
|  |           console.log(error) | ||||||
|  |         }) | ||||||
|  |         .finally(() => { | ||||||
|  |           this.loading = false | ||||||
|  |           this.getList() | ||||||
|  |         }) | ||||||
|  |     }, | ||||||
|  |     // 清除所有仓位 | ||||||
|  |     handleCleanPosition() { | ||||||
|  |       cleanAllPosition().then(res => { | ||||||
|  |         this.loading = true | ||||||
|  |         if (res.code === 200) { | ||||||
|  |           this.msgSuccess(res.msg) | ||||||
|  |           this.getList() | ||||||
|  |         } else { | ||||||
|  |           this.msgError(res.msg) | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |         .catch(err => { | ||||||
|  |           console.log('err', err) | ||||||
|  |         }) | ||||||
|  |         .finally(() => { | ||||||
|  |           this.loading = false | ||||||
|  |         }) | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </script> | ||||||
							
								
								
									
										282
									
								
								src/views/admin/line-reverse-position/order-list.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										282
									
								
								src/views/admin/line-reverse-position/order-list.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,282 @@ | |||||||
|  | <template> | ||||||
|  |   <el-drawer title="仓位订单明细" :visible.sync="show" direction="rtl" size="80%" @open="handleOpen" @close="handleClose"> | ||||||
|  |     <el-form ref="queryForm" :model="queryParams" :inline="true" label-width="68px"> | ||||||
|  |       <el-form-item label="类别" prop="category"> | ||||||
|  |         <el-select v-model="queryParams.category" clearable> | ||||||
|  |           <el-option | ||||||
|  |             v-for="item in categoryOptions" | ||||||
|  |             :key="'query-category' + item.value" | ||||||
|  |             :label="item.label" | ||||||
|  |             :value="item.value" | ||||||
|  |           /> | ||||||
|  |         </el-select> | ||||||
|  |       </el-form-item> | ||||||
|  |       <el-form-item label="下单类型" prop="type"> | ||||||
|  |         <el-select v-model="queryParams.type" clearable> | ||||||
|  |           <el-option | ||||||
|  |             v-for="item in typeOptions" | ||||||
|  |             :key="'query-type' + item.value" | ||||||
|  |             :label="item.label" | ||||||
|  |             :value="item.value" | ||||||
|  |           /> | ||||||
|  |         </el-select> | ||||||
|  |       </el-form-item> | ||||||
|  |       <el-form-item label="订单类型" prop="orderType"> | ||||||
|  |         <el-select v-model="queryParams.orderType" clearable> | ||||||
|  |           <el-option | ||||||
|  |             v-for="item in orderTypeOptions" | ||||||
|  |             :key="'query-orderType' + item.value" | ||||||
|  |             :label="item.label" | ||||||
|  |             :value="item.value" | ||||||
|  |           /> | ||||||
|  |         </el-select> | ||||||
|  |       </el-form-item> | ||||||
|  |       <el-form-item label="状态" prop="status"> | ||||||
|  |         <el-select v-model="queryParams.status" clearable> | ||||||
|  |           <el-option | ||||||
|  |             v-for="item in statusOptions" | ||||||
|  |             :key="'query-status' + item.value" | ||||||
|  |             :label="item.label" | ||||||
|  |             :value="item.value" | ||||||
|  |           /> | ||||||
|  |         </el-select> | ||||||
|  |       </el-form-item> | ||||||
|  |  | ||||||
|  |       <el-form-item> | ||||||
|  |         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> | ||||||
|  |         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> | ||||||
|  |       </el-form-item> | ||||||
|  |     </el-form> | ||||||
|  |  | ||||||
|  |     <el-table v-loading="loading" :data="lineReverseOrderList" :row-class-name="tableRowClassName"> | ||||||
|  |       <el-table-column type="selection" width="55" align="center" /> | ||||||
|  |       <el-table-column label="类别" align="center" prop="category" width="80px"> | ||||||
|  |         <template slot-scope="scope"> | ||||||
|  |           {{ categoryFormat(scope) }} | ||||||
|  |         </template> | ||||||
|  |       </el-table-column> | ||||||
|  |       <el-table-column label="订单号" align="center" prop="orderSn" :show-overflow-tooltip="true" /> | ||||||
|  |       <el-table-column label="币安订单号" align="center" prop="orderId" :show-overflow-tooltip="true" /> | ||||||
|  |       <el-table-column label="交易对" align="center" prop="symbol" :show-overflow-tooltip="true" /> | ||||||
|  |       <el-table-column label="下单类型" align="center" prop="type"> | ||||||
|  |         <template slot-scope="scope"> | ||||||
|  |           {{ typeFormat(scope) }} | ||||||
|  |         </template> | ||||||
|  |       </el-table-column> | ||||||
|  |       <el-table-column label="订单类型" align="center" prop="orderType"> | ||||||
|  |         <template slot-scope="scope"> | ||||||
|  |           {{ orderTypeFormat(scope) }} | ||||||
|  |         </template> | ||||||
|  |       </el-table-column> | ||||||
|  |       <el-table-column label="购买金额" align="center" prop="buyPrice" :show-overflow-tooltip="true" /> | ||||||
|  |       <el-table-column label="委托价格" align="center" prop="price" :show-overflow-tooltip="true" /> | ||||||
|  |       <el-table-column label="实际成交价" align="center" prop="finalPrice" :show-overflow-tooltip="true" /> | ||||||
|  |       <el-table-column label="成交数量" align="center" prop="totalNum" :show-overflow-tooltip="true" /> | ||||||
|  |       <el-table-column label="持仓方向" align="center" prop="positionSide"> | ||||||
|  |         <template slot-scope="scope"> | ||||||
|  |           <el-tag v-if="scope.row.positionSide === 'LONG'" type="warning" effect="plain">多</el-tag> | ||||||
|  |           <el-tag v-else type="success" effect="plain">空</el-tag> | ||||||
|  |         </template> | ||||||
|  |       </el-table-column> | ||||||
|  |       <el-table-column label="买卖方向" align="center" prop="side" :show-overflow-tooltip="true" /> | ||||||
|  |       <el-table-column label="触发时间" align="center" prop="triggerTime"> | ||||||
|  |         <template slot-scope="scope"> | ||||||
|  |           <span>{{ parseTime(scope.row.triggerTime) }}</span> | ||||||
|  |         </template> | ||||||
|  |       </el-table-column><el-table-column label="状态" align="center" prop="status"> | ||||||
|  |         <template slot-scope="scope"> | ||||||
|  |           {{ statusFormat(scope) }} | ||||||
|  |         </template> | ||||||
|  |       </el-table-column> | ||||||
|  |       <el-table-column label="描述" align="center" prop="remark" :show-overflow-tooltip="true" /> | ||||||
|  |     </el-table> | ||||||
|  |     <pagination | ||||||
|  |       v-show="total > 0" | ||||||
|  |       :total="total" | ||||||
|  |       :page.sync="queryParams.pageIndex" | ||||||
|  |       :limit.sync="queryParams.pageSize" | ||||||
|  |       @pagination="getList" | ||||||
|  |     /> | ||||||
|  |  | ||||||
|  |   </el-drawer> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { listLineReverseOrder } from '@/api/admin/line-reverse-order' | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   name: 'OrderList', | ||||||
|  |   props: { | ||||||
|  |     show: { | ||||||
|  |       type: Boolean, | ||||||
|  |       default: false | ||||||
|  |     }, | ||||||
|  |     positionId: { | ||||||
|  |       type: Number, | ||||||
|  |       default: null | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |   }, | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       categoryOptions: [{ | ||||||
|  |         value: 0, | ||||||
|  |         label: '主单' | ||||||
|  |       }, { | ||||||
|  |         value: 1, | ||||||
|  |         label: '反单' | ||||||
|  |       }], | ||||||
|  |       typeOptions: [{ | ||||||
|  |         value: 'LIMIT', | ||||||
|  |         label: '限价' | ||||||
|  |       }, { | ||||||
|  |         value: 'MARKET', | ||||||
|  |         label: '市价' | ||||||
|  |       }, { | ||||||
|  |         value: 'STOP', | ||||||
|  |         label: '限价止损' | ||||||
|  |       }, { | ||||||
|  |         value: 'TAKE_PROFIT', | ||||||
|  |         label: '限价止盈' | ||||||
|  |       }, { | ||||||
|  |         value: 'STOP_MARKET', | ||||||
|  |         label: '市价止损' | ||||||
|  |       }, { | ||||||
|  |         value: 'TAKE_PROFIT_MARKET', | ||||||
|  |         label: '市价止盈' | ||||||
|  |       }, { | ||||||
|  |         value: 'LIQUIDATION', | ||||||
|  |         label: '爆仓' | ||||||
|  |       }], | ||||||
|  |       positionSideOptions: [{ | ||||||
|  |         value: 'LONG', | ||||||
|  |         label: '多' | ||||||
|  |       }, { | ||||||
|  |         value: 'SHORT', | ||||||
|  |         label: '空' | ||||||
|  |       }], | ||||||
|  |       sideOptions: [{ | ||||||
|  |         value: 'SELL', | ||||||
|  |         label: '卖' | ||||||
|  |       }, { | ||||||
|  |         value: 'BUY', | ||||||
|  |         label: '买' | ||||||
|  |       }], | ||||||
|  |       orderTypeOptions: [{ | ||||||
|  |         value: 0, | ||||||
|  |         label: '主单' | ||||||
|  |       }, { | ||||||
|  |         value: 1, | ||||||
|  |         label: '止盈单' | ||||||
|  |       }, { | ||||||
|  |         value: 2, | ||||||
|  |         label: '止损单' | ||||||
|  |       }, { | ||||||
|  |         value: 3, | ||||||
|  |         label: '减仓单' | ||||||
|  |       }, { | ||||||
|  |         value: 4, | ||||||
|  |         label: '平仓单' | ||||||
|  |       }], | ||||||
|  |  | ||||||
|  |       statusOptions: [{ | ||||||
|  |         value: 1, | ||||||
|  |         label: '待下单' | ||||||
|  |       }, { | ||||||
|  |         value: 2, | ||||||
|  |         label: '已下单' | ||||||
|  |       }, { | ||||||
|  |         value: 3, | ||||||
|  |         label: '已成交' | ||||||
|  |       }, { | ||||||
|  |         value: 6, | ||||||
|  |         label: '已取消' | ||||||
|  |       }, { | ||||||
|  |         value: 7, | ||||||
|  |         label: '已过期' | ||||||
|  |       }, { | ||||||
|  |         value: 8, | ||||||
|  |         label: '已失败' | ||||||
|  |       }], | ||||||
|  |       queryParams: { | ||||||
|  |         pageIndex: 1, | ||||||
|  |         pageSize: 10, | ||||||
|  |         category: undefined, | ||||||
|  |         type: undefined, | ||||||
|  |         orderType: undefined, | ||||||
|  |         status: undefined, | ||||||
|  |         idOrder: 'desc' | ||||||
|  |       }, | ||||||
|  |       total: 0, | ||||||
|  |       loading: false, | ||||||
|  |       lineReverseOrderList: [] | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     categoryFormat(scope) { | ||||||
|  |       const category = this.categoryOptions.find(item => item.value === scope.row.category) | ||||||
|  |       return category ? category.label : '' | ||||||
|  |     }, | ||||||
|  |     typeFormat(scope) { | ||||||
|  |       const type = this.typeOptions.find(item => item.value === scope.row.type) | ||||||
|  |       return type ? type.label : '' | ||||||
|  |     }, | ||||||
|  |     statusFormat(scope) { | ||||||
|  |       const status = this.statusOptions.find(item => item.value === scope.row.status) | ||||||
|  |       return status ? status.label : '' | ||||||
|  |     }, | ||||||
|  |     orderTypeFormat(scope) { | ||||||
|  |       const orderType = this.orderTypeOptions.find(item => item.value === scope.row.orderType) | ||||||
|  |       return orderType ? orderType.label : '' | ||||||
|  |     }, | ||||||
|  |     handleOpen() { | ||||||
|  |       this.lineReverseOrderList = [] | ||||||
|  |  | ||||||
|  |       this.getList() | ||||||
|  |     }, | ||||||
|  |     handleClose() { | ||||||
|  |       this.$emit('update:show', false) | ||||||
|  |     }, | ||||||
|  |     /** 搜索按钮操作 */ | ||||||
|  |     handleQuery() { | ||||||
|  |       this.queryParams.pageIndex = 1 | ||||||
|  |       this.getList() | ||||||
|  |     }, | ||||||
|  |     /** 重置按钮操作 */ | ||||||
|  |     resetQuery() { | ||||||
|  |       this.resetForm('queryForm') | ||||||
|  |       this.handleQuery() | ||||||
|  |     }, | ||||||
|  |     /** 查询参数列表 */ | ||||||
|  |     getList() { | ||||||
|  |       this.loading = true | ||||||
|  |       const queryData = { positionId: this.positionId, ...this.queryParams } | ||||||
|  |       console.log('queryData', queryData) | ||||||
|  |       if (queryData.category === undefined || queryData.category === null || queryData.category === '') { | ||||||
|  |         queryData.category = -1 | ||||||
|  |       } else { | ||||||
|  |         queryData.category = Number(queryData.category) | ||||||
|  |       } | ||||||
|  |       listLineReverseOrder(this.addDateRange(queryData, this.dateRange)).then(response => { | ||||||
|  |         this.lineReverseOrderList = response.data.list | ||||||
|  |         this.total = response.data.count | ||||||
|  |         this.loading = false | ||||||
|  |       } | ||||||
|  |       ) | ||||||
|  |     }, | ||||||
|  |     tableRowClassName({ row, rowIndex }) { | ||||||
|  |       if (row.category === 0) { | ||||||
|  |         return 'main-order' | ||||||
|  |       } | ||||||
|  |  | ||||||
|  |       return '' | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped> | ||||||
|  | ::v-deep .el-table__body tr.main-order { | ||||||
|  |     background-color: oldlace !important; | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										273
									
								
								src/views/admin/line-reverse-setting/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										273
									
								
								src/views/admin/line-reverse-setting/index.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,273 @@ | |||||||
|  |  | ||||||
|  | <template> | ||||||
|  |   <BasicLayout> | ||||||
|  |     <template #wrapper> | ||||||
|  |       <el-card class="box-card"> | ||||||
|  |         <el-table v-loading="loading" :data="lineReverseSettingList" @selection-change="handleSelectionChange"> | ||||||
|  |           <el-table-column type="selection" width="55" align="center" /><el-table-column | ||||||
|  |             label="反单下单类型" | ||||||
|  |             align="center" | ||||||
|  |             prop="reverseOrderType" | ||||||
|  |             :show-overflow-tooltip="true" | ||||||
|  |           > | ||||||
|  |             <template slot-scope="scope">{{ reverseOrderTypeFormat(scope.row.reverseOrderType) }}</template> | ||||||
|  |           </el-table-column> | ||||||
|  |           <el-table-column | ||||||
|  |             label="溢价百分比" | ||||||
|  |             align="center" | ||||||
|  |             prop="reversePremiumRatio" | ||||||
|  |             :show-overflow-tooltip="true" | ||||||
|  |           > | ||||||
|  |             <template slot-scope="scope">{{ scope.row.reverseOrderType==='LIMIT'? scope.row.reversePremiumRatio :"-" }}</template> | ||||||
|  |           </el-table-column> | ||||||
|  |           <el-table-column label="止损百分比" align="center" prop="stopLossRatio" /> | ||||||
|  |           <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> | ||||||
|  |             <template slot-scope="scope"> | ||||||
|  |               <el-popconfirm | ||||||
|  |                 class="delete-popconfirm" | ||||||
|  |                 title="确认要修改吗?" | ||||||
|  |                 confirm-button-text="修改" | ||||||
|  |                 @confirm="handleUpdate(scope.row)" | ||||||
|  |               > | ||||||
|  |                 <el-button | ||||||
|  |                   slot="reference" | ||||||
|  |                   v-permisaction="['admin:lineReverseSetting:edit']" | ||||||
|  |                   size="mini" | ||||||
|  |                   type="text" | ||||||
|  |                   icon="el-icon-edit" | ||||||
|  |                 >修改 | ||||||
|  |                 </el-button> | ||||||
|  |               </el-popconfirm> | ||||||
|  |             </template> | ||||||
|  |           </el-table-column> | ||||||
|  |         </el-table> | ||||||
|  |  | ||||||
|  |         <pagination | ||||||
|  |           v-show="total>0" | ||||||
|  |           :total="total" | ||||||
|  |           :page.sync="queryParams.pageIndex" | ||||||
|  |           :limit.sync="queryParams.pageSize" | ||||||
|  |           @pagination="getList" | ||||||
|  |         /> | ||||||
|  |  | ||||||
|  |         <!-- 添加或修改对话框 --> | ||||||
|  |         <el-dialog :title="title" :visible.sync="open" width="500px"> | ||||||
|  |           <el-form ref="form" :model="form" :rules="rules" label-width="100px"> | ||||||
|  |  | ||||||
|  |             <el-form-item label="下单类型" prop="reverseOrderType"> | ||||||
|  |               <el-radio-group v-model="form.reverseOrderType"> | ||||||
|  |                 <el-radio | ||||||
|  |                   v-for="dict in reverseOrderTypeOptions" | ||||||
|  |                   :key="dict.value" | ||||||
|  |                   :label="dict.value" | ||||||
|  |                 >{{ dict.label }}</el-radio> | ||||||
|  |               </el-radio-group> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item v-if="form.reverseOrderType==='LIMIT'" label="溢价百分比" prop="reversePremiumRatio"> | ||||||
|  |               <el-input | ||||||
|  |                 v-model="form.reversePremiumRatio" | ||||||
|  |                 placeholder="溢价百分比" | ||||||
|  |               /> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item label="止损百分比" prop="stopLossRatio"> | ||||||
|  |               <el-input v-model="form.stopLossRatio" 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> | ||||||
|  |         </el-dialog> | ||||||
|  |       </el-card> | ||||||
|  |     </template> | ||||||
|  |   </BasicLayout> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  | import { addLineReverseSetting, delLineReverseSetting, getLineReverseSetting, listLineReverseSetting, updateLineReverseSetting } from '@/api/admin/line-reverse-setting' | ||||||
|  |  | ||||||
|  | export default { | ||||||
|  |   name: 'LineReverseSetting', | ||||||
|  |   components: { | ||||||
|  |   }, | ||||||
|  |   data() { | ||||||
|  |     return { | ||||||
|  |       // 遮罩层 | ||||||
|  |       loading: true, | ||||||
|  |       // 选中数组 | ||||||
|  |       ids: [], | ||||||
|  |       // 非单个禁用 | ||||||
|  |       single: true, | ||||||
|  |       // 非多个禁用 | ||||||
|  |       multiple: true, | ||||||
|  |       // 总条数 | ||||||
|  |       total: 0, | ||||||
|  |       // 弹出层标题 | ||||||
|  |       title: '', | ||||||
|  |       // 是否显示弹出层 | ||||||
|  |       open: false, | ||||||
|  |       isEdit: false, | ||||||
|  |       // 类型数据字典 | ||||||
|  |       reverseOrderTypeOptions: [{ | ||||||
|  |         label: '限价', | ||||||
|  |         value: 'LIMIT' | ||||||
|  |       }, { | ||||||
|  |         label: '市价', | ||||||
|  |         value: 'MARKET' | ||||||
|  |       }], | ||||||
|  |       lineReverseSettingList: [], | ||||||
|  |  | ||||||
|  |       // 关系表类型 | ||||||
|  |  | ||||||
|  |       // 查询参数 | ||||||
|  |       queryParams: { | ||||||
|  |         pageIndex: 1, | ||||||
|  |         pageSize: 10 | ||||||
|  |  | ||||||
|  |       }, | ||||||
|  |       // 表单参数 | ||||||
|  |       form: { | ||||||
|  |       }, | ||||||
|  |       // 表单校验 | ||||||
|  |       rules: { | ||||||
|  |         reverseOrderType: [ | ||||||
|  |           { required: true, message: '请选择下单类型', trigger: 'blur' } | ||||||
|  |         ], | ||||||
|  |         reversePremiumRatio: [ | ||||||
|  |           { required: true, message: '请输入溢价百分比', trigger: 'blur' } | ||||||
|  |         ] | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   created() { | ||||||
|  |     this.getList() | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     /** 查询参数列表 */ | ||||||
|  |     getList() { | ||||||
|  |       this.loading = true | ||||||
|  |       listLineReverseSetting(this.addDateRange(this.queryParams, this.dateRange)).then(response => { | ||||||
|  |         this.lineReverseSettingList = response.data.list | ||||||
|  |         this.total = response.data.count | ||||||
|  |         this.loading = false | ||||||
|  |       } | ||||||
|  |       ) | ||||||
|  |     }, | ||||||
|  |     // 取消按钮 | ||||||
|  |     cancel() { | ||||||
|  |       this.open = false | ||||||
|  |       this.reset() | ||||||
|  |     }, | ||||||
|  |     // 表单重置 | ||||||
|  |     reset() { | ||||||
|  |       this.form = { | ||||||
|  |  | ||||||
|  |         id: undefined, | ||||||
|  |         reverseOrderType: undefined, | ||||||
|  |         reversePremiumRatio: undefined | ||||||
|  |       } | ||||||
|  |       this.resetForm('form') | ||||||
|  |     }, | ||||||
|  |     getImgList: function() { | ||||||
|  |       this.form[this.fileIndex] = this.$refs['fileChoose'].resultList[0].fullUrl | ||||||
|  |     }, | ||||||
|  |     reverseOrderTypeFormat(data) { | ||||||
|  |       const orderType = this.reverseOrderTypeOptions.find(item => item.value === data) | ||||||
|  |  | ||||||
|  |       return orderType ? orderType.label : '' | ||||||
|  |     }, | ||||||
|  |     fileClose: function() { | ||||||
|  |       this.fileOpen = false | ||||||
|  |     }, | ||||||
|  |     // 关系 | ||||||
|  |     // 文件 | ||||||
|  |     /** 搜索按钮操作 */ | ||||||
|  |     handleQuery() { | ||||||
|  |       this.queryParams.pageIndex = 1 | ||||||
|  |       this.getList() | ||||||
|  |     }, | ||||||
|  |     /** 重置按钮操作 */ | ||||||
|  |     resetQuery() { | ||||||
|  |       this.dateRange = [] | ||||||
|  |       this.resetForm('queryForm') | ||||||
|  |       this.handleQuery() | ||||||
|  |     }, | ||||||
|  |     /** 新增按钮操作 */ | ||||||
|  |     handleAdd() { | ||||||
|  |       this.reset() | ||||||
|  |       this.open = true | ||||||
|  |       this.title = '添加反单下单配置' | ||||||
|  |       this.isEdit = false | ||||||
|  |     }, | ||||||
|  |     // 多选框选中数据 | ||||||
|  |     handleSelectionChange(selection) { | ||||||
|  |       this.ids = selection.map(item => item.id) | ||||||
|  |       this.single = selection.length !== 1 | ||||||
|  |       this.multiple = !selection.length | ||||||
|  |     }, | ||||||
|  |     /** 修改按钮操作 */ | ||||||
|  |     handleUpdate(row) { | ||||||
|  |       this.reset() | ||||||
|  |       const id = | ||||||
|  |                 row.id || this.ids | ||||||
|  |       getLineReverseSetting(id).then(response => { | ||||||
|  |         this.form = response.data | ||||||
|  |         this.open = true | ||||||
|  |         this.title = '修改反单下单配置' | ||||||
|  |         this.isEdit = true | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     /** 提交按钮 */ | ||||||
|  |     submitForm: function() { | ||||||
|  |       this.$refs['form'].validate(valid => { | ||||||
|  |         if (valid) { | ||||||
|  |           this.form.stopLossRatio = this.form.stopLossRatio ? Number(this.form.stopLossRatio) : undefined | ||||||
|  |  | ||||||
|  |           if (this.form.id !== undefined) { | ||||||
|  |             updateLineReverseSetting(this.form).then(response => { | ||||||
|  |               if (response.code === 200) { | ||||||
|  |                 this.msgSuccess(response.msg) | ||||||
|  |                 this.open = false | ||||||
|  |                 this.getList() | ||||||
|  |               } else { | ||||||
|  |                 this.msgError(response.msg) | ||||||
|  |               } | ||||||
|  |             }) | ||||||
|  |           } else { | ||||||
|  |             addLineReverseSetting(this.form).then(response => { | ||||||
|  |               if (response.code === 200) { | ||||||
|  |                 this.msgSuccess(response.msg) | ||||||
|  |                 this.open = false | ||||||
|  |                 this.getList() | ||||||
|  |               } else { | ||||||
|  |                 this.msgError(response.msg) | ||||||
|  |               } | ||||||
|  |             }) | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       }) | ||||||
|  |     }, | ||||||
|  |     /** 删除按钮操作 */ | ||||||
|  |     handleDelete(row) { | ||||||
|  |       var Ids = (row.id && [row.id]) || this.ids | ||||||
|  |  | ||||||
|  |       this.$confirm('是否确认删除编号为"' + Ids + '"的数据项?', '警告', { | ||||||
|  |         confirmButtonText: '确定', | ||||||
|  |         cancelButtonText: '取消', | ||||||
|  |         type: 'warning' | ||||||
|  |       }).then(function() { | ||||||
|  |         return delLineReverseSetting({ 'ids': Ids }) | ||||||
|  |       }).then((response) => { | ||||||
|  |         if (response.code === 200) { | ||||||
|  |           this.msgSuccess(response.msg) | ||||||
|  |           this.open = false | ||||||
|  |           this.getList() | ||||||
|  |         } else { | ||||||
|  |           this.msgError(response.msg) | ||||||
|  |         } | ||||||
|  |       }).catch(function() { | ||||||
|  |       }) | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </script> | ||||||
		Reference in New Issue
	
	Block a user