2025-05-30 10:04:55 +08:00
|
|
|
|
<template>
|
|
|
|
|
<div class="addDialogChunk">
|
|
|
|
|
<base-right-dialog
|
|
|
|
|
@handleClose="examineHandleClose"
|
|
|
|
|
:dialogVisible="examineOperateDialog"
|
|
|
|
|
size="100%"
|
|
|
|
|
:appendBody="true"
|
|
|
|
|
:loading="sceneLoading"
|
|
|
|
|
:footerShow="true"
|
|
|
|
|
:submitShow="true"
|
|
|
|
|
@handleConfirmClick="handleConfirmClick"
|
|
|
|
|
:submitTitle="'发布'"
|
|
|
|
|
:submitIcon="'el-icon-upload2'"
|
|
|
|
|
:title="sceneName"
|
|
|
|
|
>
|
|
|
|
|
<template #operateTitle>
|
|
|
|
|
<img
|
|
|
|
|
style="width: 15px; height: 15px; margin-left: 10px; cursor: pointer"
|
|
|
|
|
src="../images/edit.svg"
|
|
|
|
|
@click="editSceneName"
|
|
|
|
|
/>
|
|
|
|
|
</template>
|
2025-05-30 19:59:25 +08:00
|
|
|
|
<div
|
|
|
|
|
class="rightDialogClass_main drawContent"
|
|
|
|
|
v-if="drawShowList.length > 0"
|
|
|
|
|
style="background: #fff"
|
|
|
|
|
>
|
2025-05-30 10:04:55 +08:00
|
|
|
|
<!-- 画布 -->
|
2025-05-30 19:59:25 +08:00
|
|
|
|
<div class="drawCanvas">
|
2025-05-30 10:04:55 +08:00
|
|
|
|
<div
|
|
|
|
|
class="drawItem"
|
|
|
|
|
v-for="(ele, index) in drawShowList"
|
|
|
|
|
:key="ele.value"
|
|
|
|
|
>
|
|
|
|
|
<div class="title">{{ ele.title }}</div>
|
|
|
|
|
<div
|
|
|
|
|
@click="selectDrawItem(index)"
|
|
|
|
|
class="drawBox"
|
|
|
|
|
:class="{ active: index == drawSelectIndex }"
|
|
|
|
|
>
|
|
|
|
|
<template v-if="index == 0">
|
|
|
|
|
<div class="img">
|
|
|
|
|
<img src="../images/pingtai.svg" v-if="triggerMode == 2" />
|
|
|
|
|
<img
|
|
|
|
|
src="../images/naozhong.svg"
|
|
|
|
|
v-else-if="triggerMode == 1"
|
|
|
|
|
/>
|
|
|
|
|
<img src="../images/api.svg" v-else-if="triggerMode == 4" />
|
|
|
|
|
<img src="../images/point.svg" v-else-if="triggerMode == 3" />
|
|
|
|
|
</div>
|
|
|
|
|
<div style="width: calc(100% - 60px)">
|
|
|
|
|
<div class="actionName">
|
|
|
|
|
{{ index + 1 + "." + ele.actionName }}
|
|
|
|
|
</div>
|
|
|
|
|
<div
|
|
|
|
|
class="content DescribeContent"
|
|
|
|
|
v-if="!ele.options.taskType"
|
|
|
|
|
>
|
|
|
|
|
{{ ele.content }}
|
|
|
|
|
</div>
|
|
|
|
|
<div class="content" v-else>
|
|
|
|
|
{{ getTimeDivide(ele.options.taskType) }}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
<template v-else>
|
|
|
|
|
<div
|
|
|
|
|
:class="
|
|
|
|
|
ele.options && ele.options.iconUrl ? 'iconStyle' : 'img'
|
|
|
|
|
"
|
|
|
|
|
>
|
|
|
|
|
<img
|
|
|
|
|
v-if="ele.options && ele.options.iconUrl"
|
|
|
|
|
:src="
|
|
|
|
|
ele.options.iconUrl
|
|
|
|
|
? ele.options.iconUrl.split('/wwwroot')[1]
|
|
|
|
|
: ''
|
|
|
|
|
"
|
|
|
|
|
/>
|
|
|
|
|
<img v-else src="../images/huaO.svg" />
|
|
|
|
|
</div>
|
|
|
|
|
<div style="width: calc(100% - 60px)">
|
|
|
|
|
<div class="actionName" v-if="!ele.options.appName">
|
|
|
|
|
{{ index + 1 + "." + ele.actionName }}
|
|
|
|
|
</div>
|
|
|
|
|
<div
|
|
|
|
|
class="actionName"
|
|
|
|
|
style="display: flex; align-items: center"
|
|
|
|
|
v-else
|
|
|
|
|
>
|
|
|
|
|
{{ index + 1 + "." + ele.options.appName }}
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div
|
|
|
|
|
class="content DescribeContent"
|
2025-05-30 19:59:25 +08:00
|
|
|
|
v-if="ele.options.description"
|
2025-05-30 10:04:55 +08:00
|
|
|
|
>
|
2025-05-30 19:59:25 +08:00
|
|
|
|
{{ ele.options.description }}
|
2025-05-30 10:04:55 +08:00
|
|
|
|
</div>
|
|
|
|
|
<div class="content" v-else>{{ ele.content }}</div>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<div
|
|
|
|
|
@click.stop="delDrawItem(ele, index)"
|
|
|
|
|
v-if="index != 0"
|
|
|
|
|
class="del"
|
|
|
|
|
>
|
|
|
|
|
<img src="../images/close.svg" />
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="line-wrapper" v-if="index != drawShowList.length - 1">
|
|
|
|
|
<div class="line"></div>
|
|
|
|
|
<img
|
|
|
|
|
src="../images/addBtn.svg"
|
|
|
|
|
@click.stop="insertDrawItem(ele, index)"
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div @click="addDrwaItem" class="drawItem drawItemBtn">
|
|
|
|
|
添加新步骤
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<!-- 操作区 -->
|
2025-05-30 19:59:25 +08:00
|
|
|
|
<!-- 第一步的时候单独处理 -->
|
2025-05-30 10:04:55 +08:00
|
|
|
|
<div class="drawAction" v-if="drawSelectIndex == 0">
|
|
|
|
|
<el-tabs v-model="activeTabName">
|
|
|
|
|
<el-tab-pane label="1. 选择操作" name="选择操作">
|
|
|
|
|
<div
|
|
|
|
|
class="currentDrawBox"
|
|
|
|
|
style="padding: 10px"
|
|
|
|
|
v-if="drawShowList.length > 0"
|
|
|
|
|
>
|
|
|
|
|
<div class="drawimg">
|
|
|
|
|
<img src="../images/pingtai.svg" v-if="triggerMode == 2" />
|
|
|
|
|
<img
|
|
|
|
|
src="../images/naozhong.svg"
|
|
|
|
|
v-else-if="triggerMode == 1"
|
|
|
|
|
/>
|
|
|
|
|
<img src="../images/api.svg" v-else-if="triggerMode == 4" />
|
|
|
|
|
<img src="../images/point.svg" v-else-if="triggerMode == 3" />
|
|
|
|
|
</div>
|
|
|
|
|
<div style="width: calc(100% - 60px)">
|
|
|
|
|
<div class="actionName">
|
|
|
|
|
{{ 1 + "." + drawShowList[0].actionName }}
|
|
|
|
|
</div>
|
|
|
|
|
<div class="content" v-if="!drawShowList[0].options.taskType">
|
|
|
|
|
{{ drawShowList[0].content }}
|
|
|
|
|
</div>
|
|
|
|
|
<div class="content" v-else>
|
|
|
|
|
{{ getTimeDivide(drawShowList[0].options.taskType) }}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="timeWrap">
|
|
|
|
|
<template v-for="(item, index) in timeDivide">
|
|
|
|
|
<div
|
|
|
|
|
@click="handleTimeItem(item, index)"
|
|
|
|
|
:class="{ activTimeItem: activTimeIndex == item.id }"
|
|
|
|
|
class="timeItem"
|
|
|
|
|
>
|
|
|
|
|
<div class="imgBox">
|
|
|
|
|
<img src="../images/shandian.svg" />
|
|
|
|
|
</div>
|
|
|
|
|
<div>
|
|
|
|
|
<div class="title">{{ item.title }}</div>
|
|
|
|
|
<div class="content">{{ item.content }}</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
</div>
|
|
|
|
|
</el-tab-pane>
|
|
|
|
|
<el-tab-pane label="2. 配置" name="配置">
|
|
|
|
|
<div
|
|
|
|
|
class="currentDrawBox"
|
|
|
|
|
style="padding: 10px"
|
|
|
|
|
v-if="drawShowList.length > 0"
|
|
|
|
|
>
|
|
|
|
|
<div class="drawimg">
|
|
|
|
|
<img src="../images/pingtai.svg" v-if="triggerMode == 2" />
|
|
|
|
|
<img
|
|
|
|
|
src="../images/naozhong.svg"
|
|
|
|
|
v-else-if="triggerMode == 1"
|
|
|
|
|
/>
|
|
|
|
|
<img src="../images/api.svg" v-else-if="triggerMode == 4" />
|
|
|
|
|
<img src="../images/point.svg" v-else-if="triggerMode == 3" />
|
|
|
|
|
</div>
|
|
|
|
|
<div style="width: calc(100% - 60px)">
|
|
|
|
|
<div class="actionName">
|
|
|
|
|
{{ 1 + "." + drawShowList[0].actionName }}
|
|
|
|
|
</div>
|
|
|
|
|
<div class="content" v-if="!drawShowList[0].options.taskType">
|
|
|
|
|
{{ drawShowList[0].content }}
|
|
|
|
|
</div>
|
|
|
|
|
<div class="content" v-else>
|
|
|
|
|
{{ getTimeDivide(drawShowList[0].options.taskType) }}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="crontabBox">
|
|
|
|
|
<div class="crontabBoxTitle">cron表达式</div>
|
|
|
|
|
<FishCrontab
|
|
|
|
|
ref="fishCrontab"
|
|
|
|
|
class="crontab"
|
|
|
|
|
@fill="crontabFill"
|
|
|
|
|
:expression="expression"
|
|
|
|
|
:fiveTimes="false"
|
|
|
|
|
></FishCrontab>
|
|
|
|
|
</div>
|
|
|
|
|
</el-tab-pane>
|
|
|
|
|
</el-tabs>
|
|
|
|
|
</div>
|
2025-05-30 19:59:25 +08:00
|
|
|
|
<!-- 其他步骤 -->
|
|
|
|
|
<div class="drawAction" v-else v-loading="drawMask">
|
|
|
|
|
<el-tabs
|
|
|
|
|
v-model="activeOtherTabName"
|
|
|
|
|
@tab-click="handleOtherTabClick"
|
|
|
|
|
>
|
|
|
|
|
<el-tab-pane label="1. 选择应用" name="选择应用">
|
|
|
|
|
<!-- 选中的操作步骤 -->
|
|
|
|
|
<div class="drawItemBox">
|
|
|
|
|
<div class="currentDrawBox" style="width: 100%">
|
|
|
|
|
<div class="img">
|
|
|
|
|
<img class="appIcon" src="../images/applicotion.svg" />
|
|
|
|
|
</div>
|
|
|
|
|
<div style="width: calc(100% - 64px)">
|
|
|
|
|
<!-- 应用名称 -->
|
|
|
|
|
<div class="actionName" v-if="CurrentAppRow.appName">
|
|
|
|
|
{{ CurrentAppRow.appName }}
|
|
|
|
|
</div>
|
|
|
|
|
<!-- 步骤描述 -->
|
|
|
|
|
<div class="content" v-if="CurrentAppRow.description">
|
|
|
|
|
{{ CurrentAppRow.description }}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="search">
|
|
|
|
|
<el-input
|
|
|
|
|
class="input"
|
|
|
|
|
v-model="appCodeOrName"
|
|
|
|
|
placeholder="请输入"
|
|
|
|
|
clearable
|
|
|
|
|
style="width: 210px"
|
|
|
|
|
@keydown.enter.native="searchApp"
|
|
|
|
|
></el-input>
|
|
|
|
|
<el-button
|
|
|
|
|
type="primary"
|
|
|
|
|
style="margin-right: 5px"
|
|
|
|
|
size="small"
|
|
|
|
|
@click="searchApp"
|
|
|
|
|
>查询</el-button
|
|
|
|
|
>
|
|
|
|
|
</div>
|
|
|
|
|
<div
|
|
|
|
|
class="app"
|
|
|
|
|
style="max-height: calc(-345px + 100vh); overflow: auto"
|
|
|
|
|
>
|
|
|
|
|
<div class="applist">
|
|
|
|
|
<div
|
|
|
|
|
v-for="(app, index) in appList"
|
|
|
|
|
class="appItem"
|
|
|
|
|
@click="hangleAppItem(app, index)"
|
|
|
|
|
:class="{ active: appActivIndex == app.id }"
|
|
|
|
|
>
|
|
|
|
|
<img class="appIcon" src="../images/applicotion.svg" />
|
|
|
|
|
<div class="name">{{ app.name }}</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="DescribeDataBox">
|
|
|
|
|
<span style="font-size: 14px">步骤描述</span>
|
|
|
|
|
<el-input
|
|
|
|
|
class="input"
|
|
|
|
|
v-model="description"
|
|
|
|
|
placeholder="请输入步骤描述"
|
|
|
|
|
clearable
|
|
|
|
|
@blur="changeDescription"
|
|
|
|
|
type="textarea"
|
|
|
|
|
></el-input>
|
|
|
|
|
</div>
|
|
|
|
|
</el-tab-pane>
|
|
|
|
|
<el-tab-pane label="2. 选择操作" name="选择操作">
|
|
|
|
|
<!-- 选中的操作步骤 -->
|
|
|
|
|
<div class="drawItemBox">
|
|
|
|
|
<div class="currentDrawBox" style="width: 100%">
|
|
|
|
|
<div class="img">
|
|
|
|
|
<img class="appIcon" src="../images/applicotion.svg" />
|
|
|
|
|
</div>
|
|
|
|
|
<div style="width: calc(100% - 64px)">
|
|
|
|
|
<!-- 应用名称 -->
|
|
|
|
|
<div class="actionName" v-if="CurrentAppRow.appName">
|
|
|
|
|
{{ CurrentAppRow.appName }}
|
|
|
|
|
</div>
|
|
|
|
|
<!-- 步骤描述 -->
|
|
|
|
|
<div class="content" v-if="CurrentAppRow.description">
|
|
|
|
|
{{ CurrentAppRow.description }}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="search">
|
|
|
|
|
<el-input
|
|
|
|
|
class="input"
|
|
|
|
|
v-model="operateCodeOrName"
|
|
|
|
|
placeholder="请输入"
|
|
|
|
|
style="width: 210px"
|
|
|
|
|
clearable
|
|
|
|
|
@keydown.enter.native="searchApiPlugin"
|
|
|
|
|
></el-input>
|
|
|
|
|
<el-button type="primary" size="small" @click="searchApiPlugin"
|
|
|
|
|
>查询</el-button
|
|
|
|
|
>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<el-radio-group
|
|
|
|
|
v-model="activeApiPliginTabName"
|
|
|
|
|
@change="ApiPliginTabChangeEvent"
|
|
|
|
|
>
|
|
|
|
|
<el-radio-button label="API接口">API接口</el-radio-button>
|
|
|
|
|
<el-radio-button label="插件">插件</el-radio-button>
|
|
|
|
|
</el-radio-group>
|
|
|
|
|
<div class="ApiPliginBox app">
|
|
|
|
|
<div
|
|
|
|
|
class="applist"
|
|
|
|
|
v-show="activeApiPliginTabName == 'API接口'"
|
|
|
|
|
>
|
|
|
|
|
<div
|
|
|
|
|
v-for="(item, index) in apiList"
|
|
|
|
|
class="appItem"
|
|
|
|
|
@click="hangleApiClickEvent(item, index)"
|
|
|
|
|
:class="{ active: apiIdActiv == item.apiId }"
|
|
|
|
|
>
|
|
|
|
|
<div class="imgBox">
|
|
|
|
|
<img src="../images/shandian.svg" />
|
|
|
|
|
</div>
|
|
|
|
|
<div>
|
|
|
|
|
<div class="name">{{ item.apiName }}</div>
|
|
|
|
|
<div class="name">{{ item.apiPath }}</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div class="applist" v-show="activeApiPliginTabName == '插件'">
|
|
|
|
|
<div
|
|
|
|
|
v-for="(item, index) in pluginList"
|
|
|
|
|
class="appItem"
|
|
|
|
|
@click="hanglePluginClickEvent(item, index)"
|
|
|
|
|
:class="{ active: pluginActiv == item.plugId }"
|
|
|
|
|
>
|
|
|
|
|
<div class="imgBox">
|
|
|
|
|
<img src="../images/shandian.svg" />
|
|
|
|
|
</div>
|
|
|
|
|
<div>
|
|
|
|
|
<div class="name">{{ item.plugName }}</div>
|
|
|
|
|
<div class="name">{{ item.plugDescribe }}</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</el-tab-pane>
|
|
|
|
|
<el-tab-pane label="3. 选择账号" name="选择账号">
|
|
|
|
|
<!-- 选中的操作步骤 -->
|
|
|
|
|
<div class="drawItemBox">
|
|
|
|
|
<div class="currentDrawBox" style="width: 100%">
|
|
|
|
|
<div class="img">
|
|
|
|
|
<img class="appIcon" src="../images/applicotion.svg" />
|
|
|
|
|
</div>
|
|
|
|
|
<div style="width: calc(100% - 64px)">
|
|
|
|
|
<!-- 应用名称 -->
|
|
|
|
|
<div class="actionName" v-if="CurrentAppRow.appName">
|
|
|
|
|
{{ CurrentAppRow.appName }}
|
|
|
|
|
</div>
|
|
|
|
|
<!-- 步骤描述 -->
|
|
|
|
|
<div class="content" v-if="CurrentAppRow.description">
|
|
|
|
|
{{ CurrentAppRow.description }}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="userList">
|
|
|
|
|
<div @click="addAccount" class="userItem userBtn">
|
|
|
|
|
<i
|
|
|
|
|
class="el-icon-plus"
|
|
|
|
|
style="font-size: 12px; margin-right: 5px"
|
|
|
|
|
></i>
|
|
|
|
|
添加账户
|
|
|
|
|
</div>
|
|
|
|
|
<div class="userContentBox">
|
|
|
|
|
<div
|
|
|
|
|
v-for="(item, index) in userList"
|
|
|
|
|
class="userItem"
|
|
|
|
|
@click="handleUserClickEvent(item, index)"
|
|
|
|
|
:class="{ active: userActivId == item.id }"
|
|
|
|
|
>
|
|
|
|
|
<div class="userName">{{ item.name }}</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</el-tab-pane>
|
|
|
|
|
</el-tabs>
|
|
|
|
|
</div>
|
2025-05-30 10:04:55 +08:00
|
|
|
|
</div>
|
|
|
|
|
</base-right-dialog>
|
|
|
|
|
<editSence ref="editSence" @handleConfirmClick="updateTitle"></editSence>
|
2025-05-30 19:59:25 +08:00
|
|
|
|
<addAccount
|
|
|
|
|
ref="addAccount"
|
|
|
|
|
@handleConfirmClick="addAccountConfirmClick"
|
|
|
|
|
></addAccount>
|
2025-05-30 10:04:55 +08:00
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
// 导入编辑场景组件
|
|
|
|
|
import baseRightDialog from "@/components/base/baseRightDialog/index.vue";
|
|
|
|
|
import editSence from "./editSence.vue";
|
|
|
|
|
import { authApi } from "@/api/apis/auth";
|
|
|
|
|
// 导入步骤添加和使用的常量
|
|
|
|
|
import { stepAdd, stepUse, timeDivide } from "./constant";
|
|
|
|
|
// 导入 cron 表达式组件
|
|
|
|
|
import FishCrontab from "fish-crontab";
|
2025-05-30 19:59:25 +08:00
|
|
|
|
// 导入添加账号组件
|
|
|
|
|
import addAccount from "./addAccount.vue";
|
2025-05-30 10:04:55 +08:00
|
|
|
|
export default {
|
|
|
|
|
components: {
|
|
|
|
|
editSence,
|
|
|
|
|
baseRightDialog,
|
|
|
|
|
FishCrontab,
|
2025-05-30 19:59:25 +08:00
|
|
|
|
addAccount,
|
2025-05-30 10:04:55 +08:00
|
|
|
|
},
|
|
|
|
|
data() {
|
|
|
|
|
return {
|
|
|
|
|
examineOperateDialog: false, //判断是都打开弹窗
|
|
|
|
|
sceneLoading: false, //遮照
|
|
|
|
|
sceneName: "", //场景名称
|
|
|
|
|
sceneID: "", //场景ID
|
|
|
|
|
// 画布列表,对应右侧操作区域
|
|
|
|
|
drawShowList: [],
|
|
|
|
|
drawSelectIndex: 0, // 当前选中的画布索引
|
|
|
|
|
|
2025-05-30 19:59:25 +08:00
|
|
|
|
//当步骤为1时
|
|
|
|
|
timeDivide: timeDivide,
|
|
|
|
|
activeTabName: "选择操作", // 显示的操作栏
|
|
|
|
|
activTimeIndex: "", // 当前选择操作的类型
|
|
|
|
|
expression: "", //cron表达式
|
|
|
|
|
// 其他步骤
|
|
|
|
|
activeOtherTabName: "",
|
|
|
|
|
CurrentAppRow: {}, // 当前选择的应用数据
|
|
|
|
|
appCodeOrName: "", //应用搜索条件
|
|
|
|
|
drawMask: false,
|
|
|
|
|
|
2025-05-30 10:04:55 +08:00
|
|
|
|
// 应用列表
|
|
|
|
|
appList: [],
|
|
|
|
|
appCodeOrName: "", // 应用搜索关键字
|
|
|
|
|
appActivIndex: "", // 当前选中的应用 ID
|
2025-05-30 19:59:25 +08:00
|
|
|
|
description: "", //应用描述
|
|
|
|
|
operateCodeOrName: "", //api 或者 插件的搜索
|
|
|
|
|
activeApiPliginTabName: "API接口", // 当前操作是 API 还是插件
|
|
|
|
|
// API 插件列表
|
|
|
|
|
pluginList: [],
|
|
|
|
|
// API 接口列表
|
|
|
|
|
apiList: [],
|
|
|
|
|
apiIdActiv: "", // 选择的 API ID
|
|
|
|
|
pluginActiv: "", // 选择的插件 ID
|
|
|
|
|
// 用户列表
|
|
|
|
|
userList: [],
|
|
|
|
|
userActivId: "", // 选择的用户 ID
|
2025-05-30 10:04:55 +08:00
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
/**
|
|
|
|
|
* 打开弹窗
|
|
|
|
|
* @param {string} sceneID 场景 ID
|
|
|
|
|
* @param {string} sceneName 场景名称
|
|
|
|
|
* @param {string} type 操作类型
|
|
|
|
|
* @param {number} triggerMode 触发模式
|
|
|
|
|
*/
|
|
|
|
|
openDialog(sceneID, sceneName, type, triggerMode) {
|
|
|
|
|
// 更新场景 ID
|
|
|
|
|
this.sceneID = sceneID;
|
|
|
|
|
// 更新场景类型
|
|
|
|
|
this.sceneType = type;
|
|
|
|
|
// 更新场景名称
|
|
|
|
|
this.sceneName = sceneName;
|
|
|
|
|
// 更新触发模式
|
|
|
|
|
this.triggerMode = triggerMode;
|
|
|
|
|
// 显示审核操作弹窗
|
|
|
|
|
this.examineOperateDialog = true;
|
|
|
|
|
// 显示场景加载状态
|
|
|
|
|
this.sceneLoading = true;
|
|
|
|
|
// 5 秒后隐藏场景加载状态
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
this.sceneLoading = false;
|
|
|
|
|
}, 5000);
|
|
|
|
|
|
|
|
|
|
if (type === "add") {
|
|
|
|
|
// 新增时生成第一步
|
|
|
|
|
let params = {
|
|
|
|
|
flowId: this.sceneID,
|
|
|
|
|
step: 1,
|
|
|
|
|
stepType: 2,
|
|
|
|
|
};
|
|
|
|
|
this.SaveSceneStepData(params, "first");
|
|
|
|
|
}
|
2025-05-30 19:59:25 +08:00
|
|
|
|
|
|
|
|
|
if (type === "edit") {
|
|
|
|
|
// 编辑时获取场景步骤列表
|
|
|
|
|
this.GetSceneStepList();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* 获取场景步骤列表
|
|
|
|
|
*/
|
|
|
|
|
async GetSceneStepList() {
|
|
|
|
|
// 清空画布列表
|
|
|
|
|
this.drawShowList = [];
|
|
|
|
|
// 获取场景步骤列表的参数
|
|
|
|
|
let params = {
|
|
|
|
|
flowId: this.sceneID,
|
|
|
|
|
};
|
|
|
|
|
let res = await authApi(
|
|
|
|
|
"sysFlowStepService",
|
|
|
|
|
"",
|
|
|
|
|
"queryList",
|
|
|
|
|
"",
|
|
|
|
|
params
|
|
|
|
|
);
|
|
|
|
|
// 隐藏场景加载状态
|
|
|
|
|
this.sceneLoading = false;
|
|
|
|
|
if (res.status == "200") {
|
|
|
|
|
if (res.attribute.length > 0) {
|
|
|
|
|
res.attribute.forEach((item, index) => {
|
|
|
|
|
if (index === 0) {
|
|
|
|
|
let obj = {
|
|
|
|
|
...stepAdd,
|
|
|
|
|
options: {
|
|
|
|
|
...item,
|
|
|
|
|
stepID: item.id,
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
if (this.triggerMode === 2) {
|
|
|
|
|
obj.actionName = "定时触发";
|
|
|
|
|
} else if (this.triggerMode === 1) {
|
|
|
|
|
obj.actionName = "应用程序触发";
|
|
|
|
|
} else if (this.triggerMode === 4) {
|
|
|
|
|
obj.actionName = "Webhook触发";
|
|
|
|
|
} else if (this.triggerMode === 3) {
|
|
|
|
|
obj.actionName = "手动触发";
|
|
|
|
|
}
|
|
|
|
|
// 将第一个步骤添加到画布列表
|
|
|
|
|
this.drawShowList.push(obj);
|
|
|
|
|
} else {
|
|
|
|
|
// 将其他步骤添加到画布列表
|
|
|
|
|
this.drawShowList.push({
|
|
|
|
|
...stepUse,
|
|
|
|
|
options: {
|
|
|
|
|
...item,
|
|
|
|
|
stepID: item.id,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
// 在下一个 DOM 更新周期后执行操作
|
|
|
|
|
this.$nextTick(() => {
|
|
|
|
|
// 选中第一个步骤
|
|
|
|
|
this.drawSelectIndex = 0;
|
|
|
|
|
this.selectDrawItem(this.drawSelectIndex);
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
// 新增时生成第一步
|
|
|
|
|
let params = {
|
|
|
|
|
flowId: this.sceneID,
|
|
|
|
|
step: 1,
|
|
|
|
|
stepType: 2,
|
|
|
|
|
};
|
|
|
|
|
this.SaveSceneStepData(params, "first");
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-05-30 10:04:55 +08:00
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* 新增、实时修改场景步骤基本信息
|
|
|
|
|
* @param {Object} params 请求参数
|
|
|
|
|
* @param {string} type 操作类型
|
2025-05-30 19:59:25 +08:00
|
|
|
|
* @param {string} insertIndex 用于插入
|
2025-05-30 10:04:55 +08:00
|
|
|
|
*/
|
|
|
|
|
async SaveSceneStepData(params, type, insertIndex) {
|
|
|
|
|
let res = await authApi(
|
|
|
|
|
"sysFlowStepService",
|
|
|
|
|
"",
|
2025-05-30 19:59:25 +08:00
|
|
|
|
"saveOrUpdateFlowStep",
|
2025-05-30 10:04:55 +08:00
|
|
|
|
"",
|
|
|
|
|
params
|
|
|
|
|
);
|
|
|
|
|
// 隐藏场景加载状态
|
|
|
|
|
this.sceneLoading = false;
|
|
|
|
|
if (res.status == "200") {
|
2025-05-30 19:59:25 +08:00
|
|
|
|
// 第一次打开弹窗
|
2025-05-30 10:04:55 +08:00
|
|
|
|
if (type === "first") {
|
|
|
|
|
let obj = [
|
|
|
|
|
{
|
|
|
|
|
...stepAdd,
|
|
|
|
|
options: {
|
|
|
|
|
// 步骤 id
|
|
|
|
|
stepID: res.attribute.id,
|
|
|
|
|
step: 1,
|
|
|
|
|
stepType: 2, // 步骤类型(1、触发方式 2、应用 3、 数据集 4、条件
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
];
|
|
|
|
|
if (this.triggerMode === 2) {
|
2025-05-30 19:59:25 +08:00
|
|
|
|
obj[0].actionName = "定时触发";
|
2025-05-30 10:04:55 +08:00
|
|
|
|
} else if (this.triggerMode === 1) {
|
2025-05-30 19:59:25 +08:00
|
|
|
|
obj[0].actionName = "应用程序触发";
|
2025-05-30 10:04:55 +08:00
|
|
|
|
} else if (this.triggerMode === 4) {
|
2025-05-30 19:59:25 +08:00
|
|
|
|
obj[0].actionName = "Webhook触发";
|
2025-05-30 10:04:55 +08:00
|
|
|
|
} else if (this.triggerMode === 3) {
|
|
|
|
|
obj[0].actionName = "手动触发";
|
|
|
|
|
}
|
|
|
|
|
// 更新画布列表
|
|
|
|
|
this.drawShowList = obj;
|
|
|
|
|
// 在下一个 DOM 更新周期后执行操作
|
|
|
|
|
this.$nextTick(() => {
|
|
|
|
|
// 选中第一个步骤
|
|
|
|
|
this.drawSelectIndex = 0;
|
|
|
|
|
this.selectDrawItem(this.drawSelectIndex);
|
|
|
|
|
// 获取应用列表
|
|
|
|
|
this.getAppList();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
// 手动新增时
|
|
|
|
|
if (type === "add") {
|
|
|
|
|
// 将新步骤添加到画布列表
|
|
|
|
|
this.drawShowList.push({
|
|
|
|
|
...stepUse,
|
|
|
|
|
options: {
|
|
|
|
|
// 步骤 id
|
|
|
|
|
stepID: res.attribute.id,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
// 在下一个 DOM 更新周期后执行操作
|
|
|
|
|
this.$nextTick(() => {
|
|
|
|
|
// 选中当前新增的步骤
|
|
|
|
|
this.drawSelectIndex = this.drawShowList.length - 1;
|
|
|
|
|
this.selectDrawItem(this.drawSelectIndex);
|
|
|
|
|
});
|
|
|
|
|
}
|
2025-05-30 19:59:25 +08:00
|
|
|
|
// 插入时
|
2025-05-30 10:04:55 +08:00
|
|
|
|
if (type == "insert") {
|
|
|
|
|
this.drawShowList.splice(insertIndex + 1, 0, {
|
|
|
|
|
...stepUse,
|
|
|
|
|
options: {
|
|
|
|
|
// 步骤 id
|
|
|
|
|
stepID: res.attribute.id,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
// 在下一个 DOM 更新周期后执行操作
|
|
|
|
|
this.$nextTick(() => {
|
|
|
|
|
// 选中当前新增的步骤
|
|
|
|
|
this.drawSelectIndex = insertIndex + 1;
|
|
|
|
|
this.selectDrawItem(this.drawSelectIndex);
|
|
|
|
|
});
|
|
|
|
|
}
|
2025-05-30 19:59:25 +08:00
|
|
|
|
if (type === "time") {
|
|
|
|
|
this.activeTabName = "配置";
|
|
|
|
|
}
|
|
|
|
|
// cron表达式保存后
|
|
|
|
|
if (type === "expression") {
|
|
|
|
|
if (this.drawShowList.length === 1) {
|
|
|
|
|
// 自动添加一个步骤
|
|
|
|
|
this.addDrwaItem();
|
|
|
|
|
} else {
|
|
|
|
|
// 在下一个 DOM 更新周期后执行操作
|
|
|
|
|
this.$nextTick(() => {
|
|
|
|
|
// 选中第二个步骤
|
|
|
|
|
this.drawSelectIndex = 1;
|
|
|
|
|
this.selectDrawItem(this.drawSelectIndex);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-05-30 10:04:55 +08:00
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* 手动新增场景步骤
|
|
|
|
|
*/
|
2025-05-30 19:59:25 +08:00
|
|
|
|
addDrwaItem() {
|
2025-05-30 10:04:55 +08:00
|
|
|
|
// 新增步骤的参数
|
|
|
|
|
let params = {
|
|
|
|
|
flowId: this.sceneID,
|
|
|
|
|
step: this.drawShowList.length + 1,
|
|
|
|
|
stepType: 2,
|
|
|
|
|
};
|
|
|
|
|
// 保存场景步骤数据
|
|
|
|
|
this.SaveSceneStepData(params, "add");
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* 切换步骤时
|
|
|
|
|
* @param {number} index 步骤索引
|
|
|
|
|
*/
|
|
|
|
|
selectDrawItem(index) {
|
|
|
|
|
// 更新当前选中的步骤索引
|
|
|
|
|
this.drawSelectIndex = index;
|
2025-05-30 19:59:25 +08:00
|
|
|
|
// 先清空
|
|
|
|
|
this.pluginActiv = "";
|
|
|
|
|
this.apiIDActiv = "";
|
|
|
|
|
this.userActivId = "";
|
|
|
|
|
if (index === 0) {
|
|
|
|
|
this.activeTabName = "选择操作";
|
|
|
|
|
} else {
|
|
|
|
|
this.activeOtherTabName = "选择应用";
|
|
|
|
|
// 清空应用搜索关键字
|
|
|
|
|
this.appCodeOrName = "";
|
|
|
|
|
// 获取应用列表
|
|
|
|
|
this.getAppList();
|
|
|
|
|
// 获取场景步骤数据
|
|
|
|
|
this.GetSceneStepData();
|
|
|
|
|
}
|
2025-05-30 10:04:55 +08:00
|
|
|
|
},
|
2025-05-30 19:59:25 +08:00
|
|
|
|
/**
|
|
|
|
|
* 获取场景步骤数据
|
|
|
|
|
*/
|
|
|
|
|
async GetSceneStepData() {
|
|
|
|
|
// 获取场景步骤数据的参数
|
|
|
|
|
let params = {
|
|
|
|
|
id: this.drawShowList[this.drawSelectIndex].options.stepID,
|
|
|
|
|
};
|
|
|
|
|
let res = await authApi(
|
|
|
|
|
"sysFlowStepService",
|
|
|
|
|
"",
|
|
|
|
|
"getFlowStep",
|
|
|
|
|
"",
|
|
|
|
|
params
|
|
|
|
|
);
|
|
|
|
|
if (res.status == "200") {
|
|
|
|
|
let obj = {
|
|
|
|
|
...this.drawShowList[this.drawSelectIndex].options,
|
|
|
|
|
...res.attribute,
|
|
|
|
|
};
|
|
|
|
|
// 更新当前步骤的选项
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options = obj;
|
|
|
|
|
|
|
|
|
|
if (this.drawSelectIndex == 0) {
|
|
|
|
|
this.expression = obj.taskCorn;
|
|
|
|
|
this.activTimeIndex = obj.apiId;
|
|
|
|
|
} else {
|
|
|
|
|
this.activeApiPliginTabName = obj.actionType;
|
2025-05-30 10:04:55 +08:00
|
|
|
|
|
2025-05-30 19:59:25 +08:00
|
|
|
|
// 清空 API 或插件搜索关键字
|
|
|
|
|
this.operateCodeOrName = "";
|
|
|
|
|
// 清空 API 列表
|
|
|
|
|
this.apiList = [];
|
|
|
|
|
// 清空插件列表
|
|
|
|
|
this.pluginList = [];
|
|
|
|
|
// 清空用户列表
|
|
|
|
|
this.userList = [];
|
|
|
|
|
if (this.drawShowList[this.drawSelectIndex].options.appId) {
|
|
|
|
|
// 更新当前选中的应用 ID
|
|
|
|
|
this.appActivIndex =
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.appId;
|
|
|
|
|
// 更新当前选择的应用名称
|
|
|
|
|
this.CurrentAppRow.appName =
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.appName;
|
|
|
|
|
// 获取当前步骤的 api、插件、账号
|
|
|
|
|
this.GetApiList(this.appActivIndex);
|
|
|
|
|
// this.getPluginList(this.appActivIndex);
|
|
|
|
|
this.GetAccountListAPI(this.appActivIndex);
|
|
|
|
|
} else {
|
|
|
|
|
// 重置当前选中的应用 ID
|
|
|
|
|
this.appActivIndex = "";
|
|
|
|
|
// 重置当前选择的应用数据
|
|
|
|
|
this.CurrentAppRow = {};
|
|
|
|
|
}
|
|
|
|
|
if (this.drawShowList[this.drawSelectIndex].options.description) {
|
|
|
|
|
// 更新步骤描述
|
|
|
|
|
this.description =
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.description;
|
|
|
|
|
// 更新当前选择的应用步骤描述
|
|
|
|
|
this.CurrentAppRow.description = this.description;
|
|
|
|
|
} else {
|
|
|
|
|
// 重置步骤描述
|
|
|
|
|
this.description = "";
|
|
|
|
|
// 重置当前选择的应用步骤描述
|
|
|
|
|
this.CurrentAppRow.description = "";
|
|
|
|
|
}
|
|
|
|
|
if (this.drawShowList[this.drawSelectIndex].options.apiId) {
|
|
|
|
|
// 更新选择的 API ID
|
|
|
|
|
this.apiIdActiv =
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.apiId;
|
|
|
|
|
} else {
|
|
|
|
|
// 重置选择的 API ID
|
|
|
|
|
this.apiIdActiv = "";
|
|
|
|
|
}
|
|
|
|
|
// 插件
|
|
|
|
|
if (this.drawShowList[this.drawSelectIndex].options.plugId) {
|
|
|
|
|
// 更新选择的插件 ID
|
|
|
|
|
this.pluginActiv =
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.plugId;
|
|
|
|
|
} else {
|
|
|
|
|
// 重置选择的插件 ID
|
|
|
|
|
this.pluginActiv = "";
|
|
|
|
|
}
|
|
|
|
|
// 账号
|
|
|
|
|
if (this.drawShowList[this.drawSelectIndex].options.step_acc_id) {
|
|
|
|
|
// 更新选择的用户 ID
|
|
|
|
|
this.userActivId =
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.step_acc_id;
|
|
|
|
|
// 更新当前选择的应用账号名称
|
|
|
|
|
this.CurrentAppRow.step_acc_name =
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.step_acc_name;
|
|
|
|
|
} else {
|
|
|
|
|
// 重置选择的用户 ID
|
|
|
|
|
this.userActivId = "";
|
|
|
|
|
// 重置当前选择的应用账号名称
|
|
|
|
|
this.CurrentAppRow.step_acc_name = "";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
2025-05-30 10:04:55 +08:00
|
|
|
|
/**
|
|
|
|
|
* 删除场景步骤
|
|
|
|
|
* @param {Object} ele 步骤数据
|
|
|
|
|
* @param {number} index 步骤索引
|
|
|
|
|
*/
|
|
|
|
|
delDrawItem(ele, index) {
|
|
|
|
|
// 获取步骤 ID
|
|
|
|
|
let stepID = ele.options.stepID || null;
|
|
|
|
|
if (!stepID) {
|
|
|
|
|
this.$vmNews("删除失败!步骤ID丢失,请联系管理员处理");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
// 弹出确认删除对话框
|
|
|
|
|
this.$confirm("确认删除吗?", "提示", {
|
|
|
|
|
confirmButtonText: "确定",
|
|
|
|
|
cancelButtonText: "取消",
|
|
|
|
|
type: "warning",
|
|
|
|
|
})
|
|
|
|
|
.then(async () => {
|
|
|
|
|
if (stepID) {
|
|
|
|
|
let res = await authApi(
|
|
|
|
|
"sysFlowStepService",
|
|
|
|
|
"",
|
|
|
|
|
"saveFlowStep",
|
|
|
|
|
"",
|
|
|
|
|
{
|
|
|
|
|
id: stepID,
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
if (res.status == "200") {
|
|
|
|
|
// 提示删除成功
|
|
|
|
|
this.$vmNews("删除成功", "success");
|
|
|
|
|
// 从画布列表中删除该步骤
|
|
|
|
|
this.drawShowList.splice(index, 1);
|
|
|
|
|
if (this.drawSelectIndex === index) {
|
|
|
|
|
// 选中第一个步骤
|
|
|
|
|
this.drawSelectIndex = 0;
|
|
|
|
|
this.selectDrawItem(this.drawSelectIndex);
|
|
|
|
|
} else if (this.drawSelectIndex >= this.drawShowList.length) {
|
|
|
|
|
// 选中最后一个步骤
|
|
|
|
|
this.drawSelectIndex = this.drawShowList.length - 1;
|
|
|
|
|
this.selectDrawItem(this.drawSelectIndex);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// 提示删除成功
|
|
|
|
|
this.$vmNews("删除成功", "success");
|
|
|
|
|
// 从画布列表中删除该步骤
|
|
|
|
|
this.drawShowList.splice(index, 1);
|
|
|
|
|
if (this.drawSelectIndex === index) {
|
|
|
|
|
// 选中第一个步骤
|
|
|
|
|
this.drawSelectIndex = 0;
|
|
|
|
|
this.selectDrawItem(this.drawSelectIndex);
|
|
|
|
|
} else if (this.drawSelectIndex >= this.drawShowList.length) {
|
|
|
|
|
// 选中最后一个步骤
|
|
|
|
|
this.drawSelectIndex = this.drawShowList.length - 1;
|
|
|
|
|
this.selectDrawItem(this.drawSelectIndex);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
.catch(() => {});
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* 插入场景步骤
|
|
|
|
|
* @param {any} value 标签页值
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
insertDrawItem(ele, index) {
|
|
|
|
|
let params = {
|
|
|
|
|
flowId: this.sceneID,
|
|
|
|
|
step: index + 1,
|
|
|
|
|
stepType: 2,
|
|
|
|
|
};
|
|
|
|
|
// 保存场景步骤数据
|
|
|
|
|
this.SaveSceneStepData(params, "insert", index);
|
|
|
|
|
},
|
2025-05-30 19:59:25 +08:00
|
|
|
|
// ----------------------------------------------步骤一相关操作
|
|
|
|
|
/**
|
|
|
|
|
* 处理时间项点击事件
|
|
|
|
|
* @param {Object} item 时间项数据
|
|
|
|
|
* @param {number} index 时间项索引
|
|
|
|
|
*/
|
|
|
|
|
handleTimeItem(item, index) {
|
|
|
|
|
// 更新当前选择操作的类型
|
|
|
|
|
this.activTimeIndex = item.id;
|
|
|
|
|
// 更新当前步骤的任务类型
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.taskType = item.id;
|
|
|
|
|
let params = {
|
|
|
|
|
flowId: this.sceneID,
|
|
|
|
|
id: this.drawShowList[this.drawSelectIndex].options.stepID,
|
|
|
|
|
apiId: item.id,
|
|
|
|
|
apiName: this.getTimeDivide(item.id),
|
|
|
|
|
};
|
|
|
|
|
// 保存场景步骤数据
|
|
|
|
|
this.SaveSceneStepData(params, "time");
|
|
|
|
|
},
|
2025-05-30 10:04:55 +08:00
|
|
|
|
/**
|
|
|
|
|
* cron 表达式点击确定时时间插件回调
|
|
|
|
|
* @param {string} value cron 表达式的值
|
|
|
|
|
*/
|
|
|
|
|
crontabFill(value) {
|
|
|
|
|
// 更新 cron 表达式
|
|
|
|
|
this.expression = value;
|
|
|
|
|
// 更新当前步骤的任务值
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.taskValue = value;
|
2025-05-30 19:59:25 +08:00
|
|
|
|
let params = {
|
|
|
|
|
flowId: this.sceneID,
|
|
|
|
|
id: this.drawShowList[this.drawSelectIndex].options.stepID,
|
|
|
|
|
taskCorn: value,
|
|
|
|
|
};
|
|
|
|
|
// 保存场景步骤数据
|
|
|
|
|
this.SaveSceneStepData(params, "expression");
|
|
|
|
|
},
|
|
|
|
|
// ----------------------------------------------其他步骤--相关操作
|
|
|
|
|
/**
|
|
|
|
|
* 处理 其他步骤的tab点击事件
|
|
|
|
|
* @param {any} value 标签页值
|
|
|
|
|
*/
|
|
|
|
|
handleOtherTabClick(value) {},
|
|
|
|
|
/**
|
|
|
|
|
* 应用搜索
|
|
|
|
|
*/
|
|
|
|
|
searchApp() {
|
|
|
|
|
// 显示搜索遮罩
|
|
|
|
|
this.drawMask = true;
|
|
|
|
|
// 5 秒后隐藏搜索遮罩
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
this.drawMask = false;
|
|
|
|
|
}, 5000);
|
|
|
|
|
// 获取应用列表
|
|
|
|
|
this.getAppList();
|
2025-05-30 10:04:55 +08:00
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* 获取应用列表
|
|
|
|
|
*/
|
|
|
|
|
async getAppList() {
|
|
|
|
|
// 获取应用列表的参数
|
|
|
|
|
let params = {
|
2025-05-30 19:59:25 +08:00
|
|
|
|
name: this.appCodeOrName,
|
2025-05-30 10:04:55 +08:00
|
|
|
|
};
|
|
|
|
|
// 调用获取应用列表的 API
|
|
|
|
|
let res = await authApi(
|
|
|
|
|
"sysApplicationService",
|
|
|
|
|
"",
|
|
|
|
|
"queryEntity",
|
|
|
|
|
"",
|
|
|
|
|
params
|
|
|
|
|
);
|
|
|
|
|
// 隐藏搜索遮罩
|
|
|
|
|
this.drawMask = false;
|
|
|
|
|
if (res.status == "200") {
|
|
|
|
|
// 更新应用列表
|
|
|
|
|
this.appList = res.attribute;
|
|
|
|
|
}
|
|
|
|
|
},
|
2025-05-30 19:59:25 +08:00
|
|
|
|
/**
|
|
|
|
|
* 步骤描述变化时保存数据
|
|
|
|
|
*/
|
|
|
|
|
changeDescription() {
|
|
|
|
|
// 更新当前选择的应用步骤描述
|
|
|
|
|
this.CurrentAppRow.description = this.description;
|
|
|
|
|
// 更新当前步骤的步骤描述
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.description =
|
|
|
|
|
this.description;
|
|
|
|
|
let params = {
|
|
|
|
|
flowId: this.sceneID,
|
|
|
|
|
id: this.drawShowList[this.drawSelectIndex].options.stepID,
|
|
|
|
|
description: this.description,
|
|
|
|
|
};
|
|
|
|
|
// 保存场景步骤数据
|
|
|
|
|
this.SaveSceneStepData(params);
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* 选择应用时触发的方法
|
|
|
|
|
* @param {Object} row 应用数据
|
|
|
|
|
* @param {number} index 应用索引
|
|
|
|
|
*/
|
|
|
|
|
async hangleAppItem(row, index) {
|
|
|
|
|
if (this.appActivIndex !== row.appId) {
|
|
|
|
|
// 重置当前选择的应用插件名称
|
|
|
|
|
this.CurrentAppRow.plugName = "";
|
|
|
|
|
// 重置当前选择的应用账号名称
|
|
|
|
|
this.CurrentAppRow.step_acc_name = "";
|
|
|
|
|
// 重置当前步骤的资源类型
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.actionType = "";
|
|
|
|
|
// 重置当前步骤的 API ID
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.apiId = "";
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.apiName = "";
|
|
|
|
|
// 重置当前步骤的插件 ID
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.plugId = "";
|
|
|
|
|
// 重置当前步骤的插件名称
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.plugName = "";
|
|
|
|
|
// 重置当前步骤的账号 ID
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.step_acc_id = "";
|
|
|
|
|
// 重置当前步骤的账号名称
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.step_acc_name = "";
|
|
|
|
|
this.apiIdActiv = "";
|
|
|
|
|
this.apiList = [];
|
|
|
|
|
this.pluginActiv = "";
|
|
|
|
|
this.pluginList = [];
|
|
|
|
|
this.userActivId = "";
|
|
|
|
|
this.userList = [];
|
|
|
|
|
// 更新当前选中的应用 ID
|
|
|
|
|
this.appActivIndex = row.id;
|
|
|
|
|
// 更新当前选择的应用 ID
|
|
|
|
|
this.CurrentAppRow.appId = row.id;
|
|
|
|
|
// 更新当前选择的应用名称
|
|
|
|
|
this.CurrentAppRow.appName = row.name;
|
|
|
|
|
// 更新当前步骤的应用 ID
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.appId = row.id;
|
|
|
|
|
// 更新当前步骤的应用名称
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.appName = row.name;
|
|
|
|
|
|
|
|
|
|
// 切换到选择操作标签页
|
|
|
|
|
this.activeOtherTabName = "选择操作";
|
|
|
|
|
// 切换到 API 接口标签页
|
|
|
|
|
this.activeApiPliginTabName = "API接口";
|
|
|
|
|
// 清空 API 或插件搜索关键字
|
|
|
|
|
this.operateCodeOrName = "";
|
|
|
|
|
// 更新当前步骤的资源类型
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.actionType = "API接口";
|
|
|
|
|
// 实时保存配置
|
|
|
|
|
let params = {
|
|
|
|
|
flowId: this.sceneID,
|
|
|
|
|
id: this.drawShowList[this.drawSelectIndex].options.stepID,
|
|
|
|
|
appId: row.id,
|
|
|
|
|
appName: row.name,
|
|
|
|
|
actionType: "",
|
|
|
|
|
plugId: "",
|
|
|
|
|
plugName: "",
|
|
|
|
|
apiId: "",
|
|
|
|
|
apiName: "",
|
|
|
|
|
step_acc_name: "",
|
|
|
|
|
step_acc_id: "",
|
|
|
|
|
};
|
|
|
|
|
// 保存场景步骤数据
|
|
|
|
|
await this.SaveSceneStepData(params);
|
|
|
|
|
// 获取 API 列表
|
|
|
|
|
await this.GetApiList(row.id);
|
|
|
|
|
// 获取插件列表
|
|
|
|
|
// await this.getPluginList(row.id);
|
|
|
|
|
// // 获取用户列表
|
|
|
|
|
await this.GetAccountListAPI(row.id);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* API 或者插件的搜索
|
|
|
|
|
*/
|
|
|
|
|
searchApiPlugin() {
|
|
|
|
|
// 检查是否选择了应用
|
|
|
|
|
if (!this.drawShowList[this.drawSelectIndex].options.appId) {
|
|
|
|
|
this.$vmNews("请先选择应用");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (this.activeApiPliginTabName === "API接口") {
|
|
|
|
|
// 显示搜索遮罩
|
|
|
|
|
this.drawMask = true;
|
|
|
|
|
// 5 秒后隐藏搜索遮罩
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
this.drawMask = false;
|
|
|
|
|
}, 5000);
|
|
|
|
|
// 获取 API 列表
|
|
|
|
|
this.GetApiList(this.drawShowList[this.drawSelectIndex].options.appId);
|
|
|
|
|
} else if (this.activeApiPliginTabName === "插件") {
|
|
|
|
|
// 显示搜索遮罩
|
|
|
|
|
this.drawMask = true;
|
|
|
|
|
// 5 秒后隐藏搜索遮罩
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
this.drawMask = false;
|
|
|
|
|
}, 5000);
|
|
|
|
|
// 获取插件列表
|
|
|
|
|
this.getPluginList(
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.appId
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* 切换 API 插件标签页
|
|
|
|
|
* @param {string} e 标签页值
|
|
|
|
|
*/
|
|
|
|
|
ApiPliginTabChangeEvent(e) {
|
|
|
|
|
// 更新当前操作是 API 还是插件
|
|
|
|
|
this.activeApiPliginTabName = e;
|
|
|
|
|
},
|
|
|
|
|
// 选择API
|
|
|
|
|
hangleApiClickEvent(item) {
|
|
|
|
|
this.pluginActiv = "";
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.plugId = "";
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.plugName = "";
|
|
|
|
|
// 更新选择的 API ID
|
|
|
|
|
this.apiIdActiv = item.id;
|
|
|
|
|
// 更新当前步骤的 API ID
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.apiId = item.id;
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.apiName = item.apiName;
|
|
|
|
|
// 更新当前步骤的资源类型
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.actionType =
|
|
|
|
|
this.activeApiPliginTabName;
|
|
|
|
|
// 切换到选择账号标签页
|
|
|
|
|
this.activeOtherTabName = "选择账号";
|
|
|
|
|
let params = {
|
|
|
|
|
flowId: this.sceneID,
|
|
|
|
|
id: this.drawShowList[this.drawSelectIndex].options.stepID,
|
|
|
|
|
actionType: this.activeApiPliginTabName,
|
|
|
|
|
plugId: "",
|
|
|
|
|
plugName: "",
|
|
|
|
|
apiId: item.id,
|
|
|
|
|
apiName: item.apiName,
|
|
|
|
|
};
|
|
|
|
|
// 保存场景步骤数据
|
|
|
|
|
this.SaveSceneStepData(params);
|
|
|
|
|
},
|
|
|
|
|
// 选择插件
|
|
|
|
|
hanglePluginClickEvent(item) {
|
|
|
|
|
// 更新选择的 API ID
|
|
|
|
|
this.apiIdActiv = "";
|
|
|
|
|
// 更新当前步骤的 API ID
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.apiId = "";
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.apiName = "";
|
|
|
|
|
this.pluginActiv = item.id;
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.plugId = item.id;
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.plugName = item.plugName;
|
|
|
|
|
// 更新当前步骤的资源类型
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.actionType =
|
|
|
|
|
this.activeApiPliginTabName;
|
|
|
|
|
// 切换到选择账号标签页
|
|
|
|
|
this.activeOtherTabName = "选择账号";
|
|
|
|
|
let params = {
|
|
|
|
|
flowId: this.sceneID,
|
|
|
|
|
id: this.drawShowList[this.drawSelectIndex].options.stepID,
|
|
|
|
|
actionType: this.activeApiPliginTabName,
|
|
|
|
|
plugId: item.id,
|
|
|
|
|
plugName: item.plugName,
|
|
|
|
|
apiId: "",
|
|
|
|
|
apiName: "",
|
|
|
|
|
};
|
|
|
|
|
// 保存场景步骤数据
|
|
|
|
|
this.SaveSceneStepData(params);
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* 选择账号 --》 添加账号
|
|
|
|
|
*/
|
|
|
|
|
addAccount() {
|
|
|
|
|
if (!this.appActivIndex) {
|
|
|
|
|
this.$vmNews("请选择应用");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
// 打开添加账号弹窗
|
|
|
|
|
this.$refs.addAccount.openDialog(this.appActivIndex);
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* 重新加载用户列表
|
|
|
|
|
*/
|
|
|
|
|
addAccountConfirmClick() {
|
|
|
|
|
// 获取用户列表
|
|
|
|
|
this.GetAccountListAPI(this.appActivIndex);
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* 当前选中的用户
|
|
|
|
|
* @param {Object} item 用户数据
|
|
|
|
|
*/
|
|
|
|
|
handleUserClickEvent(item) {
|
|
|
|
|
// 更新选择的用户 ID
|
|
|
|
|
this.userActivId = item.id;
|
|
|
|
|
// 更新当前选择的应用账号名称
|
|
|
|
|
this.CurrentAppRow.step_acc_name = item.name;
|
|
|
|
|
// 更新当前步骤的用户 ID
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.step_acc_id = item.id;
|
|
|
|
|
// 更新当前步骤的用户账号名称
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].options.step_acc_name = item.name;
|
|
|
|
|
let params = {
|
|
|
|
|
flowId: this.sceneID,
|
|
|
|
|
id: this.drawShowList[this.drawSelectIndex].options.stepID,
|
|
|
|
|
step_acc_name: item.name,
|
|
|
|
|
step_acc_id: item.id,
|
|
|
|
|
};
|
|
|
|
|
// 保存场景步骤数据
|
|
|
|
|
this.SaveSceneStepData(params);
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* 获取插件列表
|
|
|
|
|
* @param {string} appId 应用 ID
|
|
|
|
|
*/
|
|
|
|
|
async getPluginList(appId) {
|
|
|
|
|
let params = {
|
|
|
|
|
appId: appId,
|
|
|
|
|
name: this.operateCodeOrName,
|
|
|
|
|
};
|
|
|
|
|
let res = await authApi(
|
|
|
|
|
"sysApplicationApiService",
|
|
|
|
|
"",
|
|
|
|
|
"queryEntity",
|
|
|
|
|
"",
|
|
|
|
|
params
|
|
|
|
|
);
|
|
|
|
|
this.drawMask = false;
|
|
|
|
|
if (res.status == "200") {
|
|
|
|
|
this.pluginList = res.attribute;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* 获取 api 列表
|
|
|
|
|
* @param {string} appId 应用 ID
|
|
|
|
|
*/
|
|
|
|
|
async GetApiList(appId) {
|
|
|
|
|
let params = {
|
|
|
|
|
appId: appId,
|
|
|
|
|
name: this.operateCodeOrName,
|
|
|
|
|
};
|
|
|
|
|
let res = await authApi(
|
|
|
|
|
"sysApplicationApiService",
|
|
|
|
|
"",
|
|
|
|
|
"queryEntity",
|
|
|
|
|
"",
|
|
|
|
|
params
|
|
|
|
|
);
|
|
|
|
|
this.drawMask = false;
|
|
|
|
|
if (res.status == "200") {
|
|
|
|
|
this.apiList = res.attribute;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* 获取用户列表
|
|
|
|
|
* @param {string} appId 应用 ID
|
|
|
|
|
*/
|
|
|
|
|
async GetAccountListAPI(appId) {
|
|
|
|
|
let params = {
|
|
|
|
|
appId: appId,
|
|
|
|
|
};
|
|
|
|
|
let res = await authApi(
|
|
|
|
|
"sysApplicationAccountService",
|
|
|
|
|
"",
|
|
|
|
|
"queryAccountList",
|
|
|
|
|
"",
|
|
|
|
|
params
|
|
|
|
|
);
|
|
|
|
|
this.drawMask = false;
|
|
|
|
|
if (res.status == "200") {
|
|
|
|
|
this.userList = res.attribute;
|
|
|
|
|
}
|
|
|
|
|
},
|
2025-05-30 10:04:55 +08:00
|
|
|
|
/**
|
|
|
|
|
* 根据任务类型获取时间划分的标题
|
|
|
|
|
* @param {number} taskType 任务类型
|
|
|
|
|
* @returns {string} 时间划分的标题
|
|
|
|
|
*/
|
|
|
|
|
getTimeDivide(taskType) {
|
|
|
|
|
if (taskType === 1) {
|
|
|
|
|
return "秒级";
|
|
|
|
|
} else if (taskType === 2) {
|
|
|
|
|
return "分钟级";
|
|
|
|
|
} else if (taskType === 3) {
|
|
|
|
|
return "小时级";
|
|
|
|
|
} else if (taskType === 4) {
|
|
|
|
|
return "天级";
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* 编辑场景名称
|
|
|
|
|
*/
|
|
|
|
|
editSceneName() {
|
|
|
|
|
// 编辑场景名称的参数
|
|
|
|
|
let row = {
|
|
|
|
|
flowId: this.sceneID,
|
|
|
|
|
};
|
|
|
|
|
// 在下一个 DOM 更新周期后打开编辑场景名称的弹窗
|
|
|
|
|
this.$nextTick(() => {
|
|
|
|
|
this.$refs.editSence.openDialog(row, "edit");
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
/**
|
|
|
|
|
* 更新场景名称
|
|
|
|
|
* @param {string} sceneID 场景 ID
|
|
|
|
|
* @param {Object} res 响应数据
|
|
|
|
|
*/
|
|
|
|
|
updateTitle(sceneID, res) {
|
|
|
|
|
// 更新场景名称
|
|
|
|
|
this.sceneName = res.sceneName;
|
|
|
|
|
this.title = res.sceneName;
|
|
|
|
|
// 更新触发模式
|
|
|
|
|
this.triggerMode = res.triggerMode;
|
|
|
|
|
if (this.triggerMode === 2) {
|
2025-05-30 19:59:25 +08:00
|
|
|
|
this.drawShowList[this.drawSelectIndex].actionName = "定时触发";
|
2025-05-30 10:04:55 +08:00
|
|
|
|
} else if (this.triggerMode === 1) {
|
2025-05-30 19:59:25 +08:00
|
|
|
|
this.drawShowList[this.drawSelectIndex].actionName = "应用程序触发";
|
2025-05-30 10:04:55 +08:00
|
|
|
|
} else if (this.triggerMode === 4) {
|
2025-05-30 19:59:25 +08:00
|
|
|
|
this.drawShowList[this.drawSelectIndex].actionName = "Webhook触发";
|
2025-05-30 10:04:55 +08:00
|
|
|
|
} else if (this.triggerMode === 3) {
|
|
|
|
|
this.drawShowList[this.drawSelectIndex].actionName = "手动触发";
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// 场景步骤---【确定】
|
|
|
|
|
handleConfirmClick() {
|
|
|
|
|
this.examineHandleClose();
|
|
|
|
|
},
|
|
|
|
|
// 关闭场景步骤弹窗
|
|
|
|
|
examineHandleClose() {
|
|
|
|
|
// 触发关闭事件
|
|
|
|
|
this.$emit("examineHandleClose");
|
|
|
|
|
this.examineOperateDialog = false;
|
|
|
|
|
this.sceneName = "";
|
2025-05-30 19:59:25 +08:00
|
|
|
|
// 清空画布列表
|
|
|
|
|
this.drawShowList = [];
|
|
|
|
|
// 重置当前选中的步骤索引
|
|
|
|
|
this.drawSelectIndex = "";
|
|
|
|
|
// 重置当前选择操作的类型
|
|
|
|
|
this.activTimeIndex = "";
|
|
|
|
|
// 重置 cron 表达式
|
|
|
|
|
this.expression = "";
|
|
|
|
|
// 清空应用搜索关键字
|
|
|
|
|
this.appCodeOrName = "";
|
|
|
|
|
// 重置当前选中的应用 ID
|
|
|
|
|
this.appActivIndex = "";
|
|
|
|
|
// 清空 API 或插件搜索关键字
|
|
|
|
|
this.operateCodeOrName = "";
|
|
|
|
|
// 重置当前操作是 API 还是插件
|
|
|
|
|
this.activeApiPliginTabName = "API接口";
|
|
|
|
|
// 重置选择的 API ID
|
|
|
|
|
this.apiIdActiv = "";
|
|
|
|
|
// 清空 API 列表
|
|
|
|
|
this.apiList = [];
|
|
|
|
|
// 重置选择的插件 ID
|
|
|
|
|
this.pluginActiv = "";
|
|
|
|
|
// 清空插件列表
|
|
|
|
|
this.pluginList = [];
|
|
|
|
|
// 重置选择的用户 ID
|
|
|
|
|
this.userActivId = "";
|
|
|
|
|
// 清空用户列表
|
|
|
|
|
this.userList = [];
|
2025-05-30 10:04:55 +08:00
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style scoped lang="scss">
|
2025-05-30 19:59:25 +08:00
|
|
|
|
::v-deep .el-radio-group {
|
|
|
|
|
background: #fff;
|
|
|
|
|
padding: 2px;
|
|
|
|
|
margin: 0 10px 0 10px;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
}
|
|
|
|
|
::v-deep .el-radio-button__inner {
|
|
|
|
|
border: 0 !important;
|
|
|
|
|
background-color: #fff;
|
|
|
|
|
color: #999999;
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
padding: 7px 15px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
::v-deep .el-radio-button__orig-radio:checked + .el-radio-button__inner {
|
|
|
|
|
background-color: #f5f5f5;
|
|
|
|
|
color: #333333;
|
|
|
|
|
box-shadow: none;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
}
|
2025-05-30 10:04:55 +08:00
|
|
|
|
.drawContent {
|
|
|
|
|
width: 100%;
|
2025-05-30 19:59:25 +08:00
|
|
|
|
height: calc(100vh - 100px);
|
2025-05-30 10:04:55 +08:00
|
|
|
|
display: flex;
|
|
|
|
|
|
|
|
|
|
.drawCanvas {
|
|
|
|
|
width: 40%;
|
|
|
|
|
height: 100%;
|
|
|
|
|
background: url("../images/background.png") no-repeat;
|
|
|
|
|
display: -webkit-box;
|
|
|
|
|
display: -ms-flexbox;
|
|
|
|
|
display: flex;
|
|
|
|
|
-ms-flex-direction: column;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
-ms-flex-pack: center;
|
|
|
|
|
-webkit-box-align: center;
|
|
|
|
|
-ms-flex-align: center;
|
|
|
|
|
align-items: center;
|
|
|
|
|
overflow-y: auto;
|
|
|
|
|
padding: 50px 0;
|
|
|
|
|
|
|
|
|
|
.drawItem {
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
|
|
.title {
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
color: #333333;
|
|
|
|
|
margin-bottom: 5px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.drawBox {
|
|
|
|
|
width: 300px;
|
|
|
|
|
height: 58px;
|
|
|
|
|
background: #ffffff;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
border: 1px solid #dbdde1;
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
color: #333333;
|
|
|
|
|
display: flex;
|
|
|
|
|
// justify-content: center;
|
|
|
|
|
align-items: center;
|
|
|
|
|
position: relative;
|
|
|
|
|
|
|
|
|
|
.img {
|
|
|
|
|
margin: 0 10px;
|
|
|
|
|
width: 30px;
|
|
|
|
|
height: 30px;
|
|
|
|
|
border-radius: 50%;
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
border: 1px solid #f18709;
|
|
|
|
|
|
|
|
|
|
img {
|
|
|
|
|
width: 60%;
|
|
|
|
|
height: 60%;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.iconStyle {
|
|
|
|
|
margin: 0 10px;
|
|
|
|
|
width: 30px;
|
|
|
|
|
height: 30px;
|
|
|
|
|
border-radius: 50%;
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
|
|
|
|
img {
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 100%;
|
|
|
|
|
border-radius: 50%;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.actionName {
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
color: #333333;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.content {
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
color: #333333;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.drawBox:hover {
|
|
|
|
|
background: #f2fcff;
|
|
|
|
|
border: 1px solid #1478f5;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.del {
|
|
|
|
|
position: absolute;
|
|
|
|
|
right: -5px;
|
|
|
|
|
top: -3px;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
width: 16px;
|
|
|
|
|
height: 16px;
|
|
|
|
|
background: #fff;
|
|
|
|
|
|
|
|
|
|
img {
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 100%;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.active {
|
|
|
|
|
background: #f2fcff;
|
|
|
|
|
border: 1px solid #1478f5;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.line-wrapper {
|
|
|
|
|
width: 100%;
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
position: relative;
|
|
|
|
|
|
|
|
|
|
img {
|
|
|
|
|
position: absolute;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
width: 20px;
|
|
|
|
|
height: 20px;
|
|
|
|
|
top: 33px;
|
|
|
|
|
left: 140px;
|
|
|
|
|
display: none;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.line-wrapper:hover img {
|
|
|
|
|
display: block;
|
|
|
|
|
}
|
|
|
|
|
.line {
|
|
|
|
|
width: 1px;
|
|
|
|
|
height: 60px;
|
|
|
|
|
border: 1px solid #dbdde1;
|
|
|
|
|
margin: 10px 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.drawAction {
|
|
|
|
|
width: 60%;
|
|
|
|
|
height: 100%;
|
|
|
|
|
background-color: #f5f5f5;
|
|
|
|
|
position: relative;
|
|
|
|
|
|
|
|
|
|
.nextButton {
|
|
|
|
|
position: absolute;
|
|
|
|
|
right: 15px;
|
|
|
|
|
top: 8px;
|
|
|
|
|
color: #1477f3;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
}
|
|
|
|
|
::v-deep .el-tabs__header {
|
|
|
|
|
margin: 0;
|
|
|
|
|
background: #ffffff;
|
|
|
|
|
|
|
|
|
|
.el-tabs__nav {
|
|
|
|
|
margin-left: 10px;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// cron表达式样式
|
|
|
|
|
.crontabBox {
|
|
|
|
|
padding: 15px;
|
|
|
|
|
|
|
|
|
|
.crontabBoxTitle {
|
|
|
|
|
margin-bottom: 15px;
|
|
|
|
|
color: #333333;
|
|
|
|
|
}
|
|
|
|
|
::v-deep .el-tabs--border-card {
|
|
|
|
|
border-radius: 8px;
|
|
|
|
|
box-shadow: unset;
|
|
|
|
|
border: 1px solid #dadce0;
|
|
|
|
|
}
|
|
|
|
|
::v-deep .popup-main {
|
|
|
|
|
border-radius: 8px;
|
|
|
|
|
border: 1px solid #dadce0;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
}
|
|
|
|
|
::v-deep .popup-result {
|
|
|
|
|
border: unset;
|
|
|
|
|
margin: 0 auto;
|
|
|
|
|
padding: 15px 10px 5px 15px;
|
|
|
|
|
|
|
|
|
|
.title {
|
|
|
|
|
width: unset;
|
|
|
|
|
margin-left: unset;
|
|
|
|
|
background: transparent;
|
|
|
|
|
color: #333;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
::v-deep .el-tabs__header {
|
|
|
|
|
border-radius: 8px 8px 0 0;
|
|
|
|
|
margin: 0;
|
|
|
|
|
background: #f5f7fa !important;
|
|
|
|
|
.el-tabs__nav {
|
|
|
|
|
margin-left: 0 !important;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
::v-deep .el-tabs__header .el-tabs__item:first-child {
|
|
|
|
|
border-radius: 8px 0 0 0;
|
|
|
|
|
margin-left: -2px;
|
|
|
|
|
margin-top: 0px;
|
|
|
|
|
}
|
|
|
|
|
::v-deep .pop_btn {
|
|
|
|
|
text-align: center;
|
|
|
|
|
margin-top: 10px;
|
|
|
|
|
margin-bottom: 10px;
|
|
|
|
|
.el-button:last-child {
|
|
|
|
|
display: none;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-05-30 19:59:25 +08:00
|
|
|
|
.drawItemBox {
|
2025-05-30 10:04:55 +08:00
|
|
|
|
display: flex;
|
2025-05-30 19:59:25 +08:00
|
|
|
|
background: #ffffff;
|
|
|
|
|
padding: 10px;
|
2025-05-30 10:04:55 +08:00
|
|
|
|
|
2025-05-30 19:59:25 +08:00
|
|
|
|
.title {
|
2025-05-30 10:04:55 +08:00
|
|
|
|
font-weight: 400;
|
2025-05-30 19:59:25 +08:00
|
|
|
|
font-size: 14px;
|
2025-05-30 10:04:55 +08:00
|
|
|
|
color: #333333;
|
|
|
|
|
}
|
|
|
|
|
|
2025-05-30 19:59:25 +08:00
|
|
|
|
.drawBox {
|
|
|
|
|
background: #ffffff;
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
color: #333333;
|
2025-05-30 10:04:55 +08:00
|
|
|
|
display: flex;
|
2025-05-30 19:59:25 +08:00
|
|
|
|
position: relative;
|
2025-05-30 10:04:55 +08:00
|
|
|
|
align-items: center;
|
|
|
|
|
|
2025-05-30 19:59:25 +08:00
|
|
|
|
.img {
|
|
|
|
|
margin-right: 20px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.actionName {
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
color: #333333;
|
|
|
|
|
margin-bottom: 5px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.content {
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
color: #333333;
|
2025-05-30 10:04:55 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2025-05-30 19:59:25 +08:00
|
|
|
|
|
|
|
|
|
.del {
|
|
|
|
|
position: absolute;
|
|
|
|
|
right: 5px;
|
|
|
|
|
top: 2px;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.active {
|
|
|
|
|
background: #f2fcff;
|
|
|
|
|
border: 1px solid #1478f5;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.line {
|
|
|
|
|
width: 1px;
|
|
|
|
|
height: 60px;
|
|
|
|
|
border: 1px solid #dbdde1;
|
|
|
|
|
margin: 10px 0;
|
|
|
|
|
}
|
2025-05-30 10:04:55 +08:00
|
|
|
|
}
|
2025-05-30 19:59:25 +08:00
|
|
|
|
|
2025-05-30 10:04:55 +08:00
|
|
|
|
// 选择操作
|
|
|
|
|
.timeWrap {
|
|
|
|
|
padding: 15px;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
|
|
|
|
|
.timeItem {
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 58px;
|
|
|
|
|
background: #ffffff;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
border: 1px solid #dbdde1;
|
|
|
|
|
padding: 10px 14px;
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
margin-bottom: 10px;
|
|
|
|
|
display: flex;
|
|
|
|
|
|
|
|
|
|
.imgBox {
|
|
|
|
|
width: 15px;
|
|
|
|
|
height: 20px;
|
|
|
|
|
margin-right: 3px;
|
|
|
|
|
|
|
|
|
|
img {
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 100%;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.title {
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
color: #333333;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.content {
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
color: #333333;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.timeItem:hover {
|
|
|
|
|
background: #f2fcff;
|
|
|
|
|
border: 1px solid #1478f5;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.activTimeItem {
|
|
|
|
|
background: #f2fcff;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
border: 1px solid #1478f6;
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-05-30 19:59:25 +08:00
|
|
|
|
|
|
|
|
|
.app {
|
|
|
|
|
.applist {
|
|
|
|
|
display: flex;
|
|
|
|
|
padding: 10px;
|
|
|
|
|
flex-wrap: wrap;
|
|
|
|
|
|
|
|
|
|
.appItem {
|
|
|
|
|
width: 202px;
|
|
|
|
|
height: 58px;
|
|
|
|
|
background: #ffffff;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
padding: 0 10px;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: row;
|
|
|
|
|
align-items: center;
|
|
|
|
|
margin-right: 10px;
|
|
|
|
|
border: 1px solid #fff;
|
|
|
|
|
margin-bottom: 10px;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
|
|
|
|
|
.imgBox {
|
|
|
|
|
width: 15px;
|
|
|
|
|
height: 22px;
|
|
|
|
|
margin-right: 3px;
|
|
|
|
|
|
|
|
|
|
img {
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 100%;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.appIcon {
|
|
|
|
|
width: 44px;
|
|
|
|
|
height: 44px;
|
|
|
|
|
margin-right: 10px;
|
|
|
|
|
border-radius: 50%;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.name {
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
color: #333333;
|
|
|
|
|
flex: 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.appItem:hover {
|
|
|
|
|
background: #f2fcff;
|
|
|
|
|
border: 1px solid #1478f5;
|
|
|
|
|
}
|
|
|
|
|
.active {
|
|
|
|
|
background: #f2fcff;
|
|
|
|
|
border: 1px solid #1478f5;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.DescribeDataBox {
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
padding: 10px 15px 10px 10px;
|
|
|
|
|
font-size: 15px;
|
|
|
|
|
color: #333;
|
|
|
|
|
|
|
|
|
|
span {
|
|
|
|
|
margin-bottom: 10px;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.search {
|
|
|
|
|
display: flex;
|
|
|
|
|
margin: 10px;
|
|
|
|
|
|
|
|
|
|
.input {
|
|
|
|
|
margin-right: 10px;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.ApiPliginBox {
|
|
|
|
|
height: calc(100vh - 270px);
|
|
|
|
|
overflow: auto;
|
|
|
|
|
padding-right: 5px;
|
|
|
|
|
.appItem {
|
|
|
|
|
height: unset !important;
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
width: 100% !important;
|
|
|
|
|
padding: 10px !important;
|
|
|
|
|
align-items: flex-start !important;
|
|
|
|
|
margin-right: 0 !important;
|
|
|
|
|
color: #333333 !important;
|
|
|
|
|
font-size: 14px !important;
|
|
|
|
|
|
|
|
|
|
.name:first-child {
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
color: #333333;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.userList {
|
|
|
|
|
display: flex;
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
align-items: center;
|
|
|
|
|
padding: 10px 15px 10px 10px;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
|
|
|
|
|
.userItem {
|
|
|
|
|
width: 100%;
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
align-items: center;
|
|
|
|
|
background: #ffffff;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
border: 1px solid #dbdde1;
|
|
|
|
|
margin-bottom: 10px;
|
|
|
|
|
padding: 15px;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
}
|
|
|
|
|
.userAccountIcon {
|
|
|
|
|
width: 15px;
|
|
|
|
|
height: 15px;
|
|
|
|
|
margin-right: 10px;
|
|
|
|
|
img {
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 100%;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.userItem:hover {
|
|
|
|
|
background: #f2fcff;
|
|
|
|
|
border: 1px solid #1478f5;
|
|
|
|
|
}
|
|
|
|
|
.userBtn {
|
|
|
|
|
padding: 15px 10px;
|
|
|
|
|
border: 1px dashed #dbdde1;
|
|
|
|
|
}
|
|
|
|
|
.userBtn:hover {
|
|
|
|
|
background: #f2fcff;
|
|
|
|
|
border: 1px dashed #1478f6;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.userContentBox {
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: calc(100vh - 200px);
|
|
|
|
|
overflow: auto;
|
|
|
|
|
|
|
|
|
|
.active {
|
|
|
|
|
background: #f2fcff;
|
|
|
|
|
border: 1px solid #1478f5;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.redBox {
|
|
|
|
|
background: #fff1eb;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
border: 1px solid #ffb999;
|
|
|
|
|
color: #ff5100;
|
|
|
|
|
font-size: 12px;
|
|
|
|
|
text-align: center;
|
|
|
|
|
padding: 2px 8px;
|
|
|
|
|
margin-left: 5px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.successBox {
|
|
|
|
|
background: #f6ffed;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
border: 1px solid #b7eb8f;
|
|
|
|
|
color: #52c41a;
|
|
|
|
|
font-size: 12px;
|
|
|
|
|
text-align: center;
|
|
|
|
|
padding: 2px 8px;
|
|
|
|
|
margin-left: 5px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.settingBox {
|
|
|
|
|
padding: 10px;
|
|
|
|
|
|
|
|
|
|
.title {
|
|
|
|
|
margin-bottom: 10px;
|
|
|
|
|
color: #333333;
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.settingbtn {
|
|
|
|
|
width: 20px;
|
|
|
|
|
height: 20px;
|
|
|
|
|
font-size: 16px;
|
|
|
|
|
color: #1478f6;
|
|
|
|
|
text-align: center;
|
|
|
|
|
line-height: 20px;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
margin: 0 auto;
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: 90px;
|
|
|
|
|
left: 19px;
|
|
|
|
|
z-index: 999;
|
|
|
|
|
padding: 6px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.settingTabs {
|
|
|
|
|
width: 100%;
|
|
|
|
|
padding: 10px 15px 10px 10px;
|
|
|
|
|
.tabs {
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
height: 32px;
|
|
|
|
|
background: #fff;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
padding: 2px;
|
|
|
|
|
width: fit-content;
|
|
|
|
|
|
|
|
|
|
.tabsItem {
|
|
|
|
|
height: 28px;
|
|
|
|
|
line-height: 28px;
|
|
|
|
|
background: #fff;
|
|
|
|
|
border-radius: 3px;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
color: #999;
|
|
|
|
|
padding: 0 10px;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.active {
|
|
|
|
|
background: #f5f5f5;
|
|
|
|
|
color: #333;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
::v-deep .el-switch {
|
|
|
|
|
height: 23px !important;
|
|
|
|
|
line-height: 23px !important;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.currentDrawBox {
|
|
|
|
|
background: #ffffff;
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
color: #333;
|
|
|
|
|
.img {
|
|
|
|
|
width: 44px;
|
|
|
|
|
height: 44px;
|
|
|
|
|
border-radius: 50%;
|
|
|
|
|
margin-right: 10px;
|
|
|
|
|
|
|
|
|
|
img {
|
|
|
|
|
width: 100%;
|
|
|
|
|
height: 100%;
|
|
|
|
|
border-radius: 50%;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.actionName {
|
|
|
|
|
font-weight: 400;
|
|
|
|
|
color: #333333;
|
|
|
|
|
margin-bottom: 5px;
|
|
|
|
|
}
|
|
|
|
|
.content {
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
color: #333333;
|
|
|
|
|
margin-bottom: 5px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.drawimg {
|
|
|
|
|
margin-right: 10px;
|
|
|
|
|
width: 44px;
|
|
|
|
|
height: 44px;
|
|
|
|
|
border-radius: 50%;
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
border: 1px solid #f18709;
|
|
|
|
|
|
|
|
|
|
img {
|
|
|
|
|
width: 60%;
|
|
|
|
|
height: 60%;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.drawItemBtn {
|
|
|
|
|
background: #ffffff;
|
|
|
|
|
padding: 10px 50px;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
color: #1478f6;
|
|
|
|
|
border: 1px dashed #dbdde1;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
margin-top: 50px;
|
|
|
|
|
}
|
|
|
|
|
.drawItemBtn:hover {
|
|
|
|
|
background: #f2fcff;
|
|
|
|
|
border: 1px dashed #1478f6;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.DescribeContent {
|
|
|
|
|
display: -webkit-box;
|
|
|
|
|
/*作为弹性伸缩盒子模型显示。*/
|
|
|
|
|
-webkit-box-orient: vertical;
|
|
|
|
|
/*作为弹性伸缩盒子模型显示。*/
|
|
|
|
|
-webkit-line-clamp: 1; //*显示的行*/
|
|
|
|
|
overflow: hidden;
|
|
|
|
|
/*溢出隐藏*/
|
|
|
|
|
/* 对于连字情况或者纯字母,可以解决 */
|
|
|
|
|
word-break: break-all;
|
|
|
|
|
// max-width: 100px;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.InterfaceConfiguration {
|
|
|
|
|
background: #fff;
|
|
|
|
|
margin: 10px;
|
|
|
|
|
padding: 10px;
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
|
|
|
|
|
.InterCigTitle {
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
margin-bottom: 10px;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
::v-deep .operatingClass {
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
.el-radio-group {
|
|
|
|
|
background: unset !important;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
::v-deep .CodeMirror {
|
|
|
|
|
height: 100% !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.toolbar {
|
|
|
|
|
background: #fff;
|
|
|
|
|
padding: 8px;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
border-radius: 4px 4px 0 0;
|
|
|
|
|
display: flex;
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
|
|
|
|
select {
|
|
|
|
|
width: 100px;
|
|
|
|
|
margin-left: 10px;
|
|
|
|
|
padding: 2px;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.fullScreen {
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
font-size: 14px;
|
|
|
|
|
margin-left: 10px;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
|
|
|
|
|
> img {
|
|
|
|
|
width: 15px;
|
|
|
|
|
height: 15px;
|
|
|
|
|
margin-right: 5px;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.acionImg {
|
|
|
|
|
width: 15px;
|
|
|
|
|
height: 15px;
|
|
|
|
|
margin-left: 5px;
|
|
|
|
|
}
|
|
|
|
|
</style>
|