fix: 物联卡及数据解析替换

This commit is contained in:
wzyyy 2023-03-02 20:43:33 +08:00
parent 2607f9aace
commit 4d8f68dabb
18 changed files with 302 additions and 301 deletions

View File

@ -1,6 +1,6 @@
<template> <template>
<a-card> <j-card>
<div> <div>
<div class="top"> <div class="top">
<div class="top-left"> <div class="top-left">
@ -25,9 +25,9 @@
</div> </div>
<div> <div>
脚本语言: 脚本语言:
<a-select :defaultValue="'JavaScript'" style="width: 200;margin-left: 5px;"> <j-select :defaultValue="'JavaScript'" style="width: 200;margin-left: 5px;">
<a-select-option value="JavaScript">JavaScript(ECMAScript 5)</a-select-option> <j-select-option value="JavaScript">JavaScript(ECMAScript 5)</j-select-option>
</a-select> </j-select>
<AIcon type="ExpandOutlined" style="margin-left: 20px;" @click="toggle" /> <AIcon type="ExpandOutlined" style="margin-left: 20px;" @click="toggle" />
</div> </div>
</div> </div>
@ -42,7 +42,7 @@
}) })
}"></div> }"></div>
<MonacoEditor language="javascript" style="height: 100%;" theme="vs" v-model:modelValue="editorValue" /> <j-monaco-editor language="javascript" style="height: 100%;" theme="vs" v-model:modelValue="editorValue" />
</div> </div>
<div class="bottom"> <div class="bottom">
<div style="width: 49.5%;"> <div style="width: 49.5%;">
@ -51,25 +51,25 @@
<div class="bottom-title-topic"> <div class="bottom-title-topic">
<template v-if="instanceStore.current.transport === 'MQTT'"> <template v-if="instanceStore.current.transport === 'MQTT'">
<div style="margin-right: 5px;">Topic:</div> <div style="margin-right: 5px;">Topic:</div>
<a-auto-complete placeholder="请输入Topic" style="width: 300px" :options="topicList" <j-auto-complete placeholder="请输入Topic" style="width: 300px" :options="topicList"
:allowClear="true" :filterOption="(inputValue: any, option: any) => :allowClear="true" :filterOption="(inputValue: any, option: any) =>
option!.value.indexOf(inputValue) !== -1" v-model:value="topic" /> option!.value.indexOf(inputValue) !== -1" v-model:value="topic" />
</template> </template>
<template v-else> <template v-else>
<div style="margin-right: 5px;">URL:</div> <div style="margin-right: 5px;">URL:</div>
<a-input placeholder="请输入URL" v-model:value="url" style="width: 300px"></a-input> <j-input placeholder="请输入URL" v-model:value="url" style="width: 300px"></j-input>
</template> </template>
</div> </div>
</div> </div>
<a-textarea :rows="5" placeholder="// 二进制数据以0x开头的十六进制输入字符串数据输入原始字符串" style="margin-top: 10px;" <j-textarea :rows="5" placeholder="// 二进制数据以0x开头的十六进制输入字符串数据输入原始字符串" style="margin-top: 10px;"
v-model:value="simulation" /> v-model:value="simulation" />
</div> </div>
<div style="width: 49.5%;"> <div style="width: 49.5%;">
<div class="bottom-title"> <div class="bottom-title">
<div class="bottom-title-text">运行结果</div> <div class="bottom-title-text">运行结果</div>
</div> </div>
<a-textarea :autoSize="{ minRows: 5 }" :style="resStyle" v-model:value="result" /> <j-textarea :autoSize="{ minRows: 5 }" :style="resStyle" v-model:value="result" />
</div> </div>
</div> </div>
</div> </div>
@ -87,13 +87,13 @@
保存 保存
</PermissionButton> </PermissionButton>
</div> </div>
</a-card> </j-card>
</template> </template>
<script setup lang='ts' name="Parsing"> <script setup lang='ts' name="Parsing">
import AIcon from '@/components/AIcon' import AIcon from '@/components/AIcon'
import PermissionButton from '@/components/PermissionButton/index.vue' import PermissionButton from '@/components/PermissionButton/index.vue'
import MonacoEditor from '@/components/MonacoEditor/index.vue'; // import MonacoEditor from '@/components/MonacoEditor/index.vue';
import { useFullscreen } from '@vueuse/core' import { useFullscreen } from '@vueuse/core'
import { useInstanceStore } from '@/store/instance'; import { useInstanceStore } from '@/store/instance';
import { import {

View File

@ -1,18 +1,18 @@
<template> <template>
<a-card> <j-card>
<div> <div>
<div class="top"> <div class="top">
<div> <div>
脚本语言: 脚本语言:
<a-select :defaultValue="'JavaScript'" style="width: 200;margin-left: 5px;"> <j-select :defaultValue="'JavaScript'" style="width: 200;margin-left: 5px;">
<a-select-option value="JavaScript">JavaScript(ECMAScript 5)</a-select-option> <j-select-option value="JavaScript">JavaScript(ECMAScript 5)</j-select-option>
</a-select> </j-select>
<AIcon type="ExpandOutlined" style="margin-left: 20px;" @click="toggle" /> <AIcon type="ExpandOutlined" style="margin-left: 20px;" @click="toggle" />
</div> </div>
</div> </div>
<div class="edit" ref="el"> <div class="edit" ref="el">
<MonacoEditor language="javascript" style="height: 100%;" theme="vs" v-model:modelValue="editorValue" /> <j-monaco-editor language="javascript" style="height: 100%;" theme="vs" v-model:modelValue="editorValue" />
</div> </div>
<div class="bottom"> <div class="bottom">
<div style="width: 49.5%;"> <div style="width: 49.5%;">
@ -21,25 +21,25 @@
<div class="bottom-title-topic"> <div class="bottom-title-topic">
<template v-if="productStore.current.transportProtocol === 'MQTT'"> <template v-if="productStore.current.transportProtocol === 'MQTT'">
<div style="margin-right: 5px;">Topic:</div> <div style="margin-right: 5px;">Topic:</div>
<a-auto-complete placeholder="请输入Topic" style="width: 300px" :options="topicList" <j-auto-complete placeholder="请输入Topic" style="width: 300px" :options="topicList"
:allowClear="true" :filterOption="(inputValue: any, option: any) => :allowClear="true" :filterOption="(inputValue: any, option: any) =>
option!.value.indexOf(inputValue) !== -1" v-model:value="topic" /> option!.value.indexOf(inputValue) !== -1" v-model:value="topic" />
</template> </template>
<template v-else> <template v-else>
<div style="margin-right: 5px;">URL:</div> <div style="margin-right: 5px;">URL:</div>
<a-input placeholder="请输入URL" v-model:value="url" style="width: 300px"></a-input> <j-input placeholder="请输入URL" v-model:value="url" style="width: 300px"></j-input>
</template> </template>
</div> </div>
</div> </div>
<a-textarea :rows="5" placeholder="// 二进制数据以0x开头的十六进制输入字符串数据输入原始字符串" style="margin-top: 10px;" <j-textarea :rows="5" placeholder="// 二进制数据以0x开头的十六进制输入字符串数据输入原始字符串" style="margin-top: 10px;"
v-model:value="simulation" /> v-model:value="simulation" />
</div> </div>
<div style="width: 49.5%;"> <div style="width: 49.5%;">
<div class="bottom-title"> <div class="bottom-title">
<div class="bottom-title-text">运行结果</div> <div class="bottom-title-text">运行结果</div>
</div> </div>
<a-textarea :autoSize="{ minRows: 5 }" :style="resStyle" v-model:value="result" /> <j-textarea :autoSize="{ minRows: 5 }" :style="resStyle" v-model:value="result" />
</div> </div>
</div> </div>
</div> </div>
@ -57,13 +57,13 @@
保存 保存
</PermissionButton> </PermissionButton>
</div> </div>
</a-card> </j-card>
</template> </template>
<script setup lang='ts' name="DataAnalysis"> <script setup lang='ts' name="DataAnalysis">
import AIcon from '@/components/AIcon' import AIcon from '@/components/AIcon'
import PermissionButton from '@/components/PermissionButton/index.vue' import PermissionButton from '@/components/PermissionButton/index.vue'
import MonacoEditor from '@/components/MonacoEditor/index.vue'; // import MonacoEditor from '@/components/MonacoEditor/index.vue';
import { useFullscreen } from '@vueuse/core' import { useFullscreen } from '@vueuse/core'
import { useProductStore } from '@/store/product'; import { useProductStore } from '@/store/product';
import { import {

View File

@ -1,6 +1,6 @@
<!-- 绑定设备 --> <!-- 绑定设备 -->
<template> <template>
<a-modal <j-modal
:maskClosable="false" :maskClosable="false"
width="1100px" width="1100px"
:visible="true" :visible="true"
@ -18,7 +18,7 @@
@search="handleSearch" @search="handleSearch"
type="simple" type="simple"
/> />
<JTable <j-pro-table
ref="bindDeviceRef" ref="bindDeviceRef"
:columns="columns" :columns="columns"
:request="queryUnbounded" :request="queryUnbounded"
@ -44,14 +44,14 @@
}} }}
</template> </template>
<template #state="slotProps"> <template #state="slotProps">
<a-badge <j-badge
:text="slotProps.state.text" :text="slotProps.state.text"
:status="statusMap.get(slotProps.state.value)" :status="statusMap.get(slotProps.state.value)"
/> />
</template> </template>
</JTable> </j-pro-table>
</div> </div>
</a-modal> </j-modal>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">

