1 line
8.3 KiB
JavaScript
1 line
8.3 KiB
JavaScript
import{C as e,E as t,S as n,T as r,_ as i,a,b as o,c as ee,d as s,f as c,g as l,h as u,i as d,l as f,m as p,o as m,p as h,r as g,s as _,t as v,u as y,v as b,w as x,x as S,y as C}from"./index-B7jxak6r.js";import{t as w}from"./axios-CMXECuIF.js";var T={class:`lof-app`},E={class:`header`},D={class:`title`},O={class:`update-time`},k={class:`tool-bar`},A={class:`filter-bar`},j=[`onClick`],M=`/api/lof`,N=`lof-monitor`,P=1,F=`favorites`,I=v({__name:`RealTimePremium`,setup(v){function I(){return new Promise((e,t)=>{let n=indexedDB.open(N,P);n.onerror=()=>t(n.error),n.onsuccess=()=>e(n.result),n.onupgradeneeded=e=>{let t=e.target.result;t.objectStoreNames.contains(F)||t.createObjectStore(F,{keyPath:`fundCode`})}})}async function L(e){let t=await I();return new Promise((n,r)=>{let i=t.transaction(F,`readwrite`).objectStore(F).put({fundCode:e,time:Date.now()});i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function R(e){let t=await I();return new Promise((n,r)=>{let i=t.transaction(F,`readwrite`).objectStore(F).delete(e);i.onsuccess=()=>n(),i.onerror=()=>r(i.error)})}async function z(){let e=await I();return new Promise((t,n)=>{let r=e.transaction(F,`readonly`).objectStore(F).getAll();r.onsuccess=()=>t(r.result.map(e=>e.fundCode)),r.onerror=()=>n(r.error)})}let B=e([]),V=e(!1),H=e(``),U=e(``),W=e(``),G=e(``),K=e(``),q=e(new Set),J=e(!1),Y=e(!0),X=e(window.innerWidth>768),te=g();function ne(e){return!e||e===`-`?0:e.endsWith(`亿`)?parseFloat(e)*1e8:e.endsWith(`万`)?parseFloat(e)*1e4:parseFloat(e)||0}function re(e){te.push({path:`/history`,query:{fundCode:e.fundCode,fundName:e.fundName}})}function ie(e){let t=e=>String(e).padStart(2,`0`);return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())} ${t(e.getHours())}:${t(e.getMinutes())}:${t(e.getSeconds())}`}let ae=y(()=>{let e=new Set(B.value.map(e=>e.purchaseStatus).filter(Boolean));return Array.from(e).sort()}),oe=y(()=>{let e=new Set(B.value.map(e=>e.redemptionStatus).filter(Boolean));return Array.from(e).sort()}),se=y(()=>{let e=[...B.value];return J.value&&(e=e.filter(e=>q.value.has(e.fundCode))),H.value&&(e=e.filter(e=>String(e.fundCode).includes(H.value.trim()))),U.value&&(e=e.filter(e=>String(e.fundName).includes(U.value.trim()))),W.value&&(e=e.filter(e=>e.purchaseStatus===W.value)),G.value&&(e=e.filter(e=>e.redemptionStatus===G.value)),Y.value&&(e=e.filter(e=>ne(e.fundSize)>=3e7)),e});function ce(){H.value=``,U.value=``,W.value=``,G.value=``,J.value=!1,Y.value=!0}async function Z(){if(!V.value){V.value=!0;try{let e=await w.get(M);if(e.data.code===200){if(B.value=e.data.data,K.value=ie(new Date),e.data.hasMore)try{let e=await w.get(`${M}/remaining`);e.data.code===200&&e.data.data.length>0&&(B.value=[...B.value,...e.data.data])}catch{}}else d.error(e.data.msg||`数据获取失败`)}catch{d.error(`请求失败:请确认 Python 后端已启动`)}finally{V.value=!1}}}function le(){Z()}function Q(e,t,n){return(parseFloat(e[n])||0)-(parseFloat(t[n])||0)}function $(e){let t=parseFloat(e)||0;return t>0?`rate-up`:t<0?`rate-down`:`rate-zero`}async function ue(){try{let e=await z();q.value=new Set(e)}catch(e){console.error(`加载收藏失败`,e)}}async function de(e,t){try{t?(await L(e),q.value.add(e)):(await R(e),q.value.delete(e))}catch(e){console.error(`收藏操作失败`,e),d.error(`收藏操作失败`)}}return l(()=>{ue(),Z()}),(e,l)=>{let d=C(`el-button`),g=C(`el-input`),v=C(`el-option`),y=C(`el-select`),w=C(`el-checkbox`),M=C(`el-radio-button`),N=C(`el-radio-group`),P=C(`el-table-column`),F=C(`el-tag`),I=C(`el-switch`),L=C(`el-table`),R=o(`loading`);return i(),h(`div`,T,[s(`div`,E,[s(`div`,D,[s(`span`,O,`数据更新时间:`+t(K.value),1)]),s(`div`,k,[u(d,{onClick:l[0]||=e=>X.value=!X.value,class:`filter-toggle-btn`,icon:X.value?x(m):x(_)},{default:S(()=>[p(t(X.value?`收起筛选`:`筛选`),1)]),_:1},8,[`icon`]),u(d,{onClick:le,loading:V.value,type:`primary`,icon:x(a)},{default:S(()=>[...l[7]||=[p(` 手动刷新 `,-1)]]),_:1},8,[`loading`,`icon`])])]),n(s(`div`,A,[u(g,{modelValue:H.value,"onUpdate:modelValue":l[1]||=e=>H.value=e,placeholder:`基金代码`,clearable:``,class:`filter-input filter-input-sm`},null,8,[`modelValue`]),u(g,{modelValue:U.value,"onUpdate:modelValue":l[2]||=e=>U.value=e,placeholder:`基金名称`,clearable:``,class:`filter-input`},null,8,[`modelValue`]),u(y,{modelValue:W.value,"onUpdate:modelValue":l[3]||=e=>W.value=e,placeholder:`申购状态`,clearable:``,class:`filter-select`},{default:S(()=>[(i(!0),h(f,null,b(ae.value,e=>(i(),c(v,{key:e,label:e,value:e},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),u(y,{modelValue:G.value,"onUpdate:modelValue":l[4]||=e=>G.value=e,placeholder:`赎回状态`,clearable:``,class:`filter-select`},{default:S(()=>[(i(!0),h(f,null,b(oe.value,e=>(i(),c(v,{key:e,label:e,value:e},null,8,[`label`,`value`]))),128))]),_:1},8,[`modelValue`]),u(w,{modelValue:Y.value,"onUpdate:modelValue":l[5]||=e=>Y.value=e,class:`filter-checkbox`},{default:S(()=>[...l[8]||=[p(`规模≥3000万`,-1)]]),_:1},8,[`modelValue`]),u(N,{modelValue:J.value,"onUpdate:modelValue":l[6]||=e=>J.value=e,size:`small`,class:`filter-radio`},{default:S(()=>[u(M,{label:!1},{default:S(()=>[...l[9]||=[p(`全部基金`,-1)]]),_:1}),u(M,{label:!0},{default:S(()=>[...l[10]||=[p(`我的关注`,-1)]]),_:1})]),_:1},8,[`modelValue`]),u(d,{onClick:ce,icon:x(m),class:`filter-reset-btn`},{default:S(()=>[...l[11]||=[p(`重置`,-1)]]),_:1},8,[`icon`])],512),[[ee,X.value]]),n((i(),c(L,{data:se.value,height:`calc(100vh - 180px)`,border:``,"default-sort":{prop:`premiumRate`,order:`descending`},style:{width:`100%`},size:`small`},{default:S(()=>[u(P,{prop:`fundCode`,label:`基金代码`,align:`center`,"min-width":`80`},{default:S(({row:e})=>[s(`a`,{class:`fund-code-link`,onClick:t=>re(e)},t(e.fundCode),9,j)]),_:1}),u(P,{prop:`fundName`,label:`基金名称`,align:`center`,"min-width":`100`}),u(P,{prop:`premiumRate`,label:`溢价率(昨日)`,align:`center`,"min-width":`95`,sortable:``,"sort-method":(e,t)=>Q(e,t,`premiumRate`)},{default:S(({row:e})=>[s(`span`,{class:r($(e.premiumRate))},t(e.premiumRate)+`% `,3)]),_:1},8,[`sort-method`]),u(P,{prop:`estimatePremiumRate`,label:`溢价率(实时)`,align:`center`,"min-width":`95`,sortable:``,"sort-method":(e,t)=>Q(e,t,`estimatePremiumRate`)},{default:S(({row:e})=>[s(`span`,{class:r($(e.estimatePremiumRate))},t(e.estimatePremiumRate)+`% `,3)]),_:1},8,[`sort-method`]),u(P,{label:`申购状态`,align:`center`,width:`85`},{default:S(({row:e})=>[u(F,{type:e.purchaseStatus===`暂停申购`?`danger`:e.purchaseStatus===`开放申购`?`success`:`info`,size:`small`,style:{"white-space":`nowrap`}},{default:S(()=>[p(t(e.purchaseStatus),1)]),_:2},1032,[`type`])]),_:1}),u(P,{label:`赎回状态`,align:`center`,width:`85`},{default:S(({row:e})=>[u(F,{type:e.redemptionStatus===`暂停赎回`?`danger`:e.redemptionStatus===`开放赎回`?`success`:`info`,size:`small`,style:{"white-space":`nowrap`}},{default:S(()=>[p(t(e.redemptionStatus||`-`),1)]),_:2},1032,[`type`])]),_:1}),u(P,{prop:`purchaseLimit`,label:`日限额`,align:`center`,"min-width":`85`,sortable:``,"sort-method":(e,t)=>Q(e,t,`purchaseLimit`)},null,8,[`sort-method`]),u(P,{prop:`tradePrice`,label:`场内价格`,align:`center`,"min-width":`80`,sortable:``,"sort-method":(e,t)=>Q(e,t,`tradePrice`)},null,8,[`sort-method`]),u(P,{prop:`netValue`,label:`场外净值(昨日)`,align:`center`,"min-width":`105`,sortable:``,"sort-method":(e,t)=>Q(e,t,`netValue`)},null,8,[`sort-method`]),u(P,{prop:`estimateValue`,label:`估算净值(实时)`,align:`center`,"min-width":`105`,sortable:``,"sort-method":(e,t)=>Q(e,t,`estimateValue`)},null,8,[`sort-method`]),u(P,{prop:`increaseRate`,label:`涨跌幅`,align:`center`,"min-width":`80`,sortable:``,"sort-method":(e,t)=>Q(e,t,`increaseRate`)},{default:S(({row:e})=>[s(`span`,{class:r($(e.increaseRate))},t(e.increaseRate)+`% `,3)]),_:1},8,[`sort-method`]),u(P,{prop:`fundSize`,label:`基金规模`,align:`center`,"min-width":`85`,sortable:``,"sort-method":(e,t)=>Q(e,t,`fundSize`)},null,8,[`sort-method`]),u(P,{prop:`turnover`,label:`成交额`,align:`center`,"min-width":`85`,sortable:``,"sort-method":(e,t)=>Q(e,t,`turnover`)},null,8,[`sort-method`]),u(P,{label:`关注`,align:`center`,width:`55`},{default:S(({row:e})=>[u(I,{"model-value":q.value.has(e.fundCode),onChange:t=>de(e.fundCode,t)},null,8,[`model-value`,`onChange`])]),_:1})]),_:1},8,[`data`])),[[R,V.value]])])}}},[[`__scopeId`,`data-v-fa10363e`]]);export{I as default}; |