jwyu 1 year ago
parent
commit
116518813a

+ 33 - 0
src/api/dataEDB.js

@@ -237,5 +237,38 @@ export default{
      */
      */
     edbChartInfoSave(params){
     edbChartInfoSave(params){
         return post('/datamanage/edb_info/modify',params)
         return post('/datamanage/edb_info/modify',params)
+    },
+
+    /**
+     * 指标搜索
+     * @param Source 数据来源 1:同花顺,2:wind
+     * @param EdbCode
+     * @param CompanyCode
+     */
+    edbSearch(params){
+        return get('/datamanage/edb_info/search',params)
+    },
+
+    /**
+     * 新增基础指标
+     * @param EdbCode
+     * @param EndDate
+     * @param StartDate
+     * @param Source
+     * @param EdbName
+     * @param ClassifyId
+     * @param Frequency
+     * @param Unit
+     */
+    AddBaseEdbInfo(params){
+        return post('/datamanage/edb_info/add',params)
+    },
+
+    /**
+     * 获取指标来源集合
+     * @param IsBase
+     */
+    getEDBSourceOpts(params){
+        return get('/datamanage/edb_source/list',params)
     }
     }
 }
 }

+ 183 - 18
src/views/dataEDB/AddBaseEDB.vue

@@ -1,13 +1,37 @@
 <script setup name="DataEDBAddBaseEDB">
 <script setup name="DataEDBAddBaseEDB">
 import {ref} from 'vue'
 import {ref} from 'vue'
-import {baseEDBSourceOpts} from './util/config'
+import apiDataEDB from '@/api/dataEDB'
+import { showToast } from 'vant'
+import EditBaseEDB from './components/EditBaseEDB.vue'
+import { useRouter } from 'vue-router'
+
+const router=useRouter()
+
+//显示目录
+function getClassifyName(data){
+    const arr=data||[]
+    let str=''
+    arr.reverse().map((item) => str += item.ClassifyName + '/')
+    return str
+}
 
 
 // 数据来源
 // 数据来源
-const dataSourceOpts=baseEDBSourceOpts.map(item=>{return{text:item,value:item}})
 const showSelectDataSource=ref(false)
 const showSelectDataSource=ref(false)
-const dataSource=ref('wind')
+const edbSourceOpts=ref([])
+const dataSourceText=ref('')
+const dataSourceVal=ref(0)
+async function getEDBSourceOpts(){
+    const res=await apiDataEDB.getEDBSourceOpts({IsBase:1})
+    if(res.Ret===200){
+        edbSourceOpts.value=res.Data||[]
+        dataSourceText.value=edbSourceOpts.value[0]?.SourceName
+        dataSourceVal.value=edbSourceOpts.value[0]?.EdbSourceId
+    }
+}
+getEDBSourceOpts()
 function onConfirmDataSource(e){
 function onConfirmDataSource(e){
-    dataSource.value=e.selectedValues[0]
+    dataSourceText.value=e.selectedOptions[0].text
+    dataSourceVal.value=e.selectedOptions[0].value
     showSelectDataSource.value=false
     showSelectDataSource.value=false
 }
 }
 
 
@@ -16,8 +40,68 @@ const searchEDBTxt=ref('')
 // 公司ID
 // 公司ID
 const searchCompanyTxt=ref('')
 const searchCompanyTxt=ref('')
 
 
