|
@@ -9,16 +9,16 @@
|
|
class="flex mb-16"
|
|
class="flex mb-16"
|
|
style="justify-content: space-between; padding-right: 8px"
|
|
style="justify-content: space-between; padding-right: 8px"
|
|
>
|
|
>
|
|
- <div style="line-height: 32px">数据列表</div>
|
|
|
|
|
|
+ <div style="line-height: 32px">{{$t('数据列表')}}</div>
|
|
<div class="flex">
|
|
<div class="flex">
|
|
- <t-tooltip content="批量导入数据图元到画布" placement="top">
|
|
|
|
|
|
+ <t-tooltip :content="$t('批量导入数据图元到画布')" placement="top">
|
|
<div @click="onCheckAllChange" class="icon-box">
|
|
<div @click="onCheckAllChange" class="icon-box">
|
|
<DragDropIcon :style="{
|
|
<DragDropIcon :style="{
|
|
color: data.checkAll ? 'var(--color-primary)' : '',
|
|
color: data.checkAll ? 'var(--color-primary)' : '',
|
|
}"/>
|
|
}"/>
|
|
</div>
|
|
</div>
|
|
</t-tooltip>
|
|
</t-tooltip>
|
|
- <t-tooltip content="开启全局数据模拟" placement="top">
|
|
|
|
|
|
+ <t-tooltip :content="$t('开启全局数据模拟')" placement="top">
|
|
<div @click="onChangeMock" class="icon-box">
|
|
<div @click="onChangeMock" class="icon-box">
|
|
<RouterWaveIcon
|
|
<RouterWaveIcon
|
|
:style="{
|
|
:style="{
|
|
@@ -33,15 +33,15 @@
|
|
</div>
|
|
</div>
|
|
<t-dropdown-menu>
|
|
<t-dropdown-menu>
|
|
<t-dropdown-item @click="onShowIot">
|
|
<t-dropdown-item @click="onShowIot">
|
|
- <div style="width:100%"> 物联网平台
|
|
|
|
- <t-tooltip content="需配合乐吾乐物联网平台使用此功能" placement="right">
|
|
|
|
|
|
+ <div style="width:100%"> {{$t('物联网平台')}}
|
|
|
|
+ <t-tooltip :content="$t('需配合乐吾乐物联网平台使用此功能')" placement="right">
|
|
<HelpCircleIcon style="font-size: 14px" class="ml-4 hover"/>
|
|
<HelpCircleIcon style="font-size: 14px" class="ml-4 hover"/>
|
|
</t-tooltip>
|
|
</t-tooltip>
|
|
</div>
|
|
</div>
|
|
</t-dropdown-item>
|
|
</t-dropdown-item>
|
|
<t-dropdown-item @click="addSql">
|
|
<t-dropdown-item @click="addSql">
|
|
- <div style="width:100%">SQL数据源
|
|
|
|
- <t-tooltip content="需配合乐吾乐物联网平台使用此功能" placement="right">
|
|
|
|
|
|
+ <div style="width:100%">{{$t('SQL数据源')}}
|
|
|
|
+ <t-tooltip :content="$t('需配合乐吾乐物联网平台使用此功能')" placement="right">
|
|
<HelpCircleIcon style="font-size: 14px" class="ml-4 hover"/>
|
|
<HelpCircleIcon style="font-size: 14px" class="ml-4 hover"/>
|
|
</t-tooltip>
|
|
</t-tooltip>
|
|
</div>
|
|
</div>
|
|
@@ -73,7 +73,7 @@
|
|
v-model="dataSearch"
|
|
v-model="dataSearch"
|
|
@change="onSearchData"
|
|
@change="onSearchData"
|
|
@enter="onSearchData"
|
|
@enter="onSearchData"
|
|
- placeholder="搜索我的数据列表"
|
|
|
|
|
|
+ :placeholder="$t('搜索我的数据列表')"
|
|
/>
|
|
/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@@ -82,7 +82,7 @@
|
|
<div class="flex mt-16 between" style="height: 32px; line-height: 32px">
|
|
<div class="flex mt-16 between" style="height: 32px; line-height: 32px">
|
|
<!-- <div class="flex"> -->
|
|
<!-- <div class="flex"> -->
|
|
<!-- <ApplicationIcon class="tree-icon mt-8" /> -->
|
|
<!-- <ApplicationIcon class="tree-icon mt-8" /> -->
|
|
- <div class="datasource-title">物联网平台</div>
|
|
|
|
|
|
+ <div class="datasource-title">{{$t('物联网平台')}}</div>
|
|
<!-- </div> -->
|
|
<!-- </div> -->
|
|
<!-- <div>
|
|
<!-- <div>
|
|
<Edit2Icon class="mr-12 hover" style="width: 14px;height: 14px;" @click="onShowIot" />
|
|
<Edit2Icon class="mr-12 hover" style="width: 14px;height: 14px;" @click="onShowIot" />
|
|
@@ -127,7 +127,7 @@
|
|
<div v-if="data.sqls?.length">
|
|
<div v-if="data.sqls?.length">
|
|
<div class="flex mt-16" style="height: 32px">
|
|
<div class="flex mt-16" style="height: 32px">
|
|
<!-- <DataIcon class="tree-icon" /> -->
|
|
<!-- <DataIcon class="tree-icon" /> -->
|
|
- <div class="datasource-title">SQL数据源</div>
|
|
|
|
|
|
+ <div class="datasource-title">{{$t('SQL数据源')}}</div>
|
|
</div>
|
|
</div>
|
|
<div
|
|
<div
|
|
:draggable="data.checkAll ? true : false"
|
|
:draggable="data.checkAll ? true : false"
|
|
@@ -326,10 +326,10 @@
|
|
:divider="true"
|
|
:divider="true"
|
|
@click="showAddData(node.data)"
|
|
@click="showAddData(node.data)"
|
|
>
|
|
>
|
|
- 新建属性
|
|
|
|
|
|
+ {{$t('新建属性')}}
|
|
</t-dropdown-item>
|
|
</t-dropdown-item>
|
|
<t-dropdown-item :value="3" :divider="true">
|
|
<t-dropdown-item :value="3" :divider="true">
|
|
- 在线接口
|
|
|
|
|
|
+ {{$t('在线接口')}}
|
|
|
|
|
|
<t-dropdown-menu
|
|
<t-dropdown-menu
|
|
class="menu-item-input"
|
|
class="menu-item-input"
|
|
@@ -344,9 +344,9 @@
|
|
style="max-width: 216px !important"
|
|
style="max-width: 216px !important"
|
|
>
|
|
>
|
|
<t-input
|
|
<t-input
|
|
- label="地址:"
|
|
|
|
|
|
+ :label="$t('地址:')"
|
|
style="width: 216px"
|
|
style="width: 216px"
|
|
- placeholder="请输入地址"
|
|
|
|
|
|
+ :placeholder="$t('请输入地址')"
|
|
v-model="data.dataset.url"
|
|
v-model="data.dataset.url"
|
|
@blur="getDatas(node.data)"
|
|
@blur="getDatas(node.data)"
|
|
@enter="getDatas(node.data)"
|
|
@enter="getDatas(node.data)"
|
|
@@ -363,7 +363,7 @@
|
|
</t-dropdown-menu>
|
|
</t-dropdown-menu>
|
|
</t-dropdown-item>
|
|
</t-dropdown-item>
|
|
<t-dropdown-item :value="2" @click="importDataset(node.data)">
|
|
<t-dropdown-item :value="2" @click="importDataset(node.data)">
|
|
- 从Excel导入
|
|
|
|
|
|
+ {{$t('从Excel导入')}}
|
|
</t-dropdown-item>
|
|
</t-dropdown-item>
|
|
<t-dropdown-item :value="4">
|
|
<t-dropdown-item :value="4">
|
|
<a
|
|
<a
|
|
@@ -372,7 +372,7 @@
|
|
style="color: var(--td-text-color-primary)"
|
|
style="color: var(--td-text-color-primary)"
|
|
@click.stop
|
|
@click.stop
|
|
>
|
|
>
|
|
- 下载Excel示例
|
|
|
|
|
|
+ {{$t('下载Excel示例')}}
|
|
</a>
|
|
</a>
|
|
</t-dropdown-item>
|
|
</t-dropdown-item>
|
|
</t-dropdown-menu>
|
|
</t-dropdown-menu>
|
|
@@ -458,10 +458,10 @@
|
|
:divider="true"
|
|
:divider="true"
|
|
@click="showAddData(node.data)"
|
|
@click="showAddData(node.data)"
|
|
>
|
|
>
|
|
- 新建属性
|
|
|
|
|
|
+ {{$t('新建属性')}}
|
|
</t-dropdown-item>
|
|
</t-dropdown-item>
|
|
<t-dropdown-item :value="3" :divider="true">
|
|
<t-dropdown-item :value="3" :divider="true">
|
|
- 在线接口
|
|
|
|
|
|
+ {{$t('在线接口')}}
|
|
|
|
|
|
<t-dropdown-menu
|
|
<t-dropdown-menu
|
|
class="menu-item-input"
|
|
class="menu-item-input"
|
|
@@ -476,9 +476,9 @@
|
|
style="max-width: 216px !important"
|
|
style="max-width: 216px !important"
|
|
>
|
|
>
|
|
<t-input
|
|
<t-input
|
|
- label="地址:"
|
|
|
|
|
|
+ :label="$t('地址:')"
|
|
style="width: 216px"
|
|
style="width: 216px"
|
|
- placeholder="请输入地址"
|
|
|
|
|
|
+ :placeholder="$t('请输入地址')"
|
|
v-model="data.dataset.url"
|
|
v-model="data.dataset.url"
|
|
@blur="getDatas(node.data)"
|
|
@blur="getDatas(node.data)"
|
|
@enter="getDatas(node.data)"
|
|
@enter="getDatas(node.data)"
|
|
@@ -495,7 +495,7 @@
|
|
</t-dropdown-menu>
|
|
</t-dropdown-menu>
|
|
</t-dropdown-item>
|
|
</t-dropdown-item>
|
|
<t-dropdown-item :value="2" @click="importDataset(node.data)">
|
|
<t-dropdown-item :value="2" @click="importDataset(node.data)">
|
|
- 从Excel导入
|
|
|
|
|
|
+ {{$t('从Excel导入')}}
|
|
</t-dropdown-item>
|
|
</t-dropdown-item>
|
|
<t-dropdown-item :value="4">
|
|
<t-dropdown-item :value="4">
|
|
<a
|
|
<a
|
|
@@ -503,7 +503,7 @@
|
|
style="color: var(--td-text-color-primary)"
|
|
style="color: var(--td-text-color-primary)"
|
|
@click.stop
|
|
@click.stop
|
|
>
|
|
>
|
|
- 下载Excel示例
|
|
|
|
|
|
+ {{$t('下载Excel示例')}}
|
|
</a>
|
|
</a>
|
|
</t-dropdown-item>
|
|
</t-dropdown-item>
|
|
</t-dropdown-menu>
|
|
</t-dropdown-menu>
|
|
@@ -590,10 +590,10 @@
|
|
:divider="true"
|
|
:divider="true"
|
|
@click="showAddData(node.data)"
|
|
@click="showAddData(node.data)"
|
|
>
|
|
>
|
|
- 新建属性
|
|
|
|
|
|
+ {{$t('新建属性')}}
|
|
</t-dropdown-item>
|
|
</t-dropdown-item>
|
|
<t-dropdown-item :value="3" :divider="true">
|
|
<t-dropdown-item :value="3" :divider="true">
|
|
- 在线接口
|
|
|
|
|
|
+ {{$t('在线接口')}}
|
|
|
|
|
|
<t-dropdown-menu
|
|
<t-dropdown-menu
|
|
class="menu-item-input"
|
|
class="menu-item-input"
|
|
@@ -608,9 +608,9 @@
|
|
style="max-width: 216px !important"
|
|
style="max-width: 216px !important"
|
|
>
|
|
>
|
|
<t-input
|
|
<t-input
|
|
- label="地址:"
|
|
|
|
|
|
+ :label=" $t('地址:')"
|
|
style="width: 216px"
|
|
style="width: 216px"
|
|
- placeholder="请输入地址"
|
|
|
|
|
|
+ :placeholder="$t('请输入地址')"
|
|
v-model="data.dataset.url"
|
|
v-model="data.dataset.url"
|
|
@blur="getDatas(node.data)"
|
|
@blur="getDatas(node.data)"
|
|
@enter="getDatas(node.data)"
|
|
@enter="getDatas(node.data)"
|
|
@@ -627,7 +627,7 @@
|
|
</t-dropdown-menu>
|
|
</t-dropdown-menu>
|
|
</t-dropdown-item>
|
|
</t-dropdown-item>
|
|
<t-dropdown-item :value="2" @click="importDataset(node.data)">
|
|
<t-dropdown-item :value="2" @click="importDataset(node.data)">
|
|
- 从Excel导入
|
|
|
|
|
|
+ {{$t('从Excel导入')}}
|
|
</t-dropdown-item>
|
|
</t-dropdown-item>
|
|
<t-dropdown-item :value="4">
|
|
<t-dropdown-item :value="4">
|
|
<a
|
|
<a
|
|
@@ -635,7 +635,7 @@
|
|
style="color: var(--td-text-color-primary)"
|
|
style="color: var(--td-text-color-primary)"
|
|
@click.stop
|
|
@click.stop
|
|
>
|
|
>
|
|
- 下载Excel示例
|
|
|
|
|
|
+ {{$t('下载Excel示例')}}
|
|
</a>
|
|
</a>
|
|
</t-dropdown-item>
|
|
</t-dropdown-item>
|
|
</t-dropdown-menu>
|
|
</t-dropdown-menu>
|
|
@@ -721,10 +721,10 @@
|
|
:divider="true"
|
|
:divider="true"
|
|
@click="showAddData(node.data)"
|
|
@click="showAddData(node.data)"
|
|
>
|
|
>
|
|
- 新建属性
|
|
|
|
|
|
+ {{$t('新建属性')}}
|
|
</t-dropdown-item>
|
|
</t-dropdown-item>
|
|
<t-dropdown-item :value="3" :divider="true">
|
|
<t-dropdown-item :value="3" :divider="true">
|
|
- 在线接口
|
|
|
|
|
|
+ {{$t('在线接口')}}
|
|
|
|
|
|
<t-dropdown-menu
|
|
<t-dropdown-menu
|
|
class="menu-item-input"
|
|
class="menu-item-input"
|
|
@@ -739,9 +739,9 @@
|
|
style="max-width: 216px !important"
|
|
style="max-width: 216px !important"
|
|
>
|
|
>
|
|
<t-input
|
|
<t-input
|
|
- label="地址:"
|
|
|
|
|
|
+ :label="$t('地址:')"
|
|
style="width: 216px"
|
|
style="width: 216px"
|
|
- placeholder="请输入地址"
|
|
|
|
|
|
+ :placeholder="$t('请输入地址')"
|
|
v-model="data.dataset.url"
|
|
v-model="data.dataset.url"
|
|
@blur="getDatas(node.data)"
|
|
@blur="getDatas(node.data)"
|
|
@enter="getDatas(node.data)"
|
|
@enter="getDatas(node.data)"
|
|
@@ -758,7 +758,7 @@
|
|
</t-dropdown-menu>
|
|
</t-dropdown-menu>
|
|
</t-dropdown-item>
|
|
</t-dropdown-item>
|
|
<t-dropdown-item :value="2" @click="importDataset(node.data)">
|
|
<t-dropdown-item :value="2" @click="importDataset(node.data)">
|
|
- 从Excel导入
|
|
|
|
|
|
+ {{$t('从Excel导入')}}
|
|
</t-dropdown-item>
|
|
</t-dropdown-item>
|
|
<t-dropdown-item :value="4">
|
|
<t-dropdown-item :value="4">
|
|
<a
|
|
<a
|
|
@@ -766,7 +766,7 @@
|
|
style="color: var(--td-text-color-primary)"
|
|
style="color: var(--td-text-color-primary)"
|
|
@click.stop
|
|
@click.stop
|
|
>
|
|
>
|
|
- 下载Excel示例
|
|
|
|
|
|
+ {{$t('下载Excel示例')}}
|
|
</a>
|
|
</a>
|
|
</t-dropdown-item>
|
|
</t-dropdown-item>
|
|
</t-dropdown-menu>
|
|
</t-dropdown-menu>
|
|
@@ -808,7 +808,7 @@
|
|
v-if="!data.iotTree.length && !data.sqls.length && !data.networks.length"
|
|
v-if="!data.iotTree.length && !data.sqls.length && !data.networks.length"
|
|
>
|
|
>
|
|
<img src="/img/no-data.png" />
|
|
<img src="/img/no-data.png" />
|
|
- <div class="gray center">暂无数据</div>
|
|
|
|
|
|
+ <div class="gray center"> {{$t('暂无数据')}}</div>
|
|
<!-- <div class="mt-20">
|
|
<!-- <div class="mt-20">
|
|
<t-button theme="primary" @click="addNetwork()">
|
|
<t-button theme="primary" @click="addNetwork()">
|
|
添加数据源
|
|
添加数据源
|
|
@@ -818,7 +818,7 @@
|
|
</div>
|
|
</div>
|
|
<div class="content" v-if="group === '解析'">
|
|
<div class="content" v-if="group === '解析'">
|
|
<div class="flex between">
|
|
<div class="flex between">
|
|
- <div class="title">数据{{ group }}</div>
|
|
|
|
|
|
+ <div class="title"> 数据{{ group }}</div>
|
|
</div>
|
|
</div>
|
|
<div class="mt-8">
|
|
<div class="mt-8">
|
|
<CodeEditor
|
|
<CodeEditor
|
|
@@ -832,12 +832,12 @@
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="mt-16">
|
|
<div class="mt-16">
|
|
- 参考文档:
|
|
|
|
|
|
+ {{$t('参考文档:')}}
|
|
<a
|
|
<a
|
|
target="_blank"
|
|
target="_blank"
|
|
- href="https://doc.le5le.com/document/136233394#%E8%A7%A3%E6%9E%90%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E6%A0%BC%E5%BC%8F"
|
|
|
|
|
|
+ href="https://doc.le5le.com/document/75"
|
|
>
|
|
>
|
|
- 解析自定义格式数据</a
|
|
|
|
|
|
+ {{$t('解析自定义格式数据')}}</a
|
|
>
|
|
>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@@ -846,7 +846,7 @@
|
|
v-if="addDataDialog.show"
|
|
v-if="addDataDialog.show"
|
|
:visible="true"
|
|
:visible="true"
|
|
class="data-dialog"
|
|
class="data-dialog"
|
|
- :header="addDataDialog.header"
|
|
|
|
|
|
+ :header="$t(addDataDialog.header)"
|
|
@close="addDataDialog.show = false"
|
|
@close="addDataDialog.show = false"
|
|
@confirm="onOkAddData"
|
|
@confirm="onOkAddData"
|
|
>
|
|
>
|
|
@@ -855,28 +855,28 @@
|
|
<t-input v-model="addDataDialog.data.device" placeholder="设备名称" />
|
|
<t-input v-model="addDataDialog.data.device" placeholder="设备名称" />
|
|
</div> -->
|
|
</div> -->
|
|
<div class="form-item mt-16">
|
|
<div class="form-item mt-16">
|
|
- <label>显示名称</label>
|
|
|
|
|
|
+ <label>{{$t('显示名称')}}</label>
|
|
<t-input
|
|
<t-input
|
|
@change="changeDataLabel($event)"
|
|
@change="changeDataLabel($event)"
|
|
:value="addDataDialog.data.label"
|
|
:value="addDataDialog.data.label"
|
|
- placeholder="属性简短描述"
|
|
|
|
|
|
+ :placeholder="$t('属性简短描述')"
|
|
/>
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="form-item mt-16">
|
|
<div class="form-item mt-16">
|
|
- <label>属性名</label>
|
|
|
|
|
|
+ <label>{{$t('属性名')}}</label>
|
|
<t-input
|
|
<t-input
|
|
@change="changeDataID($event)"
|
|
@change="changeDataID($event)"
|
|
:value="addDataDialog.data.id"
|
|
:value="addDataDialog.data.id"
|
|
- placeholder="属性名"
|
|
|
|
|
|
+ :placeholder="$t('属性名')"
|
|
/>
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="form-item mt-16">
|
|
<div class="form-item mt-16">
|
|
- <label>类型</label>
|
|
|
|
|
|
+ <label>{{$t('类型')}}</label>
|
|
<t-select
|
|
<t-select
|
|
class="w-full"
|
|
class="w-full"
|
|
:options="typeOptions"
|
|
:options="typeOptions"
|
|
v-model="addDataDialog.data.type"
|
|
v-model="addDataDialog.data.type"
|
|
- placeholder="字符串"
|
|
|
|
|
|
+ :placeholder="$t('字符串')"
|
|
@change="addDataDialog.data.value = null"
|
|
@change="addDataDialog.data.value = null"
|
|
/>
|
|
/>
|
|
</div>
|
|
</div>
|
|
@@ -917,7 +917,7 @@
|
|
:visible="true"
|
|
:visible="true"
|
|
width="800px"
|
|
width="800px"
|
|
class="data-dialog"
|
|
class="data-dialog"
|
|
- :header="networkDialog.header"
|
|
|
|
|
|
+ :header="$t(networkDialog.header)"
|
|
@close="networkDialog.show = false"
|
|
@close="networkDialog.show = false"
|
|
@confirm="onOkNetwork"
|
|
@confirm="onOkNetwork"
|
|
>
|
|
>
|
|
@@ -926,7 +926,7 @@
|
|
<!-- <t-checkbox v-model="networkDialog.save" class="mr-12">
|
|
<!-- <t-checkbox v-model="networkDialog.save" class="mr-12">
|
|
同时保存到我的数据源
|
|
同时保存到我的数据源
|
|
</t-checkbox> -->
|
|
</t-checkbox> -->
|
|
- <t-button @click="onOkNetwork">确定</t-button>
|
|
|
|
|
|
+ <t-button @click="onOkNetwork">{{$t('确定')}}</t-button>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
<div style="max-height: 450px; padding: 8px; overflow-y: auto">
|
|
<div style="max-height: 450px; padding: 8px; overflow-y: auto">
|
|
@@ -936,19 +936,19 @@
|
|
<t-dialog
|
|
<t-dialog
|
|
v-if="dataTransformationDialog.show"
|
|
v-if="dataTransformationDialog.show"
|
|
:visible="true"
|
|
:visible="true"
|
|
- header="数据监听"
|
|
|
|
|
|
+ :header="$t('数据监听')"
|
|
@confirm="onOkDataTransformation"
|
|
@confirm="onOkDataTransformation"
|
|
@close="dataTransformationDialog.show = false"
|
|
@close="dataTransformationDialog.show = false"
|
|
:width="800"
|
|
:width="800"
|
|
>
|
|
>
|
|
<CodeEditor v-model="dataTransformationDialog.data" style="height: 300px" />
|
|
<CodeEditor v-model="dataTransformationDialog.data" style="height: 300px" />
|
|
<div class="mt-8">
|
|
<div class="mt-8">
|
|
- 参考文档:
|
|
|
|
|
|
+ {{$t('参考文档:')}}
|
|
<a
|
|
<a
|
|
target="_blank"
|
|
target="_blank"
|
|
- href="https://doc.le5le.com/document/136233394#%E8%A7%A3%E6%9E%90%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E6%A0%BC%E5%BC%8F"
|
|
|
|
|
|
+ href="https://doc.le5le.com/document/75"
|
|
>
|
|
>
|
|
- 解析自定义格式数据</a
|
|
|
|
|
|
+ {{$t('解析自定义格式数据')}}</a
|
|
>
|
|
>
|
|
</div>
|
|
</div>
|
|
</t-dialog>
|
|
</t-dialog>
|
|
@@ -957,14 +957,14 @@
|
|
:visible="true"
|
|
:visible="true"
|
|
width="800px"
|
|
width="800px"
|
|
class="data-dialog"
|
|
class="data-dialog"
|
|
- :header="sqlDialog.header"
|
|
|
|
|
|
+ :header="$t(sqlDialog.header)"
|
|
@close="sqlDialog.show = false"
|
|
@close="sqlDialog.show = false"
|
|
@confirm="onOkSql"
|
|
@confirm="onOkSql"
|
|
>
|
|
>
|
|
<div style="max-height: 450px; padding: 8px">
|
|
<div style="max-height: 450px; padding: 8px">
|
|
<div class="form-item mt-8">
|
|
<div class="form-item mt-8">
|
|
- <label>sql数据源</label>
|
|
|
|
- <t-select v-model="sqlDialog.sql.dbid" placeholder="请选择数据源">
|
|
|
|
|
|
+ <label>{{$t('sql数据源')}}</label>
|
|
|
|
+ <t-select v-model="sqlDialog.sql.dbid" :placeholder="$t('请选择数据源')">
|
|
<t-option
|
|
<t-option
|
|
v-for="sql in sqlList"
|
|
v-for="sql in sqlList"
|
|
@click="sqlChange(sql)"
|
|
@click="sqlChange(sql)"
|
|
@@ -975,22 +975,22 @@
|
|
</t-select>
|
|
</t-select>
|
|
</div>
|
|
</div>
|
|
<div class="form-item mt-8">
|
|
<div class="form-item mt-8">
|
|
- <label>sql轮询间隔</label>
|
|
|
|
|
|
+ <label>{{$t('sql轮询间隔')}}</label>
|
|
<t-input-number
|
|
<t-input-number
|
|
theme="column"
|
|
theme="column"
|
|
v-model="sqlDialog.sql.interval"
|
|
v-model="sqlDialog.sql.interval"
|
|
- placeholder="不填,仅初始执行一次"
|
|
|
|
|
|
+ :placeholder="$t('不填,仅初始执行一次')"
|
|
/>
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="form-item mt-8">
|
|
<div class="form-item mt-8">
|
|
- <label>查询方式</label>
|
|
|
|
|
|
+ <label>{{$t('查询方式')}}</label>
|
|
<t-select v-model="sqlDialog.sql.method">
|
|
<t-select v-model="sqlDialog.sql.method">
|
|
- <t-option key="get" value="get" label="单条" />
|
|
|
|
- <t-option key="list" value="list" label="列表" />
|
|
|
|
|
|
+ <t-option key="get" value="get" :label="$t('单条')" />
|
|
|
|
+ <t-option key="list" value="list" :label="$t('列表')" />
|
|
</t-select>
|
|
</t-select>
|
|
</div>
|
|
</div>
|
|
<div class="form-item mt-8">
|
|
<div class="form-item mt-8">
|
|
- <label>sql语句</label>
|
|
|
|
|
|
+ <label>{{$t('sql语句')}}</label>
|
|
<CodeEditor
|
|
<CodeEditor
|
|
:json="false"
|
|
:json="false"
|
|
:language="'sql'"
|
|
:language="'sql'"
|
|
@@ -1000,7 +1000,7 @@
|
|
/>
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div v-if="sqlDialog.sql.method === 'list'" class="form-item mt-8">
|
|
<div v-if="sqlDialog.sql.method === 'list'" class="form-item mt-8">
|
|
- <label>第几页</label>
|
|
|
|
|
|
+ <label>{{$t('第几页')}}</label>
|
|
<t-input-number
|
|
<t-input-number
|
|
v-model="sqlDialog.sql.current"
|
|
v-model="sqlDialog.sql.current"
|
|
theme="normal"
|
|
theme="normal"
|
|
@@ -1009,21 +1009,21 @@
|
|
/>
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div v-if="sqlDialog.sql.method === 'list'" class="form-item mt-8">
|
|
<div v-if="sqlDialog.sql.method === 'list'" class="form-item mt-8">
|
|
- <label>每页数量</label>
|
|
|
|
|
|
+ <label>{{$t('每页数量')}}</label>
|
|
<t-input-number
|
|
<t-input-number
|
|
v-model="sqlDialog.sql.pageSize"
|
|
v-model="sqlDialog.sql.pageSize"
|
|
theme="normal"
|
|
theme="normal"
|
|
- placeholder="默认20"
|
|
|
|
|
|
+ :placeholder="$t('默认20')"
|
|
:min="1"
|
|
:min="1"
|
|
/>
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="form-item mt-8">
|
|
<div class="form-item mt-8">
|
|
- <label>关联属性名</label>
|
|
|
|
- <t-input v-model="sqlDialog.sql.bindId" placeholder="关联属性名" />
|
|
|
|
|
|
+ <label>{{$t('关联属性名')}}</label>
|
|
|
|
+ <t-input v-model="sqlDialog.sql.bindId" :placeholder="$t('关联属性名')" />
|
|
</div>
|
|
</div>
|
|
<div class="flex mt-8">
|
|
<div class="flex mt-8">
|
|
<!-- <label> -->
|
|
<!-- <label> -->
|
|
- <t-button style="width: 75px" @click="sqlTest">连接测试</t-button>
|
|
|
|
|
|
+ <t-button style="width: 75px" @click="sqlTest">{{$t('连接测试')}}</t-button>
|
|
<!-- </label> -->
|
|
<!-- </label> -->
|
|
<p class="ml-8" style="width: 700px">{{ sqlDialog.result }}</p>
|
|
<p class="ml-8" style="width: 700px">{{ sqlDialog.result }}</p>
|
|
</div>
|
|
</div>
|
|
@@ -1034,7 +1034,7 @@
|
|
:visible="true"
|
|
:visible="true"
|
|
width="472px"
|
|
width="472px"
|
|
dialogClassName="iot-dialog"
|
|
dialogClassName="iot-dialog"
|
|
- :header="iotDialog.header"
|
|
|
|
|
|
+ :header="$t(iotDialog.header)"
|
|
@close="iotDialog.show = false"
|
|
@close="iotDialog.show = false"
|
|
@confirm="onOkIot"
|
|
@confirm="onOkIot"
|
|
>
|
|
>
|
|
@@ -1053,7 +1053,7 @@
|
|
v-model="iotSearch"
|
|
v-model="iotSearch"
|
|
@change="onSearchIot"
|
|
@change="onSearchIot"
|
|
@enter="onSearchIot"
|
|
@enter="onSearchIot"
|
|
- placeholder="搜索设备属性"
|
|
|
|
|
|
+ :placeholder="$t('搜索设备属性')"
|
|
/>
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div style="height: 320px; margin-top: 8px; overflow-y: scroll">
|
|
<div style="height: 320px; margin-top: 8px; overflow-y: scroll">
|
|
@@ -1079,7 +1079,7 @@
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script lang="ts" setup>
|
|
<script lang="ts" setup>
|
|
-import { reactive, defineComponent, ref, onMounted, toRaw, watch } from 'vue';
|
|
|
|
|
|
+import { reactive, defineComponent, ref, onMounted, toRaw, watch, getCurrentInstance } from 'vue';
|
|
import {
|
|
import {
|
|
FileImportIcon,
|
|
FileImportIcon,
|
|
FileExportIcon,
|
|
FileExportIcon,
|
|
@@ -1125,6 +1125,9 @@ import {
|
|
doSqlCode,
|
|
doSqlCode,
|
|
} from '@/services/iot';
|
|
} from '@/services/iot';
|
|
|
|
|
|
|
|
+const { proxy } = getCurrentInstance();
|
|
|
|
+const $t = proxy.$t;
|
|
|
|
+
|
|
const props = defineProps<{
|
|
const props = defineProps<{
|
|
group: string;
|
|
group: string;
|
|
}>();
|
|
}>();
|
|
@@ -1418,18 +1421,18 @@ const deleteSql = (index: number) => {
|
|
const sqlTreeKey = ref(s8());
|
|
const sqlTreeKey = ref(s8());
|
|
const onOkSql = async () => {
|
|
const onOkSql = async () => {
|
|
if (!sqlDialog.sql.dbid) {
|
|
if (!sqlDialog.sql.dbid) {
|
|
- MessagePlugin.error('请选择数据源');
|
|
|
|
|
|
+ MessagePlugin.error($t('请选择数据源'));
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
if (!sqlDialog.sql.sql) {
|
|
if (!sqlDialog.sql.sql) {
|
|
- MessagePlugin.error('请填写sql语句');
|
|
|
|
|
|
+ MessagePlugin.error($t('请填写sql语句'));
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
if (!sqlDialog.sql.interval) {
|
|
if (!sqlDialog.sql.interval) {
|
|
sqlDialog.sql.interval = undefined;
|
|
sqlDialog.sql.interval = undefined;
|
|
}
|
|
}
|
|
if (!sqlDialog.sql.bindId) {
|
|
if (!sqlDialog.sql.bindId) {
|
|
- MessagePlugin.error('关联属性名必填');
|
|
|
|
|
|
+ MessagePlugin.error($t('关联属性名必填'));
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
sqlDialog.sql.label = sqlDialog.sql.bindId;
|
|
sqlDialog.sql.label = sqlDialog.sql.bindId;
|
|
@@ -1474,11 +1477,11 @@ const sqlChange = (sql: any) => {
|
|
const sqlTest = async () => {
|
|
const sqlTest = async () => {
|
|
let ret: any = await doSqlCode(sqlDialog.sql);
|
|
let ret: any = await doSqlCode(sqlDialog.sql);
|
|
if (ret.error) {
|
|
if (ret.error) {
|
|
- MessagePlugin.error('连接错误:' + ret.error);
|
|
|
|
- sqlDialog.result = '连接错误:' + ret.error;
|
|
|
|
|
|
+ MessagePlugin.error($t('连接错误:') + ret.error);
|
|
|
|
+ sqlDialog.result = $t('连接错误:') + ret.error;
|
|
} else {
|
|
} else {
|
|
if (sqlDialog.sql.method === 'list') {
|
|
if (sqlDialog.sql.method === 'list') {
|
|
- sqlDialog.result = '连接成功:[' + JSON.stringify(ret[0]) + ',...]';
|
|
|
|
|
|
+ sqlDialog.result = $t('连接成功:[') + JSON.stringify(ret[0]) + ',...]';
|
|
// sqlDialog.sql.columns = ret[0];
|
|
// sqlDialog.sql.columns = ret[0];
|
|
const columnsKeys = Object.keys(ret[0]);
|
|
const columnsKeys = Object.keys(ret[0]);
|
|
const children = new Array(ret.length).fill(0).map((item, index) => {
|
|
const children = new Array(ret.length).fill(0).map((item, index) => {
|
|
@@ -1500,7 +1503,7 @@ const sqlTest = async () => {
|
|
sqlDialog.sql.class = 'sql';
|
|
sqlDialog.sql.class = 'sql';
|
|
sqlDialog.sql.children = children;
|
|
sqlDialog.sql.children = children;
|
|
} else {
|
|
} else {
|
|
- sqlDialog.result = '连接成功:' + JSON.stringify(ret);
|
|
|
|
|
|
+ sqlDialog.result = $t('连接成功:') + JSON.stringify(ret);
|
|
// sqlDialog.sql.columns = ret;
|
|
// sqlDialog.sql.columns = ret;
|
|
const children = [];
|
|
const children = [];
|
|
for (let key in ret) {
|
|
for (let key in ret) {
|
|
@@ -1555,12 +1558,12 @@ const clearData = () => {
|
|
|
|
|
|
const changeDataLabel = (value) => {
|
|
const changeDataLabel = (value) => {
|
|
if (!value) {
|
|
if (!value) {
|
|
- MessagePlugin.error('显示名称不能为空!');
|
|
|
|
|
|
+ MessagePlugin.error($t('显示名称不能为空!'));
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
let item = data.dataset.devices?.filter((item) => item.label === value);
|
|
let item = data.dataset.devices?.filter((item) => item.label === value);
|
|
if (item && item.length) {
|
|
if (item && item.length) {
|
|
- MessagePlugin.error('显示名称重复!');
|
|
|
|
|
|
+ MessagePlugin.error($t('显示名称重复!'));
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
addDataDialog.data.label = value;
|
|
addDataDialog.data.label = value;
|
|
@@ -1568,12 +1571,12 @@ const changeDataLabel = (value) => {
|
|
|
|
|
|
const changeDataID = (value) => {
|
|
const changeDataID = (value) => {
|
|
if (!value) {
|
|
if (!value) {
|
|
- MessagePlugin.error('属性名不能为空!');
|
|
|
|
|
|
+ MessagePlugin.error($t('属性名不能为空!'));
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
let item = data.dataset.devices?.filter((item) => item.id === value);
|
|
let item = data.dataset.devices?.filter((item) => item.id === value);
|
|
if (item && item.length) {
|
|
if (item && item.length) {
|
|
- MessagePlugin.error('属性名重复!');
|
|
|
|
|
|
+ MessagePlugin.error($t('属性名重复!'));
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
addDataDialog.data.id = value;
|
|
addDataDialog.data.id = value;
|
|
@@ -1581,11 +1584,11 @@ const changeDataID = (value) => {
|
|
|
|
|
|
const onOkAddData = () => {
|
|
const onOkAddData = () => {
|
|
if (!addDataDialog.data.label) {
|
|
if (!addDataDialog.data.label) {
|
|
- MessagePlugin.error('请填写名称');
|
|
|
|
|
|
+ MessagePlugin.error($t('请填写名称'));
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
if (!addDataDialog.data.id) {
|
|
if (!addDataDialog.data.id) {
|
|
- MessagePlugin.error('请填写数据ID');
|
|
|
|
|
|
+ MessagePlugin.error($t('请填写数据ID'));
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
if (!addDataDialog.network.children) {
|
|
if (!addDataDialog.network.children) {
|
|
@@ -1692,7 +1695,7 @@ const importDataset = async (network) => {
|
|
|
|
|
|
const downloadAsExcel = () => {
|
|
const downloadAsExcel = () => {
|
|
if (!(data.dataset.devices && data.dataset.devices.length)) {
|
|
if (!(data.dataset.devices && data.dataset.devices.length)) {
|
|
- MessagePlugin.error('属性列表不能为空!');
|
|
|
|
|
|
+ MessagePlugin.error($t('属性列表不能为空!'));
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
const name = meta2d.store.data.name;
|
|
const name = meta2d.store.data.name;
|
|
@@ -1719,7 +1722,7 @@ const downloadAsExcel = () => {
|
|
|
|
|
|
const downloadAsJson = () => {
|
|
const downloadAsJson = () => {
|
|
if (!(data.dataset.devices && data.dataset.devices.length)) {
|
|
if (!(data.dataset.devices && data.dataset.devices.length)) {
|
|
- MessagePlugin.error('属性列表不能为空!');
|
|
|
|
|
|
+ MessagePlugin.error($t('属性列表不能为空!'));
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
import('file-saver').then(({ saveAs }) => {
|
|
import('file-saver').then(({ saveAs }) => {
|
|
@@ -1738,7 +1741,7 @@ const onOkDataset = async (saveas = false) => {
|
|
// return;
|
|
// return;
|
|
// }
|
|
// }
|
|
if (!(data.dataset.devices && data.dataset.devices.length)) {
|
|
if (!(data.dataset.devices && data.dataset.devices.length)) {
|
|
- MessagePlugin.error('属性列表不能为空');
|
|
|
|
|
|
+ MessagePlugin.error($t('属性列表不能为空'));
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
const dataset = JSON.parse(JSON.stringify(data.dataset));
|
|
const dataset = JSON.parse(JSON.stringify(data.dataset));
|
|
@@ -1907,7 +1910,7 @@ const onSelDataset = async (datasetId = false) => {
|
|
// 请求我的数据模型
|
|
// 请求我的数据模型
|
|
const getDatasets = async (name?: string) => {
|
|
const getDatasets = async (name?: string) => {
|
|
if (!user.id) {
|
|
if (!user.id) {
|
|
- MessagePlugin.error('请先登录');
|
|
|
|
|
|
+ MessagePlugin.error($t('请先登录'));
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
const body: any = {
|
|
const body: any = {
|
|
@@ -2102,11 +2105,11 @@ const onOkNetwork = async () => {
|
|
['mqtt', 'websocket', 'http'].includes(networkDialog.network.protocol) &&
|
|
['mqtt', 'websocket', 'http'].includes(networkDialog.network.protocol) &&
|
|
!networkDialog.network.url
|
|
!networkDialog.network.url
|
|
) {
|
|
) {
|
|
- MessagePlugin.error('URL地址不能为空!');
|
|
|
|
|
|
+ MessagePlugin.error($t('URL地址不能为空!'));
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
if (!networkDialog.network.name) {
|
|
if (!networkDialog.network.name) {
|
|
- MessagePlugin.error('名称不能为空!');
|
|
|
|
|
|
+ MessagePlugin.error($t('名称不能为空!'));
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
// if (networkDialog.save) {
|
|
// if (networkDialog.save) {
|
|
@@ -2247,7 +2250,7 @@ const onAddShape = (e, _data,type) => {
|
|
}
|
|
}
|
|
// const checked = _data.filter((item) => item.checked);
|
|
// const checked = _data.filter((item) => item.checked);
|
|
if (!checked.length) {
|
|
if (!checked.length) {
|
|
- MessagePlugin.error('请先选择数据');
|
|
|
|
|
|
+ MessagePlugin.error($t('请先选择数据'));
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
data = [];
|
|
data = [];
|