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>
<a-card>
<j-card>
<div>
<div class="top">
<div class="top-left">
@ -25,9 +25,9 @@
</div>
<div>
脚本语言:
<a-select :defaultValue="'JavaScript'" style="width: 200;margin-left: 5px;">
<a-select-option value="JavaScript">JavaScript(ECMAScript 5)</a-select-option>
</a-select>
<j-select :defaultValue="'JavaScript'" style="width: 200;margin-left: 5px;">
<j-select-option value="JavaScript">JavaScript(ECMAScript 5)</j-select-option>
</j-select>
<AIcon type="ExpandOutlined" style="margin-left: 20px;" @click="toggle" />
</div>
</div>
@ -42,7 +42,7 @@
})
}"></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 class="bottom">
<div style="width: 49.5%;">
@ -51,25 +51,25 @@
<div class="bottom-title-topic">
<template v-if="instanceStore.current.transport === 'MQTT'">
<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) =>
option!.value.indexOf(inputValue) !== -1" v-model:value="topic" />
</template>
<template v-else>
<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>
</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" />
</div>
<div style="width: 49.5%;">
<div class="bottom-title">
<div class="bottom-title-text">运行结果</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>
@ -87,13 +87,13 @@
保存
</PermissionButton>
</div>
</a-card>
</j-card>
</template>
<script setup lang='ts' name="Parsing">
import AIcon from '@/components/AIcon'
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 { useInstanceStore } from '@/store/instance';
import {

View File

@ -1,18 +1,18 @@
<template>
<a-card>
<j-card>
<div>
<div class="top">
<div>
脚本语言:
<a-select :defaultValue="'JavaScript'" style="width: 200;margin-left: 5px;">
<a-select-option value="JavaScript">JavaScript(ECMAScript 5)</a-select-option>
</a-select>
<j-select :defaultValue="'JavaScript'" style="width: 200;margin-left: 5px;">
<j-select-option value="JavaScript">JavaScript(ECMAScript 5)</j-select-option>
</j-select>
<AIcon type="ExpandOutlined" style="margin-left: 20px;" @click="toggle" />
</div>
</div>
<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 class="bottom">
<div style="width: 49.5%;">
@ -21,25 +21,25 @@
<div class="bottom-title-topic">
<template v-if="productStore.current.transportProtocol === 'MQTT'">
<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) =>
option!.value.indexOf(inputValue) !== -1" v-model:value="topic" />
</template>
<template v-else>
<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>
</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" />
</div>
<div style="width: 49.5%;">
<div class="bottom-title">
<div class="bottom-title-text">运行结果</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>
@ -57,13 +57,13 @@
保存
</PermissionButton>
</div>
</a-card>
</j-card>
</template>
<script setup lang='ts' name="DataAnalysis">
import AIcon from '@/components/AIcon'
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 { useProductStore } from '@/store/product';
import {

View File

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

View File

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

View File

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

View File

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

View File

@ -2,13 +2,13 @@
<template>
<page-container>
<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="{
selectedRowKeys: _selectedRowKeys,
onChange: onSelectChange,
}" @cancelSelect="cancelSelect" :params="params" :gridColumn="3">
<template #headerTitle>
<a-space>
<j-space>
<a-button type="primary" @click="handleAdd">
<AIcon type="PlusOutlined" />新增
</a-button>
@ -80,7 +80,7 @@
</a-menu>
</template>
</a-dropdown>
</a-space>
</j-space>
</template>
<template #card="slotProps">
<CardBox :value="slotProps" @click="handleClick" :actions="getActions(slotProps, 'card')" v-bind="slotProps"
@ -265,7 +265,7 @@
</template>
</a-space>
</template>
</JTable>
</j-pro-table>
<!-- 批量导入 -->
<Import v-if="importVisible" @close="importVisible = false" />
<!-- 批量导出 -->

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -2,10 +2,10 @@
<template>
<page-container>
<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">
<template #headerTitle>
<a-space>
<j-space>
<PermissionButton @click="visible = true" :hasPermission="'iot-card/Recharge:pay'" type="primary">
充值
</PermissionButton>
@ -15,7 +15,7 @@
</span>
本平台仅提供充值入口具体充值结果需以运营商的充值结果为准
</div>
</a-space>
</j-space>
</template>
<template #createTime="slotProps">
{{
@ -27,7 +27,7 @@
}}
</template>
<template #action="slotProps">
<a-space :size="16">
<j-space :size="16">
<template
v-for="i in getActions(slotProps)"
:key="i.key"
@ -46,9 +46,9 @@
<template #icon><AIcon :type="i.icon" /></template>
</PermissionButton>
</template>
</a-space>
</j-space>
</template>
</JTable>
</j-pro-table>
<!-- 充值 -->
<Save v-if="visible" @change="saveChange" />
<Detail v-if="detailVisible" :data="current" @close="close" />

View File

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

View File

@ -1,20 +1,20 @@
<template>
<div>
<a-radio-group
<j-radio-group
v-if="quickBtn"
default-value="today"
button-style="solid"
v-model:value="radioValue"
@change="(e) => handleBtnChange(e.target.value)"
>
<a-radio-button
<j-radio-button
v-for="item in quickBtnList"
:key="item.value"
:value="item.value"
>
{{ item.label }}
</a-radio-button>
</a-radio-group>
</j-radio-button>
</j-radio-group>
<a-range-picker
format="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"
integrity sha512-AZf/soh1hmmwjBZ00fr1emuMEydeReaI6IBTGByQYhTmK1Zd5pQAxC7WLek2snRAn/HHDgJfVz2hjditKThl6Q==
jetlinks-ui-components@^1.0.0:
version "1.0.0"
resolved "https://registry.jetlinks.cn/jetlinks-ui-components/-/jetlinks-ui-components-1.0.0.tgz#dca7bb82e53f464990b0851635e8f82be6c69db6"
integrity sha512-pgJ0Uiw4Dxc0AU2GqaOaVhNYun1VEmv78OtJcir2sq9rVSIuXCtTl1eHYMPiiPb6z1fG677KKs1gqvrpUwhguQ==
jetlinks-ui-components@^1.0.1:
version "1.0.1"
resolved "https://registry.jetlinks.cn/jetlinks-ui-components/-/jetlinks-ui-components-1.0.1.tgz#d9e6f5bd9b98523fb4708269be9b4e9bba3437b9"
integrity sha512-P8ykIynH6ti9c4KndFfHu/dwewqiWm4Gjki4e+IlCJcwq1at2iokWAITOVm9UsBnEBqWhTQowpK6vlSyTlW+9g==
dependencies:
"@vueuse/core" "^9.12.0"
ant-design-vue "^3.2.15"