Преглед изворни кода

订单跳转、订单总览

zuy пре 2 година
родитељ
комит
aeef46cce7

+ 1 - 1
admin-web/src/components/form/ExtDLabel.vue

@@ -158,7 +158,7 @@ onMounted(() => {
         return "-";
       }
     }
-    console.log(props.modelValue)
+    // console.log(props.modelValue)
     let dict = (<Dicts>dicts).find(k => k.value == props.modelValue);
 
     if (dict) {

+ 38 - 14
admin-web/src/components/form/ExtSelect.vue

@@ -20,9 +20,9 @@
   </el-select-v2>
 </template>
 <script lang="ts" setup name="ExtSelect">
-import {onMounted, ref, nextTick,watch} from 'vue';
+import {onMounted, ref, nextTick, watch, reactive} from 'vue';
 import u from "/@/utils/u";
-import {$body, $post} from "/@/utils/request";
+import {$body, $post,$get} from "/@/utils/request";
 
 const emit = defineEmits(['update:modelValue', 'on-change']);
 
@@ -61,17 +61,29 @@ const props = defineProps({
   },
   dataList: {
     type: Array<any>
+  },
+  urlMethod:{
+    type:String,
+    default:'post'
+  },
+  labelKey:{
+    type:String,
+    default:'name'
+  },
+ valueKey:{
+    type:String,
+    default:'id'
   }
 })
 
