Karsa 4 luni în urmă
părinte
comite
00079b4f4c

+ 55 - 5
src/api/modules/dataApi.js

@@ -112,7 +112,7 @@ const dataInterence = {
 	delData:params => {
 		return http.post('/entry/data/delete',params)
 	},
-/* 	获取数据列表
+	/* 	获取数据列表
 	page_no	是	int	每页起始位置:默认0
 	page_size	是	int	每页数据条数,默认10
 	start_date	否	string	开始日期
@@ -124,7 +124,7 @@ const dataInterence = {
 	getDatalist:params => {
 		return http.get('/entry/data/list',params)
 	},
-/* 	导出数据
+	/* 	导出数据
 	start_date	否	string	开始日期
 	end_date	否	string	结束日期
 	frequency	否	string	频度
@@ -133,7 +133,7 @@ const dataInterence = {
 	exportData:params => {
 		return http.get('/entry/export/dataList',params)
 	},
-/* 	检测日期下数据是否存在接口
+	/* 	检测日期下数据是否存在接口
 	trade_code	是	string	指标唯一编码
 	create_date	是	string	所选日期 */
 	checkData:params => {
@@ -293,7 +293,56 @@ const dataInterence = {
  */
 	getIndexCodeData: (params) => {
 		return http.get('datamanage/com_trade/list',params)
+	},
+
+
+	//=========new version eta2.0.0
+	/**
+	 * 获取分类
+	 * @param {*} params 
+	 * @returns 
+	 */
+	getClassifyV2: params => {
+		return http.get('/entry/classify',params)
+	},
+
+	/**
+	 * 获取指标详情
+	 * @param {*TradeCode} params 
+	 * @returns 
+	 */
+	getEdbDetailV2: params => {
+		return http.get('/entry/target/edb/detail',params)
+	},
+	
+	/**
+	 * load分类子集
+	 * @param {*ClassifyId} params 
+	 * @returns 
+	 */
+	getClassifyLoadChild: params => {
+		return http.get('/entry/target/classify/edb/list',params)
+	},
+
+	/**
+	 * 获取指标列表
+	 * @param {*PageSize CurrentIndex ClassifyId} params 
+	 * @returns 
+	 */
+	getEdbListV2:params => {
+		return http.get('/entry/target/edb/list',params)
+	},
+
+	/**
+	 * 搜索指标
+	 * @param {* Keyword PageSize CurrentIndex} params 
+	 * @returns 
+	 */
+	searchEdbV2: params => {
+		return http.get('/entry/target/edb/search',params)
 	}
+
+
 }
 
 /* 手工数据权限 */
@@ -383,8 +432,9 @@ const dataAuthInterface = {
 	 */
 	classifyAll: params => {
 		return http.get('/datamanage/manual/classify/all_list',params)
-	}
+	},
 }
+
 /* 数据刷新设置 */
 const dataRefreshInterface = {
     /**
@@ -515,7 +565,7 @@ const dataRefreshInterface = {
     getSimgleEdbRefreshTime(params){
         return http.get("/datamanage/edb_info/refresh/edb_config",params)
     },
-// -------------------刷新状态设置
+	// -------------------刷新状态设置
 	/**
 	 * 获取引用指标数据
 	 * @param {Object} params 

BIN
src/assets/img/data_m/tem1.png


BIN
src/assets/img/data_m/tem2.png


+ 14 - 1
src/lang/modules/DataSources/En.js

@@ -54,7 +54,8 @@ export default {
 
     //导入弹窗
     tit_insert_data:'Import Data',
-    down_tem:'Download Templates',
+    tit_export:'Export to Excel',
+    down_tem:'Download Import Templates',
     down_fail_list:'the list of failed imports',
     step_one:'1. Step One: Download the template. Fill in the data according to the specifications required by the template; templates with empty data are not allowed to be imported. ',
     step_two:'2. Step Two: Upload data. Click on "Import Data" to upload the completed template and confirm the import. ',
@@ -66,6 +67,18 @@ export default {
 
     col_status_1:'Completed',
     col_status_2:'Incomplete',
+    label_vaiety: 'Variety',
+    add_tobase:'Add to Indicator Library',
+    opera_logs:'Operation Log',
+    batch_addbase:'Bulk Add to Indicator Library',
+    online_excel:'Online Excel',
+    batch_del:'Bulk Delete',
+
+    opera_time:'Operation Time',
+    opera_msg:'Operation Content',
+    opera_user:'Operator',
+    insert_up_row:'Insert {num} Row Above',
+    insert_down_row:'Insert {num} Row Below',
   },
 
   /* 期货数据库页面 */

+ 14 - 1
src/lang/modules/DataSources/Zh.js

@@ -54,7 +54,8 @@ export default {
 
     //导入弹窗
     tit_insert_data:'导入数据',
-    down_tem:'下载模板',
+    tit_export:'导出Excel',
+    down_tem:'下载导入模板',
     down_fail_list:'导入失败列表',
     step_one:'1、第一步,下载模板。按照模板要求的规范填写数据,空数据模板不允许导入。',
     step_two:'2、第二步,上传数据。点击“导入数据”,上传已经填写好的模板,确认导入。',
@@ -66,6 +67,18 @@ export default {
 
     col_status_1:'完成',
     col_status_2:'未完成',
+    label_vaiety: '品种',
+    add_tobase:'加入指标库',
+    opera_logs:'操作日志',
+    batch_addbase:'批量加入指标库',
+    online_excel:'在线Excel',
+    batch_del:'批量删除',
+
+    opera_time:'操作时间',
+    opera_msg:'操作内容',
+    opera_user:'操作人',
+    insert_up_row:'向上插入',
+    insert_down_row:'向下插入',
   },
 
   /* 期货数据库页面 */

+ 38 - 2
src/routes/modules/dataRoutes.js

@@ -47,7 +47,7 @@ export default [
       },
       {
         path: "dataList",
-        component: () => import("@/views/dataEntry_manage/dataEntry.vue"),
+        component: () => import("@/views/dataEntry_manage/dataEntry/index.vue"),
         name: "手工数据录入",
         hidden: false,
         meta: {
@@ -58,7 +58,19 @@ export default [
       {
         path: "onlineExcelCopy",
         component: () => import("@/views/dataEntry_manage/onlineExcelCopy.vue"),
-        name: "复制excel数据",
+        name: "在线excel",
+        meta: {
+          name_en:'Online Excel',
+          pathFrom: "dataList",
+          pathName: "手工数据录入",
+          pathName_en:'Manual data entry',
+        },
+        hidden: true,
+      },
+      {
+        path: "dataEdit",
+        component: () => import("@/views/dataEntry_manage/dataEntry/dataEdit.vue"),
+        name: "编辑",
         meta: {
           name_en:'Online Excel Copy',
           pathFrom: "dataList",
@@ -67,6 +79,30 @@ export default [
         },
         hidden: true,
       },
+      {
+        path: "batchToBase",
+        component: () => import("@/views/dataEntry_manage/dataEntry/addToBaseList.vue"),
+        name: "批量加入指标库",
+        meta: {
+          name_en:'Bulk Add to Indicator Library',
+          pathFrom: "dataList",
+          pathName: "手工数据录入",
+          pathName_en:'Manual data entry',
+        },
+        hidden: true,
+      },
+      {
+        path: "batchToDel",
+        component: () => import("@/views/dataEntry_manage/dataEntry/addToBaseList.vue"),
+        name: "批量删除",
+        meta: {
+          name_en:'Bulk Delete',
+          pathFrom: "dataList",
+          pathName: "手工数据录入",
+          pathName_en:'Manual data entry',
+        },
+        hidden: true,
+      },
       {
         path: "smmTarget",
         component: () =>

+ 72 - 27
src/views/dataEntry_manage/components/insertData.vue

@@ -13,22 +13,30 @@
     <div slot="title" style="display: flex; alignitems: center">
       <img
         :src="$icons.imp"
-        style="color: #fff; width: 16px; height: 16px; marginright: 5px"
+        style="color: #fff; width: 16px; height: 16px; margin-right: 5px"
       />
-      <span style="fontsize: 16px">{{$t('ManualEntryPage.tit_insert_data')}}</span>
+      <span style="font-size: 16px">{{$t('ManualEntryPage.tit_insert_data')}}</span>
     </div>
     <div class="down-min">
       <dataLoading :loading="isLoading"/>
-      
-      <div class="download-ico">
-        <a :href="`${downloadTemplate}${$i18nt.locale==='zh'?'':'/en'}`" download="模板">
-          <i class="icon down_ico"></i>
-          <span style="color: #5882ef; cursor: pointer">{{$t('ManualEntryPage.down_tem')}}</span>
-        </a>
-        <!-- <a :href="downloadTemplate" download="模板" style="color:#5882EF;cursor:pointer;">下载模板</a> -->
+
+      <div class="section-item">
+        <h3><!-- 下载导入模板 -->{{$t('ManualEntryPage.down_tem')}}</h3>
+        <div class="templete-wrap">
+          <div class="item" v-for="tem in templateList" :key="tem.name">
+            <a :href="`${tem.url}${$i18nt.locale==='zh'?'':'/en'}`" download="模板">
+              <el-button type="primary" icon="el-icon-download">{{tem.name}}</el-button>
+            </a>
+            <div>
+              <img :src="tem.previewImg" alt="" width="150" style="display:block;margin:10px 0;">
+              <span class="editsty" @click="handlePreviewImg(tem)">查看大图</span>
+            </div>
+          </div>
+        </div>
       </div>
-      <i class="arrow-ico"></i>
-      <div class="import-ico">
+
+      <div class="section-item">
+        <h3><!-- 导入数据 -->{{$t('ManualEntryPage.tit_insert_data')}}</h3>
         <el-upload
           class="upload-demo"
           :before-upload="beforeUploadFile"
@@ -44,9 +52,7 @@
           :name="name"
           :show-file-list="false"
         >
-          <i class="icon up_ico"></i>
-          <span style="color: #5882ef; cursor: pointer">{{$t('ManualEntryPage.tit_insert_data')}}</span>
-          <!-- <el-button type="primary">导入</el-button> -->
+          <el-button type="primary" icon="el-icon-upload">{{$t('ManualEntryPage.tit_insert_data')}}</el-button>
         </el-upload>
       </div>
     </div>
@@ -55,20 +61,28 @@
       <span>{{$t('ManualEntryPage.step_two')}}</span>
       <span>{{$t('ManualEntryPage.step_three')}}
         <a
-          style="display: inline; color: #5882ef"
+          style="display: inline; color: #0052D9"
           :href="downloadErrorlist"
           download
           >{{$t('ManualEntryPage.down_fail_list')}}</a
         >。</span
       >
     </div>
+
+    <el-image-viewer 
+        v-if="showImgViewer" 
+        :on-close="()=>{this.previewList=[];this.showImgViewer = false}" 
+        :url-list="previewList" 
+    />
   </el-dialog>
 </template>
 
 <script>
 import { dataInterence } from "api/api.js";
+import ElImageViewer from 'element-ui/packages/image/src/image-viewer'
 export default {
   name: "",
+  components: { ElImageViewer },
   props: {
     isShowinsert: {
       type: Boolean,
@@ -81,17 +95,34 @@ export default {
     return {
       action: process.env.VUE_APP_API_ROOT + "/entry/import/data", //上传文件
       downloadTemplate: process.env.VUE_APP_API_ROOT + "/entry/template", //模板下载
+      downloadTemplateTwo: process.env.VUE_APP_API_ROOT + "/entry/template", //模板下载
       downloadErrorlist:
         process.env.VUE_APP_API_ROOT +
         "/entry/import/failList" +
         `?${localStorage.getItem("auth")}`, //失败列表下载
       name: "EntryFile",
+
+      templateList: [
+        {
+          name:"模板1",
+          url: this.downloadTemplate,
+          previewImg: require('@/assets/img/data_m/tem1.png')
+        },
+        {
+          name:"模板2",
+          url: this.downloadTemplateTwo,
+          previewImg: require('@/assets/img/data_m/tem2.png')
+        },
+      ],
       params: {},
       headerConfig: {
         Authorization: localStorage.getItem("auth"),
       },
       isLoading: false,
-      fileList: []
+      fileList: [],
+
+      showImgViewer: false,
+      previewList: []
     };
   },
   watch: {
@@ -113,7 +144,7 @@ export default {
   },
   methods: {
     cancelHandle() {
-      this.$emit("cancelHandle", 2);
+      this.$emit('update:isShowinsert',false)
     },
     // 校验文件和大小
     beforeUploadFile(file) {
@@ -172,13 +203,12 @@ export default {
       }
       this.isLoading = false;
     },
-    // 下载模板
-    // downLoad() {
-    // 	dataInterence.downTemplate().then(res => {})
-    // },
+
+    handlePreviewImg(item) {
+      this.previewList=[item.previewImg]
+      this.showImgViewer=true 
+    }
   },
-  created() {},
-  mounted() {},
 };
 </script>
 <style lang="scss" scoped>
@@ -186,11 +216,11 @@ export default {
   max-width: 800px;
   .down-min {
     position: relative;
-    display: flex;
+    /* display: flex;
     align-items: center;
-    justify-content: center;
-    text-align: center;
-    margin: 100px 0 90px;
+    justify-content: center; */
+    /* text-align: center; */
+    margin: 20px 0 50px;
     .arrow-ico {
       width: 140px;
       height: 14px;
@@ -224,5 +254,20 @@ export default {
       margin-bottom: 18px;
     }
   }
+
+  .section-item {
+    padding: 20px 0;
+    &:first-child {
+      border-bottom: 1px solid #C8CDD9;
+    }
+    h3 {
+      font-size: 16px;
+      margin-bottom: 20px;
+    }
+    .templete-wrap {
+      display: flex;
+      gap: 20px;
+    }
+  }
 }
 </style>

+ 23 - 0
src/views/dataEntry_manage/dataEntry/addToBaseList.vue

@@ -0,0 +1,23 @@
+<template>
+  <div>
+    
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+
+    }
+  },
+  mounted(){
+
+  },
+  methods:{
+
+  },
+}
+</script>
+<style scoped lang='scss'>
+
+</style>

+ 331 - 0
src/views/dataEntry_manage/dataEntry/components/edbDetail.vue

@@ -0,0 +1,331 @@
+<template>
+  <div class="edb-detail-data-wrap" @click="rightMouseMenu.show=false;">
+    <div class="handle-list">
+      <span class="editsty" @click="$emit('handle',{item:edbInfo.Detail,type:'edit'})"><!-- 编辑 -->{{$t('Table.edit_btn')}}</span>
+      <span class="editsty" @click="$emit('handle',{item:edbInfo.Detail,type:'addToBase'})"><!-- 加入指标库 -->{{$t('ManualEntryPage.add_tobase')}}</span>
+      <span class="editsty" @click="$emit('handle',{item:edbInfo.Detail,type:'logs'})"><!-- 操作日志 -->{{$t('ManualEntryPage.opera_logs')}}</span>
+      <span class="deletesty" @click="$emit('handle',{item:edbInfo.Detail,type:'del'})"><!-- 删除 -->{{$t('Table.delete_btn')}}</span>
+    </div>
+		<el-table
+			:data="tableData"
+			class="firstColumTable" 
+      border
+    >
+			<el-table-column
+				v-for="item in tableColumsOne"
+				:key="item.key"
+				:width="item.widthsty"
+        :label="item.label"
+				:min-width="item.minwidthsty"
+				align="center">
+				<template slot-scope="scope">
+
+						<span v-if="item.key === 'Unit'">{{ getUnitTrans(scope.row.Unit) }}</span>
+						<span v-else-if="item.key === 'Frequency'">{{ getFrequencyTrans(scope.row.Frequency) }}</span>
+
+						<span v-else>{{ scope.row[item.key] }}</span>
+				</template>
+			</el-table-column>
+		</el-table>
+		<el-table
+			:data="tableData"
+			style="box-shadow: 0px 3px 6px rgba(155, 170, 219, 0.2);"
+			border>
+			<el-table-column
+				v-for="item in tableColumsTwo"
+				:key="item.label"
+				:label="item.label"
+				:width="item.widthsty"
+				:min-width="item.minwidthsty"
+				align="center"
+			>
+				<template slot-scope="scope">
+					<span>{{ scope.row[item.key] }}</span>
+				</template>
+			</el-table-column>
+			<div slot="empty" style="padding: 50px 0 50px;">
+					<tableNoData :text="$t('Table.prompt_slogan')"/>
+			</div>
+		</el-table>
+
+    <div class="bottom">
+      <div class="left-select">
+        <el-button 
+          type="primary"
+          v-for="year in yearsList"
+          :key="year"
+        >{{year}}</el-button>
+      </div>
+      <ul 
+        class="value-ul" 
+        ref="valueUl" 
+        @contextmenu.prevent="handleRightClick"
+        @scroll="handleLoadData" 
+        v-show="dataList.length">
+        <li
+          class="value-item"
+          v-for="item in dataList"
+          :key="item.Dt"
+        >
+          <span class="value-label">{{item.Dt}}</span>
+          <span class="value-label">{{item.Close}}</span>
+        </li>
+        <li class="nodata value-item" v-if="!dataList.length">{{$t('Table.prompt_slogan')}}</li>
+      </ul>
+    </div>
+
+
+    <!-- 右键菜单 -->
+    <div
+      class="right-lick-menu"
+      @mouseleave="hideContextMenu"
+    >
+      <div class="item" @click="handleOptTable('插入行')">
+        向上插入
+        <el-input v-model="rightMouseMenu.insertUpRows" size="mini" style="width:60px;" @change="val => { rightMouseMenu.insertUpRows = Number(val) }"/>
+      </div>
+      <div class="item" @click="handleOptTable('插入列')">
+        向下插入
+        <el-input v-model="rightMouseMenu.insertDownRows" size="mini" style="width:60px;" @change="val => { rightMouseMenu.insertDownRows = Number(val) }"/>
+      </div>
+      <div class="item" @click="handleOptTable('删除行')"><!-- 删除行 -->{{$t('ManualEntryPage.right_op_delrow')}}</div>
+    </div>
+	</div>
+</template>
+<script>
+import { dataInterence } from '@/api/api.js';
+export default {
+  props: {
+    id: {
+      type: String
+    }
+  },
+  computed: {
+		tableColumsOne(){
+			return [
+				{
+					label: this.$t('Edb.Detail.e_id'),
+					key: 'TradeCode',
+					minwidthsty: '150px'
+				},
+				{
+					label: this.$t('Edb.Detail.e_name'),
+					key: 'SecName',
+					minwidthsty: '200px'
+				},
+				{
+					label: this.$t('Edb.Detail.e_fre'),
+					key: 'Frequency',
+					widthsty: '100px'
+				},
+				{
+					label: this.$t('Edb.Detail.e_unit'),
+					key: 'Unit',
+					widthsty: '100px'
+				},
+			]
+		},
+		tableColumsTwo() {
+			return [
+				{
+					label: this.$t('Edb.Detail.e_menu'),
+					key: 'ClassifyName',
+					minwidthsty: '150px',
+				},
+				{
+					label: this.$t('Edb.Detail.e_start_time'),
+					key: 'CreateDate',
+					minwidthsty: '115px',
+				},
+				{
+					label: this.$t('Edb.Detail.e_update_time'),
+					key: 'ModifyTime',
+					minwidthsty: '120px',
+				},
+				{
+					label: this.$t('Edb.creater'),
+					key: 'UserName',
+					widthsty: '160px',
+				}
+			]
+		},
+  },
+  watch: {
+    id(newval) {
+      newval && this.getEdbDetail()
+    }
+  },
+  data() {
+    return {
+      tableData: [],
+      edbInfo: {},
+      yearsList: [
+        '2024',
+        '2023',
+        '2022',
+        '2021',
+      ],
+      dataList: [
+        {Dt: '2024-07-08',Close: '13510'},
+        {Dt: '2024-07-07',Close: '13510'},
+        {Dt: '2024-07-05',Close: '13510'},
+        {Dt: '2024-07-04',Close: '13510'},
+      ],
+
+      rightMouseMenu: {
+        show:false,
+        left: 0,
+        top: 0,
+        insertUpRows: 1,
+        insertDownRows: 1,
+      }
+    }
+  },
+  mounted(){
+    this.getEdbDetail()
+  },
+  methods:{
+    /* 获取指标详情 */
+    async getEdbDetail() {
+      const res = await dataInterence.getEdbDetailV2({
+        TradeCode: this.id
+      })
+
+      if(res.Ret !== 200) return 
+      this.edbInfo = res.Data;
+      this.tableData = [res.Data.Detail]
+    },
+
+    handleLoadData() {
+      
+    },
+
+    /* 右键 */
+    handleRightClick(e) {
+      console.log(e)
+      let dom = $('.right-lick-menu')[0];
+      if(e.clientY > window.innerHeight/2) {
+        dom.style.left = e.clientX-3 + 'px';
+        dom.style.top = e.clientY-dom.offsetHeight-3 + 'px';
+      }else {
+        dom.style.left = e.clientX-3 + 'px';
+        dom.style.top = e.clientY-3 + 'px';
+      }
+    },
+
+    // 隐藏
+    hideContextMenu() {
+      let dom = $('.right-lick-menu')[0];
+			dom.style.left = '-9999px';
+			dom.style.top = '-9999px';
+    },
+
+    // 插入操作
+    handleOptTable() {
+
+    },
+  },
+}
+</script>
+<style scoped lang='scss'>
+.edb-detail-data-wrap{
+	display: flex;
+	flex-direction: column;
+	height: 100%;
+	.firstColumTable{
+		box-shadow: 0px 3px 6px rgba(155, 170, 219, 0.2);
+	}
+  .handle-list { 
+    flex: 0;
+    display: flex;
+    justify-content: flex-end;
+    gap: 20px;
+    margin-bottom: 15px;
+  }
+	.el-table{
+		flex: none;
+	}
+  .bottom {
+    flex: 1;
+    
+    overflow: hidden;
+    .value-ul{
+      max-height: 100%;
+      overflow-y: auto;
+      border-bottom: 1px solid #EBEFF6;
+      box-shadow: 0px 3px 6px rgba(155, 170, 219, 0.2);
+      .value-item {
+        border: 1px solid #dcdfe6;
+        border-bottom: none;
+        display: flex;
+
+        .value-label {
+          width: 50%;
+          padding: 15px;
+          position: relative;
+          text-align: center;
+          color: #666;
+          &:first-child {
+            border-right: 1px solid #dcdfe6;
+          }
+          .value-style{
+            padding:5px;
+            border-radius: 4px;
+            &.predict-act {
+              color: orange;
+            }
+          }
+        }
+      }
+      .nodata {
+        text-align: center;
+        padding: 40px 0;
+        color: #999;
+      }
+    }
+  }
+
+  .right-lick-menu  {
+    position: fixed;
+    z-index: 99;
+    top: -9999px;
+    left: -9999px;
+    background: #fff;
+    padding: 10px 0;
+    min-width: 180px;
+    max-height: 400px;
+    overflow-y: auto;
+    /* border: 1px solid #999; */
+    box-shadow: 0 1px 4px #999;
+    .item {
+      padding: 10px 25px;
+      cursor: pointer;
+      &:hover {
+        background-color: #f5f7fa;
+      }
+      &:hover .subMenu-wrapper {
+        display: block;
+      }
+    }
+  }
+  /* .right-lick-menu {
+    position: fixed;
+    z-index: 999;
+    background: #ffffff;
+    border: 1px solid #ececec;
+    box-shadow: 0px 3px 6px rgba(143, 143, 143, 0.16);
+    border-radius: 4px;
+    color: #333;
+    font-size: 15px;
+    padding: 13px 0;
+    .item {
+      line-height: 30px;
+      padding: 0 20px;
+      cursor: pointer;
+      &:hover {
+        background-color: #f5f7fa;
+      }
+    }
+  } */
+}
+</style>

+ 92 - 0
src/views/dataEntry_manage/dataEntry/components/operateLogsDia.vue

@@ -0,0 +1,92 @@
+<template>
+  <m-dialog
+    :show.sync="isShow"
+    width="750px"
+    :title="$t('ManualEntryPage.opera_logs')"
+    @close="closeDialog"
+  >
+    <div>
+      <el-table
+        :data="tableData"
+        style="box-shadow: 0px 3px 6px rgba(155, 170, 219, 0.2);margin-top: 20px"
+        border
+        height="auto"
+        ref="table"
+      >
+        <el-table-column
+          v-for="item in tableColums"
+          :key="item.key"
+          :label="item.label"
+          :width="item.widthsty"
+          :min-width="item.minwidthsty"
+          align="center"
+        >
+          <template slot-scope="{row}">
+            <span>{{row[item.key]}}</span>
+          </template>
+        </el-table-column>
+
+      </el-table>
+      <div style="height:35px;margin: 20px 0;">
+        <m-page
+          :page_no="page_no"
+          :pageSize="pageSize"
+          :total="total"
+          @handleCurrentChange="pageChange"
+        />
+      </div>
+    </div>
+  </m-dialog>
+</template>
+<script>
+import mDialog from '@/components/mDialog.vue';
+import mPage from '@/components/mPage.vue';
+export default {
+  components: { mDialog,mPage },
+  props: {
+    isShow: {
+      type: Boolean
+    },
+    edbCode: {
+      type: String
+    }
+  },
+  computed: {
+    tableColums() {
+      return [
+        {  label: /* '操作时间' */this.$t('ManualEntryPage.opera_time'),key: 'TradeCode' },
+        {  label: /* '操作内容' */this.$t('ManualEntryPage.opera_msg'),key: 'SecName',minwidthsty:'150px' },
+        {  label: /* '操作人' */this.$t('ManualEntryPage.opera_user'),key: 'Frequency'},
+      ]
+    }
+  },
+  data() {
+    return {
+      tableData: [],
+      page_no:1,
+      pageSize: 10,
+      total: 0
+    }
+  },
+  mounted(){
+
+  },
+  methods:{
+    getTableData() {
+
+    },
+
+    pageChange(page) {
+      this.page_no = page;
+      this.getTableData()
+    },
+
+    closeDialog() {
+      this.$emit('update:isShow',false)
+    }
+  },
+}
+</script>
+<style scoped lang='scss'>
+
+</style>

+ 408 - 0
src/views/dataEntry_manage/dataEntry/dataEdit.vue

@@ -0,0 +1,408 @@
+<template>
+  <div class="edit-data-page">
+    <div class="wrap-top">
+      <div class="left-handle">
+        <el-form
+          ref="form"
+          label-position="right"
+          inline
+          label-width="120px"
+          :model="formData"
+          :rules="formRules"
+        >
+          <el-form-item :label="$t('Edb.Detail.e_name')" prop="targetName">
+            <el-input
+              v-model="formData.targetName"
+              style="width: 150px"
+              :placeholder="$t('Edb.InputHolderAll.input_name')"
+            />
+          </el-form-item>
+          <el-form-item :label="$t('ManualEntryPage.label_vaiety')" prop="menu">
+            <el-cascader
+              v-model="formData.menu"
+              :options="classifyOptions"
+              :props="{
+                label: 'ClassifyName',
+                value: 'ClassifyId',
+                children: 'Child',
+                emitPath: false,
+              }"
+              clearable
+              :placeholder="$t('Edb.InputHolderAll.input_menu')"
+            />
+          </el-form-item>
+          <el-form-item :label="$t('Edb.Detail.e_fre')" prop="frequency">
+            <el-select
+              v-model="formData.frequency"
+              :placeholder="$t('Edb.InputHolderAll.input_fre')"
+              style="width: 120px"
+              clearable
+            >
+              <el-option
+                v-for="item in frequencyArr"
+                :key="item.label"
+                :label="item.label"
+                :value="item.value"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item :label="$t('Edb.Detail.e_unit')" prop="unit">
+            <selectUnit 
+							v-model="formData.unit" 
+							style="width: 120px"
+						/>
+          </el-form-item>
+        
+        </el-form>
+      </div>
+      <div class="right-handle">
+        <div>
+          <el-button type="primary" size="medium" @click="handleSaveEdb"><!-- 保存 -->{{$t('Dialog.confirm_save_btn')}}</el-button>
+          <el-button type="primary" size="medium" plain @click="$router.go(-1)"><!-- 取消 -->{{$t('Dialog.back_btn')}}</el-button>
+        </div>
+      </div>
+      
+    </div>
+    
+    <div class="main">
+      <div id="excel-container"></div>
+    </div>
+
+  </div>
+</template>
+
+<script>
+import { dataInterence } from '@/api/api.js';
+import {dataBaseInterface} from '@/api/modules/chartApi'
+import { formRules } from '../databaseComponents/util';
+import { unitArr,frequencySelectList } from '@/utils/defaultOptions';
+import { mapState } from 'vuex';
+export default {
+  data() {
+    return {
+      edb_id: this.$route.query.edbid,
+      formData: {
+        targetName: '',
+        menu: '',
+        frequency: '',
+        unit: ''
+      },
+      formRules,
+      unitArr,
+      /* frequencyArr, */
+      classifyOptions: [],
+      edbInfo: {},
+
+      excelData: [
+        {
+          r:0,
+          c:0,
+          v:{
+            m: this.$t('Edb.Detail.e_date'),
+            v: this.$t('Edb.Detail.e_date'),
+            bg:'#bbb'
+          },
+        },
+        {
+          r:0,
+          c:1,
+          v:{
+            m:this.$t('Edb.Detail.e_value'),
+            v:this.$t('Edb.Detail.e_value'),
+            bg:'#bbb'
+          },
+        },
+      ],
+
+    }
+  },
+  computed: {
+    excelOptions() {
+      return {
+        container: 'excel-container',
+        lang: this.$i18nt.locale, // 设定表格语言
+        showinfobar: false,//顶部info
+        showsheetbar:false,//底部sheet页 暂禁止添加多个表格
+        showtoolbarConfig:{
+          image: false,//图片
+          print: false,//打印
+          chart: false, // '图表'
+          postil:  false, //'批注'
+          pivotTable: false,  //'数据透视表'
+          function: false, // '公式'
+          frozenMode: false, // '冻结方式'
+          sortAndFilter: false, // '排序和筛选'
+          conditionalFormat: false, // '条件格式'
+          dataVerification: false, // '数据验证'
+          splitColumn: false, // '分列'
+          screenshot: false, // '截图'
+          findAndReplace: false, // '查找替换'
+        },
+        cellRightClickConfig: {
+          insertColumn: false,
+          matrix: false,
+          chart: false, // 图表生成
+          image: false, // 插入图片
+          link: false, // 插入链接
+          copyAs: false,
+        },
+        data: [{
+          column: 2,
+          scrollTop: 0,
+          scrollLeft: 0,
+          defaultColWidth: 200,
+          defaultRowHeight: 20,
+          frozen: [
+            {
+              type: 'row'
+            }
+          ],
+          celldata: this.excelData,
+        }],
+        hook:{
+          cellUpdateBefore(r,c,value){
+            // 禁止更新第一行
+            if(r===0) return false
+            
+            // if(c===0&&value) {
+            //   console.log(value)
+            //   console.log(isNaN(value)&&!isNaN(Date.parse(value)))
+            //   if(isNaN(value)&&!isNaN(Date.parse(value))) {
+            //     return true
+            //   }else {
+            //     bus.$message.warning('请输入正确的日期格式')
+            //     return false
+            //   }
+            // }
+          },
+          cellMousedownBefore(e,{r,c}){
+            if(r===0) return false
+          },
+
+          cellAllRenderBefore(a,b,c) {
+            // console.log(a,b,c)
+          },
+
+          rangePasteBefore(range,data) {
+            console.log(range,data)
+          }
+        },
+      }  
+    },
+
+     ...mapState({
+			currentLang: state => state.lang,
+		}),
+    frequencyArr(){
+        return frequencySelectList(['半年度'])
+    }
+  },
+
+  mounted() {
+    this.getClassify();
+    if(this.$route.query.id) {
+      this.getEdbDetail()
+    }else {
+      this.initExcelOptions();
+    }
+    
+  },
+
+  beforeDestroy() {
+    luckysheet.destroy();
+  },
+
+  methods: {
+
+    async getEdbDetail() {
+      const res = await dataInterence.getEdbDetailV2({
+        TradeCode: this.$route.query.id,
+      })
+      if (res.Ret!==200) return 
+
+      this.edbInfo = res.Data;
+
+      this.formData = {
+        targetName: this.edbInfo.Detail.SecName,
+        menu: this.edbInfo.Detail.ClassifyId,
+        frequency: this.edbInfo.Detail.Frequency,
+        unit: this.edbInfo.Detail.Unit
+      }
+      this.initData()
+    },
+
+    /* 重置数据 */
+    initData() { 
+      this.excelData = [
+        {
+          r:0,
+          c:0,
+          v:{
+            m:"日期",
+            v:"日期",
+            bg:'#bbb'
+          },
+        },
+        {
+          r:0,
+          c:1,
+          v:{
+            m:"值",
+            v:"值",
+            bg:'#bbb'
+          },
+        },
+      ]
+
+      this.edbInfo.Detail.DataList&&this.edbInfo.Detail.DataList.forEach((item,index) => {
+        this.excelData.push({
+          r: index+1,
+          c:0,
+          v:{
+            m:item.Dt,
+            v:item.Dt
+          },
+        })
+        this.excelData.push({
+          r: index+1,
+          c:1,
+          v:{
+            m:item.Close,
+            v:item.Close
+          },
+        })
+      })
+      luckysheet.create(this.excelOptions)
+    },
+
+    getClassify() {
+			dataInterence.getClassify().then(res =>{
+				if(res.Ret === 200 && res.Data.List) {
+					this.classifyOptions = res.Data.List||[];
+				}
+			})
+		},
+
+    /* 保存 */
+    async handleSaveEdb() {
+      let data = luckysheet.getAllSheets()[0]
+      await this.$refs.form.validate();
+      
+      if(data.celldata.length < 3) return this.$message.warning(this.$t('AdjustDataPage.input_content_msg'));
+
+      const { targetName,menu,frequency,unit} = this.formData;
+
+      //处理数据格式
+      let result_obj = {},DataList=[];
+      data.celldata.forEach(item => {
+        if(result_obj[item.r]&&item.c===1) {
+          result_obj[item.r] = {
+            Date: result_obj[item.r].v.m,
+            Value: Number(item.v.m)
+          }
+        } else {
+          result_obj[item.r] = item
+        }
+      })
+      for(let key in result_obj) {
+        if(result_obj[key].Date && !isNaN(result_obj[key].Value)) DataList.push(result_obj[key]);
+      }
+
+      const { Ret,Data } = await dataBaseInterface.adjustEdbEdit({
+        EdbName: targetName,
+        Frequency: frequency,
+        Unit: unit,
+        ClassifyId: menu,
+        EdbInfoId: Number(this.edb_id)|| 0,
+        DataList
+      })
+
+      if(Ret !== 200) return
+      // this.$message.success('保存成功')
+      this.$message.success(this.$t('MsgPrompt.saved_msg'))
+
+      const { UniqueCode,EdbInfoId } = Data;
+
+      this.$router.replace({path:'/dataList', query: {
+        code: UniqueCode,
+        id: EdbInfoId
+      }});
+    },  
+
+    initExcelOptions() {
+      this.$nextTick(() => {
+        luckysheet.create(this.excelOptions)
+      })
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+*{ box-sizing: border-box; }
+.edit-data-page {
+  .wrap-top {
+    display: flex;
+    flex-wrap: wrap;
+    justify-content: space-between;
+    /* align-items: center; */
+    margin-bottom: 20px;
+    padding: 20px;
+    background: #fff;
+    border: 1px solid #ececec;
+    border-radius: 4px;
+    box-shadow: 0 3px 6px rgba(0, 0, 0, 0.05);
+    z-index: 1;
+    .min-top {
+      margin-bottom: 10px;
+      display: flex;
+      flex-wrap: wrap;
+      align-items: center;
+      color: #606266;
+      li { margin-right: 35px; }
+    }
+    .left-handle{
+        flex: 1;
+    }
+    .right-handle {
+      min-width: 155px;
+      display: flex;
+      flex-direction: row-reverse;
+      align-items: center;
+    }
+    .el-form{
+        width:100%;
+    }
+    .tips-cont {
+      margin-right: 20px;
+    }
+  }
+  .main {
+    position: relative;
+    height: 650px;
+    display: flex;
+    .table-cont {
+      width: 260px;
+      flex-shrink: 0;
+      margin-right: 20px;
+      /* height: 600px;
+      overflow-y: scroll; */
+    }
+    #excel-container {
+      margin:0;padding:0;
+      width:100%;
+    }
+  }
+}
+</style>
+<style lang="scss">
+  .luckysheet .toolbar {
+    background: none;
+    margin: 0;
+    padding: 0;
+  }
+.luckysheet-input-box {
+  z-index: 99999;
+}
+</style>

+ 441 - 0
src/views/dataEntry_manage/dataEntry/index.vue

@@ -0,0 +1,441 @@
+<template>
+  <div class="dataEntry-page">
+    
+    <header>
+      <div class="left-btn">
+        <el-button type="primary" @click="isShowinsert=true"><!-- 导入数据 -->{{$t('ManualEntryPage.tit_insert_data')}}</el-button>
+        <el-button type="primary"><!-- 批量加入指标库 -->{{$t('ManualEntryPage.batch_addbase')}}</el-button>
+        <el-button type="primary" @click="$router.push({path: '/online_excel' })"><!-- 在线Excel -->{{$t('ManualEntryPage.online_excel')}}</el-button>
+        <el-button type="primary"><!-- 批量删除 -->{{$t('ManualEntryPage.batch_del')}}</el-button>
+      </div>
+
+      <div class="right-wrap">
+        <el-button type="text"><!-- 导出Excel -->{{$t('ManualEntryPage.tit_export')}}</el-button>
+        <el-select
+					v-model="search_txt"
+					v-loadMore="searchLoad"
+					ref="searchRef"
+					:filterable="!search_txt"
+					remote
+					clearable
+					:placeholder="$t('Edb.InputHolderAll.input_name_orid')"
+					style="width: 260px;"
+					:remote-method="searchHandle"
+					@click.native="inputFocusHandle"
+				>
+					<i slot="prefix" class="el-input__icon el-icon-search"></i>
+					<el-option
+						v-for="item in searchOptions"
+						:key="item.EdbInfoId"
+						:label="item.EdbName"
+						:value="item.EdbInfoId"
+					/>
+				</el-select>
+      </div>
+    </header>
+    <div class="main">
+
+      <div class="main-left" id="left">
+        
+        <div class="left-main">
+            <div class="tree-cont">
+              <el-tree
+                ref="treeRef"
+                class="classify-tree"
+                :data="classifyList"
+                node-key="UniqueCode"
+                :props="defaultProp"
+                :current-node-key="select_node"
+                :default-expanded-keys="defaultShowNodes"
+                :expand-on-click-node="false"
+                check-strictly
+                empty-text="暂无分类"
+                lazy
+                :load="getLazyTreeData"
+                @current-change="nodeChange"
+              >
+                <span class="custom-tree-node" slot-scope="{ node, data }">
+                  <span
+                    class="text_oneLine node_label"
+                    :style="`width:${
+                      (select_node === data.UniqueCode && node.Nodewidth) || ''
+                    }`"
+                  >
+                    <span>{{ data.ClassifyName  }}</span>
+                  </span>
+                </span>
+              </el-tree>
+
+            </div>
+        </div>
+
+      </div>
+
+      <div class="main-right" id="right">
+        <!-- 分类 -->
+        <template v-if="!selectedEdb">
+          <div>
+            <h3>共200个指标</h3>
+            <el-table
+              :data="tableData"
+              style="box-shadow: 0px 3px 6px rgba(155, 170, 219, 0.2);margin-top: 20px"
+              border
+              ref="table"
+            >
+              <el-table-column
+                v-for="item in tableColums"
+                :key="item.key"
+                :label="item.label"
+                :width="item.widthsty"
+                :min-width="item.minwidthsty"
+                align="center"
+              >
+                <template slot-scope="{row}">
+                  <span>{{row[item.key]}}</span>
+                </template>
+              </el-table-column>
+
+              <el-table-column
+                :label="$t('Table.column_operations')"
+                align="center"
+                min-width="200"
+              >
+                <template slot-scope="{row}">
+                  <div>
+                    <span class="editsty" @click="handleEdb({item:row,type:'edit'})">{{$t('Table.edit_btn')}}</span>
+                    <span class="editsty" @click="handleEdb({item:row,type:'addToBase'})"><!-- 加入指标库 -->{{$t('ManualEntryPage.add_tobase')}}</span>
+                    <span class="editsty" @click="handleEdb({item:row,type:'logs'})"><!-- 操作日志 -->{{$t('ManualEntryPage.opera_logs')}}</span>
+                    <span class="deletesty" @click="handleEdb({item:row,type:'del'})">{{$t('Table.delete_btn')}}</span>
+                  </div>
+
+                  
+                </template>
+              </el-table-column>
+              <div class="nodata" slot="empty">
+                <tableNoData :text="$t('Table.prompt_slogan')" size="mini"/>
+              </div>
+            </el-table>
+            
+            <div style="height:35px;margin: 20px 0;">
+              <m-page
+                :page_no="page_no"
+                :pageSize="pageSize"
+                :total="total"
+                @handleCurrentChange="pageChange"
+              />
+            </div>
+          </div>
+        </template>
+
+        <!-- 指标详情 -->
+        <template v-else>
+          <edbDetail
+            :id="selectedEdb"
+            @handle="handleEdb"
+          />
+        </template>
+      </div>
+    </div>
+
+
+  <!-- 导入数据弹窗 -->
+  <insert-data
+    :isShowinsert.sync="isShowinsert"
+    @importSuccess="importSuccess"
+    source="dataEntry"
+  />
+
+  
+  <!-- 操作日志弹窗 -->
+  <operateLogsDia
+    :isShow.sync="isShowOperaLogs"
+  />
+  </div>
+</template>
+<script>
+import { dataInterence } from '@/api/api.js';
+import mPage from '@/components/mPage.vue';
+import edbDetail from './components/edbDetail.vue'
+import operateLogsDia from './components/operateLogsDia.vue';
+import insertData from '../components/insertData.vue';
+export default {
+  components: { 
+    mPage,
+    edbDetail,
+    operateLogsDia,
+    insertData
+  },
+  computed: {
+    tableColums() {
+      return [
+        {  label: this.$t('Edb.Detail.e_id'),key: 'TradeCode' },
+        {  label: this.$t('Edb.Detail.e_name'),key: 'SecName',minwidthsty:'150px' },
+        {  label: this.$t('Edb.Detail.e_fre'),key: 'Frequency',widthsty:'100px' },
+        {  label: this.$t('Edb.Detail.e_unit'),key: 'Unit', },
+        {  label: this.$t('Edb.Detail.e_creator'),key: 'UserName', },
+        {  label: this.$t('Edb.Detail.e_update_time'),key: 'ModifyTime', },
+      ]
+    } 
+  },
+  data() {
+    return {
+      defaultProp: {
+        label: 'ClassifyName',
+        children: 'Child',
+				isLeaf: 'isLeaf'
+      },
+      classifyList: [],
+
+      tableData: [],
+      pageNo: 1,
+      total: 0,
+      pageSize: 10,
+
+      selectClassifyId: 0,
+      selectNode: '',
+      selectedEdb: 0,
+
+      /* 操作日志弹窗 */
+      isShowOperaLogs: false,
+
+      /* 导入弹窗 */
+      isShowinsert:false
+    }
+  },
+  mounted(){
+    this.getClassify();
+    this.getTableData()
+  },
+  methods:{
+    // 获取分类
+		getClassify() {
+			dataInterence.getClassifyV2().then(res =>{
+				if(res.Ret === 200 && res.Data.List) {
+					this.classifyList = res.Data.List||[];
+				}
+			})
+		},
+
+    //加载子指标
+    async getLazyTreeData(node,resolve,maxLevel=2) {
+      if(node.level===0){
+				resolve(this.classifyList)
+			}else if(node.level>0&&node.level<maxLevel){
+				//获取对应层级的Child
+				resolve(node.data.Child||[])
+			}else{
+				let arr=[]
+				const res=await dataInterence.getClassifyLoadChild({
+          ClassifyId: node.data.ClassifyId
+        })
+				if (res.Ret === 200) {
+					const temarr = res.Data.List || [];
+					arr=temarr.map(item=>{
+						return {
+							...item,
+							isLeaf:item.TradeCode?true:false
+						}
+					})
+				}
+				resolve(arr)
+			}
+    },
+
+    async getTableData() {
+      const res = await dataInterence.getEdbListV2({
+        ClassifyId: this.selectClassifyId,
+        CurrentIndex: this.pageNo,
+        PageSize: this.pageSize
+      })
+
+      if(res.Ret !==200) return 
+      this.tableData = res.Data.List || [];
+      this.total = res.Data.Paging.Totals;
+    },
+
+    pageChange(page) {
+      this.pageNo = page;
+      this.getTableData()
+    },
+
+    //选中节点
+    nodeChange(data,node) {
+      this.selectClassifyId = !data.TradeCode?data.ClassifyId:0;
+			this.selectNode = data.UniqueCode;
+			this.selectedEdb = data.TradeCode;
+      
+      if(this.selectClassifyId){
+        this.pageNo = 1;
+        this.getTableData();
+      }
+    },
+
+    //导入成功
+    importSuccess() {
+      this.isShowinsert = false;
+      this.getTableList();
+    },
+
+    /* 操作 */
+    handleEdb({item,type}) {
+      const typeMap = {
+        'edit': this.handleEditEdb,
+        'addToBase': this.handleAddToBase,
+        'logs': this.handleOperaLogs,
+        'del': this.handleDelEdb
+      }
+
+      typeMap[type]&&typeMap[type](item)
+    },
+
+    handleEditEdb(item) {
+      this.$router.push({
+        path: '/dataEdit',
+        query: {
+          id: item.TradeCode
+        }
+      })
+    },
+
+    /* 加入指标库 */
+    handleAddToBase() {
+
+    },
+
+    // 查看操作日志
+    handleOperaLogs(item){
+      // this.operteId
+      this.isShowOperaLogs = true;
+    },
+    
+    /* 删除指标 */
+    handleDelEdb(item) {
+      // 删除前检测指标下是否有录入数据
+			dataInterence.checkTarget({
+				TradeCode:item.TradeCode
+			}).then(res => {
+				if(res.Data.Status===1){
+					this.$message.error(/* "该指标已加入指标库,不可删除" */ this.$t('ManualEdbListPage.edb_not_allow_delete'))
+					return
+				}else{
+					this.$confirm(
+						res.Data.Status===0 ? this.$t('ManualEdbListPage.del_edb_msg') : this.$t('ManualEdbListPage.del_edb_rela_msg'),
+						this.$t('Dialog.warn_tit'),{
+						type:'warning'
+					}).then(() => {
+						dataInterence.delTarget({
+							TradeCode:item.TradeCode
+						}).then(res =>{
+								if( res.Ret !== 200 ) return
+								this.$message.success(/* '删除成功!' */this.$t('MsgPrompt.delete_msg'));
+								this.getTableData();
+							});
+					}).catch(() => {});
+				}
+			})
+    }
+  },
+}
+</script>
+<style scoped lang='scss'>
+.dataEntry-page {
+  *{box-sizing: border-box;}
+  header,.main-left,.main-right {
+    padding: 20px;
+    background: #fff;
+    border: 1px solid #C8CDD9;
+    border-radius: 4px;
+  }
+  header {
+    margin-bottom: 20px;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+  }
+  .main {
+    display: flex;
+
+    .main-left {
+      width: 300px;
+      flex-shrink: 0;
+      margin-right: 30px;
+      .tree-cont {
+        height: calc(100vh - 260px);
+        overflow: auto;
+      }
+      .classify-tree {
+        color: #333;
+        overflow: hidden; 
+        .custom-tree-node {
+          display: flex;
+          justify-content: space-between;
+          align-items: center;
+          display: block;
+          flex: 1;
+        }
+      }
+    }
+
+    .main-right {
+      flex: 1;
+      height: calc(100vh - 220px);
+      overflow: auto;
+    }
+  }
+}
+</style>
+<style lang="scss">
+ .dataEntry-page {
+  .classify-tree {
+		.el-tree__drop-indicator {
+			height: 3px;
+			background-color: #409eff;
+		}
+
+		.el-tree-node__content {
+			margin-bottom: 14px !important;
+		}
+
+		.el-tree-node__children {
+			.el-tree-node {
+				margin-bottom: 0px !important;
+				padding-left: 18px;
+			}
+
+			.el-tree-node__content {
+				margin-bottom: 5px !important;
+				padding-left: 0 !important;
+			}
+		}
+
+		.expanded.el-icon-caret-right:before {
+			content: url('~@/assets/img/set_m/down.png') !important;
+		}
+
+		.el-icon-caret-right:before {
+			content: url('~@/assets/img/set_m/slide.png') !important;
+		}
+		.el-tree-node__expand-icon{
+			padding-top: 10px;
+		}
+
+		.el-tree-node__expand-icon.is-leaf.el-icon-caret-right:before {
+			content: '' !important;
+		}
+
+		.el-tree-node__expand-icon.expanded {
+			-webkit-transform: rotate(0deg);
+			transform: rotate(0deg);
+		}
+
+		.el-tree-node.is-current>.el-tree-node__content {
+			background-color: #f0f4ff !important;
+		}
+
+		.el-tree-node__content {
+			padding-right: 10px !important;
+		}
+	}
+
+} 
+</style>