View File

@ -8,15 +8,15 @@
:data="current" :data="current"
@change="saveChange" @change="saveChange"
/> />
<a-row :gutter="[24, 24]"> <j-row :gutter="[24, 24]">
<a-col :span="24"> <j-col :span="24">
<a-card> <j-card>
<a-descriptions size="small" :column="3" bordered> <j-descriptions size="small" :column="3" bordered>
<template #title> <template #title>
<Guide> <Guide>
<template #title> <template #title>
<span>基本信息</span> <span>基本信息</span>
<a-button <j-button
type="link" type="link"
@click=" @click="
() => { () => {
@ -28,74 +28,74 @@
> >
<AIcon type="EditOutlined"></AIcon> <AIcon type="EditOutlined"></AIcon>
编辑 编辑
</a-button> </j-button>
</template> </template>
</Guide> </Guide>
</template> </template>
<a-descriptions-item label="卡号">{{ <j-descriptions-item label="卡号">{{
detail.id detail.id
}}</a-descriptions-item> }}</j-descriptions-item>
<a-descriptions-item label="ICCID">{{ <j-descriptions-item label="ICCID">{{
detail.iccId detail.iccId
}}</a-descriptions-item> }}</j-descriptions-item>
<a-descriptions-item label="绑定设备">{{ <j-descriptions-item label="绑定设备">{{
detail.deviceName detail.deviceName
}}</a-descriptions-item> }}</j-descriptions-item>
<a-descriptions-item label="平台类型">{{ <j-descriptions-item label="平台类型">{{
detail.operatorPlatformType?.text detail.operatorPlatformType?.text
}}</a-descriptions-item> }}</j-descriptions-item>
<a-descriptions-item label="平台名称">{{ <j-descriptions-item label="平台名称">{{
detail.platformConfigName detail.platformConfigName
}}</a-descriptions-item> }}</j-descriptions-item>
<a-descriptions-item label="运营商">{{ <j-descriptions-item label="运营商">{{
detail.operatorName detail.operatorName
}}</a-descriptions-item> }}</j-descriptions-item>
<a-descriptions-item label="类型">{{ <j-descriptions-item label="类型">{{
detail.cardType?.text detail.cardType?.text
}}</a-descriptions-item> }}</j-descriptions-item>
<a-descriptions-item label="激活日期">{{ <j-descriptions-item label="激活日期">{{
detail.activationDate detail.activationDate
? moment(detail.activationDate).format( ? moment(detail.activationDate).format(
'YYYY-MM-DD HH:mm:ss', 'YYYY-MM-DD HH:mm:ss',
) )
: '' : ''
}}</a-descriptions-item> }}</j-descriptions-item>
<a-descriptions-item label="更新时间">{{ <j-descriptions-item label="更新时间">{{
detail.updateTime detail.updateTime
? moment(detail.updateTime).format( ? moment(detail.updateTime).format(
'YYYY-MM-DD HH:mm:ss', 'YYYY-MM-DD HH:mm:ss',
) )
: '' : ''
}}</a-descriptions-item> }}</j-descriptions-item>
<a-descriptions-item label="总流量">{{ <j-descriptions-item label="总流量">{{
detail.totalFlow detail.totalFlow
? detail.totalFlow.toFixed(2) + ' M' ? detail.totalFlow.toFixed(2) + ' M'
: '' : ''
}}</a-descriptions-item> }}</j-descriptions-item>
<a-descriptions-item label="使用流量">{{ <j-descriptions-item label="使用流量">{{
detail.usedFlow detail.usedFlow
? detail.usedFlow.toFixed(2) + ' M' ? detail.usedFlow.toFixed(2) + ' M'
: '' : ''
}}</a-descriptions-item> }}</j-descriptions-item>
<a-descriptions-item label="剩余流量">{{ <j-descriptions-item label="剩余流量">{{
detail.residualFlow detail.residualFlow
? detail.residualFlow.toFixed(2) + ' M' ? detail.residualFlow.toFixed(2) + ' M'
: '' : ''
}}</a-descriptions-item> }}</j-descriptions-item>
<a-descriptions-item label="状态">{{ <j-descriptions-item label="状态">{{
detail?.cardState?.text detail?.cardState?.text
}}</a-descriptions-item> }}</j-descriptions-item>
<a-descriptions-item label="说明">{{ <j-descriptions-item label="说明">{{
detail?.describe detail?.describe
}}</a-descriptions-item> }}</j-descriptions-item>
</a-descriptions> </j-descriptions>
</a-card> </j-card>
</a-col> </j-col>
<a-col :span="24"> <j-col :span="24">
<!-- 流量统计 --> <!-- 流量统计 -->
<a-row :gutter="24"> <j-row :gutter="24">
<a-col :span="16"> <j-col :span="16">
<div class="card"> <div class="card">
<Guide title="流量统计"> <Guide title="流量统计">
<template #extra> <template #extra>
@ -113,15 +113,15 @@
:chartData="flowData" :chartData="flowData"
/> />
</div> </div>
</a-col> </j-col>
<a-col :span="8"> <j-col :span="8">
<div class="card"> <div class="card">
<Guide title="数据统计" /> <Guide title="数据统计" />
<div class="static-info" style="min-height: 490px"> <div class="static-info" style="min-height: 490px">
<div class="data-statistics-item"> <div class="data-statistics-item">
<div class="flow-info" style="width: 100%"> <div class="flow-info" style="width: 100%">
<div class="label">昨日流量消耗</div> <div class="label">昨日流量消耗</div>
<a-tooltip placement="bottomLeft"> <j-tooltip placement="bottomLeft">
<template #title> <template #title>
<span>{{ dayTotal }} M</span> <span>{{ dayTotal }} M</span>
</template> </template>
@ -129,7 +129,7 @@
{{ dayTotal }} {{ dayTotal }}
<span class="unit">M</span> <span class="unit">M</span>
</div> </div>
</a-tooltip> </j-tooltip>
</div> </div>
<LineChart <LineChart
color="#FBA500" color="#FBA500"
@ -139,7 +139,7 @@
<div class="data-statistics-item"> <div class="data-statistics-item">
<div class="flow-info" style="width: 100%"> <div class="flow-info" style="width: 100%">
<div class="label">当月流量消耗</div> <div class="label">当月流量消耗</div>
<a-tooltip placement="bottomLeft"> <j-tooltip placement="bottomLeft">
<template #title> <template #title>
<span>{{ monthTotal }} M</span> <span>{{ monthTotal }} M</span>
</template> </template>
@ -147,14 +147,14 @@
{{ monthTotal }} {{ monthTotal }}
<span class="unit">M</span> <span class="unit">M</span>
</div> </div>
</a-tooltip> </j-tooltip>
</div> </div>
<LineChart :chartData="monthOptions" /> <LineChart :chartData="monthOptions" />
</div> </div>
<div class="data-statistics-item"> <div class="data-statistics-item">
<div class="flow-info" style="width: 100%"> <div class="flow-info" style="width: 100%">
<div class="label">本年流量消耗</div> <div class="label">本年流量消耗</div>
<a-tooltip placement="bottomLeft"> <j-tooltip placement="bottomLeft">
<template #title> <template #title>
<span>{{ yearTotal }} M</span> <span>{{ yearTotal }} M</span>
</template> </template>
@ -162,7 +162,7 @@
{{ yearTotal }} {{ yearTotal }}
<span class="unit">M</span> <span class="unit">M</span>
</div> </div>
</a-tooltip> </j-tooltip>
</div> </div>
<LineChart <LineChart
color="#58E1D3" color="#58E1D3"
@ -171,10 +171,10 @@
</div> </div>
</div> </div>
</div> </div>
</a-col> </j-col>
</a-row> </j-row>
</a-col> </j-col>
</a-row> </j-row>
</page-container> </page-container>
</template> </template>

View File

@ -1,6 +1,6 @@
<template> <template>
<!-- 导入 --> <!-- 导入 -->
<a-modal <j-modal
:maskClosable="false" :maskClosable="false"
:visible="true" :visible="true"
title="导入" title="导入"
@ -10,30 +10,30 @@
@cancel="handleCancel" @cancel="handleCancel"
> >
<div style="margin-top: 10px"> <div style="margin-top: 10px">
<a-form :layout="'vertical'"> <j-form :layout="'vertical'">
<a-form-item label="平台对接" required> <j-form-item label="平台对接" required>
<a-select <j-select
showSearch showSearch
v-model:value="modelRef.configId" v-model:value="modelRef.configId"
:options="configList" :options="configList"
placeholder="请选择平台对接" placeholder="请选择平台对接"
> >
</a-select> </j-select>
</a-form-item> </j-form-item>
<a-form-item v-if="modelRef.configId" label="文件格式"> <j-form-item v-if="modelRef.configId" label="文件格式">
<a-radio-group <j-radio-group
button-style="solid" button-style="solid"
v-model:value="modelRef.fileType" v-model:value="modelRef.fileType"
placeholder="请选择文件格式" placeholder="请选择文件格式"
> >
<a-radio-button value="xlsx">xlsx</a-radio-button> <j-radio-button value="xlsx">xlsx</j-radio-button>
<a-radio-button value="csv">csv</a-radio-button> <j-radio-button value="csv">csv</j-radio-button>
</a-radio-group> </j-radio-group>
</a-form-item> </j-form-item>
<a-form-item label="文件上传" v-if="modelRef.configId"> <j-form-item label="文件上传" v-if="modelRef.configId">
<a-upload <j-upload
v-model:fileList="modelRef.upload" v-model:fileList="modelRef.upload"
name="file" name="file"
:action="FILE_UPLOAD" :action="FILE_UPLOAD"
@ -44,24 +44,24 @@
:showUploadList="false" :showUploadList="false"
@change="fileChange" @change="fileChange"
> >
<a-button :loading="loading"> <j-button :loading="loading">
<template #icon> <template #icon>
<AIcon type="UploadOutlined" /> <AIcon type="UploadOutlined" />
</template> </template>
文件上传 文件上传
</a-button> </j-button>
</a-upload> </j-upload>
</a-form-item> </j-form-item>
<a-form-item v-if="modelRef.configId" label="下载模板"> <j-form-item v-if="modelRef.configId" label="下载模板">
<a-space> <j-space>
<a-button icon="file" @click="downFileFn('xlsx')"> <j-button icon="file" @click="downFileFn('xlsx')">
.xlsx .xlsx
</a-button> </j-button>
<a-button icon="file" @click="downFileFn('csv')"> <j-button icon="file" @click="downFileFn('csv')">
.csv .csv
</a-button> </j-button>
</a-space> </j-space>
</a-form-item> </j-form-item>
<div v-if="totalCount"> <div v-if="totalCount">
<a-icon class="check-num" type="check" /> 已完成 总数量 <a-icon class="check-num" type="check" /> 已完成 总数量
<span class="check-num">{{ totalCount }}</span> <span class="check-num">{{ totalCount }}</span>
@ -71,9 +71,9 @@
失败 总数量 失败 总数量
<span class="check-num">{{ errCount }}</span> <span class="check-num">{{ errCount }}</span>
</div> </div>
</a-form> </j-form>
</div> </div>
</a-modal> </j-modal>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">

View File

@ -1,5 +1,5 @@
<template> <template>
<a-modal <j-modal
:maskClosable="false" :maskClosable="false"
width="600px" width="600px"
:visible="true" :visible="true"
@ -11,39 +11,39 @@
:confirmLoading="btnLoading" :confirmLoading="btnLoading"
> >
<div style="margin-top: 10px"> <div style="margin-top: 10px">
<a-form <j-form
:layout="'vertical'" :layout="'vertical'"
ref="formRef" ref="formRef"
:rules="rules" :rules="rules"
:model="modelRef" :model="modelRef"
> >
<a-form-item label="卡号" name="id"> <j-form-item label="卡号" name="id">
<a-input <j-input
v-model:value="modelRef.id" v-model:value="modelRef.id"
placeholder="请输入卡号" placeholder="请输入卡号"
:disabled="type === 'edit'" :disabled="type === 'edit'"
></a-input> ></j-input>
</a-form-item> </j-form-item>
<a-form-item name="iccId"> <j-form-item name="iccId">
<template #label> <template #label>
<span> <span>
ICCID ICCID
<a-tooltip title="IC卡的唯一识别号码"> <j-tooltip title="IC卡的唯一识别号码">
<AIcon <AIcon
type="QuestionCircleOutlined" type="QuestionCircleOutlined"
style="margin-left: 2px" style="margin-left: 2px"
/> />
</a-tooltip> </j-tooltip>
</span> </span>
</template> </template>
<a-input <j-input
v-model:value="modelRef.iccId" v-model:value="modelRef.iccId"
placeholder="请输入ICCID" placeholder="请输入ICCID"
:disabled="type === 'edit'" :disabled="type === 'edit'"
/> />
</a-form-item> </j-form-item>
<a-form-item label="平台对接" name="platformConfigId"> <j-form-item label="平台对接" name="platformConfigId">
<a-select <j-select
showSearch showSearch
:filter-option="filterOption" :filter-option="filterOption"
:disabled="type === 'edit'" :disabled="type === 'edit'"
@ -52,11 +52,11 @@
v-model:value="modelRef.platformConfigId" v-model:value="modelRef.platformConfigId"
placeholder="请选择平台对接" placeholder="请选择平台对接"
> >
</a-select> </j-select>
</a-form-item> </j-form-item>
<a-form-item label="运营商" name="operatorName"> <j-form-item label="运营商" name="operatorName">
<a-select <j-select
allowClear allowClear
showSearch showSearch
:filter-option="filterOption" :filter-option="filterOption"
@ -64,10 +64,10 @@
v-model:value="modelRef.operatorName" v-model:value="modelRef.operatorName"
placeholder="请选择运营商" placeholder="请选择运营商"
> >
</a-select> </j-select>
</a-form-item> </j-form-item>
<a-form-item label="类型" name="cardType"> <j-form-item label="类型" name="cardType">
<a-select <j-select
allowClear allowClear
showSearch showSearch
:disabled="type === 'edit'" :disabled="type === 'edit'"
@ -76,19 +76,19 @@
v-model:value="modelRef.cardType" v-model:value="modelRef.cardType"
placeholder="请选择类型" placeholder="请选择类型"
> >
</a-select> </j-select>
</a-form-item> </j-form-item>
<a-form-item label="说明" name="describe"> <j-form-item label="说明" name="describe">
<a-textarea <j-textarea
v-model:value="modelRef.describe" v-model:value="modelRef.describe"
placeholder="请输入说明" placeholder="请输入说明"
showCount showCount
:maxlength="200" :maxlength="200"
/> />
</a-form-item> </j-form-item>
</a-form> </j-form>
</div> </div>
</a-modal> </j-modal>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>

View File

@ -2,13 +2,13 @@
<template> <template>
<page-container> <page-container>
<Search :columns="columns" target="iot-card-management-search" @search="handleSearch" /> <Search :columns="columns" target="iot-card-management-search" @search="handleSearch" />
<JTable ref="cardManageRef" :columns="columns" :request="query" <j-pro-table ref="cardManageRef" :columns="columns" :request="query"
:defaultParams="{ sorts: [{ name: 'createTime', order: 'desc' }] }" :rowSelection="{ :defaultParams="{ sorts: [{ name: 'createTime', order: 'desc' }] }" :rowSelection="{
selectedRowKeys: _selectedRowKeys, selectedRowKeys: _selectedRowKeys,
onChange: onSelectChange, onChange: onSelectChange,
}" @cancelSelect="cancelSelect" :params="params" :gridColumn="3"> }" @cancelSelect="cancelSelect" :params="params" :gridColumn="3">
<template #headerTitle> <template #headerTitle>
<a-space> <j-space>
<a-button type="primary" @click="handleAdd"> <a-button type="primary" @click="handleAdd">
<AIcon type="PlusOutlined" />新增 <AIcon type="PlusOutlined" />新增
</a-button> </a-button>
@ -80,7 +80,7 @@
</a-menu> </a-menu>
</template> </template>
</a-dropdown> </a-dropdown>
</a-space> </j-space>
</template> </template>
<template #card="slotProps"> <template #card="slotProps">
<CardBox :value="slotProps" @click="handleClick" :actions="getActions(slotProps, 'card')" v-bind="slotProps" <CardBox :value="slotProps" @click="handleClick" :actions="getActions(slotProps, 'card')" v-bind="slotProps"
@ -265,7 +265,7 @@
</template> </template>
</a-space> </a-space>
</template> </template>
</JTable> </j-pro-table>
<!-- 批量导入 --> <!-- 批量导入 -->
<Import v-if="importVisible" @close="importVisible = false" /> <Import v-if="importVisible" @close="importVisible = false" />
<!-- 批量导出 --> <!-- 批量导出 -->

View File

@ -2,14 +2,14 @@
<template> <template>
<page-container> <page-container>
<div class="card-dashboard-container"> <div class="card-dashboard-container">
<a-card style="margin-bottom: 24px"> <j-card style="margin-bottom: 24px">
<a-row :gutter="24"> <j-row :gutter="24">
<a-col :span="24"><Guide title="数据统计" /></a-col> <j-col :span="24"><Guide title="数据统计" /></j-col>
<a-col :span="8"> <j-col :span="8">
<div class="data-statistics-item"> <div class="data-statistics-item">
<div class="flow-info" style="width: 100%"> <div class="flow-info" style="width: 100%">
<div class="label">昨日流量消耗</div> <div class="label">昨日流量消耗</div>
<a-tooltip placement="bottomLeft"> <j-tooltip placement="bottomLeft">
<template #title> <template #title>
<span>{{ dayTotal }} M</span> <span>{{ dayTotal }} M</span>
</template> </template>
@ -17,19 +17,19 @@
{{ dayTotal }} {{ dayTotal }}
<span class="unit">M</span> <span class="unit">M</span>
</div> </div>
</a-tooltip> </j-tooltip>
</div> </div>
<LineChart <LineChart
color="#FBA500" color="#FBA500"
:chartData="dayOptions" :chartData="dayOptions"
/> />
</div> </div>
</a-col> </j-col>
<a-col :span="8"> <j-col :span="8">
<div class="data-statistics-item"> <div class="data-statistics-item">
<div class="flow-info" style="width: 100%"> <div class="flow-info" style="width: 100%">
<div class="label">当月流量消耗</div> <div class="label">当月流量消耗</div>
<a-tooltip placement="bottomLeft"> <j-tooltip placement="bottomLeft">
<template #title> <template #title>
<span>{{ monthTotal }} M</span> <span>{{ monthTotal }} M</span>
</template> </template>
@ -37,16 +37,16 @@
{{ monthTotal }} {{ monthTotal }}
<span class="unit">M</span> <span class="unit">M</span>
</div> </div>
</a-tooltip> </j-tooltip>
</div> </div>
<LineChart :chartData="monthOptions" /> <LineChart :chartData="monthOptions" />
</div> </div>
</a-col> </j-col>
<a-col :span="8"> <j-col :span="8">
<div class="data-statistics-item"> <div class="data-statistics-item">
<div class="flow-info" style="width: 100%"> <div class="flow-info" style="width: 100%">
<div class="label">本年流量消耗</div> <div class="label">本年流量消耗</div>
<a-tooltip placement="bottomLeft"> <j-tooltip placement="bottomLeft">
<template #title> <template #title>
<span>{{ yearTotal }} M</span> <span>{{ yearTotal }} M</span>
</template> </template>
@ -54,18 +54,18 @@
{{ yearTotal }} {{ yearTotal }}
<span class="unit">M</span> <span class="unit">M</span>
</div> </div>
</a-tooltip> </j-tooltip>
</div> </div>
<LineChart <LineChart
color="#58E1D3" color="#58E1D3"
:chartData="yearOptions" :chartData="yearOptions"
/> />
</div> </div>
</a-col> </j-col>
</a-row> </j-row>
</a-card> </j-card>
<a-row :gutter="24"> <j-row :gutter="24">
<a-col :span="16"> <j-col :span="16">
<div class="static-card"> <div class="static-card">
<Guide title="流量统计"> <Guide title="流量统计">
<template #extra> <template #extra>
@ -85,11 +85,11 @@
:chartData="flowData" :chartData="flowData"
/> />
<div class="empty-body" v-else> <div class="empty-body" v-else>
<a-empty :image="Empty.PRESENTED_IMAGE_SIMPLE" /> <j-empty :image="Empty.PRESENTED_IMAGE_SIMPLE" />
</div> </div>
</div> </div>
</a-col> </j-col>
<a-col :span="8"> <j-col :span="8">
<div class="static-card"> <div class="static-card">
<Guide title="流量使用TOP10"> <Guide title="流量使用TOP10">
<template #extra> <template #extra>
@ -118,7 +118,7 @@
</div> </div>
<div class="cardNum">{{ item.cardNum }}</div> <div class="cardNum">{{ item.cardNum }}</div>
<div class="progress"> <div class="progress">
<a-progress <j-progress
:strokeColor="'#ADC6FF'" :strokeColor="'#ADC6FF'"
:trailColor="'#E0E4E8'" :trailColor="'#E0E4E8'"
:strokeLinecap="'butt'" :strokeLinecap="'butt'"
@ -128,7 +128,7 @@
(item.value / topTotal) * 100, (item.value / topTotal) * 100,
) )
" "
></a-progress> ></j-progress>
</div> </div>
<div class="total"> <div class="total">
{{ item?.value?.toFixed(2) }} M {{ item?.value?.toFixed(2) }} M
@ -136,11 +136,11 @@
</div> </div>
</div> </div>
<div class="empty-body" v-else> <div class="empty-body" v-else>
<a-empty :image="Empty.PRESENTED_IMAGE_SIMPLE" /> <j-empty :image="Empty.PRESENTED_IMAGE_SIMPLE" />
</div> </div>
</div> </div>
</a-col> </j-col>
</a-row> </j-row>
</div> </div>
</page-container> </page-container>
</template> </template>