-const state = ref({
-  list: [] as Array<any>,
+const state = reactive({
+  list: [] ,
   modelVal: null
 })
 
 watch(()=>props.modelValue,(val)=>{
   console.log("watch>>>",val)
-  state.value.modelVal = val;
+  state.modelVal = val;
   })
 
 onMounted(() => {
@@ -80,7 +92,7 @@ onMounted(() => {
 
 const loadData = () => {
   if (!u.isEmptyOrNull(props.dataList)) {
-    state.value.list = props.dataList;
+    state.list = props.dataList;
   } else {
     if (!props.url) {
       return;
@@ -92,14 +104,26 @@ const loadData = () => {
     if (props.query) {
       query = Object.assign({}, query, props.query);
     }
-    $body(`${props.url}`, query).then((res: any) => {
-      let {list,count}  = res;
-      state.value.list =  list.map(k=>{
-        return {value:k.id,label:k.name}
-      })
-      console.log(state.value.list)
-      // state.value.list = res?.list
-    });
+    if(props.urlMethod?.toLowerCase()==='post'){
+      $body(`${props.url}`, query).then((list: any) => {
+        // let {list,count}  = res;
+        state.list =  list.map((k:any)=>{
+          return {value:k[props.valueKey],label:k[props.labelKey]}
+        })
+        console.log(state.list)
+        // state.value.list = res?.list
+      });
+    }else{
+      $get(`${props.url}`, query).then((list: any) => {
+        // let {list,count}  = res;
+        state.list =  list.map((k:any)=>{
+          return {value:k[props.valueKey],label:k[props.labelKey]}
+        })
+        console.log(state.list)
+        // state.value.list = res?.list
+      });
+    }
+
   }
 
 }

+ 93 - 125
admin-web/src/views/admin/index.vue

@@ -15,12 +15,12 @@
           <div class="flex-margin flex w100" :class="` home-one-animation${k}`">
             <div class="flex-auto">
               <span class="font30">{{ v.num1 }}</span>
-<!--              <span class="ml5 font16" :style="{ color: v.color1 }">{{ v.num2 }}%</span>-->
+              <!--              <span class="ml5 font16" :style="{ color: v.color1 }">{{ v.num2 }}%</span>-->
               <div class="mt10">{{ v.num3 }}</div>
             </div>
-<!--            <div class="home-card-item-icon flex" :style="{ background: `var(${v.color2})` }">-->
-<!--              <i class="flex-margin font32" :class="v.num4" :style="{ color: `var(${v.color3})` }"></i>-->
-<!--            </div>-->
+            <!--            <div class="home-card-item-icon flex" :style="{ background: `var(${v.color2})` }">-->
+            <!--              <i class="flex-margin font32" :class="v.num4" :style="{ color: `var(${v.color3})` }"></i>-->
+            <!--            </div>-->
           </div>
         </div>
       </el-col>
@@ -28,17 +28,30 @@
     <el-row :gutter="15" class="home-card-two mb15">
       <el-col :xs="24" :sm="14" :md="14" :lg="16" :xl="16">
         <div class="home-card-item">
-          <el-date-picker
-              @change="loadStationStat"
-              value-format="YYYY-MM-DD"
-              v-model="state.dateRange"
-              type="daterange"
-              unlink-panels
-              range-separator="至"
-              start-placeholder="开始时间"
-              end-placeholder="结束时间"
-              :shortcuts="shortcuts"
-          />
+          <div class="w100  trend-header">
+            <div style="width: 300px">
+              <el-date-picker
+                  @change="loadStationStat"
+                  value-format="YYYY-MM-DD"
+                  v-model="state.dateRange"
+                  type="daterange"
+                  unlink-panels
+                  range-separator="至"
+                  start-placeholder="开始时间"
+                  end-placeholder="结束时间"
+                  :shortcuts="shortcuts"
+              />
+            </div>
+
+
+            <div class="trend-summary">
+              总服务费:
+              <el-tag type="success">{{ u.fmt.fmtMoney(state.homeOneExtra.serviceMoney) }}元</el-tag>
+              总电量:
+              <el-tag type="danger">{{ state.homeOneExtra.totalPower }}Kwh</el-tag>
+            </div>
+          </div>
+
           <div style="height: 100%;padding: 20px;" ref="homeLineRef"></div>
         </div>
       </el-col>
@@ -82,7 +95,7 @@ const defaultTime = ref<[Date, Date]>([
 ])
 
 const state = reactive({
-  dateRange:[u.date.format(start,"YYYY-MM-DD"),u.date.format(end,"YYYY-MM-DD")],
+  dateRange: [u.date.format(start, "YYYY-MM-DD"), u.date.format(end, "YYYY-MM-DD")],
   global: {
     homeChartOne: null,
     homeChartTwo: null,
@@ -145,68 +158,13 @@ const state = reactive({
       color3: '--el-color-danger',
     },
   ],
-  homeThree: [
-    {
-      icon: 'iconfont icon-yangan',
-      label: '浅粉红',
-      value: '2.1%OBS/M',
-      iconColor: '#F72B3F',
-    },
-    {
-      icon: 'iconfont icon-wendu',
-      label: '深红(猩红)',
-      value: '30℃',
-      iconColor: '#91BFF8',
-    },
-    {
-      icon: 'iconfont icon-shidu',
-      label: '淡紫红',
-      value: '57%RH',
-      iconColor: '#88D565',
-    },
-    {
-      icon: 'iconfont icon-shidu',
-      label: '弱紫罗兰红',
-      value: '107w',
-      iconColor: '#88D565',
-    },
-    {
-      icon: 'iconfont icon-zaosheng',
-      label: '中紫罗兰红',
-      value: '57DB',
-      iconColor: '#FBD4A0',
-    },
-    {
-      icon: 'iconfont icon-zaosheng',
-      label: '紫罗兰',
-      value: '57PV',
-      iconColor: '#FBD4A0',
-    },
-    {
-      icon: 'iconfont icon-zaosheng',
-      label: '暗紫罗兰',
-      value: '517Cpd',
-      iconColor: '#FBD4A0',
-    },
-    {
-      icon: 'iconfont icon-zaosheng',
-      label: '幽灵白',
-      value: '12kg',
-      iconColor: '#FBD4A0',
-    },
-    {
-      icon: 'iconfont icon-zaosheng',
-      label: '海军蓝',
-      value: '64fm',
-      iconColor: '#FBD4A0',
-    },
-  ],
   myCharts: [] as EmptyArrayType,
   charts: {
     theme: '',
     bgColor: '',
     color: '#303133',
   },
+  homeOneExtra: {}
 });
 
 const shortcuts = [
@@ -240,13 +198,13 @@ const shortcuts = [
 ]
 
 // 折线图
-const initLineChart = (dataList:Array<any>) => {
+const initLineChart = (dataList: Array<any>) => {
   if (!state.global.dispose.some((b: any) => b === state.global.homeChartOne)) state.global.homeChartOne.dispose();
   state.global.homeChartOne = markRaw(echarts.init(homeLineRef.value, state.charts.theme));
 
-  u.sort(dataList,"statTime")
+  u.sort(dataList, "statTime")
 
-  let xAxis = dataList.map(k=>k.statTime)
+  let xAxis = dataList.map(k => k.statTime)
   const option = {
     backgroundColor: state.charts.bgColor,
     title: {
@@ -265,7 +223,7 @@ const initLineChart = (dataList:Array<any>) => {
       {
         type: 'value',
         name: '费用/元 充电量/度',
-        position:'left',
+        position: 'left',
         splitLine: {show: true, lineStyle: {type: 'dashed', color: '#f5f5f5'}},
       },
     ],
@@ -276,10 +234,10 @@ const initLineChart = (dataList:Array<any>) => {
         symbolSize: 6,
         symbol: 'circle',
         smooth: true,
-        data: dataList.map(k=>k.totalPower),
+        data: dataList.map(k => k.totalPower),
         // data: [0, 41.1, 30.4, 65.1, 53.3, 53.3, 53.3, 41.1, 30.4, 65.1, 53.3, 10],
         lineStyle: {color: '#68a7a0'},
-        itemStyle: {color: '#68a7a0', borderColor: '#68a7a0',barBorderRadius: 5},
+        itemStyle: {color: '#68a7a0', borderColor: '#68a7a0', barBorderRadius: 5},
         areaStyle: {
           color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
             {offset: 0, color: '#25b8d2'},
@@ -287,45 +245,45 @@ const initLineChart = (dataList:Array<any>) => {
           ]),
         },
       },
-/*      {
-        name: '总金额',
-        type: 'line',
-        symbolSize: 6,
-        symbol: 'circle',
-        smooth: true,
-        data: dataList.map(k=>u.fmt.fmtMoney(k.totalMoney)),
-        lineStyle: {color: '#fe9a8b'},
-        itemStyle: {color: '#fe9a8b', borderColor: '#fe9a8b'},
-        areaStyle: {
-          color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-            {offset: 0, color: '#fe9a8bb3'},
-            {offset: 1, color: '#fe9a8b03'},
-          ]),
-        },
-      },
-      {
-        name: '电费',
-        type: 'line',
-        symbolSize: 6,
-        symbol: 'circle',
-        smooth: true,
-        data: dataList.map(k=>u.fmt.fmtMoney(k.elecMoney)),
-        lineStyle: {color: '#b5fe8b'},
-        itemStyle: {color: '#b5fe8b', borderColor: '#b5fe8b'},
-        areaStyle: {
-          color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-            {offset: 0, color: '#b5fe8b'},
-            {offset: 1, color: '#fe9a8b03'},
-          ]),
-        },
-      },*/
+      /*      {
+              name: '总金额',
+              type: 'line',
+              symbolSize: 6,
+              symbol: 'circle',
+              smooth: true,
+              data: dataList.map(k=>u.fmt.fmtMoney(k.totalMoney)),
+              lineStyle: {color: '#fe9a8b'},
+              itemStyle: {color: '#fe9a8b', borderColor: '#fe9a8b'},
+              areaStyle: {
+                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
+                  {offset: 0, color: '#fe9a8bb3'},
+                  {offset: 1, color: '#fe9a8b03'},
+                ]),
+              },
+            },
+            {
+              name: '电费',
+              type: 'line',
+              symbolSize: 6,
+              symbol: 'circle',
+              smooth: true,
+              data: dataList.map(k=>u.fmt.fmtMoney(k.elecMoney)),
+              lineStyle: {color: '#b5fe8b'},
+              itemStyle: {color: '#b5fe8b', borderColor: '#b5fe8b'},
+              areaStyle: {
+                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
+                  {offset: 0, color: '#b5fe8b'},
+                  {offset: 1, color: '#fe9a8b03'},
+                ]),
+              },
+            },*/
       {
         name: '服务费',
         type: 'line',
         symbolSize: 6,
         symbol: 'circle',
         smooth: true,
-        data: dataList.map(k=>u.fmt.fmtMoney(k.serviceMoney)),
+        data: dataList.map(k => u.fmt.fmtMoney(k.serviceMoney)),
         lineStyle: {color: '#3770ff'},
         itemStyle: {color: '#3770ff', borderColor: '#3770ff'},
         areaStyle: {
@@ -361,7 +319,7 @@ const initLineChart = (dataList:Array<any>) => {
   state.myCharts.push(state.global.homeChartOne);
 };
 // 饼图
-const initPieChart = (dataMap:any) => {
+const initPieChart = (dataMap: any) => {
   if (!state.global.dispose.some((b: any) => b === state.global.homeChartTwo)) state.global.homeChartTwo.dispose();
   state.global.homeChartTwo = markRaw(echarts.init(homePieRef.value, state.charts.theme));
   var getname = ['空闲', '已连接', '充电中'];
@@ -369,7 +327,7 @@ const initPieChart = (dataMap:any) => {
   // var data = [dataMap["0"]||0,dataMap["1"]||0,dataMap["2"]||0];
   var data = [];
   for (var i = 0; i < getname.length; i++) {
-    data.push({name: getname[i], value: dataMap[`${i}`]||0});
+    data.push({name: getname[i], value: dataMap[`${i}`] || 0});
   }
 
   const colorList = ['#51A3FC', '#36C78B', '#FEC279', '#968AF5', '#E790E8'];
@@ -463,33 +421,34 @@ const initEchartsResize = () => {
   window.addEventListener('resize', initEchartsResizeFun);
 };
 
-const loadCurrentEquipmentStatus = ()=>{
-  $get(`equipment/statEquipmentStatus`).then((res:any)=>{
+const loadCurrentEquipmentStatus = () => {
+  $get(`equipment/statEquipmentStatus`).then((res: any) => {
     console.log(res)
-    initPieChart(res||{});
+    initPieChart(res || {});
   })
 }
 
 
-const loadStationStat = ()=>{
+const loadStationStat = () => {
   let start = state.dateRange[0]
   let end = state.dateRange[1]
-  let size = u.date.diff(new Date(start),new Date(end))+1;
-  $get(`stat/stationStat`,{startTime:start,endTime:end,type:'day',pageSize:size}).then((res:any)=>{
+  let size = u.date.diff(new Date(start), new Date(end)) + 1;
+  $get(`stat/stationStat`, {startTime: start, endTime: end, type: 'day', pageSize: size}).then((res: any) => {
     console.log(res)
+    state.homeOneExtra = res.extraData
     initLineChart(res.list);
   })
 }
 
-const loadStationStatToday = ()=>{
-  $get(`stat/stationTodayStat`).then((res:any)=>{
+const loadStationStatToday = () => {
+  $get(`stat/stationTodayStat`).then((res: any) => {
     console.log(res)
-    if(!u.isEmptyOrNull(res)){
-      let {chargeUsers,totalOrders,totalPower,totalMoney,elecMoney,serviceMoney}  = res
+    if (!u.isEmptyOrNull(res)) {
+      let {chargeUsers, totalOrders, totalPower, totalMoney, elecMoney, serviceMoney} = res
       state.homeOne[0].num1 = totalPower;
       state.homeOne[1].num1 = u.fmt.fmtMoney(totalMoney);
-      state.homeOne[2].num1 =  u.fmt.fmtMoney(elecMoney);
-      state.homeOne[3].num1 =  u.fmt.fmtMoney(serviceMoney);
+      state.homeOne[2].num1 = u.fmt.fmtMoney(elecMoney);
+      state.homeOne[3].num1 = u.fmt.fmtMoney(serviceMoney);
       state.homeOne[4].num1 = chargeUsers;
       state.homeOne[5].num1 = totalOrders;
     }
@@ -646,4 +605,13 @@ $homeNavLengh: 8;
     }
   }
 }
+
+.trend-header {
+  display: inline-flex;
+  justify-content: space-between;
+
+  .trend-summary {
+    flex: 1;
+  }
+}
 </style>

+ 38 - 1
admin-web/src/views/admin/ordering/index.vue

@@ -66,6 +66,7 @@
             placeholder="充电开始时间"
             clearable
             type="date"
+            value-format="YYYY-MM-DD"
             @blur="loadData(true)"
             class="wd150 mr10">
         </el-date-picker>
@@ -74,6 +75,7 @@
             placeholder="充电结束时间"
             clearable
             type="date"
+            value-format="YYYY-MM-DD"
             @blur="loadData(true)"
             class="wd150 mr10">
         </ext-date-picker>
@@ -117,6 +119,22 @@
         </el-button>
       </el-form>
 
+      <el-card class="w100">
+        <div class="order-summary">
+          <span>订单笔数:</span>
+          <el-tag type="success">{{state.extraData.totalOrders}}笔</el-tag>
+          <span class="ml5">电量:</span>
+          <el-tag type="success">{{state.extraData.totalPower}}Kwh</el-tag>
+          <span class="ml5">实付金额:</span>
+          <el-tag type="success">{{u.fmt.fmtMoney(state.extraData.totalMoney)}}元</el-tag>
+          <span class="ml5"> 实付电费:</span>
+          <el-tag type="success">{{u.fmt.fmtMoney(state.extraData.elecMoney)}}元</el-tag>
+          <span class="ml5">实付服务费:</span>
+          <el-tag type="success">{{u.fmt.fmtMoney(state.extraData.serviceMoney)}}元</el-tag>
+        </div>
+
+      </el-card>
+
       <el-table
           border
           stripe="stripe"
@@ -188,6 +206,10 @@ import {$body,$get} from "/@/utils/request";
 import {Msg} from "/@/utils/message";
 import u from "/@/utils/u"
 
+import {useRoute} from "vue-router";
+
+const route = useRoute();
+
 import ExtPage from '/@/components/form/ExtPage.vue'
 
 import mittBus from '/@/utils/mitt';
@@ -235,7 +257,15 @@ const state = reactive({
         label: '操作', prop: 'action', width: 180, align: 'center', fixed: 'right',
       }
     ],
+
   },
+  extraData:{
+    totalOrders:0,
+    totalPower:0,
+    elecMoney:0,
+    serviceMoney:0,
+    totalMoney:0,
+  }
 })
 
 
@@ -252,6 +282,12 @@ onBeforeMount(() => {
 })
 
 onMounted(() => {
+  var query = route.query;
+  console.log(route.params, route.query)
+  if(query.connectorId){
+    state.formQuery.connectorId = query.connectorId;
+  }
+
   loadData();
 
   nextTick(() => {
@@ -278,8 +314,9 @@ const loadData = (refresh: boolean = false) => {
   }
   state.tableData.loading = true;
   $get(`/custom/listChargeOrders`, {...state.formQuery, ...state.pageQuery}).then((res: any) => {
-    let {list, total} = res;
+    let {list, total,extraData} = res;
     console.log(list)
+    state.extraData = extraData;
     state.tableData.data = list;
     state.pageQuery.total = total;
     state.tableData.loading = false;

+ 43 - 14
admin-web/src/views/admin/station/endpoint/index.vue

@@ -41,13 +41,26 @@
             clearable
             @change="loadData(true)"
             class="wd150 mr10"/>
-<!--        <el-input
+
+        <ext-select
             v-model="state.formQuery.stationId"
-            placeholder="站点id"
+            placeholder="站点"
+            clearable
+            url="station/listStation"
+            urlMethod="get"
+            label-key="stationName"
+            value-key="stationId"
+            @on-change="loadData(true)"
+            class="wd150 mr10">
+
+        </ext-select>
+        <el-input
+            v-model="state.formQuery.equipmentId"
+            placeholder="充电桩编号/序列号"
             clearable
-            @blur="loadData(true)"
+            @change="loadData(true)"
             class="wd150 mr10">
-        </el-input>-->
+        </el-input>
 
 
         <el-button class="ml10" plain size="default" type="success" @click="loadData(true)">
@@ -94,6 +107,12 @@
             <template v-else-if="'netStatus'===field.prop">
               <ext-d-label type="Equipment.netStatus" v-model="row[field.prop]"/>
             </template>
+            <template v-else-if="'equipmentId'===field.prop">
+              <el-button link type="primary" @click="handleGotoOrder(row)">{{row[field.prop]}} </el-button>
+            </template>
+            <template v-else-if="'shortId'===field.prop">
+              <el-button link type="primary" @click="handleGotoOrder(row)">{{row[field.prop]}} </el-button>
+            </template>
             <template v-else>
               <div>{{ row[field.prop] }}</div>
             </template>
@@ -105,7 +124,7 @@
       <ext-page class="page-pager" v-model:value="state.pageQuery" @change="loadData(false)"/>
     </el-card>
   </div>
-  <EquipmentInfoDialog ref="equipmentInfoDialogRef" @refresh="loadData(true)"/>
+  <!--  <EquipmentInfoDialog ref="equipmentInfoDialogRef" @refresh="loadData(true)"/>-->
 </template>
 
 <script setup lang="ts" name="EquipmentInfoList">
@@ -121,8 +140,11 @@ import ExtPage from '/@/components/form/ExtPage.vue'
 import mittBus from '/@/utils/mitt';
 import ExtDLabel from "/@/components/form/ExtDLabel.vue";
 import ExtDSelect from "/@/components/form/ExtDSelect.vue";
+import ExtSelect from "/@/components/form/ExtSelect.vue";
 
-const EquipmentInfoDialog = defineAsyncComponent(() => import("/@/views/page/EquipmentInfoDialog.vue"));
+import {useRouter} from "vue-router";
+const router = useRouter();
+// const EquipmentInfoDialog = defineAsyncComponent(() => import("/@/views/page/EquipmentInfoDialog.vue"));
 
 //定义引用
 const queryRef = ref();
@@ -143,10 +165,10 @@ const state = reactive({
     data: [] as Array<any>,
     loading: false,
     columns: [
-      {label: '站点ID', prop: 'stationId', resizable: true,width: 100,fixed:'left'},
-      {label: '站点编号', prop: 'stationNo', resizable: true,width: 100,fixed:'left'},
-      {label: '站点编号', prop: 'stationName', resizable: true,width: 200,fixed:'left'},
-      {label: '充电桩编号', prop: 'shortId', resizable: true,width: 110,fixed:'left'},
+      {label: '站点ID', prop: 'stationId', resizable: true, width: 100, fixed: 'left'},
+      {label: '站点编号', prop: 'stationNo', resizable: true, width: 100, fixed: 'left'},
+      {label: '站点名称', prop: 'stationName', resizable: true, width: 200, fixed: 'left'},
+      {label: '充电桩编号', prop: 'shortId', resizable: true, width: 110, fixed: 'left'},
       {label: '充电桩序列号', prop: 'equipmentId', width: 180, resizable: true},
       {label: '设备型号', prop: 'equipmentModel', width: 150, resizable: true},
       {label: '服务状态', prop: 'serviceStatus', resizable: true, width: 130},
@@ -157,9 +179,9 @@ const state = reactive({
       // {label: '设备生产商名称', prop: 'manufacturerName', width: 160, resizable: true},
       {label: '设备生产日期', prop: 'productionDate', width: 160, resizable: true},
       {label: '更新时间', prop: 'updateTime', sortable: 'custom', resizable: true, width: 180},
-      /*{
-        label: '操作', prop: 'action', width: 180, align: 'center', fixed: 'right',
-      }*/
+      {
+        label: '操作', prop: 'action', width: 1, align: 'center', fixed: 'right',
+      }
     ],
   },
 })
@@ -181,7 +203,9 @@ onMounted(() => {
   var params = route.params;
   console.log(route.params, route.query)
   let {id} = route.params;
-  state.formQuery.stationId = id;
+  if (!isNaN(Number(id))) {
+    state.formQuery.stationId = id;
+  }
   loadData();
 
   nextTick(() => {
@@ -201,6 +225,11 @@ onBeforeUnmount(() => {
 
 
 //region 方法区
+const handleGotoOrder =(row:any)=>{
+  router.push(`/ordering?connectorId=${row.equipmentId}`)
+}
+
+
 // 初始化表格数据
 const loadData = (refresh: boolean = false) => {
   if (refresh) {

+ 18 - 1
admin-web/src/views/admin/station/list/index.vue

@@ -48,6 +48,16 @@
         </el-button>
       </el-form>
 
+      <el-card class="w100">
+        <div class="order-summary">
+          <span class="ml5">电量:</span>
+          <el-tag type="success">{{state.extraData.totalPower}}Kwh</el-tag>
+          <span class="ml5">实付服务费:</span>
+          <el-tag type="success">{{u.fmt.fmtMoney(state.extraData.serviceMoney)}}元</el-tag>
+        </div>
+
+      </el-card>
+
       <el-table
           border
           stripe="stripe"
@@ -107,7 +117,7 @@
 import {defineAsyncComponent, reactive, onMounted, onBeforeMount, ref, getCurrentInstance, nextTick, onBeforeUnmount} from 'vue';
 import {$body,$get} from "/@/utils/request";
 import {Msg} from "/@/utils/message";
-
+import u from "/@/utils/u"
 import ExtPage from '/@/components/form/ExtPage.vue'
 
 import mittBus from '/@/utils/mitt';
@@ -162,6 +172,13 @@ const state = reactive({
       }
     ],
   },
+  extraData:{
+    totalOrders:0,
+    totalPower:0,
+    elecMoney:0,
+    serviceMoney:0,
+    totalMoney:0,
+  }
 })
 
 

+ 1 - 0
admin-web/src/views/login/component/account.vue

@@ -16,6 +16,7 @@
           :placeholder="$t('message.account.accountPlaceholder2')"
           v-model="state.ruleForm.pwd"
           autocomplete="off"
+          @keyup.enter.native="onSignIn"
       >
         <template #prefix>
           <el-icon class="el-input__icon">