+// 搜索指标
+const result=ref(null)
+async function getEDBInfo(){
+    const res=await apiDataEDB.edbSearch({
+        Source:dataSourceVal.value,
+        EdbCode:searchEDBTxt.value,
+        CompanyCode:searchCompanyTxt.value
+    })
+    if(res.Ret===200){
+        result.value=res.Data
+    }else{
+        result.value=null
+    }
+
+}
+
+function onSearch(){
+    if(!searchEDBTxt.value){
+        showToast('请输入指标ID')
+        return
+    }
+    if(dataSourceText.value==='彭博财务'&&!searchCompanyTxt.value){
+        showToast('请输入公司ID')
+        return
+    }
+    getEDBInfo()
+}
 
 
+// 下一步指标基本信息填写
+const showEditBaseEDB=ref(false)
+const baseInfo=ref({})
+function handleShowEditBaseEDB(){
+    let obj={
+        EdbCode: result.value.SearchItem.EdbCode,
+		EndDate: result.value.SearchItem.EndDate,
+		StartDate: result.value.SearchItem.StartDate,
+		Source: dataSourceVal.value,
+    }
+    //隆众指标和手工指标、交易所等将名称 频度 单位带到下一步
+    if([9, 10, 11, 15, 16, 17, 18, 19, 20, 21, 26,38,41,57,60,71].includes(dataSourceVal.value)){
+        obj={
+            ...obj,
+            edb_name: result.value.SearchItem.EdbName,
+			unit: result.value.SearchItem.Unit,
+			frequency: result.value.SearchItem.Frequency,
+        }
+    }
+    baseInfo.value=obj
+    showEditBaseEDB.value=true
+}
+function handleEditBaseEdbSuccess(){
+    setTimeout(() => {
+        router.back()
+    }, 1500);
+}
 
 
+//清空状态
+function handleClearPage(){
+    searchEDBTxt.value=''
+    searchCompanyTxt.value=''
+    result.value=null
+}
 
 
 
 
 
 
@@ -26,7 +110,7 @@ const searchCompanyTxt=ref('')
 
 
 <template>
 <template>
     <div class="add-baseEDB-page">
     <div class="add-baseEDB-page">
-        <van-cell title="数据来源" is-link :value="dataSource" @click="showSelectDataSource=true"/>
+        <van-cell title="数据来源" is-link :value="dataSourceText" @click="showSelectDataSource=true"/>
         <div class="search-box">
         <div class="search-box">
             <van-search
             <van-search
                 v-model="searchEDBTxt"
                 v-model="searchEDBTxt"
@@ -36,11 +120,11 @@ const searchCompanyTxt=ref('')
                 @search="onSearch"
                 @search="onSearch"
             >
             >
                 <template #action>
                 <template #action>
-                    <span class="right-btn">查询</span>
+                    <span class="right-btn" @click="onSearch">查询</span>
                 </template>
                 </template>
             </van-search>
             </van-search>
         </div>
         </div>
-        <div class="search-box" style="padding-top:0" v-show="dataSource==='彭博财务'">
+        <div class="search-box" style="padding-top:0" v-if="dataSourceText==='彭博财务'">
             <van-search
             <van-search
                 v-model="searchCompanyTxt"
                 v-model="searchCompanyTxt"
                 show-action
                 show-action
@@ -49,19 +133,50 @@ const searchCompanyTxt=ref('')
                 @search="onSearch"
                 @search="onSearch"
             >
             >
                 <template #action>
                 <template #action>
-                    <span class="right-btn">查询</span>
+                    <span class="right-btn" @click="onSearch">查询</span>
                 </template>
                 </template>
             </van-search>
             </van-search>
         </div>
         </div>
