Merge remote-tracking branch 'origin/huyt' into huyt

This commit is contained in:
hyt 2025-07-18 14:45:39 +08:00
commit 191397e5cc
52 changed files with 8311 additions and 11 deletions

View File

@ -9,7 +9,7 @@
<el-button type="primary" @click="handleReset" v-if="resetButton"> </el-button>
<el-button @click="handleClose"> </el-button>
<!-- <el-button v-if="orderCenter" @click="handleCancel">取消下单</el-button> -->
<el-button type="primary" @click="handleConfirmClick"> </el-button>
<el-button type="primary" v-if="submitButton" @click="handleConfirmClick"> </el-button>
</span>
</el-dialog>
</div>
@ -87,6 +87,11 @@ export default {
type: String,
default: '30%',
},
//
submitButton: {
type: Boolean,
default: true,
},
},
data() {
return {

View File

@ -15,7 +15,7 @@
>
<div class="rightDialog">
<div flex="cross:center main:justify" class="rightConcat">
<span style="font-size: 16px">{{ title }}</span>
<span style="font-size: 16px">{{ title }} <slot name="operateTitle"></slot></span>
<span v-if="footerShow" flex="main:right">
<el-button @click="handleClose" v-if="closeShow"> </el-button>
<slot name="addButton"></slot>

View File

@ -211,9 +211,9 @@ export default {
value: false,
});
}
this.$router.push({
path: url,
});
// this.$router.push({
// path: url,
// });
} else {
this.$store.dispatch("settings/changeSetting", {
key: "showTagsView",
@ -221,9 +221,9 @@ export default {
});
setMenuNode("/index");
this.$store.commit("SET_CURRENT_MENU_NODE", "/index");
this.$router.push({
path: "/index",
});
// this.$router.push({
// path: "/index",
// });
}
},
mounted() {

View File

@ -3,7 +3,7 @@ import store from './store'
import { Message } from 'element-ui'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { getToken, getCompanyId } from '@/utils/auth'
import { getToken, getCompanyId, getMenuNode,setMenuNode } from '@/utils/auth'
import { isRelogin, getButtonLish } from '@/utils/request'
import { authApi } from '@/api/apis/auth'
import { getInfo } from '@/utils/auth'
@ -11,7 +11,8 @@ import { getInfo } from '@/utils/auth'
NProgress.configure({
showSpinner: false
})
//判断是否第一次进入页面
let isFirst = true;
const whiteList = [
'/login',
'/test',
@ -27,6 +28,32 @@ const whiteList = [
]
router.beforeEach((to, from, next) => {
let reloaded = sessionStorage.getItem('reloaded')
//网站第一次进来逻辑 当from为空
if (from.path === '/' && !reloaded && isFirst && !whiteList.includes(to.path)) {
isFirst = false
setMenuNode("/index");
store.commit("SET_CURRENT_MENU_NODE", "/index");
next({
path: '/index',
})
return
}
//网站刷新后逻辑
if (reloaded === 'true' && !whiteList.includes(to.path)) {
sessionStorage.setItem('reloaded', 'false')
let url = getMenuNode();
if (url) {
next({
path: url,
})
} else {
next({
path: '/index',
})
}
return
}
NProgress.start()
if (getToken()) {
to.meta.title && store.dispatch('settings/setTitle', to.meta.title)

View File

@ -59,6 +59,14 @@ const permission = {
hidden: true
}
},
{
path: 'accountAdmin',
name: 'accountAdmin',
component: () => import('@/views/applicationList/accountList/accountAdmin'),
meta: {
hidden: true
}
},
{
path: 'inserterAdmin',
name: 'inserterAdmin',

View File

@ -8,6 +8,7 @@ import {
import store from '@/store'
import {
getToken,
setMenuNode,
setToken,
removeCompanyId,
removeToken,
@ -147,6 +148,10 @@ service.interceptors.response.use(
type: 'error'
})
.then(() => {
store.commit("REMOVE_ROUTER");
store.dispatch("tagsView/delAllViews");
setMenuNode("/index");
store.commit("SET_CURRENT_MENU_NODE", "/index");
store.dispatch('LogOut').then(() => {
route.replace({
path: '/login'
@ -298,7 +303,7 @@ export function download(url, params, filename, config) {
responseType: 'blob',
...config
})
.then(async(data) => {
.then(async (data) => {
const isLogin = await blobValidate(data)
if (isLogin) {
const blob = new Blob([data])

View File

@ -769,3 +769,18 @@ export function delTreeChildren(data){
delChilren(data)
return data
}
// 动态宽 boxWidth 最大的div盒子大小,minWidth最小宽度,marginSize间距
export function dynamicWidth(boxWidth, minWidth, marginSize = 0) {
let num = Math.floor(boxWidth / (minWidth + marginSize))
return boxWidth / num - marginSize
}
// 动态高度
export function dynamicHeight(boxWidth, minWidth, marginSize = 0, boxHeight, listHeight, heightMargin = 0) {
let num = Math.floor(boxWidth / (minWidth + marginSize))
// console.log(,'几行')
return Math.ceil(boxHeight / (listHeight + heightMargin)) * num
// return boxWidth / num - marginSize
}

View File

@ -0,0 +1,132 @@
<template>
<div style=" margin-right: 10px;">
<div
:class="{
'tree-node': true,
expandable: isObject,
leaf: !isObject,
selected: isSelected,
}"
@click="isObject ? toggleExpand() : selectNode()"
>
<div v-if="isObject" class="tree-expand-icon" :class="{ expanded }">
<i class="el-icon-caret-right"></i>
</div>
<div v-else class="tree-expand-icon">
<i class="el-icon-caret-bottom" style="font-size: 6px; color: #94a3b8"></i>
</div>
<span>{{ nodeKey }}</span>
<el-tag v-if="!isObject" size="small" style="margin-left: 8px">
{{ nodeValue }}
</el-tag>
</div>
<div v-if="isObject && expanded" style="margin-left: 20px">
<tree-node
v-for="(value, key) in nodeValue"
:key="key"
:node-key="key"
:node-value="value"
:path="path + '.' + key"
:selected-node="selectedNode"
@node-selected="handleNodeSelected"
/>
</div>
</div>
</template>
<script>
export default {
name: "TreeNode",
props: {
nodeKey: [String,Number],
nodeValue: [Object, String, Number, Boolean, Array, null],
path: String,
selectedNode: String,
},
data() {
return {
expanded: this.path && !this.path.includes("."),
};
},
computed: {
isObject() {
return typeof this.nodeValue === "object" && this.nodeValue !== null;
},
isSelected() {
return this.selectedNode === this.path;
},
},
methods: {
toggleExpand() {
if (this.isObject) {
this.expanded = !this.expanded;
}
},
selectNode() {
if (!this.isObject) {
this.$emit("node-selected", this.path);
}
},
handleNodeSelected(path) {
this.$emit("node-selected", path);
},
},
};
</script>
<style scoped>
/* 原样式类名保持不变,这里你可以加你自己的样式,或者留空 */
.tree-container {
padding: 16px;
max-height: 300px;
overflow-y: auto;
}
.tree-node {
display: flex;
align-items: center;
padding: 8px 12px;
margin: 2px 0;
border-radius: 4px;
cursor: pointer;
transition: all 0.2s ease;
user-select: none;
position: relative;
}
.tree-node:hover {
background: #f0f9ff;
color: #0ea5e9;
}
.tree-node.selected {
background: #dbeafe;
color: #0284c7;
border: 1px solid #93c5fd;
}
.tree-node.expandable {
font-weight: 500;
}
.tree-node.leaf {
margin-left: 20px;
font-size: 14px;
color: #6b7280;
}
.tree-expand-icon {
width: 16px;
height: 16px;
margin-right: 8px;
display: flex;
align-items: center;
justify-content: center;
transition: transform 0.2s ease;
}
.tree-expand-icon.expanded {
transform: rotate(90deg);
}
</style>

View File

@ -0,0 +1,316 @@
<template>
<base-right-dialog
@handleClose="examineHandleClose"
@handleConfirmClick="handleConfirmClick"
:dialogVisible="dialogVisible"
size="500px"
:appendBody="true"
:loading="true"
:footerShow="true"
:submitShow="submitShow"
:submitTitle="'保存'"
title="新增账号"
>
<template #addButton>
<el-button type="primary" @click="VerifyAccount">验证账号</el-button>
</template>
<div class="rightDialogClass_main" style="background: #fff; padding: 10px">
<base-form
style="padding-top: 0 !important"
spanWidth="80px"
ref="customForm"
:formRow="accountFormRow"
:isFunBtn="false"
:rules="accountRules"
alignAt="block"
:span="24"
>
</base-form>
<div class="custom-error-box" v-if="!submitShow && message">
<el-alert
title="验证失败"
type="error"
show-icon
:closable="false"
:description="message"
>
</el-alert>
</div>
<div class="custom-error-box" v-if="submitShow && message">
<el-alert
title="验证成功"
type="success"
show-icon
:closable="false"
:description="message"
>
</el-alert>
</div>
</div>
</base-right-dialog>
</template>
<script>
import { authApi } from "@/api/apis/auth";
import baseRightDialog from "@/components/base/baseRightDialog/index.vue";
import baseForm from "@/components/base/baseNewForm";
export default {
components: {
baseRightDialog,
baseForm,
},
data() {
return {
dialogVisible: false,
accountFormRow: [
{
elCol: [
{
label: "账号名称",
prop: "name",
tag: "elInput",
span: 24,
},
],
},
{
elCol: [
{
label: "登录账号",
prop: "userName",
tag: "elInput",
span: 24,
},
],
},
{
elCol: [
{
label: "登录密码",
prop: "password",
tag: "elInput",
span: 24,
},
],
},
{
elCol: [
{
label: "数据库类型",
prop: "dbType",
tag: "elSelect",
options: [],
optionValue: "columnContent",
optionLabel: "columnValue",
span: 24,
},
],
},
{
elCol: [
{
label: "数据库名称",
prop: "dbName",
tag: "elInput",
span: 24,
},
],
},
{
elCol: [
{
label: "ip地址",
prop: "ipAddress",
tag: "elInput",
span: 24,
},
],
},
{
elCol: [
{
label: "端口",
prop: "port",
tag: "elInput",
span: 24,
},
],
},
],
accountRules: {
name: [
{
required: true,
message: "请输入",
trigger: "change, blur",
},
],
userName: [
{
required: true,
message: "请输入",
trigger: "change, blur",
},
],
password: [
{
required: true,
message: "请输入",
trigger: "change, blur",
},
],
dbType: [
{
required: true,
message: "请选择",
trigger: "change, blur",
},
],
dbName: [
{
required: true,
message: "请输入",
trigger: "change, blur",
},
],
ipAddress: [
{
required: true,
message: "请输入",
trigger: "change, blur",
},
],
port: [
{
required: true,
message: "请输入",
trigger: "change, blur",
},
],
},
appID: "",
sceneID: "",
stepID: "",
accountType: "",
submitShow: false, //
message: "",
};
},
methods: {
openDialog(appID, sceneID, stepID) {
this.submitShow = false;
this.message = "";
this.queryDictionaryList();
this.appID = appID;
this.sceneID = sceneID;
this.stepID = stepID;
this.dialogVisible = true;
this.$nextTick(() => {
this.$refs.customForm?.resetFields("ruleForm");
});
},
async queryDictionaryList() {
let params = {
tabName: "sys_flow_step_account",
columnName: "db_type",
};
let res = await authApi(
"sysdictionaryshopnewService",
"",
"queryDictionaryList",
"",
params
);
if (res.status == 200) {
this.accountFormRow[3].elCol[0].options = res.attribute;
}
},
VerifyAccount() {
this.$refs.customForm.$refs["ruleForm"].validate((valid) => {
if (valid) {
let params = {
...this.$refs.customForm.ruleForm,
};
this.verifyDataBase(params);
} else {
this.$message({ message: "请选择必填项", type: "warning" });
return;
}
});
},
async verifyDataBase(params) {
this.openLoading("验证");
let res = await authApi(
"sysFlowStepAccountService",
"",
"verifyDataBase",
"",
params
);
if (res.status == "200") {
this.message = res.attribute.msg || "";
if (res.attribute.flag == true) {
this.submitShow = true;
} else {
this.submitShow = false;
}
}
},
handleConfirmClick() {
this.$refs.customForm.$refs["ruleForm"].validate((valid) => {
if (valid) {
let params = {
...this.$refs.customForm.ruleForm,
appId: this.appID,
status: 1,
flowId: this.sceneID,
stepId: this.stepID,
};
this.SaveAccountData(params);
} else {
this.$message({ message: "请选择必填项", type: "warning" });
return;
}
});
},
async SaveAccountData(params) {
let res = await authApi(
"sysFlowStepAccountService",
"",
"saveAccount",
"",
params
);
if (res.status == "200") {
this.$vmNews("新增账号成功", "success");
this.dialogVisible = false;
this.$emit("handleConfirmClick");
}
},
examineHandleClose() {
this.dialogVisible = false;
},
},
};
</script>
<style scoped lang="scss">
::v-deep .el-form-item__content {
width: 100% !important;
}
::v-deep .label {
text-align: left !important;
}
::v-deep .custom-error-box .el-alert {
padding: 15px 16px !important;
}
::v-deep .custom-error-box .el-alert__title {
font-size: 14px !important;
}
::v-deep .custom-error-box .el-alert__description {
font-size: 13px !important;
}
</style>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,284 @@
<template>
<div>
<base-dialog
:closeEscape="true"
:showClose="true"
:closeModal="false"
@handleConfirmClick="handleConfirmClick"
@handleClose="handleClose"
:dialogVisible="dialogVisible"
:title="senceType == 'add' ? '开始创建场景' : '编辑场景'"
width="800px"
top="8vh"
:footerShow="true"
:submitButtonTitle="'开始创建'"
>
<base-form
ref="senceForm"
:formRow="senceFormRow"
:isFunBtn="false"
:rules="senceRules"
:spanNumber="24"
style="padding-bottom: 0"
>
</base-form>
<div class="TriggerModeBox">
<div class="label">触发方式</div>
<div class="stepWrap">
<div
class="step"
:class="{
activeBorder: triggerModeId === ele.value,
}"
@click="choseType(ele, index)"
v-for="(ele, index) in stepList"
:key="ele.value"
>
<div class="img">
<img src="../images/pingtai.svg" v-if="ele.value == 2" />
<img src="../images/naozhong.svg" v-else-if="ele.value == 1" />
<img src="../images/api.svg" v-else-if="ele.value == 4" />
<img src="../images/point.svg" v-else-if="ele.value == 3" />
</div>
{{ ele.label }}
</div>
</div>
</div>
</base-dialog>
<addDialogChunk
ref="addDialogChunk"
@examineHandleClose="examineHandleClose"
></addDialogChunk>
</div>
</template>
<script>
import baseDialog from "@/components/base/BaseNewDialog/index.vue";
import addDialogChunk from "./addDialogChunk";
import { authApi } from "@/api/apis/auth";
import baseForm from "@/components/base/baseNewForm";
export default {
components: {
baseDialog,
baseForm,
addDialogChunk,
},
data() {
return {
dialogVisible: false,
senceFormRow: [
{
elCol: [
{
label: "项目分类",
prop: "classId",
tag: "elSelect",
options: [],
optionValue: "id",
optionLabel: "name",
},
],
},
{
elCol: [
{
label: "场景名称",
prop: "name",
tag: "elInput",
},
],
},
{
elCol: [
{
label: "场景描述",
prop: "description",
tag: "elInput",
type: "textarea",
},
],
},
],
senceRules: {
classId: [
{
required: true,
message: "请选择项目分类",
trigger: "change, blur",
},
],
name: [
{
required: true,
message: "请输入场景名称",
trigger: "change, blur",
},
],
},
stepList: [
{ label: "应用程序触发", value: 1 },
{ label: "定时触发", value: 2 },
{ label: "手动触发", value: 3 },
{ label: "Webhook触发", value: 4 },
],
triggerModeId: "", //
senceType: "",
};
},
methods: {
//
async GetProductionTableData() {
let param = {};
let res = await authApi(
"sysFlowClassService",
"",
"queryListJson",
"",
param
);
if (res.status == "200") {
this.senceFormRow[0].elCol[0].options = res.attribute;
}
},
openDialog(row, type, projectClassificationID) {
this.senceType = type;
this.dialogVisible = true;
this.GetProductionTableData();
this.$nextTick(() => {
this.triggerModeId = "";
this.$refs.senceForm.resetFields("ruleForm");
if (type == "add") {
this.triggerModeId = 1;
if (projectClassificationID && projectClassificationID != "1") {
this.$refs.senceForm.getField("classId", projectClassificationID);
}
}
if (type == "edit") {
this.GetSceneDetail(row.id);
}
});
},
async GetSceneDetail(sceneID) {
let params = {
sceneID: sceneID,
};
let res = await authApi(
"sysFlowClassService",
"",
"queryListJson",
"",
params
);
if (res.status == "200") {
this.$refs.senceForm.choiceAssignment(res.data[0]);
this.triggerModeId = res.data[0].triggerMode;
}
},
choseType(row) {
this.triggerModeId = row.value;
},
handleConfirmClick() {
this.$refs.senceForm.$refs["ruleForm"].validate((valid) => {
if (valid) {
if (!this.triggerModeId) {
this.$vmNews("请选择触发方式");
return;
}
this.SaveSenceData();
} else {
this.$message({ message: "请输入必填项", type: "warning" });
return;
}
});
},
async SaveSenceData() {
let params = {
...this.$refs.senceForm.ruleForm,
triggerModeId: this.triggerModeId,
};
let res = await authApi("sysFlowService", "", "saveFlow", "", params);
if (res.status == "200") {
this.$nextTick(() => {
if (this.senceType == "add") {
this.$vmNews("创建成功!", "success");
this.dialogVisible = false;
this.$refs.addDialogChunk.openDialog(
res.data[0],
params.dataMain.name,
"add",
"",
this.triggerModeId
);
}
});
}
},
handleClose() {
this.$nextTick(() => {
this.triggerModeId = "";
this.$refs.senceForm.resetFields("ruleForm");
this.dialogVisible = false;
});
},
examineHandleClose() {
this.$emit("examineHandleClose");
},
},
};
</script>
<style scoped lang="scss">
.TriggerModeBox {
display: flex;
margin-bottom: 20px;
.label {
width: 85px;
color: #999;
text-align: right;
padding-right: 5px;
}
.stepWrap {
display: flex;
margin-left: 15px;
}
}
.step {
width: 150px;
height: 58px;
background: #ffffff;
border-radius: 4px;
border: 1px solid #dbdde1;
display: flex;
justify-content: center;
align-items: center;
margin-right: 10px;
cursor: pointer;
.img {
margin-right: 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%;
}
}
}
.activeBorder {
background: #f2fcff;
border: 1px solid #1478f5;
}
.step:hover {
background: #f2fcff;
border: 1px solid #1478f5;
}
</style>

View File

@ -0,0 +1,712 @@
<!--
* @name: 页面基本结构组件
* @author: zhangpengcheng
* @date: 2022-08-23
-->
<!-- style="overflow: auto;" -->
<template>
<div
class="container"
v-loading="loading"
:style="
'backgroundColor:' +
bgColor +
';paddingBottom:' +
paddingBottom +
';height:' +
bodyHight
"
>
<!-- 标题 -->
<div class="title" flex="cross:center" v-if="showTitle">
<span v-if="!$route.meta.back">{{ title }}</span>
<span @click="goBack" class="back" v-else
><i class="el-icon-arrow-left"></i>返回</span
>
</div>
<!-- <div class="main":style="'backgroundColor:'+ mainColor " > -->
<div
class="main"
:style="{
height: showTitle ? 'calc(100% - 38px)' : '100%',
backgroundColor: mainColor,
}"
>
<!-- 操作按钮 -->
<div
class="pushButton"
v-if="operateButtonSwitch"
style="display: flex;align-items: center;justify-content: space-between"
>
<!-- 搜索区域-->
<slot name="searchListNew"></slot>
<div class="btnList" style="display: flex;align-items: center">
<div class="operationButton" flex="cross:center" style="display: flex;align-items: center">
<div v-if="defaultButtonSwitch" style="margin-right: 5px">
<el-button
v-for="(item, index) in defaultButtonList"
:type="item.type ? item.type : 'primary'"
size="small"
class="iconfont buttonList"
:icon="item.icon"
@click="funNewClick(item)"
:key="index"
>
{{ item.menuName }}
</el-button>
</div>
<el-button
v-for="(item, index) in buttonList"
:type="item.type ? item.type : 'primary'"
size="small"
class="iconfont buttonList"
:icon="item.icon"
@click="funNewClick(item)"
:key="index"
>
<span v-if="item.menuName">{{ item.menuName }}</span>
</el-button>
</div>
<div v-if="fixedButton" style="margin-left: 5px">
<el-tooltip
class="item"
effect="dark"
:content="item.title"
placement="top"
v-for="(item, index) in fixedButtonList"
:key="index"
trigger="hover"
>
<span>
<el-button
size="small"
:icon="item.icon"
@click.stop="fixedClick(item)"
style="margin: 0"
></el-button>
</span>
</el-tooltip>
</div>
<slot name="btn"></slot>
<slot name="fixedButton"></slot>
</div>
</div>
<!-- 搜索 -->
<div
v-if="querySwitch"
style="padding: 5px; background-color: #fff"
flex="cross:center"
ref="serchRefs"
class="searchForTable"
>
<div
v-for="(row, indexRow) in searchList"
class="searchBox"
:key="indexRow"
style="margin-right: 5px"
>
<el-input
v-model="ruleForm[row.columnNameEN]"
clearable
:type="row.type ? row.type : 'text'"
style="width: 100%"
:placeholder="!row.columnNameCN ? '请输入' : row.columnNameCN"
v-if="row.tag === 'elInput'"
min="1"
@keydown.enter.native="handerInputEnter()"
>
</el-input>
<el-date-picker
v-model="ruleForm[row.columnNameEN]"
v-if="row.tag === 'elDatePicker'"
:class="{ one: row.type ? 'date' : row.type }"
style="width: 100%"
:value-format="!row.valueFormat ? 'yyyy-MM-dd' : row.valueFormat"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
:type="!row.type ? 'date' : row.type"
:placeholder="!row.columnNameCN ? '请选择' : row.columnNameCN"
>
</el-date-picker>
<el-radio-group
v-model="ruleForm[row.columnNameEN]"
v-if="row.tag === 'elRadio'"
>
<el-radio-button
v-for="el in row.options"
:label="el.value"
:key="el.value"
>{{ el.label }}
</el-radio-button>
</el-radio-group>
<div
v-if="row.tag === 'elDialog'"
class="elDialog"
style="cursor: pointer; height: 32px; ine-height: 32px"
>
<p
:style="{
color: ruleForm[row.columnNameEN] ? '#000' : '#c0c4cc',
}"
style="width: 100%; margin: 0"
@click="elDialogClick(row, index, indexRow)"
>
{{
ruleForm[row.columnNameEN]
? ruleForm[row.columnNameEN]
: row.columnNameCN
? row.columnNameCN
: "请点击选择"
}}
</p>
<i
class="el-icon-more"
@click="elDialogClick(row, index, indexRow)"
v-if="!row.disabled && !ruleForm[row.columnNameEN]"
></i>
<i
class="el-icon-circle-close"
v-if="!row.disabled && ruleForm[row.columnNameEN]"
@click="elDialogClear(row)"
style="margin-left: 10px"
></i>
</div>
<el-select
v-model="ruleForm[row.columnNameEN]"
filterable
style="width: 100%"
@change="selectChange($event, indexRow)"
:clearable="row.clearable ? row.clearable : true"
:placeholder="!row.columnNameCN ? '请选择' : row.columnNameCN"
v-if="row.tag === 'elSelect'"
>
<el-option
v-for="(el, elIndex) in row.options"
:key="!row.optionValue ? el['value'] : el[row.optionValue]"
:label="!row.optionLabel ? el['label'] : el[row.optionLabel]"
:value="!row.optionValue ? el['value'] : el[row.optionValue]"
>
</el-option>
</el-select>
</div>
<!-- 搜索按钮 -->
<el-button
type="primary"
size="small"
icon="el-icon-search searchIcon"
@click="search"
title="查询"
>
查询
</el-button>
<el-button
v-if="searchList.length > 1"
type="primary"
size="small"
icon="el-icon-refresh-left searchIcon"
class="searchIcon"
@click="refresh"
title="重置"
>重置
</el-button>
<slot name="searchBtn"></slot>
</div>
<div :style="'height:' + getMainHeight()" class="tableHeight">
<slot name="main" :tableHeight="tableHeight"></slot>
</div>
<!-- 主要内容 -->
<!-- 分页 -->
<base-page
v-if="isPage"
:pageModel.sync="pageModel"
@onPageChange="onPageChange"
></base-page>
</div>
</div>
</template>
<script>
// import heightTransition from '@/common/js/heightTransition'
// import customCascader from "@/components/customCascader";
import {exportDown, wordDown, zipDown} from "@/utils/util.js";
import basePage from "@/components/base/basePage";
import {TokenKeys} from "@/utils/variable";
// import fetch from '../../api/request'
import {getApiSign} from "@/utils/apiSign";
// import domainsFuc from '@/api/domains.js'
export default {
components: {
// heightTransition,
basePage,
// customCascader
},
props: {
//
showTitle: {
type: Boolean,
default: true,
},
//
title: {
type: String,
default: "",
},
//
bgColor: {
type: String,
default: "#ffffff",
},
//
mainColor: {
type: String,
default: "",
},
// padding
paddingBottom: {
type: String,
// default: '68px'
},
//
bodyHight: {
type: [Number, String],
default: "100%",
},
// main
mainHight: {
type: [Number, String, Boolean],
default: "calc(100% - 38px)",
},
//
searchModel: {
type: Array,
default: () => {
return [];
},
},
//
buttonList: {
type: Array,
default: () => {
return [];
// [{
// icon: 'el-icon-plus',
// menuName: ''
// }, {
// icon: 'el-icon-edit',
// menuName: ''
// }, {
// icon: 'el-icon-delete',
// menuName: '',
// type: 'danger'
// }, {
// icon: 'el-icon-refresh',
// menuName: ''
// },]
},
},
defaultButtonList: {
type: Array,
default: () => {
return [
{
icon: "el-icon-plus",
menuName: "新增",
},
{
icon: "el-icon-edit",
menuName: "编辑",
},
{
icon: "el-icon-delete",
menuName: "删除",
type: "danger",
},
// {
// icon: 'el-icon-refresh',
// menuName: ''
// },
];
},
},
//
isPage: {
type: Boolean,
default: false,
},
//
exportUrl: {
default: "",
},
//
importUrl: {
default: "",
},
//
only: {
default: "",
},
//
fixedButton: {
type: Boolean,
default: false,
},
//
querySwitch: {
type: Boolean,
default: false,
},
//
searchList: {
type: Array,
default: () => {
return [];
},
},
//
operateButtonSwitch: {
type: Boolean,
default: true,
},
//
defaultButtonSwitch: {
type: Boolean,
default: true,
},
//
fixedButtonList: {
type: Array,
default: () => {
return [
{
icon: "el-icon-s-operation",
title: "筛选",
},
{
icon: "el-icon-printer",
title: "打印",
},
{
icon: "el-icon-folder",
title: "导出",
},
];
},
},
},
data() {
return {
ruleForm: {},
onlyUrl: "",
clientHeight: "",
//
uploadHeaders: {},
// uurl: domainsFuc().domain,
uurl: "http://www.wldxt.cn:8089/taizhou/daxitong/crm/",
//
model: {},
// /
isSearch: false,
//
pageModel: {
total: 200,
page: 1,
limit: 20,
},
//
clearState: 0,
loading: false,
// fixedButtonList: [{
// icon: 'el-icon-s-operation',
// title: ''
// },
// {
// icon: 'el-icon-printer',
// title: ''
// },
// {
// icon: 'el-icon-folder',
// title: ''
// }
// ],
// defaultButtonList: [
// {
// icon: 'el-icon-plus',
// menuName: ''
// }, {
// icon: 'el-icon-edit',
// menuName: ''
// }, {
// icon: 'el-icon-delete',
// menuName: '',
// type: 'danger'
// }, {
// icon: 'el-icon-refresh',
// menuName: ''
// },
// ],
tableHeight: "100%",
};
},
created() {
},
mounted() {
// this.getTableHight()
// window.onresize = () => {
// this.clientHeight = document.documentElement.clientHeight;
// },
// this.importUpload(); //
},
computed: {
// menuJson() {
// return JSON.parse(localStorage.getItem(TokenKeys.MENU_JSON))
// }
},
methods: {
getTableHight() {
let height = "100%";
let heightReduce = 0;
if (this.operateButtonSwitch) {
heightReduce = heightReduce + 53;
}
if (this.querySwitch) {
heightReduce = heightReduce + 47;
}
if (this.isPage) {
heightReduce = heightReduce + 53;
}
height = "calc(100% - " + heightReduce + "px)";
this.tableHeight = height;
},
getMainHeight() {
// operateButtonSwitch querySwitch
let height = "100%";
let heightReduce = 10;
if (this.operateButtonSwitch) {
heightReduce = heightReduce + 56;
}
if (this.querySwitch) {
heightReduce = heightReduce + 33;
}
if (this.isPage) {
heightReduce = heightReduce + 56;
}
height = "calc(100% - " + heightReduce + "px)";
// console.log(height, "height")
return height;
},
pageClear() {
this.pageModel.page = 1;
},
// importUpload() {
// const timestamp = new Date().getTime() + '';
// const sign = getApiSign(timestamp);
// this.uploadHeaders['timestamp'] = timestamp;
// this.uploadHeaders['appKey'] = TokenKeys.APP_KEY;
// this.uploadHeaders['sign'] = sign;
// this.uploadHeaders[TokenKeys.ACCESS_TOKEN] = localStorage.getItem(TokenKeys.ACCESS_TOKEN);
// },
handleSuccess(res) {
const {code, msg, data} = res;
if (code && code == 10000) {
this.loading = false;
this.$vmNews("上传成功", "success");
} else {
this.$vmNews(msg);
this.loading = false;
}
},
handleProgress() {
this.loading = true;
},
handleError() {
this.$vmNews("上传失败", "error");
},
//
getCascader(value, field) {
this.$set(this.model, field, value);
},
// total
setPageTotal(total) {
this.$set(this.pageModel, "total", total);
},
setPageNum(pageNum) {
this.$set(this.pageModel, "page", pageNum);
},
//propLabel value
getField(propLabel, value) {
this.$set(this.ruleForm, propLabel, value);
},
//
goBack() {
this.$router.go(-1);
},
//
funNewClick(item) {
if (item.menuName == "刷新" || item.btnFunction == "Refresh") {
this.$tab.refreshPage(this.$route);
} else {
this.$emit("onFuncBtn", item);
}
},
//
fixedClick(item) {
this.$emit("onFixedBtn", item);
},
//
funcClick(btnItem) {
this.$emit("onFuncBtn", btnItem);
},
//
eventExport(params) {
// console.log(params, 'params')
// console.log(this.onlyUrl ? this.onlyUrl : this.exportUrl, 'this.onlyUrl?this.onlyUrl:this.exportUrl')
// return fetch.get(this.onlyUrl ? this.onlyUrl : this.exportUrl, {
// params,
// responseType: 'blob'
// })
},
//
setSomeParam(field, value = null) {
this.$set(this.model, field, value);
},
//
queryEvent(state) {
this.$emit("onQuery", this.mergeParam(true));
},
//
handerInputEnter() {
this.$emit("handerInputEnter", this.ruleForm);
},
// -
selectChange(event, index, indexItem) {
if (typeof event == "number" && event < 3) {
if (Number(event) == 2) {
event = 0;
} else {
event = event - 1;
}
}
if (event !== "" && event != undefined) {
this.$emit("onElSelect", event, index, indexItem, this.model);
}
},
//
onPageChange() {
this.$emit("pageChange", this.mergeParam());
},
//
mergeParam(state) {
if (state) {
this.pageModel.page = 1;
}
let page = {
page: this.pageModel.page,
limit: this.pageModel.limit,
};
for (let i in this.model) {
if (!this.model[i]) {
this.model[i] = null;
}
}
let search = Object.assign({}, page, this.model);
return Object.assign({}, page, this.model);
},
//
showSearch() {
this.isSearch = !this.isSearch;
},
//
search() {
this.$emit("search", this.ruleForm);
},
//
refresh() {
this.ruleForm = Object.assign({}, "");
this.search();
},
},
};
</script>
<style scoped lang='scss'>
.pushButton {
/* margin: 12px 10px 10px 10px; */
padding: 10px;
}
::v-deep .iconfont {
font-size: 12px;
text-align: center;
}
::v-deep .el-tooltip {
padding: 0 3px;
}
::v-deep .el-button--mini {
padding: 6px 8px;
margin: 5px;
}
.container {
width: 100%;
height: 100%;
.title {
/* @include boxBase(100%, 48px, $base-color); */
/* @include fontBase(16px, #fff); */
font-size: 14px;
padding: 12px;
}
.buttonList + .buttonList {
margin-left: 5px;
}
.main {
/* height: auto !important; */
overflow-y: auto;
/* padding:0 12px; */
.search {
height: auto;
background: #f5f5f5;
border: 1px solid #d8d8d8;
padding: 12px;
transition: all 0.2s ease-in-out;
}
.hide {
height: 0;
}
}
.main::-webkit-scrollbar {
width: 5px;
/* background-color: #D8D8D8; */
}
.main::-webkit-scrollbar-thumb {
border-radius: 5px;
width: 5px;
background: #b4bccc;
}
.w-100 {
width: 100%;
}
.mb-12 {
margin-bottom: 12px;
}
.back {
cursor: pointer;
}
}
</style>

View File

@ -0,0 +1,185 @@
var tabListDisposition = [{ tabName: '1', name: '选择操作', success: false, }, { tabName: '2', name: '配置', success: false },]
var tabListAction = [{ tabName: '1', name: '选择应用', success: false }, { tabName: '2', name: '选择操作', success: false }, { tabName: '3', name: '选择账号', success: false }, { tabName: '4', name: '配置', success: false }, { tabName: '5', name: '输出', success: false },]
var stepAdd = { icon: '', title: '触发条件', actionName: '平台触发配置', content: '请选择触发操作' }
var stepUse = { icon: '', title: '执行操作', actionName: '请选择执行操作', content: '请选择动作', }
var timeDivide = [
{
id: 1,
title: "秒级",
content: "用户可使用 cron 表达式自定义时间执行",
},
{
id: 2,
title: "分钟级",
content: "用户可使用 cron 表达式自定义时间执行",
},
{
id: 3,
title: "小时级",
content: "按设定的周期时间开始执行,如每月 x 执行一次",
},
{
id: 4,
title: "天级",
content: "按设定的时间间隔开始执行,如间隔 x 小时执行一次",
},
]
var representationData = [
{
id: 1,
label: "字符串函数",
children: [
{
label: "concat",
value: "将任意数量的字符串拼接到一起",
},
{
label: "replaceFirst",
value: "用给定的字符串替换字符串中的第一个",
},
{
label: "replaceAll",
value: "用给定的字符串替换字符串中所有匹配上的字符串",
},
{
label: "format",
value: "使用指定的格式字符串和参数返回一个格式化字符串",
},
{
label: "startsWith",
value: "判断字符串是否是以指定的字符串开始",
},
{
label: "endsWith",
value: "判断字符串是否是以指定的字符串结束",
},
{
label: "equals",
value: "判断两个字符串是否相等",
},
{
label: "equalsIgnoreCase",
value: "判断两个字符串是否相等(忽略大小写)",
},
{
label: "contains",
value: "判断字符串是否包含指定的字符串",
},
{
label: "indexOf",
value: "查询指定字符串在字符串中的第一次出现的位置",
},
{
label: "substring",
value: "截取指定位置字符串end不指定时表示到字符串末尾从0开始",
},
{
label: "split",
value: "按分割符分割字符串",
},
{
label: "md5",
value: "MD5加密",
},
{
label: "upperCase",
value: "英文字符串转大写",
},
{
label: "lowerCase",
value: "英文字符串转小写",
},
]
},
{
id: 2,
label: "JSON函数",
children: [
{
label: "toString",
value: "将JSON转化为字符串输出",
},
{
label: "parseObject",
value: "将字符串转化为JSON输出",
},
]
},
{
id: 3,
label: "数学计算",
children: [
{
label: "add",
value: "计算两个数据的和",
},
{
label: "addWithScale",
value: "计算两个数据的和(指定精度)",
},
{
label: "subtract",
value: "计算两个数据的差",
},
{
label: "subtractWithScale",
value: "计算两个数据的差(指定精度)",
},
{
label: "multiply",
value: "计算两个数据的积",
},
{
label: "multiplyWithScale",
value: "计算两个数据的积(指定精度)",
},
{
label: "divide",
value: "计算两个数据的商",
},
{
label: "divideWithScale",
value: "计算两个数据的商(指定精度)",
},
{
label: "modly",
value: "取两个数据的余数",
},
{
label: "abs",
value: "计算数据绝对值",
},
{
label: "greaterThan",
value: "判断数据1是否大于数据2",
},
{
label: "greaterThanOrEqual",
value: "判断数据1是否大于等于数据2",
},
{
label: "lessThan",
value: "判断数据1是否小于数据2",
},
{
label: "lessThanOrEqual",
value: "判断数据1是否小于等于数据2",
},
{
label: "equals",
value: "判断数据1是否等于数据2",
},
{
label: "notEqual",
value: "判断数据1是否不等于数据2",
},
]
},
]
export { tabListDisposition, tabListAction, stepAdd, stepUse, timeDivide,representationData }

View File

@ -0,0 +1,274 @@
<template>
<div>
<base-dialog
:closeEscape="true"
:showClose="true"
:closeModal="false"
@handleConfirmClick="handleConfirmClick"
@handleClose="handleClose"
:dialogVisible="dialogVisible"
:title="senceType == 'add' ? '开始创建场景' : '编辑场景'"
width="800px"
top="8vh"
:footerShow="true"
:submitButtonTitle="'开始创建'"
>
<base-form
ref="senceForm"
:formRow="senceFormRow"
:isFunBtn="false"
:rules="senceRules"
:spanNumber="24"
style="padding-bottom: 0"
>
</base-form>
<div class="TriggerModeBox">
<div class="label">触发方式</div>
<div class="stepWrap">
<div
class="step"
:class="{
activeBorder: triggerModeId === ele.value,
}"
v-for="(ele, index) in stepList"
:key="ele.value"
>
<div class="img">
<img src="../images/pingtai.svg" v-if="ele.value == 2" />
<img src="../images/naozhong.svg" v-else-if="ele.value == 1" />
<img src="../images/api.svg" v-else-if="ele.value == 4" />
<img src="../images/point.svg" v-else-if="ele.value == 3" />
</div>
{{ ele.label }}
</div>
</div>
</div>
</base-dialog>
<!-- <addDialogChunk
ref="addDialogChunk"
@examineHandleClose="examineHandleClose"
></addDialogChunk> -->
</div>
</template>
<script>
import baseDialog from "@/components/base/BaseNewDialog/index.vue";
// import addDialogChunk from "./addDialogChunk";
import { authApi } from "@/api/apis/auth";
import baseForm from "@/components/base/baseNewForm";
export default {
components: {
baseDialog,
baseForm,
// addDialogChunk,
},
data() {
return {
dialogVisible: false,
senceFormRow: [
{
elCol: [
{
label: "项目分类",
prop: "classId",
tag: "elSelect",
options: [],
optionValue: "id",
optionLabel: "name",
},
],
},
{
elCol: [
{
label: "场景名称",
prop: "name",
tag: "elInput",
},
],
},
{
elCol: [
{
label: "场景描述",
prop: "description",
tag: "elInput",
type: "textarea",
},
],
},
],
senceRules: {
classId: [
{
required: true,
message: "请选择项目分类",
trigger: "change, blur",
},
],
name: [
{
required: true,
message: "请输入场景名称",
trigger: "change, blur",
},
],
},
stepList: [
{ label: "应用程序触发", value: 1 },
{ label: "定时触发", value: 2 },
{ label: "手动触发", value: 3 },
{ label: "Webhook触发", value: 4 },
],
triggerModeId: "", //
senceType: "",
};
},
methods: {
//
async GetProductionTableData() {
let param = {};
let res = await authApi(
"sysFlowClassService",
"",
"queryListJson",
"",
param
);
if (res.status == "200") {
this.senceFormRow[0].elCol[0].options = res.attribute;
}
},
openDialog(row, type, projectClassificationID) {
this.senceType = type;
this.dialogVisible = true;
this.GetProductionTableData();
this.$nextTick(() => {
this.triggerModeId = "";
this.$refs.senceForm.resetFields("ruleForm");
if (type == "add") {
this.triggerModeId = 1;
if (projectClassificationID && projectClassificationID != "1") {
this.$refs.senceForm.getField("classId", projectClassificationID);
}
}
if (type == "edit") {
this.GetSceneDetail(row.id);
}
});
},
async GetSceneDetail(sceneID) {
let params = {
sceneID: sceneID,
};
let res = await authApi(
"sysFlowClassService",
"",
"queryListJson",
"",
params
);
if (res.status == "200") {
this.$refs.senceForm.choiceAssignment(res.data[0]);
this.triggerModeId = res.data[0].triggerMode;
}
},
handleConfirmClick() {
this.$refs.senceForm.$refs["ruleForm"].validate((valid) => {
if (valid) {
if (!this.triggerModeId) {
this.$vmNews("请选择触发方式");
return;
}
this.SaveSenceData();
} else {
this.$message({ message: "请输入必填项", type: "warning" });
return;
}
});
},
async SaveSenceData() {
let params = {
...this.$refs.senceForm.ruleForm,
triggerModeId: this.triggerModeId,
};
let res = await authApi("sysFlowService", "", "saveFlow", "", params);
if (res.status == "200") {
this.$emit("handleConfirmClick", res.data[0], params);
this.$nextTick(() => {
if (this.senceType == "edit") {
this.$vmNews("修改成功!", "success");
this.dialogVisible = false;
}
});
}
},
handleClose() {
this.$nextTick(() => {
this.triggerModeId = "";
this.$refs.senceForm.resetFields("ruleForm");
this.dialogVisible = false;
});
},
examineHandleClose() {
this.$emit("examineHandleClose");
},
},
};
</script>
<style scoped lang="scss">
.TriggerModeBox {
display: flex;
margin-bottom: 20px;
.label {
width: 85px;
color: #999;
text-align: right;
padding-right: 5px;
}
.stepWrap {
display: flex;
margin-left: 15px;
}
}
.step {
width: 150px;
height: 58px;
background: #ffffff;
border-radius: 4px;
border: 1px solid #dbdde1;
display: flex;
justify-content: center;
align-items: center;
margin-right: 10px;
cursor: pointer;
.img {
margin-right: 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%;
}
}
}
.activeBorder {
background: #f2fcff;
border: 1px solid #1478f5;
}
.step:hover {
background: #f2fcff;
border: 1px solid #1478f5;
}
</style>

View File

@ -0,0 +1,37 @@
// 列表表头配置
const tableColumn = [
{
label: "场景名称",
prop: "name",
tooltip: true,
},
{
label: "流程分类名称",
prop: "className",
tooltip: true,
},
{
label: "触发方式",
prop: "triggerModeName",
tooltip: true,
},
// {
// label: "NIFI应用组ID",
// prop: "nifiGroupId",
// tooltip: true,
// },
{
label: "描述",
prop: "description",
tooltip: true,
},
{
label: "操作",
prop: "operate",
width: 100,
}
];
export default {
tableColumn,
};

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1747448742430" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2686" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M384 51.2h-256C87.04 51.2 51.2 87.04 51.2 128v256C51.2 424.96 87.04 460.8 128 460.8h256C424.96 460.8 460.8 424.96 460.8 384v-256C460.8 87.04 424.96 51.2 384 51.2z m10.24 332.8c0 5.12-5.12 10.24-10.24 10.24h-256c-5.12 0-10.24-5.12-10.24-10.24v-256c0-5.12 5.12-10.24 10.24-10.24h256c5.12 0 10.24 5.12 10.24 10.24v256zM384 563.2h-256c-40.96 0-76.8 35.84-76.8 76.8v256c0 40.96 35.84 76.8 76.8 76.8h256c40.96 0 76.8-35.84 76.8-76.8v-256c0-40.96-35.84-76.8-76.8-76.8z m10.24 332.8c0 5.12-5.12 10.24-10.24 10.24h-256c-5.12 0-10.24-5.12-10.24-10.24v-256c0-5.12 5.12-10.24 10.24-10.24h256c5.12 0 10.24 5.12 10.24 10.24v256zM640 460.8h256c40.96 0 76.8-35.84 76.8-76.8v-256c0-40.96-35.84-76.8-76.8-76.8h-256c-40.96 0-76.8 35.84-76.8 76.8v256c0 40.96 35.84 76.8 76.8 76.8z m-10.24-332.8c0-5.12 5.12-10.24 10.24-10.24h256c5.12 0 10.24 5.12 10.24 10.24v256c0 5.12-5.12 10.24-10.24 10.24h-256c-5.12 0-10.24-5.12-10.24-10.24v-256zM860.16 757.76c15.36-20.48 25.6-46.08 25.6-76.8 0-66.56-51.2-117.76-117.76-117.76s-117.76 51.2-117.76 117.76c0 30.72 10.24 56.32 25.6 76.8-66.56 30.72-112.64 102.4-112.64 179.2 0 15.36 15.36 30.72 30.72 30.72s30.72-15.36 30.72-30.72c0-76.8 61.44-138.24 138.24-138.24 76.8 0 138.24 61.44 138.24 138.24 0 15.36 15.36 30.72 30.72 30.72s30.72-15.36 30.72-30.72c10.24-76.8-35.84-143.36-102.4-179.2zM716.8 686.08c0-30.72 25.6-51.2 51.2-51.2s51.2 25.6 51.2 51.2-25.6 51.2-51.2 51.2-51.2-25.6-51.2-51.2z" fill="#f18709" p-id="2687"></path></svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1746864269723" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5261" data-spm-anchor-id="a313x.search_index.0.i16.49f93a811yUL7v" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M512 1024a512 512 0 1 1 512-512 512.595349 512.595349 0 0 1-512 512z m0-952.55814a440.55814 440.55814 0 1 0 440.55814 440.55814 441.093953 441.093953 0 0 0-440.55814-440.55814z" p-id="5262" data-spm-anchor-id="a313x.search_index.0.i17.49f93a811yUL7v" class="selected" fill="#1478f6"></path><path d="M720.372093 476.27907H547.72093V303.627907H476.27907v172.651163H303.627907v71.44186h172.651163v172.651163h71.44186V547.72093h172.651163V476.27907z" p-id="5263" data-spm-anchor-id="a313x.search_index.0.i18.49f93a811yUL7v" class="selected" fill="#1478f6"></path></svg>

After

Width:  |  Height:  |  Size: 959 B

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1735960350340" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="28131" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M900.6 483c12.3 0 22.4-10.1 22.4-22.4 0-12.3-10.1-22.4-22.4-22.4h-78.2V386h78.2c12.3 0 22.4-10.1 22.4-22.4 0-12.3-10.1-22.4-22.4-22.4h-78.2v-63.7c0-43.3-35.2-78.5-78.6-78.5h-31.2v-75.5c0-12.3-10.1-22.4-22.4-22.4-12.3 0-22.4 10.1-22.4 22.4V199h-52.2v-75.5c0-12.3-10.1-22.4-22.4-22.4-12.3 0-22.4 10.1-22.4 22.4V199h-52.2v-75.5c0-12.3-10.1-22.4-22.4-22.4-12.3 0-22.4 10.1-22.4 22.4V199h-52.2v-75.5c0-12.3-10.1-22.4-22.4-22.4-12.3 0-22.4 10.1-22.4 22.4V199h-96.3c-43.3 0-78.6 35.2-78.6 78.5v63.7h-78.2c-12.3 0-22.4 10.1-22.4 22.4 0 12.3 10.1 22.4 22.4 22.4h78.2v52.1h-78.2c-12.3 0-22.4 10.1-22.4 22.4 0 12.3 10.1 22.4 22.4 22.4h78.2V535h-78.2c-12.3 0-22.4 10.1-22.4 22.4 0 12.3 10.1 22.4 22.4 22.4h78.2v52.1h-78.2c-12.3 0-22.4 10.1-22.4 22.4 0 12.3 10.1 22.4 22.4 22.4h78.2v63.7c0 43.3 35.2 78.5 78.6 78.5h34.6v81.3c0 12.3 10.1 22.4 22.4 22.4 12.3 0 22.4-10.1 22.4-22.4v-81.3h52.2v81.3c0 12.3 10.1 22.4 22.4 22.4 12.3 0 22.4-10.1 22.4-22.4v-81.3h52.2v81.3c0 12.3 10.1 22.4 22.4 22.4 12.3 0 22.4-10.1 22.4-22.4v-81.3H606v81.3c0 12.3 10.1 22.4 22.4 22.4 12.3 0 22.4-10.1 22.4-22.4v-81.3h92.9c43.3 0 78.6-35.2 78.6-78.5V677h78.2c12.3 0 22.4-10.1 22.4-22.4 0-12.3-10.1-22.4-22.4-22.4h-78.2V580h78.2c12.3 0 22.4-10.1 22.4-22.4 0-12.3-10.1-22.4-22.4-22.4h-78.2V483h78.3zM777.5 740.6c0 18.5-15.1 33.6-33.7 33.6H280.2c-18.5 0-33.7-15.1-33.7-33.6V277.5c0-18.5 15.1-33.6 33.7-33.6h463.6c18.5 0 33.7 15.1 33.7 33.6v463.1z" p-id="28132" fill="#f18709"></path><path d="M681.3 420.8h36.9v183.7h-36.9zM615.3 423.6c-6.8-1.9-21.5-2.8-43.9-2.8h-59.5v183.7h36.9v-69.2h24.1c16.7 0 29.5-0.9 38.4-2.6 6.5-1.5 12.9-4.4 19.2-8.8 6.3-4.4 11.5-10.4 15.6-18.1 4.1-7.7 6.1-17.2 6.1-28.5 0-14.6-3.5-26.6-10.6-35.8-7.1-9.1-15.9-15.1-26.3-17.9z m-5.6 68.6c-2.8 4.1-6.7 7.2-11.5 9.1-4.9 1.9-14.7 2.9-29.2 2.9h-20.2v-52.3h17.9c13.4 0 22.1 0.4 26.6 1.3 6 1 10.9 3.8 14.8 8.2 3.9 4.4 5.8 9.9 5.8 16.5 0.1 5.4-1.4 10.3-4.2 14.3zM379.8 420.8l-71.3 183.7h39.3l15.1-41.8H436l16 41.8h40.1L419 420.8h-39.2z m-5.5 111l24.7-68.2 25.2 68.2h-49.9z" p-id="28133" fill="#f18709"></path></svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1747457562742" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9343" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M832 544c23.466667 2.133333 44.8 8.533333 64 17.066667v-17.066667c0-155.733333-91.733333-292.266667-224-356.266667 0 23.466667-6.4 44.8-14.933333 64 104.533333 55.466667 174.933333 166.4 174.933333 292.266667zM172.8 567.466667c0-8.533333-2.133333-17.066667-2.133333-23.466667 0-125.866667 70.4-236.8 174.933333-292.266667-8.533333-19.2-14.933333-40.533333-14.933333-64C198.4 251.733333 106.666667 388.266667 106.666667 544c0 17.066667 2.133333 32 4.266666 49.066667 17.066667-12.8 38.4-21.333333 61.866667-25.6zM686.933333 819.2c-53.333333 36.266667-117.333333 55.466667-185.6 55.466667-57.6 0-110.933333-14.933333-160-40.533334-12.8 19.2-29.866667 34.133333-46.933333 44.8 59.733333 36.266667 130.133333 59.733333 206.933333 59.733334 87.466667 0 168.533333-29.866667 232.533334-76.8-17.066667-10.666667-34.133333-25.6-46.933334-42.666667z" p-id="9344" fill="#f18709"></path><path d="M501.333333 181.333333m-96 0a96 96 0 1 0 192 0 96 96 0 1 0-192 0Z" p-id="9345" fill="#f18709"></path><path d="M202.666667 736m-96 0a96 96 0 1 0 192 0 96 96 0 1 0-192 0Z" p-id="9346" fill="#f18709"></path><path d="M821.333333 714.666667m-96 0a96 96 0 1 0 192 0 96 96 0 1 0-192 0Z" p-id="9347" fill="#f18709"></path><path d="M328.533333 605.866667v6.4c0 10.666667 6.4 17.066667 17.066667 17.066666 8.533333 0 14.933333-4.266667 19.2-12.8l8.533333-23.466666h70.4l6.4 23.466666c4.266667 8.533333 10.666667 12.8 19.2 12.8 10.666667 0 17.066667-4.266667 17.066667-14.933333 0-2.133333 0-6.4-2.133333-10.666667l-49.066667-138.666666c-6.4-14.933333-14.933333-21.333333-27.733333-21.333334-12.8 0-21.333333 8.533333-27.733334 21.333334l-51.2 140.8z m78.933334-121.6l23.466666 74.666666H384l23.466667-74.666666zM518.4 445.866667c-12.8 0-19.2 6.4-19.2 19.2v145.066666c0 12.8 6.4 17.066667 19.2 17.066667s19.2-6.4 19.2-17.066667v-42.666666h27.733333c40.533333-2.133333 61.866667-23.466667 64-61.866667-2.133333-38.4-23.466667-57.6-64-61.866667h-46.933333z m70.4 61.866666c-2.133333 17.066667-10.666667 25.6-25.6 27.733334h-25.6v-53.333334h25.6c17.066667 0 25.6 8.533333 25.6 25.6zM659.2 629.333333c12.8 0 19.2-6.4 19.2-17.066666v-145.066667c0-12.8-6.4-19.2-19.2-19.2-12.8 0-19.2 6.4-19.2 19.2v145.066667c2.133333 10.666667 8.533333 17.066667 19.2 17.066666z" p-id="9348" fill="#f18709"></path></svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1748587059398" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6748" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M486.691591 738.679719c0 114.043383-92.448552 206.490911-206.490911 206.490911S73.708745 852.723102 73.708745 738.679719c0-114.042359 92.449575-206.490911 206.491934-206.490911L417.860946 532.188808l68.830645 0 0 68.830645L486.691591 738.679719 486.691591 738.679719zM532.579711 738.679719c0 114.043383 92.448552 206.490911 206.490911 206.490911s206.490911-92.447529 206.490911-206.490911c0-114.042359-92.448552-206.490911-206.490911-206.490911L601.410356 532.188808l-68.830645 0 0 68.830645L532.579711 738.679719 532.579711 738.679719zM486.691591 279.8108c0-114.043383-92.448552-206.490911-206.490911-206.490911S73.708745 165.767418 73.708745 279.8108s92.449575 206.490911 206.491934 206.490911L417.860946 486.301711l68.830645 0L486.691591 417.471067 486.691591 279.8108 486.691591 279.8108zM532.579711 279.8108 532.579711 279.8108c0-114.043383 92.448552-206.490911 206.490911-206.490911s206.490911 92.448552 206.490911 206.490911-92.448552 206.490911-206.490911 206.490911L601.410356 486.301711l-68.830645 0L532.579711 417.471067 532.579711 279.8108 532.579711 279.8108z" fill="#f18709" p-id="6749"></path></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1747457568957" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9554" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M576 32A160 160 0 0 1 736 192H896a64 64 0 0 1 64 64v640a64 64 0 0 1-64 64h-234.24v-104.32a87.68 87.68 0 0 0-79.232-87.296L574.08 768a87.68 87.68 0 0 0-87.68 87.68V960H256a64 64 0 0 1-64-64v-160a160 160 0 1 1 0-320V256a64 64 0 0 1 64-64h160A160 160 0 0 1 576 32z m0 74.24c-47.36 0-85.76 38.4-85.76 85.76v74.24h-211.2a12.8 12.8 0 0 0-12.8 12.8v211.2H192a85.76 85.76 0 0 0 0 171.52h74.24v211.2c0 7.04 5.76 12.8 12.8 12.8h133.12v-30.08c0-85.824 66.816-156.096 154.368-161.472l11.072-0.384 11.968 0.64A161.92 161.92 0 0 1 736 855.68v30.08h136.96a12.8 12.8 0 0 0 12.8-12.8V279.04a12.8 12.8 0 0 0-12.8-12.8h-211.2V192c0-47.36-38.4-85.76-85.76-85.76z" fill="#f18709" p-id="9555"></path></svg>

After

Width:  |  Height:  |  Size: 1017 B

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1735808726286" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5694" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M512 1024C229.376 1024 0 794.624 0 512S229.376 0 512 0s512 229.376 512 512-229.376 512-512 512z m0-975.36C257.024 48.64 48.64 257.024 48.64 512c0 254.976 207.872 463.36 463.36 463.36S975.36 767.488 975.36 512 766.976 48.64 512 48.64z" fill="#8A8A8A" p-id="5695"></path><path d="M548.864 512l195.072-195.072c9.728-9.728 9.728-25.6 0-36.864l-1.536-1.536c-9.728-9.728-25.6-9.728-35.328 0L512 475.136 316.928 280.064c-9.728-9.728-25.6-9.728-35.328 0l-1.536 1.536c-9.728 9.728-9.728 25.6 0 36.864L475.136 512 280.064 707.072c-9.728 9.728-9.728 25.6 0 36.864l1.536 1.536c9.728 9.728 25.6 9.728 35.328 0L512 548.864l195.072 195.072c9.728 9.728 25.6 9.728 35.328 0l1.536-1.536c9.728-9.728 9.728-25.6 0-36.864L548.864 512z" fill="#8A8A8A" p-id="5696"></path></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1736246510143" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9524" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M963.2 60.8c35.2 35.2 35.2 86.4 0 121.6L179.2 963.2c-32 32-86.4 32-118.4 0s-32-86.4 0-118.4L844.8 60.8c32-35.2 86.4-35.2 118.4 0z" p-id="9525" fill="#999999"></path><path d="M963.2 963.2c-35.2 35.2-86.4 35.2-121.6 0L60.8 179.2c-32-32-32-86.4 0-118.4s86.4-32 118.4 0l784 784c35.2 32 35.2 86.4 0 118.4z" p-id="9526" fill="#999999"></path></svg>

After

Width:  |  Height:  |  Size: 675 B

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1747448804234" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3767" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M85.333 138.667a32 32 0 0 1 32 32v256c0 1.365 0.512 5.12 6.272 11.136 5.974 6.272 16.043 13.312 30.976 19.968C184.32 470.997 227.712 480 277.333 480c49.622 0 93.014-9.003 122.752-22.23 14.934-6.655 25.046-13.695 30.976-19.967 5.76-6.059 6.272-9.771 6.272-11.136v-256a32 32 0 0 1 64 0v256c0 22.186-10.24 40.96-23.893 55.296-13.483 14.165-31.53 25.472-51.328 34.304C386.389 533.888 333.739 544 277.333 544s-109.056-10.112-148.778-27.733c-19.798-8.832-37.846-20.139-51.286-34.304-13.653-14.379-23.936-33.11-23.936-55.296v-256a32 32 0 0 1 32-32z" p-id="3768" fill="#f18709"></path><path d="M85.333 266.667a32 32 0 0 1 32 32c0 1.365 0.512 5.12 6.272 11.136 5.974 6.272 16.043 13.312 30.976 19.968C184.32 342.997 227.712 352 277.333 352c49.622 0 93.014-9.003 122.752-22.23 14.934-6.655 25.046-13.695 30.976-19.967 5.76-6.059 6.272-9.771 6.272-11.136a32 32 0 0 1 64 0c0 22.186-10.24 40.96-23.893 55.296-13.483 14.165-31.53 25.472-51.328 34.304C386.389 405.888 333.739 416 277.333 416s-109.056-10.112-148.778-27.733c-19.798-8.832-37.846-20.139-51.286-34.304-13.696-14.379-23.936-33.11-23.936-55.296a32 32 0 0 1 32-32z" p-id="3769" fill="#f18709"></path><path d="M123.605 159.53c-5.76 6.06-6.272 9.771-6.272 11.137s0.512 5.12 6.272 11.136c5.974 6.272 16.043 13.312 30.976 19.968C184.32 214.997 227.712 224 277.333 224c49.622 0 93.014-9.003 122.752-22.23 14.934-6.655 25.046-13.695 30.976-19.967 5.76-6.059 6.272-9.771 6.272-11.136s-0.512-5.12-6.272-11.136c-5.973-6.272-16.042-13.312-30.976-19.968-29.738-13.227-73.13-22.23-122.752-22.23-49.621 0-93.013 9.003-122.752 22.23-14.933 6.656-25.045 13.696-30.976 19.968z m4.95-78.463c39.722-17.622 92.373-27.734 148.778-27.734S386.39 63.445 426.112 81.067c19.797 8.832 37.803 20.138 51.328 34.304 13.653 14.378 23.893 33.109 23.893 55.296s-10.24 40.96-23.893 55.296c-13.483 14.165-31.53 25.472-51.328 34.304C386.389 277.888 333.739 288 277.333 288s-109.056-10.112-148.778-27.733c-19.798-8.832-37.846-20.139-51.286-34.304-13.696-14.379-23.936-33.11-23.936-55.296s10.24-40.96 23.894-55.296c13.482-14.166 31.53-25.472 51.328-34.304zM650.667 128a32 32 0 0 1 32-32h128A117.333 117.333 0 0 1 928 213.333v128a32 32 0 0 1-64 0v-128c0-29.44-23.893-53.333-53.333-53.333h-128a32 32 0 0 1-32-32zM128 650.667a32 32 0 0 1 32 32v128c0 29.44 23.893 53.333 53.333 53.333h128a32 32 0 0 1 0 64h-128A117.333 117.333 0 0 1 96 810.667v-128a32 32 0 0 1 32-32zM746.667 544a74.667 74.667 0 1 0 0 149.333 74.667 74.667 0 0 0 0-149.333zM608 618.667a138.667 138.667 0 1 1 277.333 0 138.667 138.667 0 0 1-277.333 0z" p-id="3770" fill="#f18709"></path><path d="M589.867 906.667h313.6a160 160 0 0 0-313.6 0z m-67.2 32a224 224 0 0 1 448 0 32 32 0 0 1-32 32h-384a32 32 0 0 1-32-32z" p-id="3771" fill="#f18709"></path></svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1735812194109" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9254" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M867.22 413.07c-9.68 0-19.36-3.63-26.82-10.92-15.19-14.82-15.49-39.14-0.68-54.32 46.84-48.02 45.89-125.18-2.12-172.02-23.27-22.7-54.13-34.93-86.46-34.56-32.49 0.4-62.87 13.43-85.56 36.69-14.83 15.19-39.15 15.47-54.32 0.68-15.19-14.81-15.49-39.13-0.68-54.32C687 45.94 812.9 44.4 891.24 120.82c78.33 76.42 79.89 202.32 3.47 280.66-7.52 7.71-17.51 11.59-27.49 11.59z" p-id="9255" fill="#000000"></path><path d="M819.09 462.01c-9.68 0-19.36-3.63-26.82-10.92L563.13 227.55c-15.19-14.82-15.49-39.14-0.68-54.32 14.82-15.2 39.15-15.47 54.32-0.68L845.92 396.1c15.19 14.82 15.49 39.14 0.68 54.32-7.54 7.72-17.52 11.59-27.51 11.59z" p-id="9256" fill="#000000"></path><path d="M164.51 674.68c-9.68 0-19.36-3.63-26.82-10.92-15.19-14.82-15.49-39.14-0.68-54.32l473.74-485.6c14.82-15.2 39.15-15.47 54.33-0.67 15.18 14.82 15.48 39.14 0.67 54.33L192.01 663.09c-7.53 7.72-17.52 11.59-27.5 11.59z" p-id="9257" fill="#000000"></path><path d="M111.34 958.62c-2.31 0-4.65-0.21-7.01-0.64-20.86-3.85-34.66-23.88-30.81-44.74l51.7-280.46c3.85-20.86 23.86-34.7 44.74-30.81 20.86 3.85 34.66 23.88 30.81 44.74l-51.7 280.46c-3.41 18.5-19.56 31.45-37.73 31.45z" p-id="9258" fill="#000000"></path><path d="M393.86 898.44c-9.68 0-19.36-3.63-26.82-10.92-15.19-14.82-15.49-39.14-0.68-54.32L840.1 347.6c14.82-15.19 39.14-15.49 54.32-0.68 15.19 14.82 15.49 39.13 0.68 54.32l-473.74 485.6c-7.53 7.72-17.51 11.6-27.5 11.6z" p-id="9259" fill="#000000"></path><path d="M111.3 958.66c-17.79 0-33.76-12.42-37.56-30.52-4.36-20.76 8.93-41.13 29.7-45.49l279.1-58.62c20.8-4.35 41.13 8.93 45.49 29.7 4.36 20.76-8.93 41.13-29.7 45.49l-279.1 58.62c-2.66 0.55-5.31 0.82-7.93 0.82z" p-id="9260" fill="#000000"></path><path d="M912.71 959.5H592.59c-21.21 0-38.41-17.2-38.41-38.41 0-21.21 17.2-38.41 38.41-38.41h320.12c21.21 0 38.41 17.2 38.41 38.41 0 21.21-17.2 38.41-38.41 38.41z" p-id="9261" fill="#000000"></path></svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1736243812804" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5727" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M512 0c282.7648 0 512 229.2352 512 512s-229.2352 512-512 512S0 794.7648 0 512 229.2352 0 512 0z m-1.4848 450.978133L341.162667 281.6256a34.133333 34.133333 0 0 0-48.273067 0l-11.264 11.264a34.133333 34.133333 0 0 0 0 48.273067l169.352533 169.352533-169.352533 169.352533a34.133333 34.133333 0 0 0 0 48.273067l11.264 11.264a34.133333 34.133333 0 0 0 48.273067 0l169.352533-169.3568 169.352533 169.3568a34.133333 34.133333 0 0 0 48.273067 0l11.264-11.264a34.133333 34.133333 0 0 0 0-48.273067l-169.3568-169.352533 169.3568-169.352533a34.133333 34.133333 0 0 0 0-48.273067l-11.264-11.264a34.133333 34.133333 0 0 0-48.273067 0l-169.352533 169.352533z" fill="#E40000" p-id="5728" data-spm-anchor-id="a313x.search_index.0.i9.72a33a81KEISlk" class="selected"></path></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1735550467426" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="15957" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M229.216 485.44h254.688V230.72A225.6 225.6 0 0 0 258.56 5.44 254.976 254.976 0 0 0 3.904 260.096a225.6 225.6 0 0 0 225.312 225.344z m29.344-416a161.504 161.504 0 0 1 161.344 161.312v190.688H229.216a161.504 161.504 0 0 1-161.312-161.344A190.88 190.88 0 0 1 258.56 69.44zM5.44 765.44a254.976 254.976 0 0 0 254.688 254.656 225.6 225.6 0 0 0 225.312-225.312v-254.688H230.784A225.6 225.6 0 0 0 5.44 765.44z m416 29.344a161.504 161.504 0 0 1-161.312 161.312A190.88 190.88 0 0 1 69.44 765.44a161.504 161.504 0 0 1 161.344-161.344h190.656zM794.784 538.56h-254.688v254.688a225.6 225.6 0 0 0 225.344 225.312 254.944 254.944 0 0 0 254.656-254.656 225.6 225.6 0 0 0-225.312-225.344z m-29.344 416a161.504 161.504 0 0 1-161.344-161.312V602.56h190.688a161.504 161.504 0 0 1 161.312 161.344 190.88 190.88 0 0 1-190.656 190.656zM1018.56 258.56A254.944 254.944 0 0 0 763.904 3.904a225.6 225.6 0 0 0-225.344 225.312v254.688h254.656A225.6 225.6 0 0 0 1018.56 258.56z m-416-29.344a161.504 161.504 0 0 1 161.344-161.312A190.88 190.88 0 0 1 954.56 258.56a161.504 161.504 0 0 1-161.344 161.344H602.56z" fill="#ffffff" p-id="15958"></path></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1735961718454" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10582" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M404.248183 781.45109v-161.699273h-161.699273c-89.292342 0-161.699273 72.406931-161.699273 161.699273s72.406931 161.699273 161.699273 161.699273c89.435439 0 161.699273-72.406931 161.699273-161.699273z m80.849637 0c0 133.938513-108.610397 242.54891-242.54891 242.54891S0 915.389603 0 781.45109s108.610397-242.54891 242.54891-242.54891H485.09782v242.54891z m134.797093 0v-161.699273h161.699274c89.292342 0 161.699273 72.406931 161.699273 161.699273s-72.406931 161.699273-161.699273 161.699273-161.699273-72.406931-161.699274-161.699273z m-80.849636 0c0 133.938513 108.610397 242.54891 242.54891 242.54891s242.54891-108.610397 242.54891-242.54891-108.610397-242.54891-242.54891-242.54891H539.045277v242.54891z m-134.797094-538.90218v161.699273h-161.699273c-89.292342 0-161.699273-72.406931-161.699273-161.699273s72.406931-161.699273 161.699273-161.699273c89.435439 0.143097 161.699273 72.406931 161.699273 161.699273z m80.849637 0C485.09782 108.610397 376.487423 0 242.54891 0S0 108.610397 0 242.54891 108.753494 485.09782 242.692007 485.09782h242.54891V242.54891h-0.143097z m134.797093 0v161.699273h161.699274c89.292342 0 161.699273-72.406931 161.699273-161.699273s-72.406931-161.699273-161.699273-161.699273c-89.292342 0.143097-161.699273 72.406931-161.699274 161.699273z m-80.849636 0C539.045277 108.610397 647.655674 0 781.594187 0s242.54891 108.610397 242.54891 242.54891S915.389603 485.09782 781.45109 485.09782H539.045277V242.54891z" fill="#f18709" opacity=".8" p-id="10583"></path></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1735960397324" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8044" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M518.144 946.176c-237.568 0-431.104-193.536-431.104-431.104C87.04 276.48 280.576 82.944 518.144 82.944S949.248 276.48 949.248 515.072c0 237.568-193.536 431.104-431.104 431.104z m0-793.6c-199.68 0-362.496 162.816-362.496 362.496s162.816 362.496 362.496 362.496S880.64 714.752 880.64 515.072c0-200.704-162.816-362.496-362.496-362.496z" fill="#f18709" p-id="8045"></path><path d="M672.768 566.272H531.456c-35.84 0-65.536-29.696-65.536-65.536V289.792c0-19.456 15.36-34.816 34.816-34.816s34.816 15.36 34.816 34.816v206.848h138.24c19.456 0 34.816 15.36 34.816 34.816-1.024 19.456-16.384 34.816-35.84 34.816z" fill="#f18709" p-id="8046"></path><path d="M87.04 273.408c-13.312 0-26.624-5.12-36.864-15.36-20.48-20.48-20.48-53.248 0-72.704L153.6 80.896c20.48-20.48 53.248-20.48 72.704 0 20.48 20.48 20.48 53.248 0 72.704L122.88 258.048c-10.24 10.24-22.528 15.36-35.84 15.36zM949.248 273.408c-13.312 0-26.624-5.12-36.864-15.36L808.96 154.624c-20.48-20.48-20.48-53.248 0-72.704 20.48-20.48 53.248-20.48 72.704 0l104.448 102.4c20.48 20.48 20.48 53.248 0 72.704-10.24 11.264-23.552 16.384-36.864 16.384z" fill="#f18709" p-id="8047"></path></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1735960409297" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8249" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M846.848 754.688H175.872c-57.856 0-104.96-47.104-104.96-104.96V181.76c0-57.856 47.104-104.96 104.96-104.96h670.976c57.856 0 104.96 47.104 104.96 104.96v468.224c0 57.6-47.104 104.704-104.96 104.704zM175.872 138.24c-24.064 0-43.52 19.456-43.52 43.52v468.224c0 24.064 19.456 43.52 43.52 43.52h670.976c24.064 0 43.52-19.456 43.52-43.52V181.76c0-24.064-19.456-43.52-43.52-43.52H175.872zM817.152 946.432H206.592c-16.896 0-30.72-13.824-30.72-30.72s13.824-30.72 30.72-30.72h610.56c16.896 0 30.72 13.824 30.72 30.72s-13.568 30.72-30.72 30.72z" fill="#f18709" p-id="8250"></path><path d="M328.448 609.28c-16.896 0-30.72-13.824-30.72-30.72v-173.056c0-16.896 13.824-30.72 30.72-30.72s30.72 13.824 30.72 30.72V578.56c0 16.896-13.824 30.72-30.72 30.72zM508.672 609.28c-16.896 0-30.72-13.824-30.72-30.72v-238.592c0-16.896 13.824-30.72 30.72-30.72s30.72 13.824 30.72 30.72V578.56c0 16.896-13.824 30.72-30.72 30.72zM688.64 609.28c-16.896 0-30.72-13.824-30.72-30.72V269.568c0-16.896 13.824-30.72 30.72-30.72s30.72 13.824 30.72 30.72V578.56c0 16.896-13.568 30.72-30.72 30.72z" fill="#f18709" p-id="8251"></path></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1735809341577" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7950" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M395.765333 586.570667h-171.733333c-22.421333 0-37.888-22.442667-29.909333-43.381334L364.768 95.274667A32 32 0 0 1 394.666667 74.666667h287.957333c22.72 0 38.208 23.018667 29.632 44.064l-99.36 243.882666h187.050667c27.509333 0 42.186667 32.426667 24.042666 53.098667l-458.602666 522.56c-22.293333 25.408-63.626667 3.392-54.976-29.28l85.354666-322.421333z" fill="#333333" p-id="7951"></path></svg>

After

Width:  |  Height:  |  Size: 729 B

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1747457553845" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9126" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M420.228414 387.142621c123.303724 0 251.409655-25.423448 328.386207-73.939862v88.381793h71.291586V207.942621C819.906207 91.559724 613.976276 28.742621 420.193103 28.742621 226.480552 28.742621 20.585931 91.559724 20.585931 207.977931v528.242759c0 116.382897 205.894621 179.2 399.642483 179.2v-66.948414c-203.458207 0-328.386207-65.394759-328.386207-112.286897V577.324138c76.976552 48.481103 205.117793 73.939862 328.386207 73.939862v-66.948414c-203.458207 0-328.386207-65.394759-328.386207-112.251586v-158.896552c76.976552 48.516414 205.082483 73.975172 328.386207 73.975173z m0-291.416276c203.458207 0 328.386207 65.359448 328.386207 112.216276 0 46.892138-124.928 112.251586-328.386207 112.251586-203.458207 0-328.386207-65.359448-328.386207-112.251586 0-46.856828 124.928-112.216276 328.386207-112.216276zM739.751724 423.724138c-176.975448 0-269.594483 63.947034-269.594483 127.117241v339.438345c0 63.205517 92.619034 127.117241 269.594483 127.117242 175.633655 0 268.111448-62.993655 269.488552-125.704828h0.070621v-340.850759c0-63.170207-92.583724-127.117241-269.559173-127.117241z m0 66.948414c130.789517 0 198.267586 42.195862 198.267586 60.168827 0 18.008276-67.442759 60.168828-198.267586 60.168828s-198.302897-42.160552-198.302896-60.168828 67.478069-60.168828 198.302896-60.168827z m0 459.740689c-130.824828 0-198.302897-42.160552-198.302896-60.133517v-81.037241c45.232552 23.057655 111.616 38.417655 198.302896 38.417655 86.651586 0 153.035034-15.36 198.267586-38.417655v81.037241c0 18.008276-67.442759 60.168828-198.267586 60.168828z m0-169.701517c-130.824828 0-198.302897-42.160552-198.302896-60.168827v-81.037242c45.232552 23.092966 111.616 38.488276 198.302896 38.488276 86.651586 0 153.035034-15.39531 198.267586-38.488276v81.072552c0 17.972966-67.442759 60.133517-198.267586 60.133517z" fill="#f18709" p-id="9127"></path></svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1736243765009" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4547" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M0 0h1024v1024H0V0z" fill="#202425" opacity=".01" p-id="4548"></path><path d="M955.733333 512c0 245.077333-198.656 443.733333-443.733333 443.733333S68.266667 757.077333 68.266667 512 266.922667 68.266667 512 68.266667s443.733333 198.656 443.733333 443.733333z" fill="#62D46A" p-id="4549" data-spm-anchor-id="a313x.search_index.0.i3.72a33a81KEISlk" class="selected"></path><path d="M512 102.4C285.7984 102.4 102.4 285.7984 102.4 512s183.3984 409.6 409.6 409.6 409.6-183.3984 409.6-409.6S738.2016 102.4 512 102.4zM34.133333 512C34.133333 248.081067 248.081067 34.133333 512 34.133333s477.866667 213.947733 477.866667 477.866667-213.947733 477.866667-477.866667 477.866667S34.133333 775.918933 34.133333 512z" fill="#62D46A" p-id="4550" data-spm-anchor-id="a313x.search_index.0.i6.72a33a81KEISlk" class=""></path><path d="M787.114667 339.285333a51.2 51.2 0 0 1 0 72.362667l-307.2 307.2a51.2 51.2 0 0 1-72.362667 0l-170.666667-170.666667a51.2 51.2 0 0 1 72.362667-72.362666L443.733333 610.235733l271.018667-271.018666a51.2 51.2 0 0 1 72.362667 0z" fill="#FFFFFF" p-id="4551" data-spm-anchor-id="a313x.search_index.0.i4.72a33a81KEISlk" class=""></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1736413244116" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8878" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M512 0C300.8 0 128 172.8 128 384c0 198.4 224 416 358.4 601.6 12.8 19.2 38.4 19.2 51.2 0C672 800 896 582.4 896 384c0-211.2-172.8-384-384-384z m12.8 902.4c-6.4 6.4-12.8 6.4-19.2 0-19.2-25.6-44.8-57.6-70.4-89.6C320 672 192 512 192 384c0-179.2 140.8-320 320-320s320 140.8 320 320c0 128-128 288-243.2 428.8-19.2 32-44.8 57.6-64 89.6z" p-id="8879" fill="#f57703"></path><path d="M512 192C403.2 192 320 275.2 320 384s83.2 192 192 192 192-83.2 192-192-83.2-192-192-192z m0 320c-70.4 0-128-57.6-128-128s57.6-128 128-128 128 57.6 128 128-57.6 128-128 128z" p-id="8880" fill="#f57703"></path></svg>

After

Width:  |  Height:  |  Size: 920 B

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1735550391762" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10403" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M553 186.4v-84h204.8c22.5 0 41-18.4 41-41 0-22.5-18.4-41-41-41H266.2c-22.5 0-41 18.4-41 41 0 22.5 18.4 41 41 41H471v84C264 207 102.4 381.5 102.4 593.9c0 226.2 183.4 409.6 409.6 409.6s409.6-183.4 409.6-409.6c0-212.4-161.7-387-368.6-407.5z m-41 735.2c-180.7 0-327.7-147-327.7-327.7s147-327.7 327.7-327.7 327.7 147 327.7 327.7-147 327.7-327.7 327.7z" p-id="10404" fill="#ffffff"></path><path d="M532.5 556.5V368.6c0-22.5-18.4-41-41-41s-41 18.4-41 41v204.8c0 0.3 0.1 0.5 0.1 0.7 0 2.4 0.3 4.9 0.7 7.3 0.2 0.9 0.5 1.7 0.8 2.6 0.5 1.7 0.9 3.5 1.6 5.2 0.2 0.5 0.5 1 0.8 1.5 2 4.2 4.5 8.2 8 11.6l173.8 173.8c15.9 15.9 42 15.9 57.9 0 15.9-15.9 15.9-42 0-57.9L532.5 556.5z" p-id="10405" fill="#ffffff"></path></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1736243875455" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7340" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M0 512C0 794.756129 229.243871 1024 512 1024 794.756129 1024 1024 794.756129 1024 512 1024 229.243871 794.756129 0 512 0 229.243871 0 0 229.243871 0 512z m307.2-64.016516h409.6c34.122323 0 51.2 17.077677 51.2 51.2 0 34.155355-17.077677 51.2-51.2 51.2H307.2c-34.122323 0-51.2-17.044645-51.2-51.2 0-34.122323 17.077677-51.2 51.2-51.2z" fill="#bfbfbf" p-id="7341"></path></svg>

After

Width:  |  Height:  |  Size: 707 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

1156
src/views/LinkUp/index.vue Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,149 @@
/**
* @desc NIFI常量
* @date 2023-07-10
*/
// 表头
const tableColumnData = [
{
label: 'key',
prop: 'nifiKey'
},
{
label: 'value',
prop: 'nifiValue'
},
{
label: '显示值',
prop: 'showValue'
},
{
label: '描述',
prop: 'description'
},
{
label: '类型',
prop: 'type'
}
]
// 基本信息内容
const formRow = [
{
elCol: [{
label: 'key',
prop: 'nifiKey',
tag: 'elInput',
span: 24
}]
},
{
elCol: [{
label: 'value',
prop: 'nifiValue',
tag: 'elInput',
span: 24
}]
},
{
elCol: [{
label: '显示值',
prop: 'showValue',
tag: 'elInput',
span: 24
}]
},
{
elCol: [{
label: '描述',
prop: 'description',
tag: 'elInput',
span: 24
}]
},
{
elCol: [{
label: '类型',
prop: 'type',
tag: 'elInput',
span: 24
}]
},
]
const basicsRules = {
nifiKey: [{
required: true,
message: '请输入key',
trigger: 'blur'
}],
nifiValue: [{
required: true,
message: '请输入value',
trigger: 'blur'
}],
showValue: [{
required: true,
message: '请输入显示值',
trigger: 'blur'
}],
description: [{
required: true,
message: '请输入描述',
trigger: 'blur'
}],
type: [{
required: true,
message: '请输入类型',
trigger: 'blur'
}],
}
// 查看
const formRowShow = [
{
elCol: [{
label: 'key',
prop: 'nifiKey',
tag: 'elLook',
span: 24
}]
},
{
elCol: [{
label: 'value',
prop: 'nifiValue',
tag: 'elLook',
span: 24
}]
},
{
elCol: [{
label: '显示值',
prop: 'showValue',
tag: 'elLook',
span: 24
}]
},
{
elCol: [{
label: '描述',
prop: 'description',
tag: 'elLook',
span: 24
}]
},
{
elCol: [{
label: '类型',
prop: 'type',
tag: 'elLook',
span: 24
}]
},
]
export default {
tableColumnData,
formRow,
basicsRules,
formRowShow,
}

View File

@ -0,0 +1,195 @@
<template>
<div>
<base-layout
ref="baseLayout"
:buttonList="buttonList"
@onFuncBtn="onFuncBtn"
:querySwitch="true"
:searchList="requirementList"
@search="handleSearchEvent"
:isPage="true"
@pageChange="handlePageChange"
>
<div slot="main" slot-scope="{ tableHeight }">
<base-table
ref="baseTable"
:showIndex="true"
:funWidth="180"
:funData="funData"
@onFunc="onFunc"
:tabLoading.sync="tabLoading"
:tableHeight="tableHeight"
:tableData="tableData"
:tableColumn="tableColumnData"
@onCellClick="onCellClick"
>
<template #state="{row}">
{{ row.state == 0 ? '启用' : '停用'}}
</template>
</base-table>
</div>
</base-layout>
<right-dialog ref="rightDialog" @resetTable="resetTable"></right-dialog>
</div>
</template>
<script>
import baseLayout from "@/components/base/baseLayout";
import baseTable from "@/components/base/baseTable";
import rightDialog from "./rightDialog";
import configData from "./configData";
import { authApi } from "@/api/apis/auth";
export default {
components: {
baseLayout,
baseTable,
rightDialog,
},
data() {
return {
buttonList: [
{
menuName: "新增",
icon: "el-icon-plus",
btnFunction: "add",
},
{
menuName: "刷新",
icon: "el-icon-refresh",
btnFunction: "resetLoad",
},
], //
requirementList: [
{
placeholder: "key",
prop: "nifiKey",
tag: "elInput",
},
{
placeholder: "value",
prop: "nifiValue",
tag: "elInput",
},
], //list
tabLoading: false,
tableColumnData: configData.tableColumnData, //
funData: [
{
color: "#6a9af1",
text: "编辑",
},
{
color: "#d67a74",
text: "删除",
},
],
tableData: [], //
pageModel: {
pageNum: 1,
pageSize: 100,
},
queryModel: {
name: "",
},
};
},
mounted() {
this.GetProductionTableData();
},
methods: {
onCellClick(row){
this.openLoading("detail");
this.$refs.rightDialog.openDialog("show", row);
},
//
async GetProductionTableData() {
this.tabLoading = true;
let param = {
...this.pageModel,
...this.queryModel,
};
let res = await authApi(
"sysFlowNifiConstantService",
"",
"queryPagedJson",
"",
param
);
this.tabLoading = false;
if (res.status == "200") {
this.tableData = res.attribute.list;
this.$refs.baseLayout.setPageTotal(res.attribute.total);
}
},
//
handlePageChange(val) {
this.pageModel.pageNum = val.pageIndex;
this.pageModel.pageSize = val.pageSize;
this.GetProductionTableData();
},
//
onFuncBtn(btn) {
this[btn.btnFunction]();
},
//
add() {
this.$refs.rightDialog.openDialog("add");
},
//
onFunc(index, row,item) {
//
if (item.text==='查看') {
this.openLoading("detail");
this.$refs.rightDialog.openDialog("show", row);
}
//
if (item.text==='编辑') {
this.openLoading("detail");
this.$refs.rightDialog.openDialog("edit", row);
}
//
if (item.text==='删除') {
this.$delConfirm().then(() => {
this.openLoading("del");
this.productionDeleteById(row.id);
});
}
},
async productionDeleteById(id) {
let param = {
id: id,
};
let res = await authApi(
"sysFlowNifiConstantService",
"",
"deleteNifiConstant",
"",
param
);
if (res.status == "200") {
this.$vmNews("删除成功", "success");
this.resetTable();
}
},
//
resetTable() {
this.pageModel.pageNum = 1;
this.$refs.baseLayout.pageClear();
this.GetProductionTableData();
},
//
handleSearchEvent() {
let data = this.$refs.baseLayout.ruleForm;
this.queryModel = data;
this.resetTable();
},
},
};
</script>
<style scoped>
.clickTitle {
color: #409eff;
cursor: pointer;
}
</style>

View File

@ -0,0 +1,236 @@
<template>
<div>
<base-right-dialog
size="1000px"
ref="baseRightDialog"
:footerShow="true"
:dialogVisible.sync="dialogVisible"
:title="dialogTitle + ' 项目分类管理'"
@handleClose="handleDialogClose"
:type="dialogType"
:submitShow="submitShow"
@handleConfirmClick="handleConfirmClick"
>
<base-form
ref="basicsForm"
:formRow="formRow"
:isFunBtn="false"
:rules="basicsRules"
class="dialog_form"
:spanWidth="`120px`"
:loading="vLoading"
>
</base-form>
</base-right-dialog>
</div>
</template>
<script>
import baseRightDialog from '@/components/base/baseRightDialog'
import baseForm from '@/components/base/baseNewForm'
import baseTable from '@/components/base/baseTable'
import configData from './configData'
import { authApi } from '@/api/apis/auth'
export default {
components: {
baseRightDialog,
baseForm,
baseTable,
},
data() {
return {
dialogVisible: false,
dialogTitle: '',
dialogType: '',
formRow: configData.formRow,
basicsRules: configData.basicsRules,
vLoading: false,
newMarryOptions: [],
submitShow: true,
loadingType: true,
tableVersionData: [],
funData: [],
isEdit: false,
select_dist: {},
plugNameOptions: [],
tableColumn: configData.operationTableColumn,//
tableData: []
}
},
mounted() {
},
methods: {
openDialog(type, row) {
this.formRow = configData.formRow
this.submitShow = true
this.isEdit = false
this.funData = []
//
if (type == 'edit') {
this.isEdit = true
this.dialogTitle = '编辑'
this.dialogType = 'edit'
this.productGetById(row.id)
}
//
if (type == 'show') {
this.funData = Object.assign([], [])
this.submitShow = false
this.formRow = configData.formRowShow
this.dialogTitle = '查看'
this.dialogType = 'show'
this.productGetById(row.id)
}
this.dialogVisible = true
//
if (type == 'add') {
this.dialogTitle = '新增'
this.dialogType = 'add'
this.$nextTick(() => {
this.$set(this.$refs.basicsForm.ruleForm, 'state', '0')
})
}
},
//
async productGetById(id) {
let params = {
id: id
}
let res = await authApi(
'sysFlowNifiConstantService',
'',
'getNifiConstant',
'',
params
)
if (res.status == '200') {
this.$nextTick(() => {
this.$refs.basicsForm.incomingParameters(res.attribute)
})
}
},
addVersionDialog() {
let obj = {
argName: '',
argCode: '',
argType: '1',
remark: ''
}
this.tableVersionData.push(obj)
},
//
onFunc(index, row) {
if (index == 0) {
this.$delConfirm().then(() => {
this.tableVersionData.forEach((item, itemIndex) => {
if (item.id === row.id) {
this.tableVersionData.splice(itemIndex, 1)
}
})
})
}
},
//
handleDialogClose() {
this.tableVersionData = Object.assign([], [])
this.$refs.basicsForm.resetFields()
this.dialogVisible = false
},
//
handleConfirmClick() {
this.$refs.basicsForm.$refs['ruleForm'].validate((valid) => {
if (!valid) {
return
} else {
let params = {
...this.$refs.basicsForm.ruleForm
}
if (this.dialogType == 'add') {
this.openLoading('submit')
this.productSaveDto(params)
}
if (this.dialogType == 'edit') {
this.openLoading('submit')
this.productUpdateDto(params)
}
}
})
},
//
async productSaveDto(params) {
let res = await authApi(
'sysFlowNifiConstantService',
'',
'saveNifiConstant',
'',
params
)
if (res.status == '200') {
this.handleDialogClose()
this.$vmNews('新增成功', 'success')
this.$emit('resetTable')
}
},
//
async productUpdateDto(params) {
let res = await authApi(
'sysFlowNifiConstantService',
'',
'updateNifiConstant',
'',
params
)
if (res.status == '200') {
this.handleDialogClose()
this.$vmNews('更新成功', 'success')
this.$emit('resetTable')
}
},
}
}
</script>
<style scoped lang="scss">
.small_title {
margin: 10px 0;
font-size: 16px;
}
.dialogList {
padding: 16px 0;
border-top: 1px solid #dcdfe6;
display: flex;
flex-direction: column;
}
.updateBtn {
border: 1px solid #ebedf1;
padding: 5px 0;
border-radius: 3px;
text-align: center;
font-size: 14px;
cursor: pointer;
width: 100px;
}
.updateBtn:hover {
color: #1890ff;
border-color: #badeff;
background-color: #e8f4ff;
}
::v-deep .el-table__body-wrapper.is-scrolling-none {
height: auto !important;
}
::v-deep .app-container {
height: auto !important;
}
</style>

View File

@ -0,0 +1,338 @@
<template>
<div class="apiWrap">
<div class="tablebox">
<div class="tablebox">
<div class="tablebtn">
<div class="search">
<el-input
placeholder="账号名称"
v-model="searchForm.name"
@keyup.enter.native="queryAccountList(searchForm)"
>
<i
slot="suffix"
class="el-input__icon el-icon-search"
@click="queryAccountList(searchForm)"
></i>
</el-input>
</div>
<div class="btn">
<el-button
icon="el-icon-back"
@click="
$router.replace({
path: '/applicationList/applicationListAdmin',
})
"
>返回
</el-button>
<el-button type="primary" @click="goAddHandle" icon="el-icon-plus">
添加账号
</el-button>
</div>
</div>
<!-- 应用账号表格 -->
<div class="main">
<div class="left">
<baseTable
ref="mainTable"
:tableData="mainTableData"
:tableColumn="mainTableColumn"
:funData="mainFunData"
:funWidth="funWidth"
:showIndex="true"
:tabLoading="mainTabLoading"
@onFunc="tableButtonHandle"
@view="viewHandle"
:border="false"
:tableHeight="'77.5vh'"
></baseTable>
</div>
</div>
</div>
</div>
<addAccount
ref="addAccount"
@handleConfirmClick="searchBtnHandle"
></addAccount>
</div>
</template>
<script>
import baseTable from "@/views/applicationList/apiList/compoments/baseTable.vue";
import { authApi } from "@/api/apis/auth";
import addAccount from "./addAccount.vue";
export default {
components: {
baseTable,
addAccount,
},
data() {
return {
//
mainTableData: [],
mainTabLoading: false,
//
searchForm: {
name: "",
},
//
mainTableColumn: [
{
id: "name",
title: "账号名称",
},
{
id: "userName",
title: "登录账号",
},
{
id: "password",
title: "登录密码",
width: 180,
},
{
id: "dbType",
title: "数据库类型",
},
{
id: "dbName",
title: "数据库名称",
},
{
id: "ipAddress",
title: "ip地址",
},
{
id: "port",
title: "端口",
},
],
//
mainFunData: [
{
type: "edit",
text: "编辑",
color: "#5a9cf8",
},
{
type: "dele",
text: "删除",
color: "#e47470",
},
],
};
},
computed: {
//
funWidth() {
return this.mainFunData.length * 90;
},
},
mounted() {
this.queryAccountList();
},
methods: {
//
goAddHandle() {
this.$refs.addAccount.openDialog(this.$route.query.id, "", "add");
},
//
viewHandle(row) {
this.$refs.addAccount.openDialog(this.$route.query.id, row.id, "show");
},
//
searchBtnHandle() {
this.$nextTick(() => {
this.queryAccountList(this.searchForm);
});
},
//
tableButtonHandle(val, item) {
if (item.type === "dele") {
this.$confirm("确认删除?")
.then(() => {
this.deleteAccount(val.id);
})
.catch(() => {});
} else if (item.type === "edit") {
this.$refs.addAccount.openDialog(this.$route.query.id, val.id, "edit");
}
},
//
async deleteAccount(id) {
let params = {
id,
};
let res = await authApi(
"sysApplicationAccountService",
"",
"deleteAccount",
"",
params
);
if (res.status == 200) {
this.$nextTick(() => {
this.queryAccountList(this.searchForm);
});
}
},
// app
async queryAccountList(obj = {}) {
this.mainTabLoading = true;
let params = {
appId: this.$route.query.id,
...obj,
};
const res = await authApi(
"sysApplicationAccountService",
"",
"queryAccountList",
"",
params
);
if (res.status == "200") {
this.mainTableData = res.attribute;
this.$nextTick(() => {
this.$refs.mainTable.setTableKey();
});
}
this.mainTabLoading = false;
},
},
};
</script>
<style scoped lang='scss'>
::v-deep .el-button {
border-radius: 4px;
}
.apiWrap {
background-color: #fbfbfb;
overflow: scroll;
width: 100%;
.searchBox {
margin: 10px;
padding: 15px;
background-color: #fff;
border-radius: 20px;
.searchbtn {
margin-left: 80%;
}
}
.tablebox {
.tablebtn {
padding: 10px 15px;
border-radius: 16px;
margin-bottom: 5px;
background: #fff;
display: flex;
justify-content: space-between;
> .search {
margin-left: 10px;
}
}
.main {
display: flex;
.left {
background-color: #fff;
border-radius: 16px;
width: 100%;
padding: 15px;
}
}
}
}
.shareDialog {
display: flex;
justify-content: space-around;
.left,
.right {
flex: 0.48;
position: relative;
> .title {
text-align: center;
font-size: 18px;
padding: 10px;
background-color: #f7f7f7;
border-radius: 16px;
margin-bottom: 10px;
}
> .list {
height: 50vh;
padding: 15px;
height: 40vh;
overflow: auto;
.item {
cursor: pointer;
padding: 15px;
border-radius: 16px;
font-size: 14px;
&:hover {
background-color: #fafafa;
}
}
.actived {
background-color: #fafafa !important;
}
}
}
}
.addressChunk {
display: flex;
align-items: center;
margin-bottom: 20px;
.label {
flex: 0.1;
}
.input {
flex: 0.9;
}
}
</style>
<style lang="less" scoped>
.code-json-editor {
/* jsoneditor右上角默认有一个链接,加css去掉 */
/deep/ .jsoneditor-poweredBy {
display: none !important;
}
/deep/ .jsoneditor-menu {
background-color: #fff !important;
color: #000 !important;
button {
background-color: #4c81f2 !important;
}
}
/deep/ .ace_gutter {
background-color: #fff;
border-right: 1px solid gainsboro;
}
/deep/ .ace-jsoneditor {
height: 200px !important;
}
}
</style>

View File

@ -0,0 +1,286 @@
<template>
<base-right-dialog
@handleClose="examineHandleClose"
@handleConfirmClick="handleConfirmClick"
:dialogVisible="dialogVisible"
size="500px"
:appendBody="true"
:loading="true"
:footerShow="true"
:submitShow="true"
:submitTitle="'保存'"
:title="title + '应用账号'"
>
<div class="rightDialogClass_main" style="background: #fff; padding: 10px">
<base-form
style="padding-top: 0 !important"
spanWidth="130px"
ref="customForm"
:formRow="accountFormRow"
:isFunBtn="false"
:rules="accountRules"
alignAt="block"
:span="24"
>
</base-form>
</div>
</base-right-dialog>
</template>
<script>
import baseRightDialog from "@/components/base/baseRightDialog/index.vue";
import { authApi } from "@/api/apis/auth";
import baseForm from "@/components/base/baseNewForm";
export default {
components: {
baseForm,
baseRightDialog,
},
data() {
return {
dialogVisible: false,
accountFormRow: [
{
elCol: [
{
label: "账号名称",
prop: "name",
tag: "elInput",
span: 24,
},
],
},
{
elCol: [
{
label: "登录账号",
prop: "userName",
tag: "elInput",
span: 24,
},
],
},
{
elCol: [
{
label: "登录密码",
prop: "password",
tag: "elInput",
span: 24,
},
],
},
{
elCol: [
{
label: "数据库类型",
prop: "dbType",
tag: "elSelect",
options: [],
optionValue:"columnContent",
optionLabel:"columnValue",
span: 24,
},
],
},
{
elCol: [
{
label: "数据库名称",
prop: "dbName",
tag: "elInput",
span: 24,
},
],
},
{
elCol: [
{
label: "ip地址",
prop: "ipAddress",
tag: "elInput",
span: 24,
},
],
},
{
elCol: [
{
label: "端口",
prop: "port",
tag: "elInput",
span: 24,
},
],
},
],
accountRules: {
name: [
{
required: true,
message: "请输入",
trigger: "change, blur",
},
],
userName: [
{
required: true,
message: "请输入",
trigger: "change, blur",
},
],
password: [
{
required: true,
message: "请输入",
trigger: "change, blur",
},
],
dbType: [
{
required: true,
message: "请选择",
trigger: "change, blur",
},
],
dbName: [
{
required: true,
message: "请输入",
trigger: "change, blur",
},
],
ipAddress: [
{
required: true,
message: "请输入",
trigger: "change, blur",
},
],
port: [
{
required: true,
message: "请输入",
trigger: "change, blur",
},
],
},
title: "",
appID: "",
};
},
methods: {
openDialog(appID, accountId, type) {
this.queryDictionaryList()
this.appID = appID;
this.dialogVisible = true;
this.dialogType = type;
this.$nextTick(() => {
this.$refs.customForm?.resetFields("ruleForm");
if (type == "add") {
this.title = "新增";
}
if (type == "edit") {
this.title = "编辑";
this.GetSceneDetail(accountId);
}
if (type == "show") {
this.title = "查看";
this.GetSceneDetail(accountId);
}
});
},
async queryDictionaryList() {
let params = {
tabName: "sys_flow_step_account",
columnName: "db_type",
};
let res = await authApi(
"sysdictionaryshopnewService",
"",
"queryDictionaryList",
"",
params
);
if (res.status == 200) {
this.accountFormRow[3].elCol[0].options = res.attribute;
}
},
async GetSceneDetail(accountId) {
let params = {
id: accountId,
};
let res = await authApi(
"sysApplicationAccountService",
"",
"getAccount",
"",
params
);
if (res.status == "200") {
this.$refs.customForm.choiceAssignment(res.attribute);
}
},
handleConfirmClick() {
this.$refs.customForm.$refs["ruleForm"].validate((valid) => {
if (valid) {
let params = {
...this.$refs.customForm.ruleForm,
appId: this.appID,
};
if (this.dialogType == "add") {
this.SaveAccountData(params);
} else if (this.dialogType == "edit") {
this.editAccountData(params);
}
} else {
this.$message({ message: "请选择必填项", type: "warning" });
return;
}
});
},
async SaveAccountData(params) {
let res = await authApi(
"sysApplicationAccountService",
"",
"saveAccount",
"",
params
);
if (res.status == "200") {
this.$vmNews("新增账号成功", "success");
this.dialogVisible = false;
this.$emit("handleConfirmClick");
}
},
async editAccountData(params) {
let res = await authApi(
"sysApplicationAccountService",
"",
"updateAccount",
"",
params
);
if (res.status == "200") {
this.$vmNews("修改账号成功", "success");
this.dialogVisible = false;
this.$emit("handleConfirmClick");
}
},
examineHandleClose() {
this.dialogVisible = false;
},
},
};
</script>
<style scoped lang="scss">
::v-deep .el-form-item__content {
width: 100% !important;
}
::v-deep .label {
text-align: left !important;
}
</style>

View File

@ -0,0 +1,12 @@
<template>
<div class="wrap">
<router-view></router-view>
</div>
</template>
<script>
export default {};
</script>
<style scoped lang='scss'>
</style>

View File

@ -116,6 +116,10 @@ const addForm = [
id: "8",
label: "用友NCC",
},
{
id: "9",
label: "数据库",
},
],
fontSize: 16,
},
@ -211,6 +215,11 @@ const settingMenu = [
icon: "appMenu03",
path: "appApiAdmin"
},
{
title: "应用账号授权",
icon: "appMenu03",
path: "accountAdmin"
},
{
title: "安全与监控",
icon: "appMenu04"

View File

@ -0,0 +1,265 @@
<template>
<div>
<base-dialog
:closeEscape="true"
:showClose="true"
:closeModal="false"
@handleClose="handleDialogClose"
@handleConfirmClick="handleConfirmClick"
:dialogVisible="dialogVisible"
:title="'权限分配'"
width="95%"
top="8vh"
:footerShow="true"
>
<div style="height: 50vh; display: flex; overflow: auto;">
<div style="width: calc(50% - 5px);">
<div class="small_title">
已分配权限用户 {{ authorizedMembers.length }}
</div>
<base-table
ref="authorizedMemberstable"
:border="true"
:showIndex="true"
:tableHeight="'45vh'"
:tableData="authorizedMembers"
:tableColumn="tableAssColumn"
:slotrow="false"
:funData="funData"
@onFunc="onFunc"
></base-table>
</div>
<div style="width: calc(50% - 5px); margin-left: 10px">
<div
class="small_title"
style="
display: flex;
justify-content: space-between;
align-items: center;
"
>
<span>未分配权限用户</span>
<span>已选择 {{ SelectionData.length }} </span>
</div>
<base-table
ref="customtable"
:border="true"
:showIndex="true"
:tableHeight="'45vh'"
:tableData="tableData"
:tableColumn="tableColumn"
:slotrow="false"
:showSelect="true"
@onSelectionChange="onSelectionChange"
></base-table>
</div>
</div>
</base-dialog>
</div>
</template>
<script>
import baseDialog from "@/components/base/BaseNewDialog/index.vue";
import baseTable from "@/components/base/baseTable";
import { authApi } from "@/api/apis/auth";
export default {
components: {
baseDialog,
baseTable,
},
data() {
return {
dialogVisible: false,
tableColumn: [
{
label: "用户名称",
prop: "personName",
},
{
label: "用户编码",
prop: "personCode",
},
],
tableAssColumn: [
{
label: "用户名称",
prop: "userName",
},
{
label: "用户编码",
prop: "userCode",
},
],
funData: [
{
color: "#ff0000",
text: "删除",
},
],
tableData: [],
activeTab: "first",
proClassID: "", //id
authorizedMembers: [], //
SelectionData: [], //
};
},
mounted() {},
methods: {
openDialog(row) {
this.proClassID = row.id;
this.activeTab = "first";
this.dialogVisible = true;
this.queryRuleList();
this.queryUserList();
},
//
async queryUserList() {
let params = {
flowClassId:this.proClassID,
};
this.openLoading("detail");
let res = await authApi(
"sysFlowClassRuleService",
"",
"queryUserList",
"",
params
);
if (res.status == "200") {
this.tableData = res.attribute;
}
},
//
async queryRuleList() {
let params = {
flowClassId: this.proClassID,
};
let res = await authApi(
"sysFlowClassRuleService",
"",
"queryRuleList",
"",
params
);
if (res.status == "200") {
this.authorizedMembers = res.attribute.ruleList;
}
},
//
onFunc(index, row, item) {
//
if (item.text == "删除") {
this.$confirm("确认删除该内容吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
this.openLoading("del");
this.userDelete(row);
})
.catch(() => {
this.$vmNews("取消操作", "info");
});
}
},
async userDelete(row) {
let params = {
flowClassId:this.proClassID,
userId: row.userId,
};
let res = await authApi(
"sysFlowClassRuleService",
"",
"deleteFlowClassRule",
"",
params
);
if (res.status == "200") {
this.$vmNews("删除成功!", "success");
this.queryRuleList();
this.queryUserList();
this.SelectionData = [];
this.$refs.customtable.clearSelect();
}
},
//
async handleConfirmClick() {
if (this.SelectionData.length <= 0) {
this.$vmNews("请选择需要分配权限的用户!");
return;
}
let userList = [];
this.SelectionData.forEach((item) => {
let obj = {
userId: item.personId, //id
userName: item.personName, //
userCode: item.personCode, //
};
userList.push(obj);
});
let params = {
flowClassId: this.proClassID,
ruleList: userList,
};
let res = await authApi(
"sysFlowClassRuleService",
"",
"saveFlowClassRule",
"",
params
);
if (res.status == "200") {
this.$vmNews("分配权限成功", "success");
this.handleDialogClose();
this.$emit('resetTable')
}
},
//
onSelectionChange(value) {
this.SelectionData = value;
},
//
handleDialogClose() {
this.$refs.customtable.clearSelect();
this.tableData = [];
this.authorizedMembers = [];
this.SelectionData = [];
this.dialogVisible = false;
},
},
};
</script>
<style scoped lang="scss">
.small_title {
font-size: 14px;
font-weight: bold;
margin: 10px 0;
}
.authBox {
display: flex;
justify-content: space-between;
align-items: center;
border: 1px solid #dcdfe6;
border-radius: 6px;
padding: 10px;
.content {
display: flex;
align-items: center;
}
.arrow {
display: flex;
align-items: center;
i {
margin: 0 5px;
font-size: 16px;
}
}
}
</style>

View File

@ -0,0 +1,49 @@
/**
* @desc 项目分类
* @date 2023-07-10
*/
// 表头
const tableColumnData = [
{
label: '项目分类名称',
prop: 'name'
}
]
// 基本信息内容
const formRow = [
{
elCol: [{
label: '项目分类名称',
prop: 'name',
tag: 'elInput',
span: 24
}]
},
]
const basicsRules = {
name: [{
required: true,
message: '请输入项目分类名称',
trigger: 'blur'
}],
}
// 查看
const formRowShow = [
{
elCol: [{
label: '项目分类名称',
prop: 'name',
tag: 'elLook',
span: 24
}]
},
]
export default {
tableColumnData,
formRow,
basicsRules,
formRowShow,
}

View File

@ -0,0 +1,199 @@
<template>
<div>
<base-layout
ref="baseLayout"
:buttonList="buttonList"
@onFuncBtn="onFuncBtn"
:querySwitch="true"
:searchList="requirementList"
@search="handleSearchEvent"
:isPage="true"
@pageChange="handlePageChange"
>
<div slot="main" slot-scope="{ tableHeight }">
<base-table
ref="baseTable"
:showIndex="true"
:funWidth="220"
:funData="funData"
@onFunc="onFunc"
:tabLoading.sync="tabLoading"
:tableHeight="tableHeight"
:tableData="tableData"
:tableColumn="tableColumnData"
@onCellClick="onCellClick"
>
</base-table>
</div>
</base-layout>
<right-dialog ref="rightDialog" @resetTable="resetTable"></right-dialog>
<authorizationDialog ref="authorizationDialog" @resetTable="resetTable"></authorizationDialog>
</div>
</template>
<script>
import baseLayout from "@/components/base/baseLayout";
import baseTable from "@/components/base/baseTable";
import rightDialog from "./rightDialog";
import authorizationDialog from "./authorizationDialog";
import configData from "./configData";
import { authApi } from "@/api/apis/auth";
export default {
components: {
baseLayout,
baseTable,
rightDialog,
authorizationDialog,
},
data() {
return {
buttonList: [
{
menuName: "新增",
icon: "el-icon-plus",
btnFunction: "add",
},
{
menuName: "刷新",
icon: "el-icon-refresh",
btnFunction: "resetLoad",
},
], //
requirementList: [
{
placeholder: "项目分类名称",
prop: "name",
tag: "elInput",
},
], //list
tabLoading: false,
tableColumnData: configData.tableColumnData, //
funData: [
{
color: "#6a9af1",
text: "编辑",
},
{
color: "#d67a74",
text: "删除",
},
{
color: "#6a9af1",
text: "权限管理",
},
],
tableData: [], //
pageModel: {
pageNum: 1,
pageSize: 100,
},
queryModel: {
name: "",
},
};
},
mounted() {
this.GetProductionTableData();
},
methods: {
onCellClick(row) {
this.openLoading("detail");
this.$refs.rightDialog.openDialog("show", row);
},
//
async GetProductionTableData() {
this.tabLoading = true;
let param = {
...this.pageModel,
...this.queryModel,
};
let res = await authApi(
"sysFlowClassService",
"",
"queryPagedJson",
"",
param
);
this.tabLoading = false;
if (res.status == "200") {
this.tableData = res.attribute.list;
this.$refs.baseLayout.setPageTotal(res.attribute.total);
}
},
//
handlePageChange(val) {
this.pageModel.pageNum = val.pageIndex;
this.pageModel.pageSize = val.pageSize;
this.GetProductionTableData();
},
//
onFuncBtn(btn) {
this[btn.btnFunction]();
},
//
add() {
this.$refs.rightDialog.openDialog("add");
},
//
onFunc(index, row, item) {
//
if (item.text === "查看") {
this.openLoading("detail");
this.$refs.rightDialog.openDialog("show", row);
}
//
if (item.text === "编辑") {
this.openLoading("detail");
this.$refs.rightDialog.openDialog("edit", row);
}
//
if (item.text === "权限管理") {
// this.openLoading("detail");
this.$refs.authorizationDialog.openDialog(row);
}
//
if (item.text === "删除") {
this.$delConfirm().then(() => {
this.openLoading("del");
this.productionDeleteById(row.id);
});
}
},
async productionDeleteById(id) {
let param = {
id: id,
};
let res = await authApi(
"sysFlowClassService",
"",
"deleteFlowClass",
"",
param
);
if (res.status == "200") {
this.$vmNews("删除成功", "success");
this.resetTable();
}
},
//
resetTable() {
this.pageModel.pageNum = 1;
this.$refs.baseLayout.pageClear();
this.GetProductionTableData();
},
//
handleSearchEvent() {
let data = this.$refs.baseLayout.ruleForm;
this.queryModel = data;
this.resetTable();
},
},
};
</script>
<style scoped>
.clickTitle {
color: #409eff;
cursor: pointer;
}
</style>

View File

@ -0,0 +1,236 @@
<template>
<div>
<base-right-dialog
size="450px"
ref="baseRightDialog"
:footerShow="true"
:dialogVisible.sync="dialogVisible"
:title="dialogTitle + ' 项目分类管理'"
@handleClose="handleDialogClose"
:type="dialogType"
:submitShow="submitShow"
@handleConfirmClick="handleConfirmClick"
>
<base-form
ref="basicsForm"
:formRow="formRow"
:isFunBtn="false"
:rules="basicsRules"
class="dialog_form"
:spanWidth="`120px`"
:loading="vLoading"
>
</base-form>
</base-right-dialog>
</div>
</template>
<script>
import baseRightDialog from '@/components/base/baseRightDialog'
import baseForm from '@/components/base/baseNewForm'
import baseTable from '@/components/base/baseTable'
import configData from '@/views/projectClassification/configData'
import { authApi } from '@/api/apis/auth'
export default {
components: {
baseRightDialog,
baseForm,
baseTable,
},
data() {
return {
dialogVisible: false,
dialogTitle: '',
dialogType: '',
formRow: configData.formRow,
basicsRules: configData.basicsRules,
vLoading: false,
newMarryOptions: [],
submitShow: true,
loadingType: true,
tableVersionData: [],
funData: [],
isEdit: false,
select_dist: {},
plugNameOptions: [],
tableColumn: configData.operationTableColumn,//
tableData: []
}
},
mounted() {
},
methods: {
openDialog(type, row) {
this.formRow = configData.formRow
this.submitShow = true
this.isEdit = false
this.funData = []
//
if (type == 'edit') {
this.isEdit = true
this.dialogTitle = '编辑'
this.dialogType = 'edit'
this.productGetById(row.id)
}
//
if (type == 'show') {
this.funData = Object.assign([], [])
this.submitShow = false
this.formRow = configData.formRowShow
this.dialogTitle = '查看'
this.dialogType = 'show'
this.productGetById(row.id)
}
this.dialogVisible = true
//
if (type == 'add') {
this.dialogTitle = '新增'
this.dialogType = 'add'
this.$nextTick(() => {
this.$set(this.$refs.basicsForm.ruleForm, 'state', '0')
})
}
},
//
async productGetById(id) {
let params = {
id: id
}
let res = await authApi(
'sysFlowClassService',
'',
'getFlowClass',
'',
params
)
if (res.status == '200') {
this.$nextTick(() => {
this.$refs.basicsForm.incomingParameters(res.attribute)
})
}
},
addVersionDialog() {
let obj = {
argName: '',
argCode: '',
argType: '1',
remark: ''
}
this.tableVersionData.push(obj)
},
//
onFunc(index, row) {
if (index == 0) {
this.$delConfirm().then(() => {
this.tableVersionData.forEach((item, itemIndex) => {
if (item.id === row.id) {
this.tableVersionData.splice(itemIndex, 1)
}
})
})
}
},
//
handleDialogClose() {
this.tableVersionData = Object.assign([], [])
this.$refs.basicsForm.resetFields()
this.dialogVisible = false
},
//
handleConfirmClick() {
this.$refs.basicsForm.$refs['ruleForm'].validate((valid) => {
if (!valid) {
return
} else {
let params = {
...this.$refs.basicsForm.ruleForm
}
if (this.dialogType == 'add') {
this.openLoading('submit')
this.productSaveDto(params)
}
if (this.dialogType == 'edit') {
this.openLoading('submit')
this.productUpdateDto(params)
}
}
})
},
//
async productSaveDto(params) {
let res = await authApi(
'sysFlowClassService',
'',
'saveFlowClass',
'',
params
)
if (res.status == '200') {
this.handleDialogClose()
this.$vmNews('新增成功', 'success')
this.$emit('resetTable')
}
},
//
async productUpdateDto(params) {
let res = await authApi(
'sysFlowClassService',
'',
'updateFlowClass',
'',
params
)
if (res.status == '200') {
this.handleDialogClose()
this.$vmNews('更新成功', 'success')
this.$emit('resetTable')
}
},
}
}
</script>
<style scoped lang="scss">
.small_title {
margin: 10px 0;
font-size: 16px;
}
.dialogList {
padding: 16px 0;
border-top: 1px solid #dcdfe6;
display: flex;
flex-direction: column;
}
.updateBtn {
border: 1px solid #ebedf1;
padding: 5px 0;
border-radius: 3px;
text-align: center;
font-size: 14px;
cursor: pointer;
width: 100px;
}
.updateBtn:hover {
color: #1890ff;
border-color: #badeff;
background-color: #e8f4ff;
}
::v-deep .el-table__body-wrapper.is-scrolling-none {
height: auto !important;
}
::v-deep .app-container {
height: auto !important;
}
</style>