View File

@ -1,8 +1,8 @@
<!-- 物联卡-首页 --> <!-- 物联卡-首页 -->
<template> <template>
<page-container> <page-container>
<a-row :gutter="24"> <j-row :gutter="24">
<a-col :span="14"> <j-col :span="14">
<div class="home-guide"> <div class="home-guide">
<Guide title="物联卡引导"></Guide> <Guide title="物联卡引导"></Guide>
<div <div
@ -25,8 +25,8 @@
</div> </div>
</div> </div>
</div> </div>
</a-col> </j-col>
<a-col :span="10"> <j-col :span="10">
<div class="home-statistics"> <div class="home-statistics">
<Guide title="基础统计"> <Guide title="基础统计">
<template #extra> <template #extra>
@ -71,8 +71,8 @@
</div> </div>
</div> </div>
</div> </div>
</a-col> </j-col>
<a-col :span="24" style="min-height: 580px"> <j-col :span="24" style="min-height: 580px">
<div class="home-body"> <div class="home-body">
<Guide <Guide
title="平台架构图" title="平台架构图"
@ -82,22 +82,20 @@
<img :src="getImage('/iot-card/iotcard-home.png')" /> <img :src="getImage('/iot-card/iotcard-home.png')" />
</div> </div>
</div> </div>
</a-col> </j-col>
</a-row> </j-row>
</page-container> </page-container>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { getImage } from '@/utils/comm'; import { getImage } from '@/utils/comm';
import Guide from '../components/Guide.vue'; import Guide from '../components/Guide.vue';
import { message } from 'ant-design-vue';
import moment from 'moment'; import moment from 'moment';
import { queryFlow, list } from '@/api/iot-card/home'; import { queryFlow, list } from '@/api/iot-card/home';
import * as echarts from 'echarts'; import * as echarts from 'echarts';
import { useMenuStore } from '@/store/menu'; import { useMenuStore } from '@/store/menu';
import { usePermissionStore } from '@/store/permission'; import { usePermissionStore } from '@/store/permission';
const router = useRouter();
const { proxy } = <any>getCurrentInstance(); const { proxy } = <any>getCurrentInstance();
interface GuideItemProps { interface GuideItemProps {

View File

@ -1,16 +1,16 @@
<template> <template>
<page-container> <page-container>
<a-card> <j-card>
<a-row :gutter="24"> <j-row :gutter="24">
<a-col :span="14"> <j-col :span="14">
<TitleComponent data="详情" /> <TitleComponent data="详情" />
<a-form <j-form
:layout="'vertical'" :layout="'vertical'"
ref="formRef" ref="formRef"
:rules="rules" :rules="rules"
:model="form" :model="form"
> >
<a-form-item <j-form-item
label="平台类型" label="平台类型"
name="operatorName" name="operatorName"
required required
@ -28,104 +28,104 @@
v-model:value="form.operatorName" v-model:value="form.operatorName"
@change="typeChange" @change="typeChange"
></PlatformType ></PlatformType
></a-form-item> ></j-form-item>
<a-form-item label="名称" name="name"> <j-form-item label="名称" name="name">
<a-input <j-input
v-model:value="form.name" v-model:value="form.name"
placeholder="请输入名称" placeholder="请输入名称"
/> />
</a-form-item> </j-form-item>
<!-- onelink --> <!-- onelink -->
<div v-if="form.operatorName === 'onelink'"> <div v-if="form.operatorName === 'onelink'">
<a-form-item label="App ID" name="appId"> <j-form-item label="App ID" name="appId">
<a-input <j-input
v-model:value="form.appId" v-model:value="form.appId"
placeholder="请输入App ID" placeholder="请输入App ID"
/> />
</a-form-item> </j-form-item>
<a-form-item label="Password" name="passWord"> <j-form-item label="Password" name="passWord">
<a-input-password <j-input-password
v-model:value="form.passWord" v-model:value="form.passWord"
placeholder="请输入密码" placeholder="请输入密码"
/> />
</a-form-item> </j-form-item>
<a-form-item label="接口地址" name="apiAddr"> <j-form-item label="接口地址" name="apiAddr">
<a-input <j-input
v-model:value="form.apiAddr" v-model:value="form.apiAddr"
placeholder="请输入接口地址" placeholder="请输入接口地址"
/> />
</a-form-item> </j-form-item>
</div> </div>
<!-- ctwing --> <!-- ctwing -->
<div v-if="form.operatorName === 'ctwing'"> <div v-if="form.operatorName === 'ctwing'">
<a-form-item label="用户id" name="userId"> <j-form-item label="用户id" name="userId">
<a-input <j-input
v-model:value="form.userId" v-model:value="form.userId"
placeholder="请输入用户id" placeholder="请输入用户id"
/> />
</a-form-item> </j-form-item>
<a-form-item label="密码" name="passWord"> <j-form-item label="密码" name="passWord">
<a-input-password <j-input-password
v-model:value="form.passWord" v-model:value="form.passWord"
placeholder="请输入密码" placeholder="请输入密码"
/> />
</a-form-item> </j-form-item>
<a-form-item label="secretKey" name="secretKey"> <j-form-item label="secretKey" name="secretKey">
<a-input <j-input
v-model:value="form.secretKey" v-model:value="form.secretKey"
placeholder="请输入secretKey" placeholder="请输入secretKey"
/> />
</a-form-item> </j-form-item>
</div> </div>
<!-- unicom --> <!-- unicom -->
<div v-if="form.operatorName === 'unicom'"> <div v-if="form.operatorName === 'unicom'">
<a-form-item label="App ID" name="appId"> <j-form-item label="App ID" name="appId">
<a-input <j-input
v-model:value="form.appId" v-model:value="form.appId"
placeholder="请输入App ID" placeholder="请输入App ID"
/> />
</a-form-item> </j-form-item>
<a-form-item label="App Secret" name="appSecret"> <j-form-item label="App Secret" name="appSecret">
<a-input <j-input
v-model:value="form.appSecret" v-model:value="form.appSecret"
placeholder="请输入App Secret" placeholder="请输入App Secret"
/> />
</a-form-item> </j-form-item>
<a-form-item label="创建者ID" name="openId"> <j-form-item label="创建者ID" name="openId">
<a-input <j-input
v-model:value="form.openId" v-model:value="form.openId"
placeholder="请输入创建者ID" placeholder="请输入创建者ID"
/> />
</a-form-item> </j-form-item>
</div> </div>
<a-form-item label="说明" name="explain"> <j-form-item label="说明" name="explain">
<a-textarea <j-textarea
v-model:value="form.explain" v-model:value="form.explain"
placeholder="请输入说明" placeholder="请输入说明"
showCount showCount
:rows="3" :rows="3"
:maxlength="200" :maxlength="200"
/> />
</a-form-item> </j-form-item>
<a-form-item> <j-form-item>
<a-divider /> <j-divider />
<a-button <j-button
:loading="saveBtnLoading" :loading="saveBtnLoading"
type="primary" type="primary"
@click="handleSave" @click="handleSave"
> >
保存 保存
</a-button> </j-button>
</a-form-item> </j-form-item>
</a-form> </j-form>
</a-col> </j-col>
<a-col :span="10"> <j-col :span="10">
<Doc :type="form.operatorName" /> <Doc :type="form.operatorName" />
</a-col> </j-col>
</a-row> </j-row>
</a-card> </j-card>
</page-container> </page-container>
</template> </template>

View File

@ -24,7 +24,7 @@
获取路径中移物联卡能力开放平台--个人中心--客户信息--接入信息 获取路径中移物联卡能力开放平台--个人中心--客户信息--接入信息
</p> </p>
<div class="image"> <div class="image">
<a-image <j-image
width="100%" width="100%"
:src="getImage('/iot-card/onelink-appid.png')" :src="getImage('/iot-card/onelink-appid.png')"
/> />
@ -37,7 +37,7 @@
获取路径中移物联卡能力开放平台--个人中心--客户信息--接入信息 获取路径中移物联卡能力开放平台--个人中心--客户信息--接入信息
</p> </p>
<div class="image"> <div class="image">
<a-image <j-image
width="100%" width="100%"
:src="getImage('/iot-card/onelink-pass.png')" :src="getImage('/iot-card/onelink-pass.png')"
/> />
@ -77,7 +77,7 @@
获取路径5G连接管理平台--能力开放--API网关账号管理 获取路径5G连接管理平台--能力开放--API网关账号管理
</p> </p>
<div class="image"> <div class="image">
<a-image <j-image
width="100%" width="100%"
:src="getImage('/iot-card/ctwing-id.png')" :src="getImage('/iot-card/ctwing-id.png')"
/> />
@ -90,7 +90,7 @@
获取路径5G连接管理平台--能力开放--API网关账号管理 获取路径5G连接管理平台--能力开放--API网关账号管理
</p> </p>
<div class="image"> <div class="image">
<a-image <j-image
width="100%" width="100%"
:src="getImage('/iot-card/ctwing-pass.png')" :src="getImage('/iot-card/ctwing-pass.png')"
/> />
@ -103,7 +103,7 @@
获取路径5G连接管理平台--能力开放--API网关账号管理 获取路径5G连接管理平台--能力开放--API网关账号管理
</p> </p>
<div class="image"> <div class="image">
<a-image <j-image
width="100%" width="100%"
:src="getImage('/iot-card/ctwing-secret.png')" :src="getImage('/iot-card/ctwing-secret.png')"
/> />
@ -137,7 +137,7 @@
获取路径雁飞智连CMP平台--我的应用--应用列表 获取路径雁飞智连CMP平台--我的应用--应用列表
</p> </p>
<div class="image"> <div class="image">
<a-image <j-image
width="100%" width="100%"
:src="getImage('/iot-card/unicom-id.png')" :src="getImage('/iot-card/unicom-id.png')"
/> />
@ -150,7 +150,7 @@
获取路径雁飞智连CMP平台--我的应用--应用列表 获取路径雁飞智连CMP平台--我的应用--应用列表
</p> </p>
<div class="image"> <div class="image">
<a-image <j-image
width="100%" width="100%"
:src="getImage('/iot-card/unicom-secret.png')" :src="getImage('/iot-card/unicom-secret.png')"
/> />
@ -164,7 +164,7 @@
<br /> <br />
</p> </p>
<div class="image"> <div class="image">
<a-image <j-image
width="100%" width="100%"
:src="getImage('/iot-card/unicom-openid.png')" :src="getImage('/iot-card/unicom-openid.png')"
/> />

View File

@ -6,7 +6,7 @@
target="platform-search" target="platform-search"
@search="handleSearch" @search="handleSearch"
/> />
<JTable <j-pro-table
ref="platformRef" ref="platformRef"
:columns="columns" :columns="columns"
:request="queryList" :request="queryList"
@ -15,11 +15,14 @@
:gridColumn="3" :gridColumn="3"
> >
<template #headerTitle> <template #headerTitle>
<a-space> <j-space>
<a-button type="primary" @click="handleAdd"> <!-- <j-button type="primary" @click="handleAdd">
<AIcon type="PlusOutlined" />新增 <AIcon type="PlusOutlined" />新增
</a-button> </j-button> -->
</a-space> <PermissionButton @click="handleAdd" :hasPermission="'iot-card/Platform:add'" type="primary">
<AIcon type="PlusOutlined" />新增
</PermissionButton>
</j-space>
</template> </template>
<template #card="slotProps"> <template #card="slotProps">
<CardBox <CardBox
@ -42,18 +45,18 @@
<h3 class="card-item-content-title"> <h3 class="card-item-content-title">
{{ slotProps.name }} {{ slotProps.name }}
</h3> </h3>
<a-row> <j-row>
<a-col :span="12"> <j-col :span="12">
<div class="card-item-content-text"> <div class="card-item-content-text">
平台类型 平台类型
</div> </div>
<div>{{ slotProps.operatorName }}</div> <div>{{ slotProps.operatorName }}</div>
</a-col> </j-col>
<a-col :span="12"> <j-col :span="12">
<div class="card-item-content-text">说明</div> <div class="card-item-content-text">说明</div>
<div>{{ slotProps.explain }}</div> <div>{{ slotProps.explain }}</div>
</a-col> </j-col>
</a-row> </j-row>
</template> </template>
<template #actions="item"> <template #actions="item">
<PermissionButton :disabled="item.disabled" :popConfirm="item.popConfirm" :tooltip="{ <PermissionButton :disabled="item.disabled" :popConfirm="item.popConfirm" :tooltip="{
@ -69,7 +72,7 @@
</CardBox> </CardBox>
</template> </template>
<template #state="slotProps"> <template #state="slotProps">
<a-badge <j-badge
:text="slotProps.state.text" :text="slotProps.state.text"
:status=" :status="
slotProps.state.value === 'disabled' slotProps.state.value === 'disabled'
@ -79,7 +82,7 @@
/> />
</template> </template>
<template #action="slotProps"> <template #action="slotProps">
<a-space :size="16"> <j-space :size="16">
<template <template
v-for="i in getActions(slotProps,'table')" v-for="i in getActions(slotProps,'table')"
:key="i.key" :key="i.key"
@ -98,9 +101,9 @@
<template #icon><AIcon :type="i.icon" /></template> <template #icon><AIcon :type="i.icon" /></template>
</PermissionButton> </PermissionButton>
</template> </template>
</a-space> </j-space>
</template> </template>
</JTable> </j-pro-table>
</page-container> </page-container>
</template> </template>

View File

@ -1,5 +1,5 @@
<template> <template>
<a-modal <j-modal
:maskClosable="false" :maskClosable="false"
width="1000px" width="1000px"
:visible="true" :visible="true"
@ -10,40 +10,40 @@
@cancel="handleCancel" @cancel="handleCancel"
> >
<div style="margin-top: 10px"> <div style="margin-top: 10px">
<a-descriptions <j-descriptions
:column="2" :column="2"
bordered bordered
:contentStyle="{ minWidth: '300px' }" :contentStyle="{ minWidth: '300px' }"
:labelStyle="{ minWidth: '120px' }" :labelStyle="{ minWidth: '120px' }"
> >
<a-descriptions-item label="充值金额">{{ <j-descriptions-item label="充值金额">{{
data.chargeMoney data.chargeMoney
}}</a-descriptions-item> }}</j-descriptions-item>
<a-descriptions-item label="账户id">{{ <j-descriptions-item label="账户id">{{
data?.rechargeId data?.rechargeId
}}</a-descriptions-item> }}</j-descriptions-item>
<a-descriptions-item label="平台对接">{{ <j-descriptions-item label="平台对接">{{
data.configName data.configName
}}</a-descriptions-item> }}</j-descriptions-item>
<a-descriptions-item label="订单号">{{ <j-descriptions-item label="订单号">{{
data.orderNumber data.orderNumber
}}</a-descriptions-item> }}</j-descriptions-item>
<a-descriptions-item label="支付方式">{{ <j-descriptions-item label="支付方式">{{
data.paymentType data.paymentType
}}</a-descriptions-item> }}</j-descriptions-item>
<a-descriptions-item label="支付URL"> <j-descriptions-item label="支付URL">
<div style="height: 100px; overflow: auto"> <div style="height: 100px; overflow: auto">
{{ data.url ? data.url : '' }} {{ data.url ? data.url : '' }}
</div> </div>
</a-descriptions-item> </j-descriptions-item>
<a-descriptions-item label="订单时间">{{ <j-descriptions-item label="订单时间">{{
data.createTime data.createTime
? moment(data.createTime).format('YYYY-MM-DD HH:mm:ss') ? moment(data.createTime).format('YYYY-MM-DD HH:mm:ss')
: '-' : '-'
}}</a-descriptions-item> }}</j-descriptions-item>
</a-descriptions> </j-descriptions>
</div> </div>
</a-modal> </j-modal>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>

View File

@ -1,5 +1,5 @@
<template> <template>
<a-modal <j-modal
:maskClosable="false" :maskClosable="false"
width="600px" width="600px"
:visible="true" :visible="true"
@ -17,14 +17,14 @@
style="margin-right: 6px" style="margin-right: 6px"
/>OneLink />OneLink
</div> </div>
<a-form <j-form
layout="vertical" layout="vertical"
ref="formRef" ref="formRef"
:rules="rules" :rules="rules"
:model="modelRef" :model="modelRef"
> >
<a-form-item label="平台对接" name="configId"> <j-form-item label="平台对接" name="configId">
<a-select <j-select
v-model:value="modelRef.configId" v-model:value="modelRef.configId"
:options="configList" :options="configList"
allowClear allowClear
@ -32,16 +32,16 @@
style="width: 100%" style="width: 100%"
placeholder="请选择平台对接" placeholder="请选择平台对接"
> >
</a-select> </j-select>
</a-form-item> </j-form-item>
<a-form-item label="账户id" name="rechargeId"> <j-form-item label="账户id" name="rechargeId">
<a-input <j-input
v-model:value="modelRef.rechargeId" v-model:value="modelRef.rechargeId"
placeholder="请输入账户id" placeholder="请输入账户id"
/> />
</a-form-item> </j-form-item>
<a-form-item label="充值金额" name="chargeMoney"> <j-form-item label="充值金额" name="chargeMoney">
<a-input-number <j-input-number
allowClear allowClear
:precision="2" :precision="2"
style="width: 100%" style="width: 100%"
@ -50,20 +50,20 @@
:max="500" :max="500"
placeholder="请输入1~500之间的金额" placeholder="请输入1~500之间的金额"
/> />
</a-form-item> </j-form-item>
<a-form-item label="支付方式" name="paymentType"> <j-form-item label="支付方式" name="paymentType">
<a-select <j-select
allowClear allowClear
:options="PaymentMethod" :options="PaymentMethod"
v-model:value="modelRef.paymentType" v-model:value="modelRef.paymentType"
placeholder="请选择支付方式" placeholder="请选择支付方式"
> >
</a-select> </j-select>
</a-form-item> </j-form-item>
</a-form> </j-form>
</div> </div>
</a-modal> </j-modal>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>

View File

@ -2,10 +2,10 @@
<template> <template>
<page-container> <page-container>
<Search :columns="columns" target="recharge-search" @search="handleSearch" /> <Search :columns="columns" target="recharge-search" @search="handleSearch" />
<JTable ref="rechargeRef" :columns="columns" :request="queryRechargeList" model="TABLE" <j-pro-table ref="rechargeRef" :columns="columns" :request="queryRechargeList" model="TABLE"
:defaultParams="{ sorts: [{ name: 'createTime', order: 'desc' }] }" :params="params"> :defaultParams="{ sorts: [{ name: 'createTime', order: 'desc' }] }" :params="params">
<template #headerTitle> <template #headerTitle>
<a-space> <j-space>
<PermissionButton @click="visible = true" :hasPermission="'iot-card/Recharge:pay'" type="primary"> <PermissionButton @click="visible = true" :hasPermission="'iot-card/Recharge:pay'" type="primary">
充值 充值
</PermissionButton> </PermissionButton>
@ -15,7 +15,7 @@
</span> </span>
本平台仅提供充值入口具体充值结果需以运营商的充值结果为准 本平台仅提供充值入口具体充值结果需以运营商的充值结果为准
</div> </div>
</a-space> </j-space>
</template> </template>
<template #createTime="slotProps"> <template #createTime="slotProps">
{{ {{
@ -27,7 +27,7 @@
}} }}
</template> </template>
<template #action="slotProps"> <template #action="slotProps">
<a-space :size="16"> <j-space :size="16">
<template <template
v-for="i in getActions(slotProps)" v-for="i in getActions(slotProps)"
:key="i.key" :key="i.key"
@ -46,9 +46,9 @@
<template #icon><AIcon :type="i.icon" /></template> <template #icon><AIcon :type="i.icon" /></template>
</PermissionButton> </PermissionButton>
</template> </template>
</a-space> </j-space>
</template> </template>
</JTable> </j-pro-table>
<!-- 充值 --> <!-- 充值 -->
<Save v-if="visible" @change="saveChange" /> <Save v-if="visible" @change="saveChange" />
<Detail v-if="detailVisible" :data="current" @close="close" /> <Detail v-if="detailVisible" :data="current" @close="close" />

View File

@ -6,7 +6,7 @@
target="record-search" target="record-search"
@search="handleSearch" @search="handleSearch"
/> />
<JTable <j-pro-table
ref="RecordRef" ref="RecordRef"
:columns="columns" :columns="columns"
:request="queryList" :request="queryList"
@ -21,7 +21,7 @@
: '' : ''
}} }}
</template> </template>
</JTable> </j-pro-table>
</page-container> </page-container>
</template> </template>

