├── .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 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/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 |
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 |
2 |
3 |
4 | {{text}}
5 |
6 |
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 |
2 |
3 |
10 |
12 |
13 |
21 |
22 |
23 |
24 |
25 |
52 |
--------------------------------------------------------------------------------
/src/components/base/list-view/list-view.vue:
--------------------------------------------------------------------------------
1 |
2 |
11 |
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 |
2 |
3 |
4 |
5 | {{text}}
6 |
7 |
8 |
9 |
17 |
--------------------------------------------------------------------------------
/src/components/base/no-result/no-result.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
14 |
--------------------------------------------------------------------------------
/src/components/base/scroll/scroll.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/components/base/tabs/tabs.vue:
--------------------------------------------------------------------------------
1 |
2 |
15 |
16 |
35 |
--------------------------------------------------------------------------------
/src/components/hq/hq-base.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{stock.name}}({{stock.code}}.{{stock.prefix}})
5 | {{stock.timeText}}
6 |
7 |
18 |
19 |
20 |
21 | {{item.title}}
22 | {{stock[item.field]}}
23 |
24 |
25 |
26 |
27 |
28 |
51 |
--------------------------------------------------------------------------------
/src/components/hq/hq-chart.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
56 |
--------------------------------------------------------------------------------
/src/components/hq/hq-extend.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
8 |
9 |
10 | -
11 |
{{obj.title}}
12 | {{obj.time}}
13 |
14 |
15 |
16 |
17 |
18 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
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 |
2 |
3 |
4 |
5 |
8 |
{{item.name}}
9 |
{{item.now}}
10 |
{{item.value}}({{item.rate}})
11 |
12 |
13 |
14 |
15 |
16 |
36 |
--------------------------------------------------------------------------------
/src/components/kline/kline-line.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
63 |
--------------------------------------------------------------------------------
/src/components/kline/kline-tooltip.vue:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
61 |
--------------------------------------------------------------------------------
/src/components/loading-list/loading-list.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{blank}}
6 |
7 |
8 |
9 |
10 |
26 |
--------------------------------------------------------------------------------
/src/components/search/search.vue:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
31 |
--------------------------------------------------------------------------------
/src/components/tabs/tab-item.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
19 |
--------------------------------------------------------------------------------
/src/components/tabs/tabs.vue:
--------------------------------------------------------------------------------
1 |
2 |
12 |
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 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
45 |
--------------------------------------------------------------------------------
/src/pages/index/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
9 |
10 |
11 |
12 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
76 |
--------------------------------------------------------------------------------
/src/pages/search/search.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
{{item.name}}
10 |
{{item.code}}.{{item.prefix}}
11 |
12 |
13 |
14 |
15 | 还没有搜索历史哟~
16 |
17 |
18 |
20 |
21 |
22 |
23 |
24 |
{{item.name}}
25 |
{{item.code}}.{{item.prefix}}
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
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 | }
--------------------------------------------------------------------------------