-        <van-cell title="指标ID" :value="dataSource" />
-        <van-cell title="起始时间" :value="dataSource" />
-        <van-cell title="终止时间" :value="dataSource" />
-        <ul class="data-value-wrap">
-            <li class="item" style="font-weight:bold">时间</li>
-            <li class="item" style="font-weight:bold">值</li>
-            <li class="item">2023-08-20</li>
-            <li class="item"><span class="val-box">123</span></li>
-        </ul>
+
+        <div class="warn_txt" v-if="result?.Status===1">
+            该数据已存在数据库,名称为:{{result.SearchItem.EdbName}},目录为:{{ getClassifyName(result.ClassifyList) }},如需重新添加,请删除原指标
+        </div>
+        <div class="warn_txt" v-if="result?.Status===3">
+            该数据已存在数据库,名称为:{{result.SearchItem.EdbName}},目录为:{{ getClassifyName(result.ClassifyList) }}
+        </div>
+
+        <div class="no-auth" v-if="result?.Status===3">您当前暂无权限查看该指标,如需查看,请联系管理员</div>
+        <template v-else>
+            <template v-if="result?.Status===1||result?.SearchItem.DataList?.length">
+                <van-cell title="指标ID" :value="result?.SearchItem.EdbCode" />
+                <van-cell title="起始时间" :value="result?.SearchItem.StartDate" />
+                <van-cell title="终止时间" :value="result?.SearchItem.EndDate"/>
+                <ul class="data-value-wrap">
+                    <li class="item" style="font-weight:bold">时间</li>
+                    <li class="item" style="font-weight:bold">值</li>
+                    <template v-if="result?.SearchItem.DataList">
+                        <template v-for="item,index in result?.SearchItem.DataList" :key="index">
+                            <li class="item">{{item.DataTime}}</li>
+                            <li class="item"><span class="val-box">{{item.Value}}</span></li>
+                        </template>
+                    </template>
+                    <div class="data-empty" v-else>
+                        <img src="https://hzstatic.hzinsights.com/static/ETA_mobile/empty_img.png" alt="">
+                        <p>暂无对应的数据</p>
+                    </div>
+                </ul>
+            </template>
+
+            <div class="search-empty-wrap" v-else>
+                <img src="https://hzstatic.hzinsights.com/static/ETA_mobile/empty_img.png" alt="">
+                <p>未搜索到该指标</p>
+            </div>
+        </template>
+
+        <div class="btns-wrap">
+            <van-button block type="primary" v-if="result?.Status===2" :disabled="!result?.SearchItem.DataList?.length" @click="handleShowEditBaseEDB">下一步</van-button>
+            <van-button block type="primary" v-else-if="[1,3].includes(result?.Status)" @click="handleClearPage">知道了</van-button>
+        </div>
     </div>
     </div>
 
 
     <!-- 选择数据来源 -->
     <!-- 选择数据来源 -->
@@ -72,19 +187,34 @@ const searchCompanyTxt=ref('')
     >
     >
         <van-picker
         <van-picker
             title="数据来源"
             title="数据来源"
-            :columns="dataSourceOpts"
+            :columns="edbSourceOpts"
+            :columns-field-names="{text:'SourceName',value:'EdbSourceId'}"
             @confirm="onConfirmDataSource"
             @confirm="onConfirmDataSource"
             @cancel="showSelectDataSource=false"
             @cancel="showSelectDataSource=false"
         />
         />
     </van-popup>
     </van-popup>
+
+    <!-- 新增基础指标 -->
+    <EditBaseEDB 
+        v-model="showEditBaseEDB" 
+        :baseInfo="baseInfo"
+        @addSuccess="handleEditBaseEdbSuccess"
+    />
 </template>
 </template>
 
 
 <style lang="scss" scoped>
 <style lang="scss" scoped>
 .add-baseEDB-page{
 .add-baseEDB-page{
+    padding-bottom: 100PX;
     :deep(.van-cell__right-icon){
     :deep(.van-cell__right-icon){
         color: #333;
         color: #333;
     }
     }
 }
 }
+.warn_txt{
+    text-align: center;
+    padding: var(--van-padding-md);
+    color: #FF4E00;
+    line-height: 1.7;
+}
 .search-box{
 .search-box{
     padding: var(--van-padding-md);
     padding: var(--van-padding-md);
     .van-search{
     .van-search{
@@ -132,5 +262,40 @@ const searchCompanyTxt=ref('')
             border-radius: 8px;
             border-radius: 8px;
         }
         }
     }
     }
+    .data-empty{
+        width: 100%;
+        text-align: center;
+        color: $font-grey;
+        img{
+            width: 200PX;
+        }
+    }
 }
 }