View File

@ -1,20 +1,20 @@
<template> <template>
<div> <div>
<a-radio-group <j-radio-group
v-if="quickBtn" v-if="quickBtn"
default-value="today" default-value="today"
button-style="solid" button-style="solid"
v-model:value="radioValue" v-model:value="radioValue"
@change="(e) => handleBtnChange(e.target.value)" @change="(e) => handleBtnChange(e.target.value)"
> >
<a-radio-button <j-radio-button
v-for="item in quickBtnList" v-for="item in quickBtnList"
:key="item.value" :key="item.value"
:value="item.value" :value="item.value"
> >
{{ item.label }} {{ item.label }}
</a-radio-button> </j-radio-button>
</a-radio-group> </j-radio-group>
<a-range-picker <a-range-picker
format="YYYY-MM-DD" format="YYYY-MM-DD"
valueFormat="YYYY-MM-DD" valueFormat="YYYY-MM-DD"

View File

@ -3896,10 +3896,10 @@ jetlinks-store@^0.0.3:
resolved "https://registry.npmjs.org/jetlinks-store/-/jetlinks-store-0.0.3.tgz" resolved "https://registry.npmjs.org/jetlinks-store/-/jetlinks-store-0.0.3.tgz"
integrity sha512-AZf/soh1hmmwjBZ00fr1emuMEydeReaI6IBTGByQYhTmK1Zd5pQAxC7WLek2snRAn/HHDgJfVz2hjditKThl6Q== integrity sha512-AZf/soh1hmmwjBZ00fr1emuMEydeReaI6IBTGByQYhTmK1Zd5pQAxC7WLek2snRAn/HHDgJfVz2hjditKThl6Q==
jetlinks-ui-components@^1.0.0: jetlinks-ui-components@^1.0.1:
version "1.0.0" version "1.0.1"
resolved "https://registry.jetlinks.cn/jetlinks-ui-components/-/jetlinks-ui-components-1.0.0.tgz#dca7bb82e53f464990b0851635e8f82be6c69db6" resolved "https://registry.jetlinks.cn/jetlinks-ui-components/-/jetlinks-ui-components-1.0.1.tgz#d9e6f5bd9b98523fb4708269be9b4e9bba3437b9"
integrity sha512-pgJ0Uiw4Dxc0AU2GqaOaVhNYun1VEmv78OtJcir2sq9rVSIuXCtTl1eHYMPiiPb6z1fG677KKs1gqvrpUwhguQ== integrity sha512-P8ykIynH6ti9c4KndFfHu/dwewqiWm4Gjki4e+IlCJcwq1at2iokWAITOVm9UsBnEBqWhTQowpK6vlSyTlW+9g==
dependencies: dependencies:
"@vueuse/core" "^9.12.0" "@vueuse/core" "^9.12.0"
ant-design-vue "^3.2.15" ant-design-vue "^3.2.15"