├── .eslintrc.js ├── .gitignore ├── README.md ├── babel.config.js ├── package-lock.json ├── package.json ├── postcss.config.js ├── public ├── fonts │ ├── DINPro-Medium.ttf │ └── font.css ├── images │ ├── 01.png │ ├── 02.png │ ├── 03.png │ └── 04.png └── index.html ├── src ├── App.vue ├── common │ ├── fonts │ │ ├── stock-icon.eot │ │ ├── stock-icon.svg │ │ ├── stock-icon.ttf │ │ ├── stock-icon.woff │ │ └── stock-icon.woff2 │ ├── js │ │ ├── adaper.js │ │ ├── adapers │ │ │ ├── index.js │ │ │ └── tencent.js │ │ ├── cache.js │ │ ├── charts │ │ │ ├── f2.js │ │ │ └── index.js │ │ ├── stocks.js │ │ └── util.js │ └── scss │ │ ├── animation.scss │ │ ├── app.scss │ │ ├── icon.scss │ │ ├── mixin.scss │ │ ├── reset.scss │ │ └── variable.scss ├── components │ ├── base │ │ ├── button │ │ │ └── button.vue │ │ ├── index.js │ │ ├── list-table │ │ │ └── list-table.vue │ │ ├── list-view │ │ │ └── list-view.vue │ │ ├── loading │ │ │ ├── loading.gif │ │ │ └── loading.vue │ │ ├── no-result │ │ │ └── no-result.vue │ │ ├── scroll │ │ │ └── scroll.vue │ │ └── tabs │ │ │ └── tabs.vue │ ├── hq │ │ ├── hq-base.vue │ │ ├── hq-chart.vue │ │ └── hq-extend.vue │ ├── index.js │ ├── index │ │ └── index.vue │ ├── kline │ │ ├── kline-line.vue │ │ └── kline-tooltip.vue │ ├── loading-list │ │ └── loading-list.vue │ ├── search │ │ └── search.vue │ └── tabs │ │ ├── tab-item.vue │ │ └── tabs.vue ├── config │ ├── extends.js │ └── index.js ├── main.js ├── mixins │ └── index.js ├── pages │ ├── detail │ │ └── detail.vue │ ├── index │ │ └── index.vue │ └── search │ │ └── search.vue ├── router │ └── index.js └── stores │ ├── actions.js │ ├── getters.js │ ├── index.js │ ├── mutation-types.js │ ├── mutations.js │ └── state.js └── vue.config.js /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | node: true 5 | }, 6 | 'extends': [ 7 | 'plugin:vue/essential', 8 | 'eslint:recommended' 9 | ], 10 | rules: { 11 | 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', 12 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' 13 | }, 14 | parserOptions: { 15 | parser: 'babel-eslint' 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | # local env files 6 | .env.local 7 | .env.*.local 8 | 9 | # Log files 10 | npm-debug.log* 11 | yarn-debug.log* 12 | yarn-error.log* 13 | 14 | # Editor directories and files 15 | .idea 16 | .vscode 17 | *.suo 18 | *.ntvs* 19 | *.njsproj 20 | *.sln 21 | *.sw* 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vue-m-stock 2 | 3 | 使用Vue搭建的移动端H5行情,完成基本的行情查看,行情详情,行情自选股等功能。 4 | 5 | 注:本项目只做为本人练习使用,涉及到的三方接口只作学习,特此说明。 6 | 7 | ## 预览效果 8 | 9 | > http://120.27.24.71/hq/ 10 | 11 | ## 技术栈 12 | 13 | - vue+vue router+vuex // vue全家桶 14 | - scss // css预处理器 15 | - postcss // css后置处理器 16 | - axios // 服务端交互 17 | - antv/f2 // 图表框架 18 | - good-storage // 客户端存储框架 19 | 20 | ## 完成功能 21 | 22 | - 大盘指数概况 23 | - 指数详情 24 | - 指数排行榜 25 | - 股票搜索 26 | - 股票行情详情 27 | - 股票自选股添加(本地缓存,不依赖账户体系) 28 | - 股票分时,五日,日K图表 29 | 30 | ## 接口说明 31 | 32 | 项目所有行情数据使用腾讯接口,本项目只做学习使用,行情可根据情况适配对应的接口。 33 | 34 | 接口参考文档: 35 | 36 | - [接口文档](https://blog.csdn.net/Cupedy/article/details/53261697) 37 | - [接口文档](https://www.liangzl.com/get-article-detail-14585.html) 38 | 39 | ## 安装及运行 40 | 41 | npm install // 安装依赖包 42 | 43 | npm run serve // 本地调试 44 | 45 | npm run build // 生产打包 46 | 47 | ## todo 48 | 49 | 行情,图表数据处理代码优化 50 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/app' 4 | ], 5 | "plugins": ["@babel/plugin-transform-runtime"] 6 | } 7 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-m-stock", 3 | "version": "1.0.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve", 7 | "build:test": "cross-env ENV=test vue-cli-service build", 8 | "build": "cross-env ENV=production vue-cli-service build", 9 | "lint": "vue-cli-service lint", 10 | "dll": "webpack --mode production --config ./webpack.dll.conf.js" 11 | }, 12 | "dependencies": { 13 | "@antv/f2": "^3.5.0", 14 | "axios": "^0.18.0", 15 | "better-scroll": "^1.15.2", 16 | "good-storage": "^1.1.0", 17 | "iscroll": "^5.2.0", 18 | "qs": "^6.8.0", 19 | "vue": "^2.5.22", 20 | "vue-async-module": "^1.0.0", 21 | "vue-router": "^3.0.1", 22 | "vuex": "^3.0.1" 23 | }, 24 | "devDependencies": { 25 | "@babel/plugin-transform-runtime": "^7.6.2", 26 | "@vue/cli-plugin-babel": "^3.1.0", 27 | "@vue/cli-plugin-eslint": "^3.1.0", 28 | "@vue/cli-service": "^3.1.0", 29 | "babel-eslint": "^10.0.1", 30 | "compression-webpack-plugin": "^3.0.0", 31 | "cross-env": "^6.0.3", 32 | "eslint": "^5.8.0", 33 | "eslint-plugin-vue": "^5.0.0", 34 | "node-sass": "^4.9.0", 35 | "postcss-pxtorem": "^4.0.1", 36 | "sass-loader": "^7.1.0", 37 | "vue-template-compiler": "^2.5.21", 38 | "webpack-bundle-analyzer": "^3.6.0", 39 | "webpack-cli": "^3.3.10" 40 | }, 41 | "main": "src/main.js" 42 | } 43 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | autoprefixer: {}, 4 | "postcss-pxtorem":{ 5 | rootValue: 75, // 1rem=75px 6 | propWhiteList: [], 7 | selectorBlackList:['html'] 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /public/fonts/DINPro-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DevilsHuan/vue-m-stock/be86f795b5798ebb99098dfdb5a72c7b2cfece52/public/fonts/DINPro-Medium.ttf -------------------------------------------------------------------------------- /public/fonts/font.css: -------------------------------------------------------------------------------- 1 | @font-face{ 2 | font-family:DINPro-Medium; 3 | font-weight:400;font-style:normal; 4 | src:url('DINPro-Medium.ttf')} -------------------------------------------------------------------------------- /public/images/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DevilsHuan/vue-m-stock/be86f795b5798ebb99098dfdb5a72c7b2cfece52/public/images/01.png -------------------------------------------------------------------------------- /public/images/02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DevilsHuan/vue-m-stock/be86f795b5798ebb99098dfdb5a72c7b2cfece52/public/images/02.png -------------------------------------------------------------------------------- /public/images/03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DevilsHuan/vue-m-stock/be86f795b5798ebb99098dfdb5a72c7b2cfece52/public/images/03.png -------------------------------------------------------------------------------- /public/images/04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DevilsHuan/vue-m-stock/be86f795b5798ebb99098dfdb5a72c7b2cfece52/public/images/04.png -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Vue M Stock 7 | 8 | 9 | 10 | 13 |
14 | 15 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/common/fonts/stock-icon.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DevilsHuan/vue-m-stock/be86f795b5798ebb99098dfdb5a72c7b2cfece52/src/common/fonts/stock-icon.eot -------------------------------------------------------------------------------- /src/common/fonts/stock-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | Created by iconfont 9 | 10 | 11 | 12 | 13 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | -------------------------------------------------------------------------------- /src/common/fonts/stock-icon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DevilsHuan/vue-m-stock/be86f795b5798ebb99098dfdb5a72c7b2cfece52/src/common/fonts/stock-icon.ttf -------------------------------------------------------------------------------- /src/common/fonts/stock-icon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DevilsHuan/vue-m-stock/be86f795b5798ebb99098dfdb5a72c7b2cfece52/src/common/fonts/stock-icon.woff -------------------------------------------------------------------------------- /src/common/fonts/stock-icon.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DevilsHuan/vue-m-stock/be86f795b5798ebb99098dfdb5a72c7b2cfece52/src/common/fonts/stock-icon.woff2 -------------------------------------------------------------------------------- /src/common/js/adaper.js: -------------------------------------------------------------------------------- 1 | // 行情数据适配器 2 | import {adapers} from './adapers/' 3 | import {charts} from './charts/' 4 | import {KLINE_MAP,DEFAULT_ADAPER,DEFAULT_CHART} from '@/config/' 5 | 6 | /** 7 | * 图表 8 | * @param {*} stock 股票对象 9 | * @param {*} kineType 图表类型,参考config/index.js KLINE_MAP字典 10 | */ 11 | export function klines(stock,kineType=KLINE_MAP.Hour){ 12 | let _adaper=adapers[DEFAULT_ADAPER] 13 | let _chartAdaper=charts[DEFAULT_CHART] 14 | return new Promise((resolve,reject)=>{ 15 | _adaper.klines[kineType](stock).then((_datas)=>{ 16 | resolve(_chartAdaper.klines[kineType](stock,_datas,kineType)) 17 | }) 18 | }) 19 | } 20 | 21 | /** 22 | * 大盘涨跌概况 23 | */ 24 | export function ranks(){ 25 | let _adaper=adapers[DEFAULT_ADAPER] 26 | return _adaper.ranks() 27 | } 28 | 29 | /** 30 | * 指定股票详情行情 31 | * @param {*} code 股票代码,如sz002926 32 | */ 33 | export function hq(code){ 34 | return adapers[DEFAULT_ADAPER].hq(code) 35 | } 36 | 37 | /** 38 | * 批量简要行情 39 | * @param {*} codes 批量行情 40 | */ 41 | export function shorts(codes){ 42 | return adapers[DEFAULT_ADAPER].shorts(codes) 43 | } 44 | 45 | /** 46 | * 股票新闻/公告查询 47 | * @param {*} stock 股票对象 48 | * @param {*} noticeType 类型 49 | */ 50 | export function notices(stock,noticeType){ 51 | return adapers[DEFAULT_ADAPER].notices(stock,noticeType) 52 | } 53 | 54 | /** 55 | * 排名榜 56 | */ 57 | export function tops(params){ 58 | return adapers[DEFAULT_ADAPER].tops(params) 59 | } 60 | 61 | /** 62 | * 创建图表 63 | */ 64 | export function createKline(klineType,options={ 65 | el:null, 66 | min:null, 67 | max:null, 68 | basic:null 69 | }){ 70 | let _chartAdaper=charts[DEFAULT_CHART] 71 | return _chartAdaper.creates[klineType](options) 72 | } -------------------------------------------------------------------------------- /src/common/js/adapers/index.js: -------------------------------------------------------------------------------- 1 | import tencent from './tencent' 2 | import {ADAPERS} from '@/config/' 3 | export const adapers={ 4 | [ADAPERS.tencent]:tencent 5 | } -------------------------------------------------------------------------------- /src/common/js/adapers/tencent.js: -------------------------------------------------------------------------------- 1 | // 腾讯行情数据适配器 2 | import {format,formatDate,appendScript} from '../util' 3 | import {KLINE_MAP,INDEXS,RANKS} from '@/config/' 4 | const klines={} 5 | let _hours=["09:30","09:31","09:32","09:33","09:34","09:35","09:36","09:37","09:38","09:39","09:40","09:41","09:42","09:43","09:44","09:45","09:46","09:47","09:48","09:49","09:50","09:51","09:52","09:53","09:54","09:55","09:56","09:57","09:58","09:59","10:00","10:01","10:02","10:03","10:04","10:05","10:06","10:07","10:08","10:09","10:10","10:11","10:12","10:13","10:14","10:15","10:16","10:17","10:18","10:19","10:20","10:21","10:22","10:23","10:24","10:25","10:26","10:27","10:28","10:29","10:30","10:31","10:32","10:33","10:34","10:35","10:36","10:37","10:38","10:39","10:40","10:41","10:42","10:43","10:44","10:45","10:46","10:47","10:48","10:49","10:50","10:51","10:52","10:53","10:54","10:55","10:56","10:57","10:58","10:59","11:00","11:01","11:02","11:03","11:04","11:05","11:06","11:07","11:08","11:09","11:10","11:11","11:12","11:13","11:14","11:15","11:16","11:17","11:18","11:19","11:20","11:21","11:22","11:23","11:24","11:25","11:26","11:27","11:28","11:29","11:30","13:00","13:01","13:02","13:03","13:04","13:05","13:06","13:07","13:08","13:09","13:10","13:11","13:12","13:13","13:14","13:15","13:16","13:17","13:18","13:19","13:20","13:21","13:22","13:23","13:24","13:25","13:26","13:27","13:28","13:29","13:30","13:31","13:32","13:33","13:34","13:35","13:36","13:37","13:38","13:39","13:40","13:41","13:42","13:43","13:44","13:45","13:46","13:47","13:48","13:49","13:50","13:51","13:52","13:53","13:54","13:55","13:56","13:57","13:58","13:59","14:00","14:01","14:02","14:03","14:04","14:05","14:06","14:07","14:08","14:09","14:10","14:11","14:12","14:13","14:14","14:15","14:16","14:17","14:18","14:19","14:20","14:21","14:22","14:23","14:24","14:25","14:26","14:27","14:28","14:29","14:30","14:31","14:32","14:33","14:34","14:35","14:36","14:37","14:38","14:39","14:40","14:41","14:42","14:43","14:44","14:45","14:46","14:47","14:48","14:49","14:50","14:51","14:52","14:53","14:54","14:55","14:56","14:57","14:58","14:59","15:00"] 6 | klines[KLINE_MAP.Hour]=(stock)=>{ 7 | let _api=`http://data.gtimg.cn/flashdata/hushen/minute/${stock.prefix}${stock.code}.js?maxage=110&rnd=${Math.random()}` 8 | return new Promise((resolve,reject)=>{ 9 | appendScript(_api).then(()=>{ 10 | let _datas=window['min_data'].split('\n') 11 | let _klines=[] 12 | _datas.forEach(data=>{ 13 | // 过滤空字符串和日期 14 | if(data=="" || data.indexOf('date')!=-1){ 15 | return true 16 | } 17 | let _data=data.split(" ") 18 | let _time=_data[0].substring(0,2)+":"+_data[0].substring(2,4) 19 | _klines.push({ 20 | time:_time, 21 | price:parseFloat(_data[1]), 22 | volumn:parseInt(_data[2]), 23 | rate:((_data[1]-stock.yesterday)/stock.yesterday*100).toFixed(2) 24 | }) 25 | }) 26 | // 补充数据 27 | let _start=_klines.length 28 | for(let _index=_start;_index<_hours.length;_index++){ 29 | _klines.push({ 30 | time:_hours[_index] 31 | }) 32 | } 33 | resolve(_klines) 34 | }) 35 | }) 36 | } 37 | 38 | klines[KLINE_MAP.Five]=(stock)=>{ 39 | let _code=`${stock.prefix}${stock.code}` 40 | let _api=`http://web.ifzq.gtimg.cn/appstock/app/day/query?_var=fdays_data_${_code}&code=${_code}&r=${Math.random()}` 41 | return new Promise((resolve,reject)=>{ 42 | appendScript(_api).then(()=>{ 43 | let _datas=window[`fdays_data_${_code}`].data[_code].data 44 | let _klines=[] 45 | _datas.reverse() 46 | _datas.forEach(data=>{ 47 | let _dateData={ 48 | date:data.date.substring(0,4)+'-'+data.date.substring(4,6)+'-'+data.date.substring(6,8), 49 | list:[], 50 | prec:data.prec 51 | } 52 | let _datas=data.data 53 | _datas.forEach(_data=>{ 54 | let __data=_data.split(' ') 55 | let _time=__data[0].substring(0,2)+":"+__data[0].substring(2,4) 56 | _dateData.list.push({ 57 | time:_time, 58 | price:parseFloat(__data[1]), 59 | volumn:parseInt(__data[2]), 60 | }) 61 | }) 62 | let _start=_dateData.list.length 63 | for(let _index=_start;_index<_hours.length;_index++){ 64 | _dateData.list.push({ 65 | time:_hours[_index] 66 | }) 67 | } 68 | _klines.push(_dateData) 69 | }) 70 | resolve(_klines) 71 | }) 72 | }) 73 | } 74 | 75 | klines[KLINE_MAP.Day]=(stock)=>{ 76 | let _code=`${stock.prefix}${stock.code}` 77 | let _api=`http://web.ifzq.gtimg.cn/appstock/app/fqkline/get?_var=kline_dayqfq¶m=${_code},day,,,59,qfq&r=${Math.random()}` 78 | return new Promise((resolve,reject)=>{ 79 | appendScript(_api).then(()=>{ 80 | let _datas=window[`kline_dayqfq`].data[_code]['qfqday'] || window[`kline_dayqfq`].data[_code]['day'] 81 | let _klines=[] 82 | _datas.forEach(data=>{ 83 | _klines.push({ 84 | time:data[0], 85 | start:parseFloat(data[1]), 86 | end:parseFloat(data[2]), 87 | high:parseFloat(data[3]), 88 | low:parseFloat(data[4]), 89 | volumn:parseInt(data[5]) 90 | }) 91 | }) 92 | resolve(_klines) 93 | }) 94 | }) 95 | } 96 | 97 | // 排行 98 | const ranks=()=>{ 99 | let _data={ 100 | up:0, 101 | upRate:0.00, 102 | zero:0, 103 | down:0, 104 | downRate:0.00, 105 | total:0 106 | } 107 | let _api=`http://qt.gtimg.cn/?q=${RANKS.join(',')}&_${Math.random()}` 108 | return new Promise((resolve,reject)=>{ 109 | appendScript(_api).then(()=>{ 110 | RANKS.forEach(rank=>{ 111 | let _rank=window[`v_${rank}`] 112 | _rank=_rank.split('~') 113 | _data.up+=parseInt(_rank[2]) // 上涨 114 | _data.zero+=parseInt(_rank[3]) // 平 115 | _data.down+=parseInt(_rank[4]) // 下跌 116 | _data.total=_data.up+_data.down 117 | }) 118 | _data.upRate=format((_data.up/_data.total)*100,2) 119 | _data.downRate=format((_data.down/_data.total)*100,2) 120 | resolve(_data) 121 | }) 122 | }) 123 | } 124 | 125 | // 最新行情 126 | const hq=(code)=>{ 127 | let _api=`http://qt.gtimg.cn/q=${code}` 128 | return new Promise((resolve,reject)=>{ 129 | appendScript(_api).then(()=>{ 130 | let datas=window[`v_${code}`] 131 | let _datas=datas.split('~') 132 | let _index=INDEXS.indexOf(code)==-1?false:true 133 | let _prefix=code.substring(0,2) 134 | resolve({ 135 | n:_datas[0], 136 | index:_index, // 是否指数 137 | name:_datas[1], // 股票名称 138 | code:_datas[2], // 股票代码 139 | prefix:_prefix, 140 | now:_datas[3], // 现价 141 | yesterday:parseFloat(_datas[4]), // 昨收 142 | today:_datas[5], // 今开 143 | time:_datas[30], // 时间 144 | timeText:formatDate(_datas[30]), 145 | max:_datas[33], // 最高 146 | min:_datas[34], // 最低 147 | value:_datas[31], // 涨跌值 148 | rate:_datas[31]>=0?`+${_datas[32]}%`:`${_datas[32]}%`, // 涨跌幅 149 | rateValue:_datas[32], 150 | amplitude:`${_datas[43]}%`, // 振幅 151 | amplitudeNumber:parseFloat(_datas[43]), 152 | volumn:_index==1?format(_datas[36],0):format(_datas[36],1), // 成交量 153 | volumnValue:_index==1?format(_datas[37]*10000,0):format(_datas[37]*10000,2), // 成交额 154 | market:_datas[44], // 流通市值 155 | total:_datas[45], // 总市值 156 | turnrate:_datas[38], // 换手率 157 | marketrate:_datas[46], // 市净率 158 | perate:_datas[39] // 市盈率 159 | }) 160 | }) 161 | }) 162 | 163 | } 164 | 165 | // 行情简要 166 | const shorts=(codes)=>{ 167 | let _list=[] 168 | let _codes=[] 169 | codes.forEach(data=>{ 170 | _codes.push(`s_${data}`) 171 | }) 172 | let _api=`http://qt.gtimg.cn/q=${_codes.join(',')}` 173 | return new Promise((resolve,reject)=>{ 174 | appendScript(_api).then(()=>{ 175 | _codes.forEach(_code=>{ 176 | let datas=window[`v_${_code}`] 177 | let _datas=datas.split('~') 178 | let _prefix=_code.split('_')[1].substring(0,2) 179 | _list.push({ 180 | name:_datas[1], // 股票名称 181 | code:_datas[2], // 股票代码 182 | prefix:_prefix, 183 | now:_datas[3], // 现价 184 | value:_datas[4], // 涨跌值 185 | rate:_datas[4]>=0?`+${_datas[5]}%`:`${_datas[5]}%`, // 涨跌幅 186 | volumn:format(_datas[6]), // 成交量 187 | volumnValue:_datas[7], // 成交额 188 | total:_datas[9] // 总市值 189 | }) 190 | }) 191 | resolve(_list) 192 | }) 193 | }) 194 | 195 | } 196 | 197 | // 新闻 198 | const notices=(stock,noticeType)=>{ 199 | let _api=`http://web.ifzq.gtimg.cn/appstock/news/info/search?page=1&symbol=${stock.prefix}${stock.code}&n=51&_var=finance_notice&type=${noticeType}&_appver=1.0&_=${Math.random()}` 200 | return new Promise((resolve,reject)=>{ 201 | appendScript(_api).then(()=>{ 202 | let _list=window['finance_notice'] 203 | // 限制只取五条 204 | let _source=_list.data.data 205 | if(_source.length>5){ 206 | _source=_source.splice(0,5) 207 | } 208 | resolve(_source) 209 | }) 210 | }) 211 | } 212 | 213 | // 排行 214 | const tops=(params)=>{ 215 | let _api=`http://qt.gtimg.cn/?q=${params.type}&_=${Math.random()}` 216 | return new Promise((resolve,reject)=>{ 217 | let _list=[] 218 | appendScript(_api).then(()=>{ 219 | let _source=window[`v_${params.type}`] 220 | _source=_source.split('^') 221 | _source.forEach(s=>{ 222 | let _s=s.split('~') 223 | if(_s.length>1){ 224 | _list.push({ 225 | name:_s[0], 226 | now:_s[1], 227 | rate:_s[2], 228 | code:_s[3], 229 | prefix:_s[3].substring(0,1)=='6'?'sh':'sz' 230 | }) 231 | } 232 | }) 233 | resolve(_list) 234 | }) 235 | }) 236 | } 237 | 238 | const name="tencent" 239 | 240 | export default{ 241 | name:name, 242 | ranks:ranks, 243 | klines:klines, 244 | hq:hq, 245 | shorts:shorts, 246 | notices:notices, 247 | tops:tops 248 | } -------------------------------------------------------------------------------- /src/common/js/cache.js: -------------------------------------------------------------------------------- 1 | // 缓存 2 | import storage from 'good-storage' 3 | const __FREE_KEY__="__frees__" 4 | export function setFree(list){ 5 | storage.set(__FREE_KEY__,list) 6 | } 7 | export function getFrees(){ 8 | return storage.get(__FREE_KEY__,[]) 9 | } 10 | 11 | const __HISTORY_KEY="__history__" 12 | export function setHistory(list){ 13 | storage.set(__HISTORY_KEY,list) 14 | } 15 | export function getHistory(){ 16 | return storage.get(__HISTORY_KEY,[]) 17 | } -------------------------------------------------------------------------------- /src/common/js/charts/f2.js: -------------------------------------------------------------------------------- 1 | // f2图表数据适配 2 | import F2 from '@antv/f2' 3 | import {format} from '../util' 4 | import {KLINE_MAP,TIME_TICKS,COLOR_MAP} from '@/config/' 5 | export const klines={ 6 | [KLINE_MAP.Hour]:(stock,datas)=>{ 7 | let _kline={ 8 | list:datas, 9 | basic:null, 10 | min:null, 11 | max:null, 12 | new:null 13 | } 14 | // 处理图表需要的数据格式 15 | let _history=0 16 | let _prices=[] 17 | let _lastVolumn 18 | datas.forEach((data,index)=>{ 19 | // 涨跌标识 20 | data.trend = (data.price >= _history) ? 0 : 1 21 | if(data.volumn){ 22 | if (index > 0) { 23 | data.text = data.volumn-_lastVolumn 24 | } else { 25 | data.text = data.volumn 26 | } 27 | _lastVolumn = data.volumn 28 | } 29 | data.volumnText=format(data.text) 30 | if(data.price){ 31 | _prices.push(data.price) 32 | _kline.new=data 33 | _history=data.price 34 | } 35 | }) 36 | let _max=Math.max.apply(this,_prices) 37 | let _min=Math.min.apply(this,_prices) 38 | let _maxRate=(_max-stock.yesterday)/stock.yesterday 39 | let _minRate=(_min-stock.yesterday)/stock.yesterday 40 | if(_maxRate<0){ 41 | _maxRate*=-1 42 | } 43 | if(_minRate<0){ 44 | _minRate*=-1 45 | } 46 | let _ratevalue=Math.max.apply(this,[_maxRate,_minRate]) 47 | _kline.max=parseFloat((parseFloat(stock.yesterday)+stock.yesterday*_ratevalue).toFixed(2)) 48 | _kline.min=parseFloat((parseFloat(stock.yesterday)-stock.yesterday*_ratevalue).toFixed(2)) 49 | _kline.ticks=TIME_TICKS 50 | _kline.basic=stock.yesterday 51 | if(_kline.min==_kline.max){ 52 | let _v=stock.index==1?0.001:0.1 53 | _kline.min=(stock.yesterday-stock.yesterday*_v).toFixed(2) 54 | _kline.max=(stock.yesterday+stock.yesterday*_v).toFixed(2) 55 | } 56 | return _kline 57 | }, 58 | [KLINE_MAP.Five]:(stock,datas)=>{ 59 | let _kline={ 60 | list:datas, 61 | basic:null, 62 | min:null, 63 | max:null, 64 | new:null 65 | } 66 | // 处理图表需要的数据格式 67 | let _history=0 68 | let _prices=[] 69 | let _lastVolumn 70 | let _ticks=[] 71 | let _targets=[] 72 | datas.forEach((_datas,index)=>{ 73 | _ticks.push(_datas.date) 74 | _datas.list.forEach((data,_index)=>{ 75 | data.trend = (data.price >= _history) ? 0 : 1 76 | if(data.volumn){ 77 | if (_index > 0) { 78 | data.text = data.volumn-_lastVolumn 79 | } else { 80 | data.text = data.volumn 81 | } 82 | _lastVolumn = data.volumn 83 | } 84 | data.volumnText=format(data.text) 85 | if(data.price){ 86 | _prices.push(data.price) 87 | _kline.new=data 88 | _history=data.price 89 | } 90 | data.time=_datas.date+' '+data.time 91 | _targets.push(data) 92 | }) 93 | }) 94 | let _max=Math.max.apply(this,_prices) 95 | let _min=Math.min.apply(this,_prices) 96 | _kline.basic=parseFloat(datas[0].prec) 97 | let _maxRate=(_max-_kline.basic)/_kline.basic 98 | let _minRate=(_min-_kline.basic)/_kline.basic 99 | let _ratevalue=Math.max.apply(this,[_maxRate,_minRate]) 100 | _kline.max=(parseFloat(_kline.basic)+_kline.basic*_ratevalue).toFixed(2) 101 | _kline.min=(parseFloat(_kline.basic)-_kline.basic*_ratevalue).toFixed(2) 102 | _kline.ticks=_ticks 103 | 104 | if(_kline.min==_kline.max){ 105 | let _v=stock.index==1?0.001:0.1 106 | _kline.min=(_kline.basic-_kline.basic*_v).toFixed(2) 107 | _kline.max=(_kline.basic+_kline.basic*_v).toFixed(2) 108 | } 109 | _kline.list=_targets 110 | return _kline 111 | }, 112 | [KLINE_MAP.Day]:(stock,datas)=>{ 113 | let _kline={ 114 | list:datas 115 | } 116 | return _kline 117 | } 118 | } 119 | 120 | const LINE={ 121 | labelOffset:5, 122 | line: { 123 | stroke: '#222' 124 | }, 125 | grid: { 126 | lineWidth: 1, 127 | stroke: '#222' 128 | } 129 | } 130 | export const creates={} 131 | creates[KLINE_MAP.Hour]=creates[KLINE_MAP.Five]=(options)=>{ 132 | let data=options.data 133 | let _charts={ 134 | line:null, 135 | bar:null 136 | } 137 | let chart 138 | let _bar 139 | chart = new F2.Chart({ 140 | el:options.el, 141 | padding: [ 15,15,20,45], 142 | pixelRatio: window.devicePixelRatio 143 | }) 144 | chart.source(options.list, { 145 | time: { 146 | ticks:options.ticks 147 | }, 148 | price: { 149 | ticks:[options.min,options.max] 150 | } 151 | }) 152 | chart.axis('time',{ 153 | label(text, index, total) { 154 | const cfg = { 155 | fill: '#818991', 156 | text:text, 157 | textAlign: 'center' 158 | }; 159 | if(text=="11:30"){ 160 | cfg.text += '/13:00'; 161 | } 162 | return cfg; 163 | }, 164 | ...LINE 165 | }) 166 | chart.axis('price',{ 167 | label(text, index, total) { 168 | const cfg = { 169 | textAlign:'end', 170 | text, 171 | fill: '#818991' 172 | }; 173 | if (index === 0) { 174 | cfg.textBaseline = 'center'; 175 | } else if (index === (total - 1)) { 176 | cfg.textBaseline = 'top'; 177 | } 178 | cfg.text=parseFloat(text).toFixed(2) 179 | return cfg; 180 | }, 181 | ...LINE 182 | }) 183 | if(options.klineType==KLINE_MAP.Five){ 184 | options.ticks.forEach(tick=>{ 185 | let _tick=tick.substring(tick.indexOf('-')+1) 186 | chart.guide().text({ 187 | content:`${_tick}`, 188 | position:[`${tick} 11:30`,'min'], 189 | style: function() { 190 | const s = { 191 | textBaseline: 'bottom', 192 | fill: '#999' 193 | }; 194 | s.textAlign = 'center'; 195 | return s; 196 | }(), 197 | offsetY: 20 198 | }) 199 | }) 200 | } 201 | chart.tooltip({ 202 | alwaysShow: false, 203 | showCrosshairs: true, 204 | crosshairsType: 'xy', 205 | crosshairsStyle: { 206 | stroke: '#D1D3D4', 207 | lineWidth: 1 208 | }, 209 | custom: true, 210 | onChange(obj) { 211 | const currentPoint = { 212 | x: obj.x, 213 | y: obj.y 214 | } 215 | const data = obj.items[0].origin 216 | options.onChange && options.onChange(data) 217 | _bar.showTooltip(currentPoint) 218 | }, 219 | onHide(obj){ 220 | _bar.hideTooltip(1) 221 | options.onHide && options.onHide() 222 | } 223 | }) 224 | chart.guide().line({ 225 | start: [ 'min',options.basic], 226 | end: [ 'max', options.basic ], 227 | style: { 228 | lineDash: [8], 229 | stroke: '#728B6E' 230 | } 231 | }) 232 | chart.guide().text({ 233 | position: [ 'min', options.basic ], 234 | content: options.basic.toFixed(2), 235 | style: { 236 | fill: '#728B6E', 237 | fontSize: 10, 238 | fontWeight: 'bold', 239 | textAlign: 'end', 240 | textBaseline: 'center' 241 | }, 242 | offsetX:-5 243 | }) 244 | chart.line().position('time*price').size(1).color('rgb(6,178,235)') 245 | chart.area().position('time*price').color('rgb(6,178,235)') 246 | chart.render() 247 | _charts.line=chart 248 | 249 | _bar=new F2.Chart({ 250 | el:options.barel, 251 | padding:[ 0, 15, 0,40], 252 | pixelRatio: window.devicePixelRatio 253 | }); 254 | _bar.source(options.list) 255 | _bar.axis(false) 256 | _bar.tooltip({ 257 | alwaysShow: false, 258 | showCrosshairs: true, 259 | crosshairsStyle: { 260 | stroke: '#D1D3D4', 261 | lineWidth: 1 262 | }, 263 | showTooltipMarker: false, 264 | custom: true, 265 | onChange(obj) { 266 | const currentPoint = { 267 | x: obj.x, 268 | y: obj.y 269 | } 270 | chart.showTooltip(currentPoint) 271 | }, 272 | onHide(obj){ 273 | //chart.hideTooltip() 274 | } 275 | }) 276 | _bar.interval().position('time*text').color('trend', val => { 277 | return COLOR_MAP[val] 278 | }) 279 | _bar.render() 280 | _charts.bar=_bar 281 | return _charts 282 | } 283 | 284 | creates[KLINE_MAP.Day]=(options)=>{ 285 | // 构造数据结构 286 | const reportDates = []; 287 | options.list.forEach(function(obj) { 288 | reportDates.push(obj.time); 289 | obj.range = [ obj.start, obj.end, obj.high, obj.low ]; 290 | obj.trend = (obj.start <= obj.end) ? 0 : 1; // 0 表示涨,1 表示跌 291 | }); 292 | const chart = new F2.Chart({ 293 | id: options.el, 294 | padding: [15,15,20,45], 295 | pixelRatio: window.devicePixelRatio 296 | }); 297 | chart.source(options.list, { 298 | time: { 299 | type: 'timeCat', 300 | ticks:reportDates, 301 | values: reportDates 302 | } 303 | }); 304 | chart.axis('time', { 305 | label(text, index, total) { 306 | if(index%15==0){ 307 | const cfg = { 308 | fill: '#818991', 309 | text:text, 310 | textAlign: 'start' 311 | }; 312 | return cfg; 313 | }else{ 314 | return null 315 | } 316 | }, 317 | ...LINE 318 | }); 319 | chart.axis('range', { 320 | label(text, index, total) { 321 | const cfg = { 322 | textAlign:'end', 323 | text, 324 | fill: '#818991' 325 | }; 326 | if (index === 0) { 327 | cfg.textBaseline = 'center'; 328 | } else if (index === (total - 1)) { 329 | cfg.textBaseline = 'top'; 330 | } 331 | let _text=text.split('.') 332 | if(_text.length==2 && text.split('.')[1].length<2){ 333 | cfg.text+='0' 334 | } 335 | if(_text.length==1){ 336 | cfg.text+='.00' 337 | } 338 | return cfg; 339 | }, 340 | ...LINE 341 | }); 342 | chart.tooltip({ 343 | alwaysShow: false, 344 | showCrosshairs: true, 345 | crosshairsType: 'xy', 346 | crosshairsStyle: { 347 | stroke: '#D1D3D4', 348 | lineWidth: 1 349 | }, 350 | custom: true 351 | }) 352 | chart.schema().position('time*range') 353 | .color('trend', val => { 354 | return COLOR_MAP[val]; 355 | }).shape('candle'); 356 | chart.render() 357 | return{ 358 | line:chart 359 | } 360 | } -------------------------------------------------------------------------------- /src/common/js/charts/index.js: -------------------------------------------------------------------------------- 1 | import * as f2 from './f2' 2 | import {CHARTS} from '@/config/' 3 | export const charts={ 4 | [CHARTS.f2]:f2 5 | } -------------------------------------------------------------------------------- /src/common/js/stocks.js: -------------------------------------------------------------------------------- 1 | // 模拟数据 2 | export const stocks=[ 3 | {"code":"600010","name":"包钢股份"},{"code":"600039","name":"四川路桥"},{"code":"600048","name":"保利地产"},{"code":"600053","name":"九鼎投资"},{"code":"600061","name":"国投资本"},{"code":"600063","name":"皖维高新"},{"code":"600071","name":"凤凰光学"},{"code":"600076","name":"康欣新材"},{"code":"600077","name":"宋都股份"},{"code":"600078","name":"澄星股份"},{"code":"600079","name":"人福医药"},{"code":"600081","name":"东风科技"},{"code":"600082","name":"海泰发展"},{"code":"600090","name":"同济堂"},{"code":"600101","name":"明星电力"},{"code":"600111","name":"北方稀土"},{"code":"600113","name":"浙江东日"},{"code":"600115","name":"东方航空"},{"code":"600120","name":"浙江东方"},{"code":"600146","name":"商赢环球"},{"code":"600151","name":"航天机电"},{"code":"600156","name":"华升股份"},{"code":"600160","name":"巨化股份"},{"code":"600161","name":"天坛生物"},{"code":"600162","name":"香江控股"},{"code":"600169","name":"太原重工"},{"code":"600175","name":"美都能源"},{"code":"600197","name":"伊力特"},{"code":"600199","name":"金种子酒"},{"code":"600200","name":"江苏吴中"},{"code":"600203","name":"福日电子"},{"code":"600206","name":"有研新材"},{"code":"600207","name":"安彩高科"},{"code":"600208","name":"新湖中宝"},{"code":"600213","name":"亚星客车"},{"code":"600218","name":"全柴动力"},{"code":"600221","name":"海航控股"},{"code":"600223","name":"鲁商发展"},{"code":"600226","name":"瀚叶股份"},{"code":"600227","name":"圣济堂"},{"code":"600235","name":"民丰特纸"},{"code":"600236","name":"桂冠电力"},{"code":"600242","name":"中昌数据"},{"code":"600246","name":"万通地产"},{"code":"600262","name":"北方股份"},{"code":"600266","name":"城建发展"},{"code":"600267","name":"海正药业"},{"code":"600268","name":"国电南自"},{"code":"600278","name":"东方创业"},{"code":"600279","name":"重庆港九"},{"code":"600283","name":"钱江水利"},{"code":"600285","name":"羚锐制药"},{"code":"600288","name":"大恒科技"},{"code":"600291","name":"西水股份"},{"code":"600293","name":"三峡新材"},{"code":"600300","name":"维维股份"},{"code":"600310","name":"桂东电力"},{"code":"600311","name":"荣华实业"},{"code":"600313","name":"农发种业"},{"code":"600317","name":"营口港"},{"code":"600322","name":"天房发展"},{"code":"600323","name":"瀚蓝环境"},{"code":"600326","name":"西藏天路"},{"code":"600336","name":"澳柯玛"},{"code":"600337","name":"美克家居"},{"code":"600338","name":"西藏珠峰"},{"code":"600339","name":"中油工程"},{"code":"600351","name":"亚宝药业"},{"code":"600353","name":"旭光股份"},{"code":"600354","name":"敦煌种业"},{"code":"600355","name":"精伦电子"},{"code":"600360","name":"华微电子"},{"code":"600363","name":"联创光电"},{"code":"600366","name":"宁波韵升"},{"code":"600371","name":"万向德农"},{"code":"600375","name":"华菱星马"},{"code":"600381","name":"青海春天"},{"code":"600392","name":"盛和资源"},{"code":"600393","name":"粤泰股份"},{"code":"600398","name":"海澜之家"},{"code":"600419","name":"天润乳业"},{"code":"600425","name":"青松建化"},{"code":"600429","name":"三元股份"},{"code":"600449","name":"宁夏建材"},{"code":"600455","name":"博通股份"},{"code":"600463","name":"空港股份"},{"code":"600466","name":"蓝光发展"},{"code":"600467","name":"好当家"},{"code":"600476","name":"湘邮科技"},{"code":"600478","name":"科力远"},{"code":"600479","name":"千金药业"},{"code":"600480","name":"凌云股份"},{"code":"600481","name":"双良节能"},{"code":"600488","name":"天药股份"},{"code":"600495","name":"晋西车轴"},{"code":"600499","name":"科达洁能"},{"code":"600501","name":"航天晨光"},{"code":"600503","name":"华丽家族"},{"code":"600505","name":"西昌电力"},{"code":"600506","name":"香梨股份"},{"code":"600517","name":"置信电气"},{"code":"600520","name":"文一科技"},{"code":"600525","name":"长园集团"},{"code":"600526","name":"菲达环保"},{"code":"600527","name":"江南高纤"},{"code":"600530","name":"交大昂立"},{"code":"600533","name":"栖霞建设"},{"code":"600537","name":"亿晶光电"},{"code":"600549","name":"厦门钨业"},{"code":"600559","name":"老白干酒"},{"code":"600562","name":"国睿科技"},{"code":"600568","name":"中珠医疗"},{"code":"600573","name":"惠泉啤酒"},{"code":"600587","name":"新华医疗"},{"code":"600593","name":"大连圣亚"},{"code":"600596","name":"新安股份"},{"code":"600601","name":"方正科技"},{"code":"600602","name":"云赛智联"},{"code":"600603","name":"广汇物流"},{"code":"600604","name":"市北高新"},{"code":"600613","name":"神奇制药"},{"code":"600623","name":"华谊集团"},{"code":"600624","name":"复旦复华"},{"code":"600626","name":"申达股份"},{"code":"600628","name":"新世界"},{"code":"600630","name":"龙头股份"},{"code":"600638","name":"新黄浦"},{"code":"600639","name":"浦东金桥"},{"code":"600640","name":"号百控股"},{"code":"600641","name":"万业企业"},{"code":"600644","name":"乐山电力"},{"code":"600645","name":"中源协和"},{"code":"600647","name":"同达创业"},{"code":"600649","name":"城投控股"},{"code":"600651","name":"飞乐音响"},{"code":"600661","name":"昂立教育"},{"code":"600662","name":"强生控股"},{"code":"600668","name":"尖峰集团"},{"code":"603179","name":"新泉股份"},{"code":"600671","name":"天目药业"},{"code":"600677","name":"航天通信"},{"code":"600678","name":"四川金顶"},{"code":"600682","name":"南京新百"},{"code":"600683","name":"京投发展"},{"code":"600684","name":"珠江实业"},{"code":"600689","name":"上海三毛"},{"code":"600693","name":"东百集团"},{"code":"600695","name":"绿庭投资"},{"code":"600697","name":"欧亚集团"},{"code":"600706","name":"曲江文旅"},{"code":"600708","name":"光明地产"},{"code":"600711","name":"盛屯矿业"},{"code":"600712","name":"南宁百货"},{"code":"600716","name":"凤凰股份"},{"code":"600719","name":"大连热电"},{"code":"600724","name":"宁波富达"},{"code":"600730","name":"中国高科"},{"code":"600734","name":"实达集团"},{"code":"600736","name":"苏州高新"},{"code":"600737","name":"中粮糖业"},{"code":"600744","name":"华银电力"},{"code":"600746","name":"江苏索普"},{"code":"600748","name":"上实发展"},{"code":"600755","name":"厦门国贸"},{"code":"600756","name":"浪潮软件"},{"code":"600764","name":"中国海防"},{"code":"600770","name":"综艺股份"},{"code":"600771","name":"广誉远"},{"code":"600773","name":"西藏城投"},{"code":"600777","name":"新潮能源"},{"code":"600783","name":"鲁信创投"},{"code":"600784","name":"鲁银投资"},{"code":"600785","name":"新华百货"},{"code":"600796","name":"钱江生化"},{"code":"600800","name":"天津磁卡"},{"code":"600802","name":"福建水泥"},{"code":"600808","name":"马钢股份"},{"code":"600818","name":"中路股份"},{"code":"600819","name":"耀皮玻璃"},{"code":"600821","name":"津劝业"},{"code":"600822","name":"上海物贸"},{"code":"600824","name":"益民集团"},{"code":"600825","name":"新华传媒"},{"code":"600828","name":"茂业商业"},{"code":"600829","name":"人民同泰"},{"code":"600830","name":"香溢融通"},{"code":"600831","name":"广电网络"},{"code":"600833","name":"第一医药"},{"code":"600834","name":"申通地铁"},{"code":"600836","name":"界龙实业"},{"code":"600838","name":"上海九百"},{"code":"600841","name":"上柴股份"},{"code":"600843","name":"上工申贝"},{"code":"600846","name":"同济科技"},{"code":"600851","name":"海欣股份"},{"code":"600853","name":"龙建股份"},{"code":"600854","name":"春兰股份"},{"code":"600855","name":"航天长峰"},{"code":"600857","name":"宁波中百"},{"code":"600860","name":"京城股份"},{"code":"600861","name":"北京城乡"},{"code":"600862","name":"中航高科"},{"code":"600864","name":"哈投股份"},{"code":"600865","name":"百大集团"},{"code":"600866","name":"星湖科技"},{"code":"600867","name":"通化东宝"},{"code":"600868","name":"梅雁吉祥"},{"code":"600869","name":"智慧能源"},{"code":"600871","name":"石化油服"},{"code":"600874","name":"创业环保"},{"code":"600876","name":"洛阳玻璃"},{"code":"600879","name":"航天电子"},{"code":"600880","name":"博瑞传播"},{"code":"600882","name":"妙可蓝多"},{"code":"600885","name":"宏发股份"},{"code":"600888","name":"新疆众和"},{"code":"600889","name":"南京化纤"},{"code":"600894","name":"广日股份"},{"code":"600898","name":"国美通讯"},{"code":"600917","name":"重庆燃气"},{"code":"600959","name":"江苏有线"},{"code":"600962","name":"国投中鲁"},{"code":"600965","name":"福成股份"},{"code":"600966","name":"博汇纸业"},{"code":"600973","name":"宝胜股份"},{"code":"600976","name":"健民集团"},{"code":"600980","name":"北矿科技"},{"code":"600981","name":"汇鸿集团"},{"code":"600982","name":"宁波热电"},{"code":"600983","name":"惠而浦"},{"code":"600986","name":"科达股份"},{"code":"600988","name":"赤峰黄金"},{"code":"600990","name":"四创电子"},{"code":"600992","name":"贵绳股份"},{"code":"601002","name":"晋亿实业"},{"code":"601008","name":"连云港"},{"code":"601016","name":"节能风电"},{"code":"601069","name":"西部黄金"},{"code":"601100","name":"恒立液压"},{"code":"601106","name":"中国一重"},{"code":"601118","name":"海南橡胶"},{"code":"601126","name":"四方股份"},{"code":"601168","name":"西部矿业"},{"code":"601199","name":"江南水务"},{"code":"601222","name":"林洋能源"},{"code":"601226","name":"华电重工"},{"code":"601233","name":"桐昆股份"},{"code":"601311","name":"骆驼股份"},{"code":"601339","name":"百隆东方"},{"code":"601388","name":"怡球资源"},{"code":"601515","name":"东风股份"},{"code":"601567","name":"三星医疗"},{"code":"601608","name":"中信重工"},{"code":"601616","name":"广电电气"},{"code":"601677","name":"明泰铝业"},{"code":"601689","name":"拓普集团"},{"code":"601700","name":"风范股份"},{"code":"601727","name":"上海电气"},{"code":"601789","name":"宁波建工"},{"code":"601799","name":"星宇股份"},{"code":"601818","name":"光大银行"},{"code":"601866","name":"中远海发"},{"code":"601958","name":"金钼股份"},{"code":"601968","name":"宝钢包装"},{"code":"601996","name":"丰林集团"},{"code":"603002","name":"宏昌电子"},{"code":"603003","name":"龙宇燃油"},{"code":"603006","name":"联明股份"},{"code":"603009","name":"北特科技"},{"code":"603010","name":"万盛股份"},{"code":"603015","name":"弘讯科技"},{"code":"603017","name":"中衡设计"},{"code":"603018","name":"中设集团"},{"code":"603020","name":"爱普股份"},{"code":"603021","name":"山东华鹏"},{"code":"603022","name":"新通联"},{"code":"603023","name":"威帝股份"},{"code":"603025","name":"大豪科技"},{"code":"603085","name":"天成自控"},{"code":"603088","name":"宁波精达"},{"code":"603099","name":"长白山"},{"code":"603108","name":"润达医疗"},{"code":"603111","name":"康尼机电"},{"code":"603116","name":"红蜻蜓"},{"code":"603117","name":"万林物流"},{"code":"603123","name":"翠微股份"},{"code":"603126","name":"中材节能"},{"code":"603158","name":"腾龙股份"},{"code":"603168","name":"莎普爱思"},{"code":"603222","name":"济民制药"},{"code":"603227","name":"雪峰科技"},{"code":"603268","name":"松发股份"},{"code":"603299","name":"井神股份"},{"code":"603300","name":"华铁应急"},{"code":"603308","name":"应流股份"},{"code":"603318","name":"派思股份"},{"code":"603333","name":"尚纬股份"},{"code":"603366","name":"日出东方"},{"code":"603456","name":"九洲药业"},{"code":"603508","name":"思维列控"},{"code":"603519","name":"立霸股份"},{"code":"603566","name":"普莱柯"},{"code":"603568","name":"伟明环保"},{"code":"603600","name":"永艺股份"},{"code":"603601","name":"再升科技"},{"code":"603609","name":"禾丰牧业"},{"code":"603611","name":"诺力股份"},{"code":"603616","name":"韩建河山"},{"code":"603618","name":"杭电股份"},{"code":"603688","name":"石英股份"},{"code":"603703","name":"盛洋科技"},{"code":"603789","name":"星光农机"},{"code":"603800","name":"道森股份"},{"code":"603808","name":"歌力思"},{"code":"603818","name":"曲美家居"},{"code":"603838","name":"四通股份"},{"code":"603918","name":"金桥信息"},{"code":"603936","name":"博敏电子"},{"code":"603968","name":"醋化股份"},{"code":"603989","name":"艾华集团"},{"code":"603997","name":"继峰股份"},{"code":"603998","name":"方盛制药"},{"code":"603999","name":"读者传媒"},{"code":"600673","name":"东阳光"},{"code":"603377","name":"东方时尚"},{"code":"601900","name":"南方传媒"},{"code":"603919","name":"金徽酒"},{"code":"603861","name":"白云电器"},{"code":"603028","name":"赛福天"},{"code":"603798","name":"康普顿"},{"code":"603701","name":"德宏股份"},{"code":"603726","name":"朗迪集团"},{"code":"603528","name":"多伦科技"},{"code":"603339","name":"四方科技"},{"code":"603131","name":"上海沪工"},{"code":"603016","name":"新宏泰"},{"code":"603069","name":"海汽集团"},{"code":"600936","name":"广西广电"},{"code":"601997","name":"贵阳银行"},{"code":"601595","name":"上海电影"},{"code":"603515","name":"欧普照明"},{"code":"603843","name":"正平股份"},{"code":"601163","name":"三角轮胎"},{"code":"603393","name":"新天然气"},{"code":"603738","name":"泰晶科技"},{"code":"601128","name":"常熟银行"},{"code":"603313","name":"梦百合"},{"code":"600926","name":"杭州银行"},{"code":"603888","name":"新华网"},{"code":"603060","name":"国检集团"},{"code":"603633","name":"徕木股份"},{"code":"603987","name":"康德莱"},{"code":"603336","name":"宏辉果蔬"},{"code":"603660","name":"苏州科达"},{"code":"603559","name":"中通国脉"},{"code":"603033","name":"三维股份"},{"code":"603389","name":"亚振家居"},{"code":"603058","name":"永吉股份"},{"code":"603886","name":"元祖股份"},{"code":"603239","name":"浙江仙通"},{"code":"601375","name":"中原证券"},{"code":"603035","name":"常熟汽饰"},{"code":"603032","name":"德新交运"},{"code":"603877","name":"太平鸟"},{"code":"603689","name":"皖天然气"},{"code":"603579","name":"荣泰健康"},{"code":"603639","name":"海利尔"},{"code":"601858","name":"中国科传"},{"code":"603638","name":"艾迪精密"},{"code":"603429","name":"集友股份"},{"code":"603966","name":"法兰泰克"},{"code":"603089","name":"正裕工业"},{"code":"603360","name":"百傲化学"},{"code":"603677","name":"奇精机械"},{"code":"603637","name":"镇海股份"},{"code":"601212","name":"白银有色"},{"code":"603603","name":"博天环境"},{"code":"603817","name":"海峡环保"},{"code":"603717","name":"天域生态"},{"code":"603656","name":"泰禾光电"},{"code":"603133","name":"碳元科技"},{"code":"603811","name":"诚意药业"},{"code":"603955","name":"大千生态"},{"code":"603908","name":"牧高笛"},{"code":"603991","name":"至正股份"},{"code":"603578","name":"三星新材"},{"code":"601366","name":"利群股份"},{"code":"603787","name":"新日股份"},{"code":"603320","name":"迪贝电气"},{"code":"603906","name":"龙蟠科技"},{"code":"603586","name":"金麒麟"},{"code":"603538","name":"美诺华"},{"code":"603385","name":"惠达卫浴"},{"code":"603178","name":"圣龙股份"},{"code":"603238","name":"诺邦股份"},{"code":"603229","name":"奥翔药业"},{"code":"603728","name":"鸣志电器"},{"code":"603896","name":"寿仙谷"},{"code":"603488","name":"展鹏科技"},{"code":"603197","name":"保隆科技"},{"code":"603580","name":"艾艾精工"},{"code":"603200","name":"上海洗霸"},{"code":"603042","name":"华脉科技"},{"code":"603536","name":"惠发股份"},{"code":"603326","name":"我乐家居"},{"code":"603316","name":"诚邦股份"},{"code":"603335","name":"迪生力"},{"code":"603380","name":"易德龙"},{"code":"603286","name":"日盈电子"},{"code":"603938","name":"三孚股份"},{"code":"603331","name":"百达精工"},{"code":"603933","name":"睿能科技"},{"code":"603595","name":"东尼电子"},{"code":"603612","name":"索通发展"},{"code":"603676","name":"卫信康"},{"code":"603063","name":"禾望电气"},{"code":"603233","name":"大参林"},{"code":"603357","name":"设计总院"},{"code":"603860","name":"中公高科"},{"code":"603880","name":"南卫股份"},{"code":"603776","name":"永安行"},{"code":"603976","name":"正川股份"},{"code":"603079","name":"圣达生物"},{"code":"603725","name":"天安新材"},{"code":"603813","name":"原尚股份"},{"code":"603136","name":"天目湖"},{"code":"603378","name":"亚士创能"},{"code":"603367","name":"辰欣药业"},{"code":"603103","name":"横店影视"},{"code":"603110","name":"东方材料"},{"code":"603499","name":"翔港科技"},{"code":"603829","name":"洛凯股份"},{"code":"603722","name":"阿科力"},{"code":"603659","name":"璞泰来"},{"code":"603076","name":"乐惠国际"},{"code":"603661","name":"恒林股份"},{"code":"601019","name":"山东出版"},{"code":"603890","name":"春秋电子"},{"code":"603477","name":"振静股份"},{"code":"603895","name":"天永智能"},{"code":"603516","name":"淳中科技"},{"code":"603871","name":"嘉友国际"},{"code":"603709","name":"中源家居"},{"code":"603712","name":"七一二"},{"code":"603059","name":"倍加洁"},{"code":"600929","name":"湖南盐业"},{"code":"603897","name":"长城科技"},{"code":"603301","name":"振德医疗"},{"code":"603773","name":"沃格光电"},{"code":"603666","name":"亿嘉和"},{"code":"601990","name":"南京证券"},{"code":"603713","name":"密尔克卫"},{"code":"601606","name":"长城军工"},{"code":"603590","name":"康辰药业"},{"code":"603192","name":"汇得科技"},{"code":"601068","name":"中铝国际"},{"code":"603297","name":"永新光学"},{"code":"603790","name":"雅运股份"},{"code":"603583","name":"捷昌驱动"},{"code":"601975","name":"招商南油"},{"code":"603629","name":"利通电子"},{"code":"603185","name":"上机数控"},{"code":"601298","name":"青岛港"},{"code":"603700","name":"宁波水表"},{"code":"601615","name":"明阳智能"},{"code":"601865","name":"福莱特"},{"code":"603317","name":"天味食品"},{"code":"603697","name":"有友食品"},{"code":"603982","name":"泉峰汽车"},{"code":"603327","name":"福蓉科技"},{"code":"603915","name":"国茂股份"},{"code":"601236","name":"红塔证券"},{"code":"603530","name":"神马电力"},{"code":"603115","name":"海星股份"},{"code":"603992","name":"松霖科技"},{"code":"603755","name":"日辰股份"},{"code":"600000","name":"浦发银行"},{"code":"600004","name":"白云机场"},{"code":"600006","name":"东风汽车"},{"code":"600007","name":"中国国贸"},{"code":"600008","name":"首创股份"},{"code":"600009","name":"上海机场"},{"code":"600011","name":"华能国际"},{"code":"600012","name":"皖通高速"},{"code":"600015","name":"华夏银行"},{"code":"600016","name":"民生银行"},{"code":"600017","name":"日照港"},{"code":"600018","name":"上港集团"},{"code":"600019","name":"宝钢股份"},{"code":"600020","name":"中原高速"},{"code":"600021","name":"上海电力"},{"code":"600023","name":"浙能电力"},{"code":"600026","name":"中远海能"},{"code":"600027","name":"华电国际"},{"code":"600028","name":"中国石化"},{"code":"600029","name":"南方航空"},{"code":"600030","name":"中信证券"},{"code":"600031","name":"三一重工"},{"code":"600033","name":"福建高速"},{"code":"600035","name":"楚天高速"},{"code":"600036","name":"招商银行"},{"code":"600037","name":"歌华有线"},{"code":"600038","name":"中直股份"},{"code":"600050","name":"中国联通"},{"code":"600054","name":"黄山旅游"},{"code":"600055","name":"万东医疗"},{"code":"600056","name":"中国医药"},{"code":"600057","name":"厦门象屿"},{"code":"600059","name":"古越龙山"},{"code":"600060","name":"海信电器"},{"code":"600062","name":"华润双鹤"},{"code":"600064","name":"南京高科"},{"code":"600066","name":"宇通客车"},{"code":"600068","name":"葛洲坝"},{"code":"600072","name":"中船科技"},{"code":"600073","name":"上海梅林"},{"code":"600075","name":"新疆天业"},{"code":"600085","name":"同仁堂"},{"code":"600089","name":"特变电工"},{"code":"600093","name":"易见股份"},{"code":"600097","name":"开创国际"},{"code":"600098","name":"广州发展"},{"code":"600100","name":"同方股份"},{"code":"600104","name":"上汽集团"},{"code":"600105","name":"永鼎股份"},{"code":"600106","name":"重庆路桥"},{"code":"600109","name":"国金证券"},{"code":"600114","name":"东睦股份"},{"code":"600116","name":"三峡水利"},{"code":"600118","name":"中国卫星"},{"code":"600125","name":"铁龙物流"},{"code":"600126","name":"杭钢股份"},{"code":"600129","name":"太极集团"},{"code":"600131","name":"岷江水电"},{"code":"600132","name":"重庆啤酒"},{"code":"600133","name":"东湖高新"},{"code":"600138","name":"中青旅"},{"code":"600141","name":"兴发集团"},{"code":"600143","name":"金发科技"},{"code":"600150","name":"中国船舶"},{"code":"600153","name":"建发股份"},{"code":"600158","name":"中体产业"},{"code":"600170","name":"上海建工"},{"code":"600171","name":"上海贝岭"},{"code":"600176","name":"中国巨石"},{"code":"600177","name":"雅戈尔"},{"code":"600183","name":"生益科技"},{"code":"600195","name":"中牧股份"},{"code":"600196","name":"复星医药"},{"code":"600216","name":"浙江医药"},{"code":"600217","name":"中再资环"},{"code":"600219","name":"南山铝业"},{"code":"600233","name":"圆通速递"},{"code":"600252","name":"中恒集团"},{"code":"600256","name":"广汇能源"},{"code":"600258","name":"首旅酒店"},{"code":"600260","name":"凯乐科技"},{"code":"600261","name":"阳光照明"},{"code":"600269","name":"赣粤高速"},{"code":"600271","name":"航天信息"},{"code":"600276","name":"恒瑞医药"},{"code":"600284","name":"浦东建设"},{"code":"601658","name":"邮储银行"},{"code":"600969","name":"郴电国际"},{"code":"600297","name":"广汇汽车"},{"code":"600298","name":"安琪酵母"},{"code":"600299","name":"安迪苏"},{"code":"600305","name":"恒顺醋业"},{"code":"600309","name":"万华化学"},{"code":"600312","name":"平高电气"},{"code":"600315","name":"上海家化"},{"code":"600316","name":"洪都航空"},{"code":"600320","name":"振华重工"},{"code":"600325","name":"华发股份"},{"code":"600332","name":"白云山"},{"code":"600340","name":"华夏幸福"},{"code":"600343","name":"航天动力"},{"code":"600345","name":"长江通信"},{"code":"600350","name":"山东高速"},{"code":"600352","name":"浙江龙盛"},{"code":"600361","name":"华联综超"},{"code":"600362","name":"江西铜业"},{"code":"600369","name":"西南证券"},{"code":"600372","name":"中航电子"},{"code":"600376","name":"首开股份"},{"code":"600377","name":"宁沪高速"},{"code":"600380","name":"健康元"},{"code":"600383","name":"金地集团"},{"code":"600388","name":"龙净环保"},{"code":"600390","name":"五矿资本"},{"code":"600391","name":"航发科技"},{"code":"600406","name":"国电南瑞"},{"code":"600410","name":"华胜天成"},{"code":"600418","name":"江淮汽车"},{"code":"600420","name":"现代制药"},{"code":"600422","name":"昆药集团"},{"code":"600428","name":"中远海特"},{"code":"600435","name":"北方导航"},{"code":"600436","name":"片仔癀"},{"code":"600439","name":"瑞贝卡"},{"code":"600446","name":"金证股份"},{"code":"600452","name":"涪陵电力"},{"code":"600460","name":"士兰微"},{"code":"600477","name":"杭萧钢构"},{"code":"600482","name":"中国动力"},{"code":"600483","name":"福能股份"},{"code":"600486","name":"扬农化工"},{"code":"600487","name":"亨通光电"},{"code":"600489","name":"中金黄金"},{"code":"600496","name":"精工钢构"},{"code":"600497","name":"驰宏锌锗"},{"code":"600498","name":"烽火通信"},{"code":"600500","name":"中化国际"},{"code":"600507","name":"方大特钢"},{"code":"600511","name":"国药股份"},{"code":"600516","name":"方大炭素"},{"code":"600519","name":"贵州茅台"},{"code":"600522","name":"中天科技"},{"code":"600529","name":"山东药玻"},{"code":"600535","name":"天士力"},{"code":"600536","name":"中国软件"},{"code":"600545","name":"卓郎智能"},{"code":"600547","name":"山东黄金"},{"code":"600548","name":"深高速"},{"code":"600557","name":"康缘药业"},{"code":"600563","name":"法拉电子"},{"code":"600565","name":"迪马股份"},{"code":"600566","name":"济川药业"},{"code":"600570","name":"恒生电子"},{"code":"600571","name":"信雅达"},{"code":"600572","name":"康恩贝"},{"code":"600577","name":"精达股份"},{"code":"600578","name":"京能电力"},{"code":"600580","name":"卧龙电驱"},{"code":"600582","name":"天地科技"},{"code":"600583","name":"海油工程"},{"code":"600584","name":"长电科技"},{"code":"600585","name":"海螺水泥"},{"code":"600588","name":"用友网络"},{"code":"600590","name":"泰豪科技"},{"code":"600597","name":"光明乳业"},{"code":"600598","name":"北大荒"},{"code":"600600","name":"青岛啤酒"},{"code":"600606","name":"绿地控股"},{"code":"600611","name":"大众交通"},{"code":"600612","name":"老凤祥"},{"code":"600616","name":"金枫酒业"},{"code":"600618","name":"氯碱化工"},{"code":"600619","name":"海立股份"},{"code":"600622","name":"光大嘉宝"},{"code":"600633","name":"浙数文化"},{"code":"600635","name":"大众公用"},{"code":"600637","name":"东方明珠"},{"code":"600642","name":"申能股份"},{"code":"600643","name":"爱建集团"},{"code":"600648","name":"外高桥"},{"code":"600650","name":"锦江投资"},{"code":"600655","name":"豫园股份"},{"code":"600657","name":"信达地产"},{"code":"600658","name":"电子城"},{"code":"600660","name":"福耀玻璃"},{"code":"600663","name":"陆家嘴"},{"code":"600667","name":"太极实业"},{"code":"600674","name":"川投能源"},{"code":"600685","name":"中船防务"},{"code":"600686","name":"金龙汽车"},{"code":"600688","name":"上海石化"},{"code":"600690","name":"海尔智家"},{"code":"600699","name":"均胜电子"},{"code":"600702","name":"舍得酒业"},{"code":"600703","name":"三安光电"},{"code":"600704","name":"物产中大"},{"code":"600705","name":"中航资本"},{"code":"600713","name":"南京医药"},{"code":"600717","name":"天津港"},{"code":"600718","name":"东软集团"},{"code":"600720","name":"祁连山"},{"code":"600723","name":"首商股份"},{"code":"600728","name":"佳都科技"},{"code":"600729","name":"重庆百货"},{"code":"600733","name":"北汽蓝谷"},{"code":"600741","name":"华域汽车"},{"code":"600743","name":"华远地产"},{"code":"600745","name":"闻泰科技"},{"code":"600749","name":"西藏旅游"},{"code":"600750","name":"江中药业"},{"code":"600754","name":"锦江股份"},{"code":"600760","name":"中航沈飞"},{"code":"600761","name":"安徽合力"},{"code":"600763","name":"通策医疗"},{"code":"600765","name":"中航重机"},{"code":"600775","name":"南京熊猫"},{"code":"600776","name":"东方通信"},{"code":"600779","name":"水井坊"},{"code":"600787","name":"中储股份"},{"code":"600789","name":"鲁抗医药"},{"code":"600790","name":"轻纺城"},{"code":"600794","name":"保税科技"},{"code":"600795","name":"国电电力"},{"code":"600797","name":"浙大网新"},{"code":"600798","name":"宁波海运"},{"code":"600801","name":"华新水泥"},{"code":"600803","name":"新奥股份"},{"code":"600804","name":"鹏博士"},{"code":"600805","name":"悦达投资"},{"code":"600809","name":"山西汾酒"},{"code":"600812","name":"华北制药"},{"code":"600814","name":"杭州解百"},{"code":"600816","name":"安信信托"},{"code":"600820","name":"隧道股份"},{"code":"600823","name":"世茂股份"},{"code":"600826","name":"兰生股份"},{"code":"600827","name":"百联股份"},{"code":"600835","name":"上海机电"},{"code":"600837","name":"海通证券"},{"code":"600839","name":"四川长虹"},{"code":"600845","name":"宝信软件"},{"code":"600848","name":"上海临港"},{"code":"600850","name":"华东电脑"},{"code":"600859","name":"王府井"},{"code":"600872","name":"中炬高新"},{"code":"600873","name":"梅花生物"},{"code":"600875","name":"东方电气"},{"code":"600884","name":"杉杉股份"},{"code":"600886","name":"国投电力"},{"code":"600887","name":"伊利股份"},{"code":"600893","name":"航发动力"},{"code":"600895","name":"张江高科"},{"code":"600897","name":"厦门空港"},{"code":"600900","name":"长江电力"},{"code":"600958","name":"东方证券"},{"code":"600967","name":"内蒙一机"},{"code":"600970","name":"中材国际"},{"code":"600975","name":"新五丰"},{"code":"600987","name":"航民股份"},{"code":"600993","name":"马应龙"},{"code":"600995","name":"文山电力"},{"code":"600998","name":"九州通"},{"code":"600999","name":"招商证券"},{"code":"601003","name":"柳钢股份"},{"code":"601006","name":"大秦铁路"},{"code":"601007","name":"金陵饭店"},{"code":"601009","name":"南京银行"},{"code":"601010","name":"文峰股份"},{"code":"601012","name":"隆基股份"},{"code":"601018","name":"宁波港"},{"code":"601021","name":"春秋航空"},{"code":"601038","name":"一拖股份"},{"code":"601088","name":"中国神华"},{"code":"601099","name":"太平洋"},{"code":"601107","name":"四川成渝"},{"code":"601111","name":"中国国航"},{"code":"601116","name":"三江购物"},{"code":"601117","name":"中国化学"},{"code":"601137","name":"博威合金"},{"code":"601139","name":"深圳燃气"},{"code":"601158","name":"重庆水务"},{"code":"601166","name":"兴业银行"},{"code":"601169","name":"北京银行"},{"code":"601186","name":"中国铁建"},{"code":"601198","name":"东兴证券"},{"code":"601211","name":"国泰君安"},{"code":"601216","name":"君正集团"},{"code":"601231","name":"环旭电子"},{"code":"601238","name":"广汽集团"},{"code":"601288","name":"农业银行"},{"code":"601360","name":"三六零"},{"code":"601318","name":"中国平安"},{"code":"601328","name":"交通银行"},{"code":"601333","name":"广深铁路"},{"code":"601336","name":"新华保险"},{"code":"601377","name":"兴业证券"},{"code":"601390","name":"中国中铁"},{"code":"601398","name":"工商银行"},{"code":"601519","name":"大智慧"},{"code":"601555","name":"东吴证券"},{"code":"601579","name":"会稽山"},{"code":"601588","name":"北辰实业"},{"code":"601600","name":"中国铝业"},{"code":"601601","name":"中国太保"},{"code":"601607","name":"上海医药"},{"code":"601618","name":"中国中冶"},{"code":"601628","name":"中国人寿"},{"code":"601633","name":"长城汽车"},{"code":"601636","name":"旗滨集团"},{"code":"601668","name":"中国建筑"},{"code":"601669","name":"中国电建"},{"code":"601688","name":"华泰证券"},{"code":"601717","name":"郑煤机"},{"code":"601718","name":"际华集团"},{"code":"601766","name":"中国中车"},{"code":"601788","name":"光大证券"},{"code":"601800","name":"中国交建"},{"code":"601801","name":"皖新传媒"},{"code":"601808","name":"中海油服"},{"code":"601857","name":"中国石油"},{"code":"601872","name":"招商轮船"},{"code":"601877","name":"正泰电器"},{"code":"601880","name":"大连港"},{"code":"601888","name":"中国国旅"},{"code":"601890","name":"亚星锚链"},{"code":"601899","name":"紫金矿业"},{"code":"601901","name":"方正证券"},{"code":"601919","name":"中远海控"},{"code":"601928","name":"凤凰传媒"},{"code":"601933","name":"永辉超市"},{"code":"601939","name":"建设银行"},{"code":"601965","name":"中国汽研"},{"code":"601985","name":"中国核电"},{"code":"601988","name":"中国银行"},{"code":"601989","name":"中国重工"},{"code":"601991","name":"大唐发电"},{"code":"601992","name":"金隅集团"},{"code":"601998","name":"中信银行"},{"code":"603000","name":"人民网"},{"code":"603005","name":"晶方科技"},{"code":"603008","name":"喜临门"},{"code":"603011","name":"合锻智能"},{"code":"603019","name":"中科曙光"},{"code":"603026","name":"石大胜华"},{"code":"603066","name":"音飞储存"},{"code":"603100","name":"川仪股份"},{"code":"603118","name":"共进股份"},{"code":"603128","name":"华贸物流"},{"code":"603169","name":"兰石重装"},{"code":"603198","name":"迎驾贡酒"},{"code":"603199","name":"九华旅游"},{"code":"603288","name":"海天味业"},{"code":"603306","name":"华懋科技"},{"code":"603328","name":"依顿电子"},{"code":"603338","name":"浙江鼎力"},{"code":"603355","name":"莱克电气"},{"code":"603368","name":"柳药股份"},{"code":"603369","name":"今世缘"},{"code":"603398","name":"邦宝益智"},{"code":"603589","name":"口子窖"},{"code":"603598","name":"引力传媒"},{"code":"603599","name":"广信股份"},{"code":"603606","name":"东方电缆"},{"code":"603636","name":"南威软件"},{"code":"603678","name":"火炬电子"},{"code":"603686","name":"龙马环卫"},{"code":"603696","name":"安记食品"},{"code":"603698","name":"航天工程"},{"code":"603699","name":"纽威股份"},{"code":"603718","name":"海利生物"},{"code":"603766","name":"隆鑫通用"},{"code":"603799","name":"华友钴业"},{"code":"603806","name":"福斯特"},{"code":"603866","name":"桃李面包"},{"code":"603883","name":"老百姓"},{"code":"603885","name":"吉祥航空"},{"code":"603889","name":"新澳股份"},{"code":"603898","name":"好莱客"},{"code":"603899","name":"晨光文具"},{"code":"603939","name":"益丰药房"},{"code":"603993","name":"洛阳钼业"},{"code":"603225","name":"新凤鸣"},{"code":"601916","name":"浙商银行"},{"code":"603027","name":"千禾味业"},{"code":"603520","name":"司太立"},{"code":"603868","name":"飞科电器"},{"code":"603737","name":"三棵树"},{"code":"601611","name":"中国核建"},{"code":"601127","name":"小康股份"},{"code":"601966","name":"玲珑轮胎"},{"code":"603322","name":"超讯通信"},{"code":"600919","name":"江苏银行"},{"code":"601811","name":"新华文轩"},{"code":"600977","name":"中国电影"},{"code":"603986","name":"兆易创新"},{"code":"603658","name":"安图生物"},{"code":"603189","name":"网达软件"},{"code":"600908","name":"无锡银行"},{"code":"603421","name":"鼎信通讯"},{"code":"603777","name":"来伊份"},{"code":"603816","name":"顾家家居"},{"code":"603160","name":"汇顶科技"},{"code":"603258","name":"电魂网络"},{"code":"601229","name":"上海银行"},{"code":"603858","name":"步长制药"},{"code":"603727","name":"博迈科"},{"code":"603900","name":"莱绅通灵"},{"code":"600909","name":"华安证券"},{"code":"603990","name":"麦迪科技"},{"code":"603708","name":"家家悦"},{"code":"603416","name":"信捷电气"},{"code":"600996","name":"贵广网络"},{"code":"603298","name":"杭叉集团"},{"code":"603218","name":"日月股份"},{"code":"603929","name":"亚翔集成"},{"code":"603186","name":"华正新材"},{"code":"603444","name":"吉比特"},{"code":"603228","name":"景旺电子"},{"code":"603690","name":"至纯科技"},{"code":"603039","name":"泛微网络"},{"code":"603337","name":"杰克股份"},{"code":"601881","name":"中国银河"},{"code":"603881","name":"数据港"},{"code":"603208","name":"江山欧派"},{"code":"600939","name":"重庆建工"},{"code":"603501","name":"韦尔股份"},{"code":"603517","name":"绝味食品"},{"code":"603960","name":"克来机电"},{"code":"603630","name":"拉芳家化"},{"code":"603138","name":"海量数据"},{"code":"603803","name":"瑞斯康达"},{"code":"603232","name":"格尔软件"},{"code":"603920","name":"世运电路"},{"code":"603078","name":"江化微"},{"code":"601200","name":"上海环境"},{"code":"603303","name":"得邦照明"},{"code":"603833","name":"欧派家居"},{"code":"601228","name":"广州港"},{"code":"603345","name":"安井食品"},{"code":"601952","name":"苏垦农发"},{"code":"603383","name":"顶点软件"},{"code":"603496","name":"恒为科技"},{"code":"603226","name":"菲林格尔"},{"code":"603980","name":"吉华集团"},{"code":"601878","name":"浙商证券"},{"code":"603043","name":"广州酒家"},{"code":"603801","name":"志邦家居"},{"code":"603387","name":"基蛋生物"},{"code":"603707","name":"健友股份"},{"code":"603825","name":"华扬联众"},{"code":"603978","name":"深圳新星"},{"code":"603602","name":"纵横通信"},{"code":"601326","name":"秦港股份"},{"code":"603129","name":"春风动力"},{"code":"601949","name":"中国出版"},{"code":"603127","name":"昭衍新药"},{"code":"603183","name":"建研院"},{"code":"603882","name":"金域医学"},{"code":"603277","name":"银都股份"},{"code":"603386","name":"广东骏亚"},{"code":"603648","name":"畅联股份"},{"code":"603321","name":"梅轮电梯"},{"code":"603106","name":"恒银金融"},{"code":"603533","name":"掌阅科技"},{"code":"603363","name":"傲农生物"},{"code":"603466","name":"风语筑"},{"code":"601108","name":"财通证券"},{"code":"603607","name":"京华激光"},{"code":"603260","name":"合盛硅业"},{"code":"603289","name":"泰瑞机器"},{"code":"603912","name":"佳力图"},{"code":"603856","name":"东宏股份"},{"code":"600903","name":"贵州燃气"},{"code":"603083","name":"剑桥科技"},{"code":"603605","name":"珀莱雅"},{"code":"603619","name":"中曼石油"},{"code":"603365","name":"水星家纺"},{"code":"603711","name":"香飘飘"},{"code":"603848","name":"好太太"},{"code":"600025","name":"华能水电"},{"code":"603283","name":"赛腾股份"},{"code":"603329","name":"上海雅仕"},{"code":"603080","name":"新疆火炬"},{"code":"601155","name":"新城控股"},{"code":"603180","name":"金牌厨柜"},{"code":"603056","name":"德邦股份"},{"code":"601828","name":"美凯龙"},{"code":"601838","name":"成都银行"},{"code":"603156","name":"养元饮品"},{"code":"600901","name":"江苏租赁"},{"code":"603214","name":"爱婴室"},{"code":"603259","name":"药明康德"},{"code":"603486","name":"科沃斯"},{"code":"601138","name":"工业富联"},{"code":"601330","name":"绿色动力"},{"code":"601066","name":"中信建投"},{"code":"601869","name":"长飞光纤"},{"code":"601577","name":"长沙银行"},{"code":"601162","name":"天风证券"},{"code":"603220","name":"中贝通信"},{"code":"601319","name":"中国人保"},{"code":"603187","name":"海容冷链"},{"code":"601860","name":"紫金银行"},{"code":"603121","name":"华培动力"},{"code":"603739","name":"蔚蓝生物"},{"code":"601598","name":"中国外运"},{"code":"600928","name":"西安银行"},{"code":"603068","name":"博通集成"},{"code":"600968","name":"海油发展"},{"code":"601698","name":"中国卫通"},{"code":"603236","name":"移远通信"},{"code":"603983","name":"丸美股份"},{"code":"603613","name":"国联股份"},{"code":"603267","name":"鸿远电子"},{"code":"603093","name":"南华期货"},{"code":"603927","name":"中科软"}, 4 | {"code":"000006","name":"深振业A"},{"code":"000007","name":"全新好"},{"code":"000008","name":"神州高铁"},{"code":"000009","name":"中国宝安"},{"code":"000011","name":"深物业A"},{"code":"000017","name":"深中华A"},{"code":"000023","name":"深天地A"},{"code":"000025","name":"特力A"},{"code":"000028","name":"国药一致"},{"code":"000029","name":"深深房A"},{"code":"000036","name":"华联控股"},{"code":"000038","name":"深大通"},{"code":"000045","name":"深纺织A"},{"code":"000050","name":"深天马A"},{"code":"000055","name":"方大集团"},{"code":"000058","name":"深赛格"},{"code":"000059","name":"华锦股份"},{"code":"000061","name":"农产品"},{"code":"000068","name":"华控赛格"},{"code":"000078","name":"海王生物"},{"code":"000150","name":"宜华健康"},{"code":"000151","name":"中成股份"},{"code":"000155","name":"川能动力"},{"code":"000301","name":"东方盛虹"},{"code":"000402","name":"金融街"},{"code":"000415","name":"渤海租赁"},{"code":"000416","name":"民生控股"},{"code":"000421","name":"南京公用"},{"code":"000430","name":"张家界"},{"code":"000498","name":"山东路桥"},{"code":"000501","name":"鄂武商A"},{"code":"000503","name":"国新健康"},{"code":"000505","name":"京粮控股"},{"code":"000506","name":"中润资源"},{"code":"000507","name":"珠海港"},{"code":"000510","name":"新金路"},{"code":"000514","name":"渝开发"},{"code":"000517","name":"荣安地产"},{"code":"000518","name":"四环生物"},{"code":"000523","name":"广州浪奇"},{"code":"000525","name":"红太阳"},{"code":"000526","name":"紫光学大"},{"code":"000529","name":"广弘控股"},{"code":"000530","name":"大冷股份"},{"code":"000531","name":"穗恒运A"},{"code":"000532","name":"华金资本"},{"code":"000533","name":"顺钠股份"},{"code":"000536","name":"华映科技"},{"code":"000537","name":"广宇发展"},{"code":"000540","name":"中天金融"},{"code":"000543","name":"皖能电力"},{"code":"000544","name":"中原环保"},{"code":"000548","name":"湖南投资"},{"code":"000551","name":"创元科技"},{"code":"000557","name":"西部创业"},{"code":"000565","name":"渝三峡A"},{"code":"000566","name":"海南海药"},{"code":"000573","name":"粤宏远A"},{"code":"000576","name":"广东甘化"},{"code":"000586","name":"汇源通信"},{"code":"000589","name":"贵州轮胎"},{"code":"000590","name":"启迪古汉"},{"code":"000591","name":"太阳能"},{"code":"000592","name":"平潭发展"},{"code":"000593","name":"大通燃气"},{"code":"000598","name":"兴蓉环境"},{"code":"000599","name":"青岛双星"},{"code":"000607","name":"华媒控股"},{"code":"000608","name":"阳光股份"},{"code":"000610","name":"西安旅游"},{"code":"000612","name":"焦作万方"},{"code":"000613","name":"大东海A"},{"code":"000615","name":"京汉股份"},{"code":"000616","name":"海航投资"},{"code":"000620","name":"新华联"},{"code":"000622","name":"恒立实业"},{"code":"000623","name":"吉林敖东"},{"code":"000626","name":"远大控股"},{"code":"000628","name":"高新发展"},{"code":"000629","name":"攀钢钒钛"},{"code":"000631","name":"顺发恒业"},{"code":"000637","name":"茂化实华"},{"code":"000639","name":"西王食品"},{"code":"000650","name":"仁和药业"},{"code":"000652","name":"泰达股份"},{"code":"000655","name":"金岭矿业"},{"code":"000656","name":"金科股份"},{"code":"000657","name":"中钨高新"},{"code":"000659","name":"珠海中富"},{"code":"000662","name":"天夏智慧"},{"code":"000663","name":"永安林业"},{"code":"000665","name":"湖北广电"},{"code":"000666","name":"经纬纺机"},{"code":"000667","name":"美好置业"},{"code":"000668","name":"荣丰控股"},{"code":"000669","name":"金鸿控股"},{"code":"000672","name":"上峰水泥"},{"code":"000673","name":"当代东方"},{"code":"000677","name":"恒天海龙"},{"code":"000680","name":"山推股份"},{"code":"000682","name":"东方电子"},{"code":"000685","name":"中山公用"},{"code":"000686","name":"东北证券"},{"code":"000687","name":"华讯方舟"},{"code":"000690","name":"宝新能源"},{"code":"000691","name":"亚太实业"},{"code":"000695","name":"滨海能源"},{"code":"000697","name":"炼石航空"},{"code":"000700","name":"模塑科技"},{"code":"000701","name":"厦门信达"},{"code":"000702","name":"正虹科技"},{"code":"000703","name":"恒逸石化"},{"code":"000705","name":"浙江震元"},{"code":"000710","name":"贝瑞基因"},{"code":"000711","name":"京蓝科技"},{"code":"000713","name":"丰乐种业"},{"code":"000716","name":"黑芝麻"},{"code":"000718","name":"苏宁环球"},{"code":"000719","name":"中原传媒"},{"code":"000721","name":"西安饮食"},{"code":"000722","name":"湖南发展"},{"code":"000727","name":"华东科技"},{"code":"000735","name":"罗牛山"},{"code":"002324","name":"普利特"},{"code":"000753","name":"漳州发展"},{"code":"000755","name":"山西路桥"},{"code":"000756","name":"新华制药"},{"code":"000758","name":"中色股份"},{"code":"000759","name":"中百集团"},{"code":"000762","name":"西藏矿业"},{"code":"000766","name":"通化金马"},{"code":"000778","name":"新兴铸管"},{"code":"000779","name":"甘咨询"},{"code":"000783","name":"长江证券"},{"code":"000789","name":"万年青"},{"code":"000790","name":"泰合健康"},{"code":"000791","name":"甘肃电投"},{"code":"000793","name":"华闻传媒"},{"code":"000795","name":"英洛华"},{"code":"000797","name":"中国武夷"},{"code":"000798","name":"中水渔业"},{"code":"000799","name":"酒鬼酒"},{"code":"000800","name":"一汽轿车"},{"code":"000802","name":"北京文化"},{"code":"000807","name":"云铝股份"},{"code":"000810","name":"创维数字"},{"code":"000812","name":"陕西金叶"},{"code":"000813","name":"德展健康"},{"code":"000815","name":"美利云"},{"code":"000825","name":"太钢不锈"},{"code":"000828","name":"东莞控股"},{"code":"000829","name":"天音控股"},{"code":"000830","name":"鲁西化工"},{"code":"000831","name":"五矿稀土"},{"code":"000836","name":"富通鑫茂"},{"code":"000839","name":"中信国安"},{"code":"000851","name":"高鸿股份"},{"code":"000856","name":"冀东装备"},{"code":"000859","name":"国风塑业"},{"code":"000863","name":"三湘印象"},{"code":"000877","name":"天山股份"},{"code":"000878","name":"云南铜业"},{"code":"000880","name":"潍柴重机"},{"code":"000881","name":"中广核技"},{"code":"000886","name":"海南高速"},{"code":"000889","name":"中嘉博创"},{"code":"000890","name":"法尔胜"},{"code":"000900","name":"现代投资"},{"code":"000901","name":"航天科技"},{"code":"000903","name":"云内动力"},{"code":"000905","name":"厦门港务"},{"code":"000908","name":"景峰医药"},{"code":"000909","name":"数源科技"},{"code":"000912","name":"泸天化"},{"code":"000913","name":"钱江摩托"},{"code":"000915","name":"山大华特"},{"code":"000917","name":"电广传媒"},{"code":"000929","name":"兰州黄河"},{"code":"000930","name":"中粮科技"},{"code":"000931","name":"中关村"},{"code":"000935","name":"四川双马"},{"code":"000948","name":"南天信息"},{"code":"000949","name":"新乡化纤"},{"code":"000950","name":"重药控股"},{"code":"000952","name":"广济药业"},{"code":"000959","name":"首钢股份"},{"code":"000975","name":"银泰黄金"},{"code":"000976","name":"华铁股份"},{"code":"000990","name":"诚志股份"},{"code":"000996","name":"中国中期"},{"code":"001696","name":"宗申动力"},{"code":"001896","name":"豫能控股"},{"code":"002004","name":"华邦健康"},{"code":"002009","name":"天奇股份"},{"code":"002012","name":"凯恩股份"},{"code":"002016","name":"世荣兆业"},{"code":"002017","name":"东信和平"},{"code":"002022","name":"科华生物"},{"code":"002023","name":"海特高新"},{"code":"002028","name":"思源电气"},{"code":"002034","name":"旺能环境"},{"code":"002037","name":"保利联合"},{"code":"002045","name":"国光电器"},{"code":"002052","name":"同洲电子"},{"code":"002053","name":"云南能投"},{"code":"002054","name":"德美化工"},{"code":"002057","name":"中钢天源"},{"code":"002058","name":"威尔泰"},{"code":"002061","name":"浙江交科"},{"code":"002064","name":"华峰氨纶"},{"code":"002066","name":"瑞泰科技"},{"code":"002073","name":"软控股份"},{"code":"002076","name":"雪莱特"},{"code":"002077","name":"大港股份"},{"code":"002079","name":"苏州固锝"},{"code":"002082","name":"万邦德"},{"code":"002083","name":"孚日股份"},{"code":"002084","name":"海鸥住工"},{"code":"002093","name":"国脉科技"},{"code":"002098","name":"浔兴股份"},{"code":"002103","name":"广博股份"},{"code":"002104","name":"恒宝股份"},{"code":"002107","name":"沃华医药"},{"code":"002108","name":"沧州明珠"},{"code":"002109","name":"兴化股份"},{"code":"002112","name":"三变科技"},{"code":"002114","name":"罗平锌电"},{"code":"002118","name":"紫鑫药业"},{"code":"002119","name":"康强电子"},{"code":"002123","name":"梦网集团"},{"code":"002124","name":"天邦股份"},{"code":"002127","name":"南极电商"},{"code":"002130","name":"沃尔核材"},{"code":"002133","name":"广宇集团"},{"code":"002134","name":"天津普林"},{"code":"002136","name":"安纳达"},{"code":"002137","name":"麦达数字"},{"code":"002145","name":"中核钛白"},{"code":"002146","name":"荣盛发展"},{"code":"002148","name":"北纬科技"},{"code":"002149","name":"西部材料"},{"code":"002150","name":"通润装备"},{"code":"002155","name":"湖南黄金"},{"code":"002159","name":"三特索道"},{"code":"002161","name":"远望谷"},{"code":"002162","name":"悦心健康"},{"code":"002166","name":"莱茵生物"},{"code":"002167","name":"东方锆业"},{"code":"002168","name":"惠程科技"},{"code":"002170","name":"芭田股份"},{"code":"002172","name":"澳洋健康"},{"code":"002173","name":"创新医疗"},{"code":"002174","name":"游族网络"},{"code":"002176","name":"江特电机"},{"code":"002177","name":"御银股份"},{"code":"002178","name":"延华智能"},{"code":"002182","name":"云海金属"},{"code":"002183","name":"怡亚通"},{"code":"002184","name":"海得控制"},{"code":"002186","name":"全聚德"},{"code":"002190","name":"成飞集成"},{"code":"002192","name":"融捷股份"},{"code":"002196","name":"方正电机"},{"code":"002197","name":"证通电子"},{"code":"002199","name":"东晶电子"},{"code":"002201","name":"九鼎新材"},{"code":"002208","name":"合肥城建"},{"code":"002211","name":"宏达新材"},{"code":"002212","name":"南洋股份"},{"code":"002213","name":"特尔佳"},{"code":"002218","name":"拓日新能"},{"code":"002219","name":"恒康医疗"},{"code":"002221","name":"东华能源"},{"code":"002224","name":"三力士"},{"code":"002225","name":"濮耐股份"},{"code":"002226","name":"江南化工"},{"code":"002227","name":"奥特迅"},{"code":"002228","name":"合兴包装"},{"code":"002229","name":"鸿博股份"},{"code":"002231","name":"奥维通信"},{"code":"002232","name":"启明信息"},{"code":"002234","name":"民和股份"},{"code":"002235","name":"安妮股份"},{"code":"002239","name":"奥特佳"},{"code":"002240","name":"威华股份"},{"code":"002243","name":"通产丽星"},{"code":"002245","name":"澳洋顺昌"},{"code":"002246","name":"北化股份"},{"code":"002247","name":"聚力文化"},{"code":"002248","name":"华东数控"},{"code":"002250","name":"联化科技"},{"code":"002256","name":"兆新股份"},{"code":"002261","name":"拓维信息"},{"code":"002262","name":"恩华药业"},{"code":"002264","name":"新华都"},{"code":"002265","name":"西仪股份"},{"code":"002266","name":"浙富控股"},{"code":"002267","name":"陕天然气"},{"code":"002270","name":"华明装备"},{"code":"002278","name":"神开股份"},{"code":"002280","name":"联络互动"},{"code":"002282","name":"博深股份"},{"code":"002286","name":"保龄宝"},{"code":"002288","name":"超华科技"},{"code":"002291","name":"星期六"},{"code":"002292","name":"奥飞娱乐"},{"code":"002295","name":"精艺股份"},{"code":"002296","name":"辉煌科技"},{"code":"002297","name":"博云新材"},{"code":"002298","name":"中电兴发"},{"code":"002303","name":"美盈森"},{"code":"002308","name":"威创股份"},{"code":"002309","name":"中利集团"},{"code":"002310","name":"东方园林"},{"code":"002312","name":"三泰控股"},{"code":"002313","name":"日海智能"},{"code":"002314","name":"南山控股"},{"code":"002316","name":"亚联发展"},{"code":"002317","name":"众生药业"},{"code":"002318","name":"久立特材"},{"code":"002319","name":"乐通股份"},{"code":"002320","name":"海峡股份"},{"code":"002326","name":"永太科技"},{"code":"002329","name":"皇氏集团"},{"code":"002330","name":"得利斯"},{"code":"002332","name":"仙琚制药"},{"code":"002334","name":"英威腾"},{"code":"002335","name":"科华恒盛"},{"code":"002338","name":"奥普光电"},{"code":"002339","name":"积成电子"},{"code":"002341","name":"新纶科技"},{"code":"002342","name":"巨力索具"},{"code":"002345","name":"潮宏基"},{"code":"002346","name":"柘中股份"},{"code":"002347","name":"泰尔股份"},{"code":"002348","name":"高乐股份"},{"code":"002349","name":"精华制药"},{"code":"002350","name":"北京科锐"},{"code":"002354","name":"天神娱乐"},{"code":"002358","name":"森源电气"},{"code":"002360","name":"同德化工"},{"code":"002361","name":"神剑股份"},{"code":"002362","name":"汉王科技"},{"code":"002363","name":"隆基机械"},{"code":"002364","name":"中恒电气"},{"code":"002366","name":"台海核电"},{"code":"002369","name":"卓翼科技"},{"code":"002370","name":"亚太药业"},{"code":"002378","name":"章源钨业"},{"code":"002379","name":"宏创控股"},{"code":"002380","name":"科远智慧"},{"code":"002381","name":"双箭股份"},{"code":"002385","name":"大北农"},{"code":"002387","name":"维信诺"},{"code":"002389","name":"航天彩虹"},{"code":"002390","name":"信邦制药"},{"code":"002391","name":"长青股份"},{"code":"002392","name":"北京利尔"},{"code":"002395","name":"双象股份"},{"code":"002397","name":"梦洁股份"},{"code":"002399","name":"海普瑞"},{"code":"002400","name":"省广集团"},{"code":"002401","name":"中远海科"},{"code":"002402","name":"和而泰"},{"code":"002403","name":"爱仕达"},{"code":"002406","name":"远东传动"},{"code":"002407","name":"多氟多"},{"code":"002408","name":"齐翔腾达"},{"code":"002409","name":"雅克科技"},{"code":"002410","name":"广联达"},{"code":"002411","name":"延安必康"},{"code":"002412","name":"汉森制药"},{"code":"002413","name":"雷科防务"},{"code":"002416","name":"爱施德"},{"code":"002417","name":"深南股份"},{"code":"002418","name":"康盛股份"},{"code":"002426","name":"胜利精密"},{"code":"002429","name":"兆驰股份"},{"code":"002430","name":"杭氧股份"},{"code":"002431","name":"棕榈股份"},{"code":"002433","name":"太安堂"},{"code":"002437","name":"誉衡药业"},{"code":"002438","name":"江苏神通"},{"code":"002446","name":"盛路通信"},{"code":"002448","name":"中原内配"},{"code":"002451","name":"摩恩电气"},{"code":"002452","name":"长高集团"},{"code":"002453","name":"华软科技"},{"code":"002454","name":"松芝股份"},{"code":"002457","name":"青龙管业"},{"code":"002459","name":"天业通联"},{"code":"002464","name":"众应互联"},{"code":"002466","name":"天齐锂业"},{"code":"002467","name":"二六三"},{"code":"002469","name":"三维工程"},{"code":"002471","name":"中超控股"},{"code":"002472","name":"双环传动"},{"code":"002474","name":"榕基软件"},{"code":"002476","name":"宝莫股份"},{"code":"002478","name":"常宝股份"},{"code":"002480","name":"新筑股份"},{"code":"002481","name":"双塔食品"},{"code":"002483","name":"润邦股份"},{"code":"002486","name":"嘉麟杰"},{"code":"002489","name":"浙江永强"},{"code":"002490","name":"山东墨龙"},{"code":"002491","name":"通鼎互联"},{"code":"002492","name":"恒基达鑫"},{"code":"002493","name":"荣盛石化"},{"code":"002495","name":"佳隆股份"},{"code":"002496","name":"辉丰股份"},{"code":"002497","name":"雅化集团"},{"code":"002498","name":"汉缆股份"},{"code":"002502","name":"骅威文化"},{"code":"002503","name":"搜于特"},{"code":"002504","name":"弘高创意"},{"code":"002505","name":"大康农业"},{"code":"002506","name":"协鑫集成"},{"code":"002967","name":"广电计量"},{"code":"002512","name":"达华智能"},{"code":"002513","name":"蓝丰生化"},{"code":"002514","name":"宝馨科技"},{"code":"002515","name":"金字火腿"},{"code":"002517","name":"恺英网络"},{"code":"002519","name":"银河电子"},{"code":"002520","name":"日发精机"},{"code":"002523","name":"天桥起重"},{"code":"002524","name":"光正集团"},{"code":"002526","name":"山东矿机"},{"code":"002527","name":"新时达"},{"code":"002528","name":"英飞拓"},{"code":"002530","name":"金财互联"},{"code":"002532","name":"新界泵业"},{"code":"002538","name":"司尔特"},{"code":"002540","name":"亚太科技"},{"code":"002541","name":"鸿路钢构"},{"code":"002544","name":"杰赛科技"},{"code":"002545","name":"东方铁塔"},{"code":"002548","name":"金新农"},{"code":"002550","name":"千红制药"},{"code":"002551","name":"尚荣医疗"},{"code":"002552","name":"宝鼎科技"},{"code":"002553","name":"南方轴承"},{"code":"002554","name":"惠博普"},{"code":"002562","name":"兄弟科技"},{"code":"002564","name":"天沃科技"},{"code":"002575","name":"群兴玩具"},{"code":"002576","name":"通达动力"},{"code":"002577","name":"雷柏科技"},{"code":"002581","name":"未名医药"},{"code":"002584","name":"西陇科学"},{"code":"002585","name":"双星新材"},{"code":"002587","name":"奥拓电子"},{"code":"002591","name":"恒大高新"},{"code":"002592","name":"八菱科技"},{"code":"002596","name":"海南瑞泽"},{"code":"002605","name":"姚记科技"},{"code":"002610","name":"爱康科技"},{"code":"002615","name":"哈尔斯"},{"code":"002616","name":"长青集团"},{"code":"002617","name":"露笑科技"},{"code":"002618","name":"丹邦科技"},{"code":"002619","name":"艾格拉斯"},{"code":"002622","name":"融钰集团"},{"code":"002623","name":"亚玛顿"},{"code":"002624","name":"完美世界"},{"code":"002625","name":"光启技术"},{"code":"002627","name":"宜昌交运"},{"code":"002630","name":"华西能源"},{"code":"002631","name":"德尔未来"},{"code":"002634","name":"棒杰股份"},{"code":"002636","name":"金安国纪"},{"code":"002637","name":"赞宇科技"},{"code":"002638","name":"勤上股份"},{"code":"002639","name":"雪人股份"},{"code":"002641","name":"永高股份"},{"code":"002644","name":"佛慈制药"},{"code":"002650","name":"加加食品"},{"code":"002651","name":"利君股份"},{"code":"002652","name":"扬子新材"},{"code":"002653","name":"海思科"},{"code":"002654","name":"万润科技"},{"code":"002656","name":"摩登大道"},{"code":"002658","name":"雪迪龙"},{"code":"002659","name":"凯文教育"},{"code":"002660","name":"茂硕电源"},{"code":"002662","name":"京威股份"},{"code":"002663","name":"普邦股份"},{"code":"002664","name":"长鹰信质"},{"code":"002665","name":"首航高科"},{"code":"002669","name":"康达新材"},{"code":"002670","name":"国盛金控"},{"code":"002674","name":"兴业科技"},{"code":"002676","name":"顺威股份"},{"code":"002678","name":"珠江钢琴"},{"code":"002679","name":"福建金森"},{"code":"002685","name":"华东重机"},{"code":"002688","name":"金河生物"},{"code":"002689","name":"远大智能"},{"code":"002693","name":"双成药业"},{"code":"002695","name":"煌上煌"},{"code":"002698","name":"博实股份"},{"code":"002700","name":"新疆浩源"},{"code":"002702","name":"海欣食品"},{"code":"002703","name":"浙江世宝"},{"code":"002708","name":"光洋股份"},{"code":"002709","name":"天赐材料"},{"code":"002712","name":"思美传媒"},{"code":"002713","name":"东易日盛"},{"code":"002715","name":"登云股份"},{"code":"002717","name":"岭南股份"},{"code":"002719","name":"麦趣尔"},{"code":"002721","name":"金一文化"},{"code":"002722","name":"金轮股份"},{"code":"002723","name":"金莱特"},{"code":"002724","name":"海洋王"},{"code":"002725","name":"跃岭股份"},{"code":"002728","name":"特一药业"},{"code":"002729","name":"好利来"},{"code":"002730","name":"电光科技"},{"code":"002732","name":"燕塘乳业"},{"code":"002734","name":"利民股份"},{"code":"002735","name":"王子新材"},{"code":"002736","name":"国信证券"},{"code":"002737","name":"葵花药业"},{"code":"002738","name":"中矿资源"},{"code":"002742","name":"三圣股份"},{"code":"002748","name":"世龙实业"},{"code":"002750","name":"龙津药业"},{"code":"002751","name":"易尚展示"},{"code":"002753","name":"永东股份"},{"code":"002755","name":"奥赛康"},{"code":"002756","name":"永兴材料"},{"code":"002758","name":"华通医药"},{"code":"002759","name":"天际股份"},{"code":"002760","name":"凤形股份"},{"code":"002761","name":"多喜爱"},{"code":"002763","name":"汇洁股份"},{"code":"002765","name":"蓝黛传动"},{"code":"002767","name":"先锋电子"},{"code":"002769","name":"普路通"},{"code":"002770","name":"科迪乳业"},{"code":"002771","name":"真视通"},{"code":"002772","name":"众兴菌业"},{"code":"002778","name":"高科石化"},{"code":"002780","name":"三夫户外"},{"code":"002781","name":"奇信股份"},{"code":"002782","name":"可立克"},{"code":"002783","name":"凯龙股份"},{"code":"002785","name":"万里石"},{"code":"002786","name":"银宝山新"},{"code":"002787","name":"华源控股"},{"code":"002790","name":"瑞尔特"},{"code":"002789","name":"建艺集团"},{"code":"002792","name":"通宇通讯"},{"code":"002791","name":"坚朗五金"},{"code":"002793","name":"东音股份"},{"code":"002795","name":"永和智控"},{"code":"002796","name":"世嘉科技"},{"code":"002797","name":"第一创业"},{"code":"002800","name":"天顺股份"},{"code":"002799","name":"环球印务"},{"code":"002801","name":"微光股份"},{"code":"002802","name":"洪汇新材"},{"code":"002805","name":"丰元股份"},{"code":"002803","name":"吉宏股份"},{"code":"002806","name":"华锋股份"},{"code":"002808","name":"恒久科技"},{"code":"002809","name":"红墙股份"},{"code":"002810","name":"山东赫达"},{"code":"002602","name":"世纪华通"},{"code":"002807","name":"江阴银行"},{"code":"002811","name":"郑中设计"},{"code":"002813","name":"路畅科技"},{"code":"002816","name":"和科达"},{"code":"002817","name":"黄山胶囊"},{"code":"002819","name":"东方中科"},{"code":"002820","name":"桂发祥"},{"code":"002823","name":"凯中精密"},{"code":"002825","name":"纳尔股份"},{"code":"002822","name":"中装建设"},{"code":"002828","name":"贝肯能源"},{"code":"002826","name":"易明医药"},{"code":"002827","name":"高争民爆"},{"code":"002829","name":"星网宇达"},{"code":"002830","name":"名雕股份"},{"code":"002831","name":"裕同科技"},{"code":"002835","name":"同为股份"},{"code":"002833","name":"弘亚数控"},{"code":"002836","name":"新宏泽"},{"code":"002837","name":"英维克"},{"code":"002838","name":"道恩股份"},{"code":"002824","name":"和胜股份"},{"code":"002842","name":"翔鹭钨业"},{"code":"002843","name":"泰嘉股份"},{"code":"002839","name":"张家港行"},{"code":"002845","name":"同兴达"},{"code":"002846","name":"英联股份"},{"code":"002848","name":"高斯贝尔"},{"code":"002849","name":"威星智能"},{"code":"002868","name":"绿康生化"},{"code":"002774","name":"快意电梯"},{"code":"002840","name":"华统股份"},{"code":"002858","name":"力盛赛车"},{"code":"002850","name":"科达利"},{"code":"002857","name":"三晖电气"},{"code":"002855","name":"捷荣技术"},{"code":"002856","name":"美芝股份"},{"code":"002853","name":"皮阿诺"},{"code":"002863","name":"今飞凯达"},{"code":"002865","name":"钧达股份"},{"code":"002866","name":"传艺科技"},{"code":"002861","name":"瀛通通讯"},{"code":"002860","name":"星帅尔"},{"code":"002862","name":"实丰文化"},{"code":"002859","name":"洁美科技"},{"code":"001979","name":"招商蛇口"},{"code":"002871","name":"伟隆股份"},{"code":"002870","name":"香山股份"},{"code":"002872","name":"天圣制药"},{"code":"002873","name":"新天药业"},{"code":"002876","name":"三利谱"},{"code":"002875","name":"安奈儿"},{"code":"002877","name":"智能自控"},{"code":"002878","name":"元隆雅图"},{"code":"002880","name":"卫光生物"},{"code":"002883","name":"中设股份"},{"code":"002881","name":"美格智能"},{"code":"002886","name":"沃特股份"},{"code":"002885","name":"京泉华"},{"code":"002879","name":"长缆科技"},{"code":"002882","name":"金龙羽"},{"code":"002889","name":"东方嘉盛"},{"code":"002887","name":"绿茵生态"},{"code":"002890","name":"弘宇股份"},{"code":"002892","name":"科力尔"},{"code":"002891","name":"中宠股份"},{"code":"002895","name":"川恒股份"},{"code":"002896","name":"中大力德"},{"code":"002897","name":"意华股份"},{"code":"002898","name":"赛隆药业"},{"code":"002893","name":"华通热力"},{"code":"002906","name":"华阳集团"},{"code":"002903","name":"宇环数控"},{"code":"002905","name":"金逸影视"},{"code":"002907","name":"华森制药"},{"code":"002909","name":"集泰股份"},{"code":"002910","name":"庄园牧场"},{"code":"002864","name":"盘龙药业"},{"code":"002912","name":"中新赛克"},{"code":"002911","name":"佛燃股份"},{"code":"002915","name":"中欣氟材"},{"code":"002917","name":"金奥博"},{"code":"002919","name":"名臣健康"},{"code":"002920","name":"德赛西威"},{"code":"002921","name":"联诚精密"},{"code":"002922","name":"伊戈尔"},{"code":"002923","name":"润都股份"},{"code":"002927","name":"泰永长征"},{"code":"002929","name":"润建通信"},{"code":"002930","name":"宏川智慧"},{"code":"002931","name":"锋龙股份"},{"code":"002932","name":"明德生物"},{"code":"002935","name":"天奥电子"},{"code":"002936","name":"郑州银行"},{"code":"002937","name":"兴瑞科技"},{"code":"002940","name":"昂利康"},{"code":"002939","name":"长城证券"},{"code":"002941","name":"新疆交建"},{"code":"002943","name":"宇晶股份"},{"code":"002942","name":"新农股份"},{"code":"002952","name":"亚世光电"},{"code":"002948","name":"青岛银行"},{"code":"002945","name":"华林证券"},{"code":"002949","name":"华阳国际"},{"code":"002958","name":"青农商行"},{"code":"002955","name":"鸿合科技"},{"code":"002956","name":"西麦食品"},{"code":"002957","name":"科瑞技术"},{"code":"002960","name":"青鸟消防"},{"code":"002961","name":"瑞达期货"},{"code":"002962","name":"五方光电"},{"code":"000001","name":"平安银行"},{"code":"000002","name":"万科A"},{"code":"000012","name":"南玻A"},{"code":"000014","name":"沙河股份"},{"code":"000016","name":"深康佳A"},{"code":"000019","name":"深粮控股"},{"code":"000020","name":"深华发A"},{"code":"000021","name":"深科技"},{"code":"001872","name":"招商港口"},{"code":"000026","name":"飞亚达A"},{"code":"000027","name":"深圳能源"},{"code":"000031","name":"大悦城"},{"code":"000032","name":"深桑达A"},{"code":"000034","name":"神州数码"},{"code":"000035","name":"中国天楹"},{"code":"000037","name":"深南电A"},{"code":"000039","name":"中集集团"},{"code":"000040","name":"东旭蓝天"},{"code":"000043","name":"中航善达"},{"code":"000046","name":"泛海控股"},{"code":"000049","name":"德赛电池"},{"code":"000060","name":"中金岭南"},{"code":"000062","name":"深圳华强"},{"code":"000063","name":"中兴通讯"},{"code":"000065","name":"北方国际"},{"code":"000066","name":"中国长城"},{"code":"000069","name":"华侨城A"},{"code":"000070","name":"特发信息"},{"code":"000088","name":"盐田港"},{"code":"000089","name":"深圳机场"},{"code":"000090","name":"天健集团"},{"code":"000099","name":"中信海直"},{"code":"000100","name":"TCL集团"},{"code":"000156","name":"华数传媒"},{"code":"000157","name":"中联重科"},{"code":"000159","name":"国际实业"},{"code":"000166","name":"申万宏源"},{"code":"000333","name":"美的集团"},{"code":"000338","name":"潍柴动力"},{"code":"000400","name":"许继电气"},{"code":"000401","name":"冀东水泥"},{"code":"000413","name":"东旭光电"},{"code":"000423","name":"东阿阿胶"},{"code":"000425","name":"徐工机械"},{"code":"000429","name":"粤高速A"},{"code":"000488","name":"晨鸣纸业"},{"code":"000513","name":"丽珠集团"},{"code":"000516","name":"国际医学"},{"code":"000519","name":"中兵红箭"},{"code":"000521","name":"长虹美菱"},{"code":"000524","name":"岭南控股"},{"code":"000528","name":"柳工"},{"code":"000538","name":"云南白药"},{"code":"000539","name":"粤电力A"},{"code":"000541","name":"佛山照明"},{"code":"000547","name":"航天发展"},{"code":"000550","name":"江铃汽车"},{"code":"000553","name":"安道麦A"},{"code":"000555","name":"神州信息"},{"code":"000558","name":"莱茵体育"},{"code":"000559","name":"万向钱潮"},{"code":"000560","name":"我爱我家"},{"code":"000561","name":"烽火电子"},{"code":"000563","name":"陕国投A"},{"code":"000568","name":"泸州老窖"},{"code":"000581","name":"威孚高科"},{"code":"000582","name":"北部湾港"},{"code":"000584","name":"哈工智能"},{"code":"000596","name":"古井贡酒"},{"code":"000603","name":"盛达矿业"},{"code":"000606","name":"顺利办"},{"code":"000617","name":"中油资本"},{"code":"000625","name":"长安汽车"},{"code":"000627","name":"天茂集团"},{"code":"000636","name":"风华高科"},{"code":"000651","name":"格力电器"},{"code":"000661","name":"长春高新"},{"code":"000671","name":"阳光城"},{"code":"000676","name":"智度股份"},{"code":"000681","name":"视觉中国"},{"code":"000708","name":"中信特钢"},{"code":"000723","name":"美锦能源"},{"code":"000725","name":"京东方A"},{"code":"000726","name":"鲁泰A"},{"code":"000728","name":"国元证券"},{"code":"000729","name":"燕京啤酒"},{"code":"000732","name":"泰禾集团"},{"code":"000733","name":"振华科技"},{"code":"000738","name":"航发控制"},{"code":"000750","name":"国海证券"},{"code":"000768","name":"中航飞机"},{"code":"000776","name":"广发证券"},{"code":"000777","name":"中核科技"},{"code":"000785","name":"居然之家"},{"code":"000788","name":"北大医药"},{"code":"000796","name":"凯撒旅游"},{"code":"000811","name":"冰轮环境"},{"code":"002194","name":"武汉凡谷"},{"code":"000823","name":"超声电子"},{"code":"000826","name":"启迪环境"},{"code":"000848","name":"承德露露"},{"code":"000858","name":"五粮液"},{"code":"000860","name":"顺鑫农业"},{"code":"000869","name":"张裕A"},{"code":"000876","name":"新希望"},{"code":"000888","name":"峨眉山A"},{"code":"000895","name":"双汇发展"},{"code":"000902","name":"新洋丰"},{"code":"000910","name":"大亚圣象"},{"code":"000921","name":"海信家电"},{"code":"000936","name":"华西股份"},{"code":"000938","name":"紫光股份"},{"code":"000951","name":"中国重汽"},{"code":"000957","name":"中通客车"},{"code":"000961","name":"中南建设"},{"code":"000963","name":"华东医药"},{"code":"000967","name":"盈峰环境"},{"code":"000970","name":"中科三环"},{"code":"000977","name":"浪潮信息"},{"code":"000978","name":"桂林旅游"},{"code":"000987","name":"越秀金控"},{"code":"000988","name":"华工科技"},{"code":"000989","name":"九芝堂"},{"code":"000993","name":"闽东电力"},{"code":"000998","name":"隆平高科"},{"code":"000999","name":"华润三九"},{"code":"002001","name":"新和成"},{"code":"002002","name":"鸿达兴业"},{"code":"002003","name":"伟星股份"},{"code":"002007","name":"华兰生物"},{"code":"002008","name":"大族激光"},{"code":"002010","name":"传化智联"},{"code":"002013","name":"中航机电"},{"code":"002014","name":"永新股份"},{"code":"002019","name":"亿帆医药"},{"code":"002020","name":"京新药业"},{"code":"002024","name":"苏宁易购"},{"code":"002025","name":"航天电器"},{"code":"002027","name":"分众传媒"},{"code":"002030","name":"达安基因"},{"code":"002032","name":"苏泊尔"},{"code":"002033","name":"丽江旅游"},{"code":"002035","name":"华帝股份"},{"code":"002036","name":"联创电子"},{"code":"002038","name":"双鹭药业"},{"code":"002040","name":"南京港"},{"code":"002041","name":"登海种业"},{"code":"002042","name":"华孚时尚"},{"code":"002043","name":"兔宝宝"},{"code":"002044","name":"美年健康"},{"code":"002049","name":"紫光国微"},{"code":"002050","name":"三花智控"},{"code":"002051","name":"中工国际"},{"code":"002055","name":"得润电子"},{"code":"002056","name":"横店东磁"},{"code":"002059","name":"云南旅游"},{"code":"002060","name":"粤水电"},{"code":"002063","name":"远光软件"},{"code":"002065","name":"东华软件"},{"code":"002074","name":"国轩高科"},{"code":"002080","name":"中材科技"},{"code":"002081","name":"金螳螂"},{"code":"002085","name":"万丰奥威"},{"code":"002090","name":"金智科技"},{"code":"002091","name":"江苏国泰"},{"code":"002092","name":"中泰化学"},{"code":"002094","name":"青岛金王"},{"code":"002095","name":"生意宝"},{"code":"002097","name":"山河智能"},{"code":"002099","name":"海翔药业"},{"code":"002101","name":"广东鸿图"},{"code":"002106","name":"莱宝高科"},{"code":"002110","name":"三钢闽光"},{"code":"002111","name":"威海广泰"},{"code":"002115","name":"三维通信"},{"code":"002116","name":"中国海诚"},{"code":"002117","name":"东港股份"},{"code":"002120","name":"韵达股份"},{"code":"002121","name":"科陆电子"},{"code":"002126","name":"银轮股份"},{"code":"002129","name":"中环股份"},{"code":"002135","name":"东南网架"},{"code":"002138","name":"顺络电子"},{"code":"002139","name":"拓邦股份"},{"code":"002142","name":"宁波银行"},{"code":"002151","name":"北斗星通"},{"code":"002152","name":"广电运通"},{"code":"002153","name":"石基信息"},{"code":"002156","name":"通富微电"},{"code":"002157","name":"正邦科技"},{"code":"002158","name":"汉钟精机"},{"code":"002169","name":"智光电气"},{"code":"002179","name":"中航光电"},{"code":"002180","name":"纳思达"},{"code":"002181","name":"粤传媒"},{"code":"002185","name":"华天科技"},{"code":"002187","name":"广百股份"},{"code":"002189","name":"中光学"},{"code":"002191","name":"劲嘉股份"},{"code":"002195","name":"二三四五"},{"code":"002202","name":"金风科技"},{"code":"002203","name":"海亮股份"},{"code":"002206","name":"海利得"},{"code":"002214","name":"大立科技"},{"code":"002215","name":"诺普信"},{"code":"002216","name":"三全食品"},{"code":"002217","name":"合力泰"},{"code":"002222","name":"福晶科技"},{"code":"002223","name":"鱼跃医疗"},{"code":"002230","name":"科大讯飞"},{"code":"002233","name":"塔牌集团"},{"code":"002236","name":"大华股份"},{"code":"002238","name":"天威视讯"},{"code":"002241","name":"歌尔股份"},{"code":"002242","name":"九阳股份"},{"code":"002244","name":"滨江集团"},{"code":"002252","name":"上海莱士"},{"code":"002253","name":"川大智胜"},{"code":"002258","name":"利尔化学"},{"code":"002268","name":"卫士通"},{"code":"002271","name":"东方雨虹"},{"code":"002273","name":"水晶光电"},{"code":"002275","name":"桂林三金"},{"code":"002277","name":"友阿股份"},{"code":"002279","name":"久其软件"},{"code":"002281","name":"光迅科技"},{"code":"002285","name":"世联行"},{"code":"002293","name":"罗莱生活"},{"code":"002294","name":"信立泰"},{"code":"002299","name":"圣农发展"},{"code":"002300","name":"太阳电缆"},{"code":"002301","name":"齐心集团"},{"code":"002302","name":"西部建设"},{"code":"002304","name":"洋河股份"},{"code":"002307","name":"北新路桥"},{"code":"002311","name":"海大集团"},{"code":"002315","name":"焦点科技"},{"code":"002327","name":"富安娜"},{"code":"002331","name":"皖通科技"},{"code":"002340","name":"格林美"},{"code":"002344","name":"海宁皮城"},{"code":"002351","name":"漫步者"},{"code":"002352","name":"顺丰控股"},{"code":"002353","name":"杰瑞股份"},{"code":"002365","name":"永安药业"},{"code":"002367","name":"康力电梯"},{"code":"002368","name":"太极股份"},{"code":"002371","name":"北方华创"},{"code":"002372","name":"伟星新材"},{"code":"002373","name":"千方科技"},{"code":"002376","name":"新北洋"},{"code":"002382","name":"蓝帆医疗"},{"code":"002383","name":"合众思壮"},{"code":"002384","name":"东山精密"},{"code":"002394","name":"联发股份"},{"code":"002396","name":"星网锐捷"},{"code":"002404","name":"嘉欣丝绸"},{"code":"002405","name":"四维图新"},{"code":"002414","name":"高德红外"},{"code":"002415","name":"海康威视"},{"code":"002419","name":"天虹股份"},{"code":"002421","name":"达实智能"},{"code":"002422","name":"科伦药业"},{"code":"002423","name":"中粮资本"},{"code":"002425","name":"凯撒文化"},{"code":"002432","name":"九安医疗"},{"code":"002434","name":"万里扬"},{"code":"002436","name":"兴森科技"},{"code":"002439","name":"启明星辰"},{"code":"002440","name":"闰土股份"},{"code":"002444","name":"巨星科技"},{"code":"002449","name":"国星光电"},{"code":"002456","name":"欧菲光"},{"code":"002458","name":"益生股份"},{"code":"002460","name":"赣锋锂业"},{"code":"002461","name":"珠江啤酒"},{"code":"002462","name":"嘉事堂"},{"code":"002463","name":"沪电股份"},{"code":"002465","name":"海格通信"},{"code":"002468","name":"申通快递"},{"code":"002475","name":"立讯精密"},{"code":"002479","name":"富春环保"},{"code":"002482","name":"广田集团"},{"code":"002484","name":"江海股份"},{"code":"002500","name":"山西证券"},{"code":"002507","name":"涪陵榨菜"},{"code":"002508","name":"老板电器"},{"code":"002510","name":"天汽模"},{"code":"002511","name":"中顺洁柔"},{"code":"002516","name":"旷达科技"},{"code":"002518","name":"科士达"},{"code":"002531","name":"天顺风能"},{"code":"002533","name":"金杯电工"},{"code":"002534","name":"杭锅股份"},{"code":"002537","name":"海联金汇"},{"code":"002543","name":"万和电气"},{"code":"002546","name":"新联电子"},{"code":"002547","name":"春兴精工"},{"code":"002555","name":"三七互娱"},{"code":"002557","name":"洽洽食品"},{"code":"002558","name":"巨人网络"},{"code":"002559","name":"亚威股份"},{"code":"002561","name":"徐家汇"},{"code":"002563","name":"森马服饰"},{"code":"002565","name":"顺灏股份"},{"code":"002567","name":"唐人神"},{"code":"002568","name":"百润股份"},{"code":"002570","name":"贝因美"},{"code":"002572","name":"索菲亚"},{"code":"002573","name":"清新环境"},{"code":"002579","name":"中京电子"},{"code":"002582","name":"好想你"},{"code":"002583","name":"海能达"},{"code":"002589","name":"瑞康医药"},{"code":"002594","name":"比亚迪"},{"code":"002595","name":"豪迈科技"},{"code":"002600","name":"领益智造"},{"code":"002601","name":"龙蟒佰利"},{"code":"002603","name":"以岭药业"},{"code":"002607","name":"中公教育"},{"code":"002608","name":"江苏国信"},{"code":"002609","name":"捷顺科技"},{"code":"002614","name":"奥佳华"},{"code":"002626","name":"金达威"},{"code":"002628","name":"成都路桥"},{"code":"002632","name":"道明光学"},{"code":"002635","name":"安洁科技"},{"code":"002640","name":"跨境通"},{"code":"002643","name":"万润股份"},{"code":"002645","name":"华宏科技"},{"code":"002646","name":"青青稞酒"},{"code":"002647","name":"仁东控股"},{"code":"002648","name":"卫星石化"},{"code":"002649","name":"博彦科技"},{"code":"002655","name":"共达电声"},{"code":"002657","name":"中科金财"},{"code":"002661","name":"克明面业"},{"code":"002666","name":"德联集团"},{"code":"002668","name":"奥马电器"},{"code":"002672","name":"东江环保"},{"code":"002673","name":"西部证券"},{"code":"002675","name":"东诚药业"},{"code":"002677","name":"浙江美大"},{"code":"002681","name":"奋达科技"},{"code":"002690","name":"美亚光电"},{"code":"002696","name":"百洋股份"},{"code":"002697","name":"红旗连锁"},{"code":"002701","name":"奥瑞金"},{"code":"002705","name":"新宝股份"},{"code":"002706","name":"良信电器"},{"code":"002707","name":"众信旅游"},{"code":"002714","name":"牧原股份"},{"code":"002718","name":"友邦吊顶"},{"code":"002726","name":"龙大肉食"},{"code":"002727","name":"一心堂"},{"code":"002733","name":"雄韬股份"},{"code":"002739","name":"万达电影"},{"code":"002741","name":"光华科技"},{"code":"002743","name":"富煌钢构"},{"code":"002745","name":"木林森"},{"code":"002746","name":"仙坛股份"},{"code":"002747","name":"埃斯顿"},{"code":"002757","name":"南兴股份"},{"code":"002762","name":"金发拉比"},{"code":"002768","name":"国恩股份"},{"code":"002773","name":"康弘药业"},{"code":"002775","name":"文科园林"},{"code":"002777","name":"久远银海"},{"code":"002788","name":"鹭燕医药"},{"code":"002798","name":"帝欧家居"},{"code":"002812","name":"恩捷股份"},{"code":"002815","name":"崇达技术"},{"code":"002821","name":"凯莱英"},{"code":"002832","name":"比音勒芬"},{"code":"002841","name":"视源股份"},{"code":"002847","name":"盐津铺子"},{"code":"002852","name":"道道全"},{"code":"002851","name":"麦格米特"},{"code":"002867","name":"周大生"},{"code":"002869","name":"金溢科技"},{"code":"002884","name":"凌霄泵业"},{"code":"002888","name":"惠威科技"},{"code":"002899","name":"英派斯"},{"code":"002901","name":"大博医疗"},{"code":"002900","name":"哈三联"},{"code":"002902","name":"铭普光磁"},{"code":"002908","name":"德生科技"},{"code":"002913","name":"奥士康"},{"code":"002916","name":"深南电路"},{"code":"002918","name":"蒙娜丽莎"},{"code":"001965","name":"招商公路"},{"code":"002925","name":"盈趣科技"},{"code":"002926","name":"华西证券"},{"code":"002818","name":"富森美"},{"code":"002928","name":"华夏航空"},{"code":"002933","name":"新兴装备"},{"code":"002938","name":"鹏鼎控股"},{"code":"002946","name":"新乳业"},{"code":"002947","name":"恒铭达"},{"code":"002950","name":"奥美医疗"},{"code":"002959","name":"小熊电器"},{"code":"002966","name":"苏州银行"},{"code":"003816","name":"中国广核"} 5 | ] -------------------------------------------------------------------------------- /src/common/js/util.js: -------------------------------------------------------------------------------- 1 | const formats=[ 2 | {value:100000000,name:'亿'}, 3 | {value:10000,name:'万'} 4 | ] 5 | 6 | /** 7 | * 数字单位格式化 8 | * @param {*} number 9 | */ 10 | export function format(number,fixed=2){ 11 | if(typeof(number)!='number'){ 12 | number=parseFloat(number) 13 | } 14 | if(isNaN(number)){ 15 | return '--' 16 | } 17 | for(let item of formats){ 18 | if(number>=item.value){ 19 | return ((number/item.value).toFixed(fixed))+item.name 20 | } 21 | } 22 | return number 23 | } 24 | 25 | /** 26 | * 日期格式化 27 | * @param {*} str 待格式化日期字符串 20200220121430 28 | * @param {*} format 格式 29 | */ 30 | export function formatDate(str,format){ 31 | let _date=Date.parse(str) 32 | if(isNaN(_date)){ 33 | _date=str.substring(0,4)+'-'+str.substring(4,6)+'-'+str.substring(6,8) 34 | _date+=' '+str.substring(8,10)+':'+str.substring(10,12)+':'+str.substring(12,14) 35 | } 36 | return _date 37 | } 38 | 39 | /** 40 | * 41 | * @param {*} url 42 | */ 43 | export function appendScript(url){ 44 | let _script=document.createElement('script') 45 | _script.src=url 46 | document.body.appendChild(_script) 47 | return new Promise((resolve,reject)=>{ 48 | _script.onload=()=>{ 49 | document.body.removeChild(_script) 50 | resolve() 51 | } 52 | }) 53 | } -------------------------------------------------------------------------------- /src/common/scss/animation.scss: -------------------------------------------------------------------------------- 1 | .slide{ 2 | &-enter-active, 3 | &-leave-active{ 4 | transition:0.3s all; 5 | } 6 | &-enter{ 7 | transform: translate3d(100%,0,0); 8 | } 9 | &-leave-to{ 10 | transform: translate3d(-100%,0,0); 11 | } 12 | } -------------------------------------------------------------------------------- /src/common/scss/app.scss: -------------------------------------------------------------------------------- 1 | @import './reset.scss'; 2 | @import './icon.scss'; 3 | @import './animation.scss'; 4 | @import './mixin.scss'; 5 | // 页面公用 6 | #app{ 7 | position: relative; 8 | } 9 | .page{ 10 | position: fixed; 11 | top:0px;bottom:0px; 12 | width:100%; 13 | display:flex; 14 | flex-direction:column; 15 | max-width:100%; 16 | font-size:$size; 17 | @include themes(); 18 | section{ 19 | padding:10px 20px; 20 | margin-top:20px; 21 | &:first-child{ 22 | margin-top:0px; 23 | } 24 | &--margin-clear{ 25 | margin-top:0px; 26 | } 27 | } 28 | li{ 29 | margin:5px 0px; 30 | } 31 | @each $key,$item in $sizes { 32 | .size--#{$key}{ 33 | font-size:$item; 34 | } 35 | } 36 | .number{ 37 | .change{ 38 | color:$text-up; 39 | } 40 | &--down{ 41 | .change{ 42 | color:$text-down; 43 | } 44 | } 45 | } 46 | .center{ 47 | display:flex; 48 | justify-content:center; 49 | align-items:center; 50 | } 51 | } -------------------------------------------------------------------------------- /src/common/scss/icon.scss: -------------------------------------------------------------------------------- 1 | @font-face{ 2 | font-family: 'stock-icon'; 3 | src: url('../fonts/stock-icon.eot?t=1574732162814'); /* IE9 */ 4 | src: url('../fonts/stock-icon.eot?t=1574732162814#iefix') format('embedded-opentype'), /* IE6-IE8 */ 5 | url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'), 6 | url('../fonts/stock-icon.woff?t=1574732162814') format('woff'), 7 | url('../fonts/stock-icon.ttf?t=1574732162814') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ 8 | url('../fonts/stock-icon.svg?t=1574732162814#stock-icon') format('svg'); /* iOS 4.1- */ 9 | } 10 | 11 | [class^="icon-"]{ 12 | font-family: "stock-icon" !important; 13 | font-size:28px; 14 | font-style: normal; 15 | -webkit-font-smoothing: antialiased; 16 | -moz-osx-font-smoothing: grayscale; 17 | } 18 | 19 | .icon-loading:before { 20 | content: "\e6ae"; 21 | } 22 | .icon-add:before{ 23 | content:"\e60e"; 24 | } 25 | .icon-remove:before{ 26 | content:"\e610"; 27 | } 28 | .icon-search:before{ 29 | content:"\e65a"; 30 | } -------------------------------------------------------------------------------- /src/common/scss/mixin.scss: -------------------------------------------------------------------------------- 1 | @mixin background($image){ 2 | background:transparent url($image) no-repeat center; 3 | background-size:100%; 4 | } 5 | @mixin center-all(){ 6 | display:flex; 7 | justify-content:center; 8 | align-items:center; 9 | } 10 | // 主题系统 11 | @mixin themes(){ 12 | @each $name,$theme in $themes{ 13 | [data-theme='#{$name}'] & { 14 | background:map-get($map:$theme,$key:background); 15 | color:map-get($map:$theme,$key:text); 16 | & section{ 17 | background:map-get($map:$theme,$key:background-section); 18 | } 19 | & input{ 20 | background:map-get($map:$theme,$key:background-section); 21 | color:map-get($map:$theme,$key:text); 22 | } 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /src/common/scss/reset.scss: -------------------------------------------------------------------------------- 1 | @import './variable.scss'; 2 | $blocks:10; 3 | $pace-color:#ffffff; 4 | 5 | @mixin root-font-size(){ 6 | width:100%; 7 | font-size:100vw/$blocks; 8 | body{ 9 | width:100%; 10 | margin:0px auto; 11 | padding:0px; 12 | min-width:$min-width; 13 | max-width:100vw; 14 | } 15 | @media screen and (max-width:$min-width){ 16 | font-size:$min-width/$blocks; 17 | } 18 | @media screen and (min-width: $max-width) { 19 | font-size:75px; 20 | } 21 | } 22 | html{ 23 | @include root-font-size(); 24 | font-family:DINPro-Medium,PingFangSC-Regular,Helvetica,Arial,sans-serif; 25 | -ms-text-size-adjust: 100%; 26 | -webkit-text-size-adjust: 100%; 27 | } 28 | input{ 29 | font-family:DINPro-Medium,PingFangSC-Regular,Helvetica,Arial,sans-serif; 30 | } 31 | body{ 32 | font-size:$size; 33 | } 34 | *, 35 | *:before, 36 | *:after { 37 | box-sizing: border-box; 38 | margin: 0; 39 | } 40 | ul{ 41 | list-style: none; 42 | margin:0px; 43 | padding:0px; 44 | li{ 45 | margin:0px; 46 | padding:0px; 47 | } 48 | } -------------------------------------------------------------------------------- /src/common/scss/variable.scss: -------------------------------------------------------------------------------- 1 | //背景 2 | $default-theme:( 3 | background:#132234, 4 | background-section:#162639, 5 | text:rgba(255,255,255,0.8) 6 | ); 7 | $white-theme:( 8 | background:#f5f5f5, 9 | background-section:#fff, 10 | text:#000 11 | ); 12 | 13 | // 字体颜色 14 | $text-h:#a8b6c8; // 高亮 15 | $text-d:#506277; // 暗 16 | 17 | $text-up:#f03a4f; 18 | $text-down:#00ca66; 19 | $delay:300ms; 20 | 21 | // 圆角 22 | $radius:10px; 23 | $radis-small:5px; 24 | 25 | // 宽度限制 26 | $min-width:320PX; 27 | $max-width:750PX; 28 | 29 | // font-size 30 | $size:30px; 31 | $size-big:34px; 32 | $size-biggest:70px; 33 | $size-small:26px; 34 | $size-mini:20px; 35 | 36 | // 主题系统 37 | $themes:( 38 | default:$default-theme, 39 | white:$white-theme 40 | ); 41 | // 字号 42 | $sizes:( 43 | default:$size, 44 | big:$size-big, 45 | biggest:$size-biggest, 46 | small:$size-small, 47 | mini:$size-mini 48 | ) -------------------------------------------------------------------------------- /src/components/base/button/button.vue: -------------------------------------------------------------------------------- 1 | 7 | 16 | -------------------------------------------------------------------------------- /src/components/base/index.js: -------------------------------------------------------------------------------- 1 | import _listTable from './list-table/list-table.vue' 2 | import _loading from './loading/loading.vue' 3 | import _noResult from './no-result/no-result.vue' 4 | import _button from './button/button.vue' 5 | import _scroll from './scroll/scroll.vue' 6 | import _listView from './list-view/list-view.vue' 7 | 8 | export const button=_button 9 | export const listTable=_listTable 10 | export const noResult=_noResult 11 | export const loading=_loading 12 | export const scroll=_scroll 13 | export const listView=_listView -------------------------------------------------------------------------------- /src/components/base/list-table/list-table.vue: -------------------------------------------------------------------------------- 1 | 25 | 52 | -------------------------------------------------------------------------------- /src/components/base/list-view/list-view.vue: -------------------------------------------------------------------------------- 1 | 12 | 23 | -------------------------------------------------------------------------------- /src/components/base/loading/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DevilsHuan/vue-m-stock/be86f795b5798ebb99098dfdb5a72c7b2cfece52/src/components/base/loading/loading.gif -------------------------------------------------------------------------------- /src/components/base/loading/loading.vue: -------------------------------------------------------------------------------- 1 | 9 | 17 | -------------------------------------------------------------------------------- /src/components/base/no-result/no-result.vue: -------------------------------------------------------------------------------- 1 | 9 | 14 | -------------------------------------------------------------------------------- /src/components/base/scroll/scroll.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /src/components/base/tabs/tabs.vue: -------------------------------------------------------------------------------- 1 | 16 | 35 | -------------------------------------------------------------------------------- /src/components/hq/hq-base.vue: -------------------------------------------------------------------------------- 1 | 28 | 51 | -------------------------------------------------------------------------------- /src/components/hq/hq-chart.vue: -------------------------------------------------------------------------------- 1 | 19 | 56 | -------------------------------------------------------------------------------- /src/components/hq/hq-extend.vue: -------------------------------------------------------------------------------- 1 | 28 | 89 | -------------------------------------------------------------------------------- /src/components/index.js: -------------------------------------------------------------------------------- 1 | import _index from './index/index.vue' 2 | import _search from './search/search.vue' 3 | import _hqBase from './hq/hq-base.vue' 4 | import _hqExtend from './hq/hq-extend.vue' 5 | import _hqChart from './hq/hq-chart.vue' 6 | import _loadingList from './loading-list/loading-list.vue' 7 | 8 | export const index=_index 9 | export const hqBase=_hqBase 10 | export const hqExtend=_hqExtend 11 | export const hqChart=_hqChart 12 | export const search=_search 13 | export const loadingList=_loadingList 14 | 15 | // 组件导入 16 | export function $components(components){ 17 | let _components={} 18 | if(components instanceof Array){ 19 | components.forEach(component=>{ 20 | _components[component.name]=component 21 | }) 22 | }else{ 23 | _components[component.name]=component 24 | } 25 | return _components 26 | } -------------------------------------------------------------------------------- /src/components/index/index.vue: -------------------------------------------------------------------------------- 1 | 16 | 36 | -------------------------------------------------------------------------------- /src/components/kline/kline-line.vue: -------------------------------------------------------------------------------- 1 | 9 | 63 | -------------------------------------------------------------------------------- /src/components/kline/kline-tooltip.vue: -------------------------------------------------------------------------------- 1 | 12 | 61 | -------------------------------------------------------------------------------- /src/components/loading-list/loading-list.vue: -------------------------------------------------------------------------------- 1 | 10 | 26 | -------------------------------------------------------------------------------- /src/components/search/search.vue: -------------------------------------------------------------------------------- 1 | 12 | 31 | -------------------------------------------------------------------------------- /src/components/tabs/tab-item.vue: -------------------------------------------------------------------------------- 1 | 6 | 19 | -------------------------------------------------------------------------------- /src/components/tabs/tabs.vue: -------------------------------------------------------------------------------- 1 | 13 | 37 | -------------------------------------------------------------------------------- /src/config/extends.js: -------------------------------------------------------------------------------- 1 | export const _colorMap=['#f03a4f', '#00ca66'] 2 | const _columns=[ 3 | { 4 | title:'股票名称', 5 | field:'name', 6 | },{ 7 | title:'现价', 8 | field:'now', 9 | class:"center" 10 | },{ 11 | title:'涨跌幅', 12 | class:"center", 13 | render:(v)=>{ 14 | return v.rate>=0?`+${v.rate}%`:`${v.rate}%` 15 | }, 16 | style:(v,column)=>{ 17 | return {'color':v.rate>=0?_colorMap[0]:_colorMap[1]} 18 | } 19 | } 20 | ] 21 | const _default={ 22 | columns:_columns, 23 | list:null 24 | } 25 | const _df={ 26 | columns:_columns, 27 | list:null 28 | } 29 | const _cj=JSON.parse(JSON.stringify(_default)) 30 | _cj.columns[2]={ 31 | title:'成交额(亿)', 32 | class:"center", 33 | render:(v)=>{ 34 | return (v.rate/10000).toFixed(2) 35 | } 36 | } 37 | const _hs=JSON.parse(JSON.stringify(_default)) 38 | _hs.columns[2]={ 39 | title:'换手率', 40 | class:"center", 41 | render:(v)=>{ 42 | return `${v.rate}%` 43 | } 44 | } 45 | export const _extends=[ 46 | {title:'公告',render:'notices',params:{noticeType:0},list:null,index:0,template:0}, 47 | {title:'新闻',render:'notices',params:{noticeType:2},list:null,index:0,template:0}, 48 | {title:'涨幅',render:'tops',params:{type:'azdftop10'},list:null,dataSource:_default,index:1,template:1}, 49 | {title:'跌幅',render:'tops',params:{type:'azdfend10'},list:null,dataSource:_df,index:1,template:1}, 50 | {title:'金额',render:'tops',params:{type:'acjetop10'},list:null,dataSource:_cj,index:1,template:1}, 51 | {title:'换手率',render:'tops',params:{type:'ahsltop10'},list:null,dataSource:_hs,index:1,template:1} 52 | ] -------------------------------------------------------------------------------- /src/config/index.js: -------------------------------------------------------------------------------- 1 | import {_extends,_colorMap} from './extends' 2 | export const COLOR_MAP=_colorMap 3 | export const KLINE_MAP={ 4 | 'Hour':'hour', 5 | 'Five':'five', 6 | 'Day':'day' 7 | } 8 | export const KLINE_NAME={ 9 | [KLINE_MAP.Hour]:'分时', 10 | [KLINE_MAP.Five]:'五日', 11 | [KLINE_MAP.Day]:'日K' 12 | } 13 | export const INDEXS=['sh000001','sz399001','sz399006'] 14 | export const RANKS=['bkqtRank_A_sh','bkqtRank_B_sh','bkqtRank_A_sz','bkqtRank_B_sz'] 15 | // 适配器 16 | export const ADAPERS={ 17 | 'tencent':'tencent' // 腾讯 18 | } 19 | // 默认适配器 20 | export const DEFAULT_ADAPER=ADAPERS.tencent 21 | // 图表 22 | export const CHARTS={ 23 | 'f2':'f2' 24 | } 25 | // 默认图表 26 | export const DEFAULT_CHART=CHARTS.f2 27 | export const TIME_TICKS=['09:30','10:30','11:30','14:00','15:00'] 28 | 29 | // 股票字段map 30 | export const MAPS=[ 31 | {title:'昨收',field:'yesterday',static:1}, 32 | {title:'今开',field:'today',static:1}, 33 | {title:'最高',field:'max'}, 34 | {title:'最低',field:'min'}, 35 | {title:'振幅',field:'amplitude'}, 36 | {title:'成交量',field:'volumn'}, 37 | {title:'成交额',field:'volumnValue'}, 38 | {title:'总市值',field:'total',index:0}, 39 | {title:'流通市值',field:'market',index:0}, 40 | {title:'换手率',field:'turnrate',index:0}, 41 | {title:'市净率',field:'marketrate',index:0}, 42 | {title:'市盈率',field:'perate',index:0}, 43 | ] 44 | // 扩展信息 45 | export const EXTENDS=_extends -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App.vue' 3 | import router from './router' 4 | import store from './stores' 5 | import {mixins} from './mixins/' 6 | // 引用app.scss 7 | import './common/scss/app.scss' 8 | Vue.mixin(mixins) 9 | 10 | new Vue({ 11 | store, 12 | router, 13 | render: h => h(App) 14 | }).$mount('#app') -------------------------------------------------------------------------------- /src/mixins/index.js: -------------------------------------------------------------------------------- 1 | import {COLOR_MAP} from '@/config' 2 | export const mixins={ 3 | computed:{ 4 | transition(){ 5 | return 'slide' 6 | } 7 | }, 8 | methods:{ 9 | push(path){ 10 | this.$router.push(path) 11 | }, 12 | pushStock(stock,replace){ 13 | if(!replace){ 14 | this.push(`/detail/${stock.prefix.toLowerCase()}${stock.code}`) 15 | }else{ 16 | this.$router.replace(`/detail/${stock.prefix.toLowerCase()}${stock.code}`) 17 | } 18 | }, 19 | color(value){ 20 | return { 21 | 'color':value<0?COLOR_MAP[1]:COLOR_MAP[0] 22 | } 23 | }, 24 | size(name){ 25 | return `size--${name}` 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /src/pages/detail/detail.vue: -------------------------------------------------------------------------------- 1 | 12 | 45 | -------------------------------------------------------------------------------- /src/pages/index/index.vue: -------------------------------------------------------------------------------- 1 | 22 | 76 | -------------------------------------------------------------------------------- /src/pages/search/search.vue: -------------------------------------------------------------------------------- 1 | 34 | 68 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | // 启动路由 4 | Vue.use(Router) 5 | const _resolve=(page)=>(resolve)=>require([`../pages${page}`],resolve) 6 | // 定义路由 7 | const index=resolve=>require(["../pages/index/index.vue"],resolve) 8 | const search=resolve=>require(["../pages/search/search.vue"],resolve) 9 | const detail=resolve=>require(["../pages/detail/detail.vue"],resolve) 10 | // 路由实例 11 | let router=new Router({ 12 | routes:[ 13 | { 14 | path:'/', 15 | component:index 16 | }, 17 | { 18 | path:'/detail/:code', 19 | component:detail, 20 | beforeEnter: (to, from, next) => { 21 | next() 22 | } 23 | }, 24 | { 25 | path:'/search', 26 | component:search 27 | } 28 | ] 29 | }) 30 | export default router -------------------------------------------------------------------------------- /src/stores/actions.js: -------------------------------------------------------------------------------- 1 | // 自选 2 | import * as types from './mutation-types' 3 | import * as adaper from '@/common/js/adaper' 4 | import {INDEXS,SEARCHS,KLINE_MAP} from '@/config/' 5 | import {stocks} from '@/common/js/stocks' 6 | 7 | export function indexHq({commit,getters}){ 8 | adaper.shorts(INDEXS).then(list=>{ 9 | commit(types.INDEXS,list) 10 | }) 11 | } 12 | 13 | // 图表 14 | export function klines({commit},{stock,klineType=KLINE_MAP.Hour}){ 15 | return adaper.klines(stock,klineType) 16 | } 17 | 18 | // 大盘涨跌情况 19 | export function ranks({commit,getters}){ 20 | return adaper.ranks() 21 | } 22 | 23 | // 股票基本信息 24 | export function hq({commit,getters},code){ 25 | return new Promise((resolve,reject)=> 26 | adaper.hq(code).then(datas=>{ 27 | datas.free=getters.isFree(datas.code) 28 | resolve(datas) 29 | }) 30 | ) 31 | } 32 | 33 | // 自选股 34 | export function shortByFrees({commit,getters}){ 35 | this.dispatch('shortByCodes',getters.freeCodes()).then(list=>{ 36 | commit(types.MINES,list) 37 | }) 38 | } 39 | 40 | // 批量股票简要信息 41 | export function shortByCodes({commit,getters},codes){ 42 | return new Promise((resolve,reject)=> 43 | adaper.shorts(codes).then(datas=>{ 44 | resolve(datas) 45 | }) 46 | ) 47 | } 48 | 49 | // 新闻公告 50 | export function notices({commit},{stock,noticeType}){ 51 | return adaper.notices(stock,noticeType) 52 | } 53 | 54 | // 排行榜 55 | export function tops({commit},params){ 56 | return adaper.tops(params) 57 | } 58 | 59 | export function addFree({commit,getters},stock){ 60 | stock.free=true 61 | let _frees=getters.frees || [] 62 | _frees.push({ 63 | name:stock.name, 64 | code:stock.code 65 | }) 66 | commit(types.FREE,_frees) 67 | } 68 | 69 | export function removeFree({commit,getters},stock){ 70 | stock.free=false 71 | let _frees=getters.frees 72 | let _index=_frees.findIndex(_free=>_free.code==stock.code) 73 | if(_index>-1){ 74 | _frees.splice(_index,1) 75 | } 76 | commit(types.FREE,_frees) 77 | } 78 | 79 | export function addHistory({commit,getters},stock){ 80 | let _history=getters.history() || [] 81 | let _index=_history.find(c=>c.code==stock.code) 82 | if(!_index || _index==-1){ 83 | _history.push(stock) 84 | commit(types.HISTORY,_history) 85 | } 86 | } 87 | 88 | // 股票搜索 89 | export function search({commit,getters},keyword){ 90 | return new Promise((resolve,reject)=>{ 91 | let _search=stocks.filter(s=>s.code.indexOf(keyword)==0) 92 | _search.forEach(_s=>{ 93 | _s.prefix=_s.code.substring(0,1)=='6'?'SH':'SZ' 94 | }) 95 | if(_search.length>50){ 96 | _search=_search.splice(0,50) 97 | } 98 | resolve(_search) 99 | }) 100 | } -------------------------------------------------------------------------------- /src/stores/getters.js: -------------------------------------------------------------------------------- 1 | import * as cache from '@/common/js/cache' 2 | export const getters={ 3 | indexs:state=>state.indexs, 4 | mines:state=>state.mines, 5 | isIndex:(state,getters)=>(code)=>{ 6 | let _indexs=getters.indexs 7 | return _indexs.find(_index=>_index.code.substring(2,8)==code) 8 | }, 9 | frees:(state)=>{ 10 | return state.frees || cache.getFrees() 11 | }, 12 | isFree:(state,getters)=>(code)=>{ 13 | let _frees=getters.frees 14 | if(!_frees || _frees.length<1){ 15 | return false 16 | } 17 | return _frees.find(_free=>_free.code==code) 18 | }, 19 | freeCodes:(state,getters)=>()=>{ 20 | let _frees=getters.frees 21 | let _list=[] 22 | _frees.forEach(_free=>{ 23 | let _prefix=_free.code.substring(0,1)=='6'?'sh':'sz' 24 | _list.push(`${_prefix}${_free.code}`) 25 | }) 26 | return _list 27 | }, 28 | history:state=>()=>{ 29 | return state.history || cache.getHistory() 30 | } 31 | } -------------------------------------------------------------------------------- /src/stores/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | import {getters} from './getters' 4 | import {state} from './state' 5 | import * as actions from './actions' 6 | import mutations from './mutations' 7 | Vue.use(Vuex) 8 | 9 | export default new Vuex.Store({ 10 | state, 11 | getters, 12 | actions, 13 | mutations 14 | }) 15 | -------------------------------------------------------------------------------- /src/stores/mutation-types.js: -------------------------------------------------------------------------------- 1 | // 自选 2 | export const INDEXS="indexs" 3 | export const MINES="mines" 4 | export const FREE="free" 5 | export const HISTORY="history" -------------------------------------------------------------------------------- /src/stores/mutations.js: -------------------------------------------------------------------------------- 1 | // 自选 2 | import * as cache from '@/common/js/cache' 3 | import * as types from './mutation-types' 4 | const mutations={ 5 | [types.INDEXS](state,value){ 6 | state.indexs=value 7 | }, 8 | [types.MINES](state,value){ 9 | state.mines=value 10 | }, 11 | [types.FREE](state,value){ 12 | state.frees=value 13 | cache.setFree(value) 14 | }, 15 | [types.HISTORY](state,value){ 16 | state.history=value 17 | cache.setHistory(value) 18 | } 19 | } 20 | export default mutations -------------------------------------------------------------------------------- /src/stores/state.js: -------------------------------------------------------------------------------- 1 | export const state={ 2 | frees:null, 3 | history:null, 4 | indexs:null, 5 | mines:null 6 | } -------------------------------------------------------------------------------- /vue.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | publicPath:"./", 3 | // 关闭eslint 4 | devServer: { 5 | overlay: { 6 | warnings:false, 7 | errors:false 8 | }, 9 | disableHostCheck:true 10 | }, 11 | lintOnSave:false, 12 | productionSourceMap:false 13 | } --------------------------------------------------------------------------------