+.search-empty-wrap{
+    text-align: center;
+    color: $font-grey;
+    img{
+        width: 200PX;
+    }
+}
+.no-auth{
+    width: 80%;
+    max-width: 500PX;
+    padding: 10PX 20PX;
+	margin: 30PX auto;
+	text-align: center;
+	background: #ECECEC;
+	color: #FF4E00;
+	border: 1px dashed #FF4E00;
+}
+.btns-wrap{
+    position: fixed;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    padding: 20PX;
+    z-index: 99;
+    background-color: #fff;
+}
+
 </style>
 </style>

+ 38 - 9
src/views/dataEDB/components/EditBaseEDB.vue

@@ -13,8 +13,9 @@ const props=defineProps({
         type:Number,
         type:Number,
         default:0
         default:0
     },//当前指标id
     },//当前指标id
+    baseInfo:{},//新增指标时传来的初始数据
 })
 })
-const emits=defineEmits(['update:modelValue','success'])
+const emits=defineEmits(['update:modelValue','success','addSuccess'])
 
 
 const edbNameInputFocus=ref(false)//指标名称输入框聚焦状态
 const edbNameInputFocus=ref(false)//指标名称输入框聚焦状态
 
 
@@ -39,7 +40,18 @@ async function getEDBInfo(){
 watch(
 watch(
     ()=>props.modelValue,
     ()=>props.modelValue,
     ()=>{
     ()=>{
-        props.modelValue && getEDBInfo()
+        if(props.modelValue){
+            // 编辑
+            if(props.edbInfoId){
+                getEDBInfo()
+            }else{
+                // 新增
+                formState.name=props.baseInfo.edb_name
+                formState.frequency=props.baseInfo.frequency
+                formState.unit=props.baseInfo.unit
+                getEdbClassifyList()
+            }
+        }
     }
     }
 )
 )
 
 
@@ -96,8 +108,7 @@ function onConfirmSelectUnit(e){
 
 
 // 保存编辑
 // 保存编辑
 async function handleSave(){
 async function handleSave(){
-    const params={
-        EdbInfoId:props.edbInfoId,
+    let params={
         ClassifyId:formState.classify,
         ClassifyId:formState.classify,
         EdbName:formState.name,
         EdbName:formState.name,
         Frequency:formState.frequency,
         Frequency:formState.frequency,
@@ -119,12 +130,30 @@ async function handleSave(){
         showToast('单位不能为空')
         showToast('单位不能为空')
         return
         return
     }
     }
-    const res=await apiDataEDB.editBaseEdbInfo(params)
-    if(res.Ret===200){
-        showToast(res.Msg)
-        emits('update:modelValue')
-        emits('success',params)
+    if(props.edbInfoId){
+        params={
+            EdbInfoId:props.edbInfoId,
+            ...params
+        }
+        const res=await apiDataEDB.editBaseEdbInfo(params)
+        if(res.Ret===200){
+            showToast(res.Msg)
+            emits('update:modelValue',false)
+            emits('success',params)
+        }
+    }else{
+        params={
+            ...props.baseInfo,
+            ...params
+        }
+        const res=await apiDataEDB.AddBaseEdbInfo(params)
+        if(res.Ret===200){
+            showToast('新增指标成功!')
+            emits('update:modelValue',false)
+            emits('addSuccess')
+        }
     }
     }
+    
 }
 }
 
 
 </script>
 </script>

+ 0 - 7
src/views/dataEDB/util/config.js

@@ -18,10 +18,3 @@ export const edbUnitOpts=[
     '美分/加仑',
     '美分/加仑',
     '手'
     '手'
 ]
 ]
-
-// 添加基础指标来源
-export const baseEDBSourceOpts=[
-    'wind','同花顺','彭博','彭博财务','路透','手工指标','隆众指标','SMM','Mysteel','郑商所',
-    '大商所','上期所','中金所','上期能源','欧洲天然气','中国煤炭市场网','谷歌出行指数',
-    'EIA STEO报告','UN','卓创数据(红桃3)','百川盈孚','国家统计局','富宝数据',
-]