Commit 837fff7d authored by 白舜's avatar 白舜 🎱

Merge branch 'dev0508' of ssh://cloud.wodcloud.com:10022/apaas/apaas-system-ui into dev

parents 8885d605 8913d2e8
# platform:
# runner: 10.11.92.37
kind: pipeline
name: dev
name: dev0508
trigger:
branch:
- dev
- dev0508
clone:
disable: true
......@@ -63,7 +65,7 @@ steps: # 定义流水线执行步骤,这些步骤将顺序执行
base: registry.cn-qingdao.aliyuncs.com/wod/nginx:1.19.5 # 基础镜像,根据项目需求进行使用,如果第三方登录改成ui-base
dockerfile: .beagle/dockerfile
repo: wod/apaas-system-ui # 生成镜像的 分组/名称
version: "5.0.14" # 版本号
version: "5.0.15" # 版本号
channel: amd64
args: "TARGETOS=linux,TARGETARCH=amd64" # 不同架构的构建参数
registry: registry.cn-qingdao.aliyuncs.com # 私有仓库地址
......@@ -75,10 +77,10 @@ steps: # 定义流水线执行步骤,这些步骤将顺序执行
- name: deploy-amd64
image: registry.cn-qingdao.aliyuncs.com/wod/devops-kubernetes:1.0
settings:
namespace: apaas-v5-demo
namespace: apaas-v5
deployment: apaas-manage-ui
container: apaas-manage-ui
image: registry.cn-qingdao.aliyuncs.com/wod/apaas-system-ui:5.0.14-amd64
image: registry.cn-qingdao.aliyuncs.com/wod/apaas-system-ui:5.0.15-amd64
environment:
KUBERNETES_SERVER:
from_secret: KUBERNETES_SERVER
......@@ -94,7 +96,7 @@ steps: # 定义流水线执行步骤,这些步骤将顺序执行
base: registry.cn-qingdao.aliyuncs.com/wod/nginx:1.19.5-arm64
dockerfile: .beagle/dockerfile
repo: wod/apaas-system-ui
version: "5.0.14"
version: "5.0.15"
channel: arm64
args: "TARGETOS=linux,TARGETARCH=arm64"
registry: registry.cn-qingdao.aliyuncs.com
......@@ -112,7 +114,7 @@ steps: # 定义流水线执行步骤,这些步骤将顺序执行
base: registry.cn-qingdao.aliyuncs.com/wod/nginx:1.19.5-ppc64le
dockerfile: .beagle/dockerfile
repo: wod/apaas-system-ui
version: "5.0.14"
version: "5.0.15"
channel: ppc64le
args: "TARGETOS=linux,TARGETARCH=ppc64le"
registry: registry.cn-qingdao.aliyuncs.com
......@@ -130,7 +132,7 @@ steps: # 定义流水线执行步骤,这些步骤将顺序执行
base: registry.cn-qingdao.aliyuncs.com/wod/nginx:1.19.5-mips64le
dockerfile: .beagle/dockerfile
repo: wod/apaas-system-ui
version: "5.0.14"
version: "5.0.15"
channel: mips64le
args: "TARGETOS=linux,TARGETARCH=mips64le"
registry: registry.cn-qingdao.aliyuncs.com
......@@ -143,8 +145,8 @@ steps: # 定义流水线执行步骤,这些步骤将顺序执行
image: registry.cn-qingdao.aliyuncs.com/wod/devops-docker-manifest:1.0
settings:
platforms: linux/amd64,linux/arm64,linux/ppc64le,linux/mips64le
template: registry.cn-qingdao.aliyuncs.com/wod/apaas-system-ui:5.0.14-ARCH
target: registry.cn-qingdao.aliyuncs.com/wod/apaas-system-ui:5.0.14
template: registry.cn-qingdao.aliyuncs.com/wod/apaas-system-ui:5.0.15-ARCH
target: registry.cn-qingdao.aliyuncs.com/wod/apaas-system-ui:5.0.15
username:
from_secret: REGISTRY_USER_ALIYUN
password:
......@@ -179,7 +181,7 @@ steps:
REGISTRY_PASSWORD:
from_secret: REGISTRY_PASSWORD_ALIYUN
settings:
source: registry.cn-qingdao.aliyuncs.com/wod/apaas-system-ui:5.0.14-amd64
source: registry.cn-qingdao.aliyuncs.com/wod/apaas-system-ui:5.0.15-amd64
target: registry.cn-qingdao.aliyuncs.com/wod/apaas-system-ui:5.0-amd64
registry: registry.cn-qingdao.aliyuncs.com
......@@ -197,7 +199,7 @@ steps:
REGISTRY_PASSWORD:
from_secret: REGISTRY_PASSWORD_ALIYUN
settings:
source: registry.cn-qingdao.aliyuncs.com/wod/apaas-system-ui:5.0.14-arm64
source: registry.cn-qingdao.aliyuncs.com/wod/apaas-system-ui:5.0.15-arm64
target: registry.cn-qingdao.aliyuncs.com/wod/apaas-system-ui:5.0-arm64
registry: registry.cn-qingdao.aliyuncs.com
......@@ -215,7 +217,7 @@ steps:
REGISTRY_PASSWORD:
from_secret: REGISTRY_PASSWORD_ALIYUN
settings:
source: registry.cn-qingdao.aliyuncs.com/wod/apaas-system-ui:5.0.14-ppc64le
source: registry.cn-qingdao.aliyuncs.com/wod/apaas-system-ui:5.0.15-ppc64le
target: registry.cn-qingdao.aliyuncs.com/wod/apaas-system-ui:5.0-ppc64le
registry: registry.cn-qingdao.aliyuncs.com
......@@ -233,7 +235,7 @@ steps:
REGISTRY_PASSWORD:
from_secret: REGISTRY_PASSWORD_ALIYUN
settings:
source: registry.cn-qingdao.aliyuncs.com/wod/apaas-system-ui:5.0.14-mips64le
source: registry.cn-qingdao.aliyuncs.com/wod/apaas-system-ui:5.0.15-mips64le
target: registry.cn-qingdao.aliyuncs.com/wod/apaas-system-ui:5.0-mips64le
##--------------对于需要保密的信息隐藏,减少账户信息的泄密⬇-----------------##
---
......
......@@ -46,6 +46,9 @@ import login from "@/page/login/index.vue";
import page404 from "@/page/404.vue";
import register from "@/page/register/index.vue";
import password from "@/page/password/index.vue";
import { clearCookie } from "@/services/cookie.js";
import { resetRouter } from "@/router/index";
export default {
components: {
bgMenu,
......@@ -111,8 +114,64 @@ export default {
created() {
// this.initMsg()
},
mounted() {},
mounted() {
this.getSysOptions();
},
methods: {
/**
* 设置用户多久不操作就跳转到登录界面
* limit:用户无操作时常限制(分钟)
*/
exitSystemAfterLimit(limit) {
window.lastOperateTime = new Date();
window.onload = this.addOperateListener;
this.setTimer(limit);
},
//绑定用户操作事件
addOperateListener() {
document.addEventListener("mousemove", this.resetStartTime);
document.addEventListener("keydown", this.resetStartTime);
document.addEventListener("scroll", this.resetStartTime);
document.addEventListener("touchstart", this.resetStartTime);
},
//重置起始时间
resetStartTime() {
window.lastOperateTime = new Date();
},
//设置定时器
setTimer(limit) {
window.logTimer = setInterval(() => {
var currentTime = new Date();
var timeDiff = currentTime.getTime() - lastOperateTime.getTime();
if (timeDiff > limit * 60 * 1000) {
clearInterval(window.logTimer);
this.$axios.post(`/apaas/system/v5/user/logout`).then((res) => {
if (res.data.code == "200") {
window.location.href = `/apaas/manage/ui/#/login`;
this.$store.commit("setUserInfo", null);
clearCookie("bgToken");
this.$message.success("退出成功");
resetRouter();
} else {
this.$message.error("退出失败");
}
});
}
}, 1000);
},
getSysOptions() {
this.$axios.get(`/apaas/system/v5/sysOptions`).then((res) => {
if (res.data.code == 200) {
const result = res.data.data || {};
if (result.session_validity) this.exitSystemAfterLimit(result.session_validity);
} else {
this.$message.error(res.data.data);
}
});
},
openMsg(data) {
this.readFlag = !this.readFlag;
},
......
......@@ -24,11 +24,11 @@
<!-- 序号 -->
</el-table-column>
<el-table-column
v-for="(header, index) in headers"
v-for="(header) in headers"
:width="header.width"
:min-width="header.minWidth"
:align="header.align"
:key="'col_' + index"
:key="'col_' + header.prop"
:fixed="header.fixed"
show-overflow-tooltip>
<template v-slot:header>
......
<template>
<div class="register-personal-user">
<el-form ref="form" :model="formData" :rules="formDataRules">
<el-form-item label="用户组织机构" prop="oid">
<el-form-item label="用户组织" prop="oid">
<el-select
v-model="formData.oid"
placeholder="搜索并选择"
......@@ -87,7 +87,7 @@
import md5 from "js-md5";
export default {
name: "RegisterOrgUser", // 注册政府机构用户
name: "RegisterOrgUser", // 注册政府组织用户
data() {
const validateUserId = (rule, value, callback) => {
let reg = new RegExp(/^[a-zA-Z0-9|\-|_|\.]+$/);
......@@ -151,7 +151,7 @@
formData: {
is_inside: 1, // 固定1
user_category: 0, // 用户类型0
oid: "", // 用户组织机构 必填
oid: "", // 用户组织 必填
user_id: "", // 用户名 必填
password: "", // 密码 必填
confirm_password: "",
......@@ -164,7 +164,7 @@
},
formDataRules: {
oid: [
{ required: true, message: "请选择用户组织机构", trigger: "change" },
{ required: true, message: "请选择用户组织", trigger: "change" },
],
user_id: [
{ required: true, message: "请输入用户名", trigger: "blur" },
......@@ -302,4 +302,3 @@
}
}
</style>
\ No newline at end of file
<template>
<div class="h-full" @click="readFlag = false">
<el-config-provider>
<bg-menu v-if="menuShow" :path="nowParent.path" @open-msg="openMsg" />
<div v-if="pageShow" class="container" :class="menuShow ? '' : 'full_screen'">
<bg-nav
v-if="nowParent.children"
v-show="navShow"
:highlight-parent-rule="highlightParentRule"
width="208px"
:list="nowParent.children"
class="con-nav" />
<div class="bg-main view log_content_nor">
<router-view />
</div>
</div>
<div v-else-if="$route.path == '/login'" class="container">
<div class="bg-main view">
<login />
</div>
</div>
<div v-else-if="$route.path == '/404'" class="container">
<div class="bg-main view">
<page404 />
</div>
</div>
<msg v-model="readFlag" />
</el-config-provider>
</div>
</template>
<script setup>
import { computed, onBeforeMount, reactive, watch, ref, getCurrentInstance } from "vue";
import { useRoute } from "vue-router";
import store from "@/store";
import bgMenu from "@/components/bg-menu.vue";
import login from "@/page/login/index.vue";
import page404 from "@/page/404.vue";
import axios from "@/request/http.js";
import { clearCookie } from "@/services/cookie.js";
import { resetRouter } from "@/router/index";
const route = useRoute();
const { proxy } = getCurrentInstance();
const { $trace } = proxy;
const msgBoxFlag = computed(() => {
return store.state.msgBoxFlag;
});
const userInfo = computed(() => {
return store.state.userInfo;
});
const navMenu = computed(() => {
return store.state.menu;
});
const menuObj = computed(() => {
return store.state.menuObj;
});
const navShow = computed(() => {
return (
false ||
!(
excludeMenuArr.includes(route.path) ||
excludeMenuArr.includes(store.state.menuObj[route.path].source)
)
);
});
const pageShow = computed(() => {
return false || !["/404", "/login"].includes(route.path);
});
const rowPath = computed(() => {
if (pageShow.value && store.state.userInfo) {
return menuObj.value[route.path] && menuObj.value[route.path].rowPath;
} else {
return "";
}
});
const nowParent = computed(() => {
if (pageShow.value && store.state.userInfo) {
return rowPath.value ? navMenu.value[rowPath.value.slice(1, 2)] : "";
} else {
return "";
}
});
const menuShow = computed(() => {
return false || !["/ui-example"].includes(route.path);
});
watch(
() => msgBoxFlag.value,
(n, o) => {
readFlag.value = !readFlag.value;
}
);
watch(
() => userInfo.value,
(n, o) => {
this.initMsg();
}
);
const readFlag = ref(false);
const excludeMenuArr = reactive([
"/",
"/404",
"/login",
"/ability-manage/real-list/detail",
"/ability-manage/mock-list/detail",
"/ability-register/add/desc",
"/ability-register/edit/desc",
"/ability-register/add/preview",
"/ability-register/edit/preview",
"/ui-example",
"/ability-register/add/valid",
"/ability-manage/ability-maintain/detail",
"/ability-manage/sold-approval/detail",
"/ability-manage/sold-list/detail",
"/ability-manage/search-list/detail",
"/ability-manage/my-apply/detail",
"/ability-manage/my-apply/update",
"/ability-manage/ability-approval/detail",
"/shop",
"/shop/detail",
"/my-subscription",
"/my-subscription/ability-shop-apply",
"/my-subscription/ability-apply-success",
"/password",
"/app-manage/app-detail",
"/cloud-manage/cloud-detail",
"/cloud-manage/my-apply/resource",
"/app-manage/deployment-detail",
"/customer-support",
]);
onBeforeMount(() => {
initMsg();
getSysOptions();
});
/**
* 设置用户多久不操作就跳转到登录界面
* limit:用户无操作时常限制(分钟)
*/
const exitSystemAfterLimit = (limit) => {
window.lastOperateTime = new Date();
window.onload = addOperateListener;
setTimer(limit);
};
//绑定用户操作事件
const addOperateListener = () => {
document.addEventListener("mousemove", resetStartTime);
document.addEventListener("keydown", resetStartTime);
document.addEventListener("scroll", resetStartTime);
document.addEventListener("touchstart", resetStartTime);
};
//重置起始时间
const resetStartTime = () => {
window.lastOperateTime = new Date();
};
//设置定时器
const setTimer = (limit) => {
window.logTimer = setInterval(() => {
var currentTime = new Date();
var timeDiff = currentTime.getTime() - lastOperateTime.getTime();
if (timeDiff > limit * 60 * 1000) {
clearInterval(window.logTimer);
$axios.post("/apaas/system/v5/user/logout").then((res) => {
if (res.data.code == "200") {
window.location.href = "/apaas/manage/ui/#/login";
$store.commit("setUserInfo", null);
clearCookie("bgToken");
$message.success("退出成功");
resetRouter();
} else {
$message.error("退出失败");
}
});
}
}, 1000);
};
const getSysOptions = () => {
axios.get("/apaas/system/v5/sysOptions").then((res) => {
if (res.data.code == 200) {
const result = res.data.data || {};
if (result.session_validity) exitSystemAfterLimit(result.session_validity);
} else {
$message.error(res.data.data);
}
});
};
const openMsg = (data) => {
readFlag.value = !readFlag.value;
};
const initMsg = () => {
if (userInfo.value && userInfo.value && userInfo.value.system_id) {
$trace.setOptionValue("userId", userInfo.value.system_id);
$trace.setOptionValue("organization", userInfo.value.organization_id);
}
};
const pathToData = (data, path) => {
let arr = path.split(".");
let temp = null;
let tempName = "";
let tempPath = "";
arr.forEach((e, idx) => {
if (idx == 1) {
temp = data[e];
tempName = data[e].menuName;
tempPath = data[e].path;
data = data[e];
}
if (idx == 2) {
if (data.children && data.children.length) {
temp = data.children[e];
data = data.children[e];
}
}
});
return {
menuName: tempName,
path: tempPath,
children: [temp],
};
};
const highlightParentRule = (pathArr) => {
return pathArr.includes(route.path);
};
</script>
<style>
.h-full {
height: 100%;
}
.container {
width: 100%;
height: calc(100% - 56px);
overflow: hidden;
}
.full_screen {
height: 100%;
}
.full_screen .bg-main {
overflow-x: hidden;
}
.con-nav {
float: left;
}
.view {
height: 100%;
overflow-y: auto;
}
</style>
<template>
<div style="height:100%;">
<div style="height: 100%">
<router-view></router-view>
</div>
</template>
<script>
export default {
props: {
},
components: {
},
props: {},
components: {},
data() {
return {
};
},
watch: {
},
computed: {
},
created() {
},
mounted() {
},
methods: {
return {};
},
watch: {},
computed: {},
created() {},
mounted() {},
methods: {},
};
</script>
<style scoped>
</style>
<style scoped></style>
......@@ -107,6 +107,7 @@ const getSysOptions = () => {
axios.get(`/apaas/system/v5/sysOptions`).then((res) => {
if (res.data.code == 200) {
const result = res.data.data || {};
if (result.session_validity) exitSystemAfterLimit(result.session_validity);
if (result.license_dead_date && result.license_inform_day) {
calculateValidityDays(
new Date().getTime(),
......
......@@ -25,15 +25,22 @@
</div>
<div class="flex_right">
<div class="main_container">
<bg-filter-group @search="changeSearch" v-model="filter.search" placeholder="请输入关键字">
<template v-slot:left_action v-if="nodeClassifyId != '263758a4-0349-4d49-a816-e8ff8d33a8bb'">
<bg-filter-group
@search="changeSearch"
v-model="filter.search"
placeholder="请输入关键字">
<template
v-slot:left_action
v-if="nodeClassifyId != '263758a4-0349-4d49-a816-e8ff8d33a8bb'">
<div class="apaas_button">
<el-button type="primary" @click="backDict" v-if="dictLevel != 1">
<!-- <bg-icon style="font-size: 12px; color: #fff; margin-right: 8px" icon="#bg-ic-add"></bg-icon> -->
返回上级
</el-button>
<el-button type="primary" @click="register">
<bg-icon style="font-size: 12px; color: #fff; margin-right: 8px" icon="#bg-ic-add"></bg-icon>
<bg-icon
style="font-size: 12px; color: #fff; margin-right: 8px"
icon="#bg-ic-add"></bg-icon>
新增
</el-button>
</div>
......@@ -60,9 +67,14 @@
</bg-filter-group>
<div class="table_container">
<div class="table bg-scroll">
<bg-table ref="bgTable" :headers="isLang && dictLevel == 1 ? langHeaders : headers" :rows="tableRows" :isIndex="true" :stripe="true">
<bg-table
ref="bgTable"
:headers="headers"
:rows="tableRows"
:isIndex="true"
:stripe="true">
<template v-slot:name="{ row }">
<span class="can_click_text" @click="getChildren(row)" v-if="isLang && dictLevel == 1">
<span class="can_click_text" @click="getChildren(row)" v-if="row.children">
{{ row.name }}
</span>
<span v-else>
......@@ -81,17 +93,33 @@
</template>
<template v-slot:action="{ row }">
<!-- 除技术类型之外的字典可以删除 -->
<bg-table-btns2 :limit="3" v-if="nodeClassifyId !== '263758a4-0349-4d49-a816-e8ff8d33a8bb'">
<bg-table-btn @click="edit_row(row)" :disabled="row.state == 1">编辑</bg-table-btn>
<bg-table-btn @click="delete_row(row)" :disabled="row.state == 1">删除</bg-table-btn>
<bg-table-btn @click="moveRow(row, 1)" :disabled="!row.canMoveUp">上移</bg-table-btn>
<bg-table-btn @click="moveRow(row, 2)" :disabled="!row.canMoveDown">下移</bg-table-btn>
<bg-table-btns2
:limit="3"
v-if="nodeClassifyId !== '263758a4-0349-4d49-a816-e8ff8d33a8bb'">
<bg-table-btn @click="edit_row(row)" :disabled="row.state == 1"
>编辑</bg-table-btn
>
<bg-table-btn @click="delete_row(row)" :disabled="row.state == 1"
>删除</bg-table-btn
>
<bg-table-btn @click="moveRow(row, 1)" :disabled="!row.canMoveUp"
>上移</bg-table-btn
>
<bg-table-btn @click="moveRow(row, 2)" :disabled="!row.canMoveDown"
>下移</bg-table-btn
>
</bg-table-btns2>
<!-- 技术类型字典不可删除 -->
<bg-table-btns2 :limit="3" v-else>
<bg-table-btn @click="edit_row(row)" :disabled="row.state == 1">编辑</bg-table-btn>
<bg-table-btn @click="moveRow(row, 1)" :disabled="!row.canMoveUp">上移</bg-table-btn>
<bg-table-btn @click="moveRow(row, 2)" :disabled="!row.canMoveDown">下移</bg-table-btn>
<bg-table-btn @click="edit_row(row)" :disabled="row.state == 1"
>编辑</bg-table-btn
>
<bg-table-btn @click="moveRow(row, 1)" :disabled="!row.canMoveUp"
>上移</bg-table-btn
>
<bg-table-btn @click="moveRow(row, 2)" :disabled="!row.canMoveDown"
>下移</bg-table-btn
>
</bg-table-btns2>
</template>
</bg-table>
......@@ -108,7 +136,11 @@
</div>
</div>
<!-- 新增/编辑弹窗 -->
<el-dialog class="dialog_box" :title="addType == 1 ? '新增' : '编辑'" v-model="addDialog" width="758px">
<el-dialog
class="dialog_box"
:title="addType == 1 ? '新增' : '编辑'"
v-model="addDialog"
width="758px">
<el-form ref="bgForm" :model="formData" :rules="rules" label-width="80px" class="bg_form">
<el-form-item label="名称" prop="name">
<el-input
......@@ -176,21 +208,15 @@
</template>
<script setup>
import { reactive, ref, onBeforeMount, toRefs, computed, watch, nextTick } from "vue";
import { useRouter } from "vue-router";
import { reactive, ref, onBeforeMount, toRefs, computed, watch, nextTick, watchEffect } from "vue";
import { ElMessage } from "element-plus";
import axios from "../../../../request/http.js";
import { Search } from "@element-plus/icons-vue";
import bgBreadcrumb from "@/components/bg-breadcrumb.vue";
const bgForm = ref(null);
const state = reactive({
bgForm,
typeList: [], // 分类数据
typeKeyword: "", // 分类删选关键词
nodeClassifyId: null, // 当前选中分类的uuid 用于新增字典
nodeId: null, // 当前选中分类的id 用于请求列表
timer: null, // 定时器
headers: [
const headers = computed(() => {
let _headers = [
{
label: "名称",
prop: "name",
......@@ -215,37 +241,29 @@ const state = reactive({
width: 176,
fixed: "right",
},
], // 表格数据表头
langHeaders: [
{
label: "名称",
prop: "name",
},
{
];
if (state.nodeClassifyId === "59315100-5c2a-4381-83fe-32934605f0a9") {
_headers.splice(1, 0, {
label: "版本数",
prop: "total_children",
},
{
label: "描述",
prop: "describe",
minWidth: 360,
},
{
label: "更新时间",
prop: "updated_time",
width: 220,
},
{
label: "是否启用",
prop: "state",
},
{
label: "操作",
prop: "action",
width: 176,
fixed: "right",
},
],
});
}
if (state.nodeClassifyId === "b3a083ee-a8c1-8ca4-f9a1-ea01692a0f1a") {
_headers.splice(1, 0, {
label: "服务名称",
prop: "service_name",
});
}
return _headers;
});
const state = reactive({
bgForm,
typeList: [], // 分类数据
typeKeyword: "", // 分类删选关键词
nodeClassifyId: null, // 当前选中分类的uuid 用于新增字典
nodeId: null, // 当前选中分类的id 用于请求列表
timer: null, // 定时器
tableRows: [], // 表格数据
tableTotal: 0, // 表格数据条数
filter: {
......@@ -289,27 +307,23 @@ const state = reactive({
fatherRow: null,
});
const isLang = computed(() => {
return state.nodeClassifyId == "59315100-5c2a-4381-83fe-32934605f0a9"
})
const dictLevel = ref(1)
const dictLevel = ref(1);
const getChildren = (row) => {
dictLevel.value = 2
state.tableRows = row.children || []
state.tableTotal = row.total_children
state.fatherRow = row
}
dictLevel.value = 2;
state.tableRows = row.children || [];
state.tableTotal = row.total_children;
state.fatherRow = row;
};
const backDict = () => {
dictLevel.value = 1
state.fatherRow = null
dictLevel.value = 1;
state.fatherRow = null;
changePage(1);
}
};
const nodeClick = (item) => {
state.nodeId = item.id;
dictLevel.value = 1
state.fatherRow = null
dictLevel.value = 1;
state.fatherRow = null;
state.nodeClassifyId = item.classify_id;
state.filter = {
state: "",
......@@ -380,14 +394,16 @@ const getTableRows = () => {
})
.then((res) => {
if (res.data.code == 200) {
let data = res.data.data || []
let data = res.data.data || [];
if (dictLevel.value == 1) {
state.tableRows = data;
state.tableTotal = res.data.total;
}else {
let row = data.filter(e => {return e.dict_id == state.fatherRow.dict_id})
state.tableRows = row[0].children
state.tableTotal = row[0].total_children
} else {
let row = data.filter((e) => {
return e.dict_id == state.fatherRow.dict_id;
});
state.tableRows = row[0].children;
state.tableTotal = row[0].total_children;
}
if (state.tableRows.length > 0) {
state.tableRows.forEach((e) => {
......@@ -455,7 +471,7 @@ const edit_row = (row) => {
name: state.actionRow.name,
describe: state.actionRow.describe,
state: state.actionRow.state,
p_dict_id: state.actionRow.p_dict_id
p_dict_id: state.actionRow.p_dict_id,
};
} else {
ElMessage.error(res.data.data);
......@@ -580,7 +596,6 @@ const {
typeList,
typeKeyword,
nodeClassifyId,
headers,
tableRows,
tableTotal,
filter,
......@@ -590,7 +605,6 @@ const {
addDialog,
formData,
rules,
langHeaders,
} = toRefs(state);
</script>
......
......@@ -6,7 +6,7 @@
:rules="formRules"
ref="systemRef"
style="max-width: 66%">
<el-form-item label="所属机构" prop="organization_id">
<el-form-item label="所属组织" prop="organization_id">
<el-tree-select
v-model="systemForm.organization_id"
:data="orgData"
......@@ -225,7 +225,7 @@ const checkPhoneRepet = (rule, value, callback) => {
};
const formRules = reactive({
organization_id: [{ required: true, message: "请选择组织机构", trigger: "change" }],
organization_id: [{ required: true, message: "请选择组织", trigger: "change" }],
business_name: [
{ required: true, message: "请输入业务系统名称", trigger: "blur" },
{ max: 50, message: "业务系统名称最大长度为50个字符", trigger: "blur" },
......
......@@ -46,7 +46,7 @@ import bgBreadcrumb from "@/components/bg-breadcrumb.vue";
const route = useRoute();
const baseInfo = reactive([
{
name: "所属机构",
name: "所属组织",
value: "",
nameWidth: 130,
},
......
......@@ -3,7 +3,7 @@
<bg-breadcrumb></bg-breadcrumb>
<div class="flex_row">
<div class="flex_left bgc_white">
<div class="tree_header">政务机构</div>
<div class="tree_header">政务组织</div>
<div class="tree_content">
<div class="search">
<el-input v-model="filterTree" placeholder="请输入组织名称搜索" :prefix-icon="Search" />
......@@ -207,7 +207,7 @@ const headers = ref([
prop: "system_account",
},
{
label: "所属机构",
label: "所属组织",
prop: "organization_name",
minWidth: 180,
},
......
......@@ -38,7 +38,7 @@
<el-form-item label="审批结果" prop="status">
<el-radio-group v-model="instanceData.formData.status">
<el-radio :label="1"> 通过 </el-radio>
<el-radio :label="0"> 驳回 </el-radio>
<el-radio :label="2"> 驳回 </el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="审批意见" prop="comments">
......@@ -76,7 +76,7 @@ const instanceData = reactive({
approveBasicInfo: [
{
key: "organization_name",
label: "所属机构",
label: "所属组织",
value: "",
// slot: "approvalStatus",
},
......
......@@ -17,6 +17,7 @@ import bgBreadcrumb from "@/components/bg-breadcrumb.vue";
import { useRoute } from "vue-router";
import axios from "@/request/http.js";
import { ElMessage } from "element-plus";
import { dateStringTransform } from "@/services/helper.js";
const route = useRoute();
......@@ -24,7 +25,7 @@ const instanceData = reactive({
approveBasicInfo: [
{
key: "organization_name",
label: "所属机构",
label: "所属组织",
value: "",
// slot: "approvalStatus",
},
......
......@@ -2,7 +2,7 @@
<div class="page_container">
<bg-breadcrumb></bg-breadcrumb>
<div class="main_container">
<bg-filter-group @search="changeSearch" v-model="filter.search" placeholder="请输入业务系统名称、账号或所属机构">
<bg-filter-group @search="changeSearch" v-model="filter.search" placeholder="请输入业务系统名称、账号或所属组织">
<template v-slot:filter_group>
<div class="left-filter filter_list">
<div class="filter_item">
......@@ -133,7 +133,7 @@ const state = reactive({
minWidth: 120,
},
{
label: "所属机构",
label: "所属组织",
prop: "organization_name",
width: 200,
},
......
......@@ -5,7 +5,7 @@
<bg-filter-group
@search="changeSearch"
v-model="filter.search"
placeholder="请输入账号、手机号和所属机构">
placeholder="请输入账号、手机号和所属组织">
<template v-slot:left_action>
<div class="apaas_button">
<el-button type="primary" @click="exportFile">
......@@ -206,7 +206,7 @@ const state = reactive({
// width: 200,
},
{
label: "所属机构",
label: "所属组织",
prop: "name",
// width: 120,
},
......
......@@ -3,7 +3,22 @@
<bg-breadcrumb></bg-breadcrumb>
<div class="page_content">
<bg-form-gap title="详情"></bg-form-gap>
<bg-detail-table2 class="detail_info" :list="instanceData.detailInfo"> </bg-detail-table2>
<bg-detail-table2 class="detail_info" :list="instanceData.detailInfo">
<template #req_url_value="{ data }">
<el-popover placement="top-start" :width="600" trigger="hover" :content="data.value">
<template #reference>
<p class="show_in_line">{{ data.value }}</p>
</template>
</el-popover>
</template>
<template #res_fields_value="{ data }">
<el-popover placement="bottom-start" :width="800" trigger="hover" :content="data.value">
<template #reference>
<p class="show_in_line">{{ data.value }}</p>
</template>
</el-popover>
</template>
</bg-detail-table2>
</div>
</div>
</template>
......@@ -37,7 +52,7 @@ const instanceData = reactive({
},
{
key: "org_name",
label: "所属机构",
label: "所属组织",
value: "",
},
{
......@@ -81,6 +96,7 @@ const instanceData = reactive({
label: "请求地址",
value: "",
width: "100%",
childSlot: "req_url_value",
},
{
key: "req_param",
......@@ -96,6 +112,7 @@ const instanceData = reactive({
key: "res_fields",
label: "返回参数",
value: "",
childSlot: "res_fields_value",
},
],
});
......@@ -130,5 +147,11 @@ const getDetailInfo = () => {
margin-bottom: 24px;
width: 960px;
}
.show_in_line {
overflow: hidden;
width: 824px;
text-overflow: ellipsis;
white-space: nowrap;
}
}
</style>
......@@ -5,7 +5,7 @@
<bg-filter-group
@search="changeSearch"
v-model="filter.search"
placeholder="请输入账号、手机号和所属机构">
placeholder="请输入账号、手机号和所属组织">
<template v-slot:left_action>
<div class="apaas_button">
<el-button type="primary" @click="exportFile">
......
......@@ -3,7 +3,7 @@
<bg-breadcrumb></bg-breadcrumb>
<div class="flex_row">
<div class="flex_left bgc_white">
<div class="tree_header">政务机构</div>
<div class="tree_header">政务组织</div>
<div class="tree_content">
<div class="search">
<el-input v-model="search" placeholder="请输入组织名称搜索" :prefix-icon="Search" @input="searchChange" />
......@@ -282,17 +282,17 @@ const toOrgDetail = () => {
};
const baseInfo = reactive([
{
name: "机构类型",
name: "组织类型",
value: "",
nameWidth: 130,
},
{
name: "组织机构代码",
name: "组织代码",
value: "",
nameWidth: 130,
},
{
name: "机构名称",
name: "组织名称",
value: "",
callback: toOrgDetail,
nameWidth: 130,
......@@ -315,12 +315,12 @@ const baseInfo = reactive([
]);
const baseInfo2 = reactive([
{
name: "机构名称",
name: "组织名称",
value: "",
nameWidth: 130,
},
{
name: "组织机构代码",
name: "组织代码",
value: "",
nameWidth: 130,
},
......
......@@ -60,12 +60,12 @@ const route = useRoute();
const baseInfo = reactive([
{
name: "机构名称",
name: "组织名称",
value: "",
nameWidth: 130,
},
{
name: "组织机构代码",
name: "组织代码",
value: "",
nameWidth: 130,
},
......
......@@ -13,10 +13,10 @@
<el-checkbox v-model="orgForm.level" @change="isTop" label="顶级" />
</el-form-item>
</el-form-item>
<el-form-item label="政务机构名称" prop="name">
<el-form-item label="政务组织名称" prop="name">
<el-input v-model="orgForm.name" />
</el-form-item>
<el-form-item label="组织机构代码" prop="organization_code">
<el-form-item label="组织代码" prop="organization_code">
<el-input v-model="orgForm.organization_code" />
</el-form-item>
<el-form-item label="组织介绍" prop="description">
......@@ -75,13 +75,13 @@ const checkName = (rule, value, callback) => {
const formRules = reactive({
p_organization_id: [{ required: true, message: "输入上级目录", trigger: "blur" }],
name: [
{ required: true, message: "请输入机构名称", trigger: "blur" },
{ max: 50, message: "机构名称最大长度为50位", trigger: "blur" },
{ required: true, message: "请输入组织名称", trigger: "blur" },
{ max: 50, message: "组织名称最大长度为50位", trigger: "blur" },
{ validator: checkName, trigger: "blur" },
],
organization_code: [
{ required: true, message: "请输入组织机构代码", trigger: "blur" },
{ max: 18, message: "组织机构代码最大长度为18位", trigger: "blur" },
{ required: true, message: "请输入组织代码", trigger: "blur" },
{ max: 18, message: "组织代码最大长度为18位", trigger: "blur" },
{ validator: checkCode, trigger: "blur" },
],
});
......
......@@ -6,7 +6,7 @@
:rules="orgAccountFormRules"
ref="orgformAccountRef"
style="max-width: 66%">
<el-form-item label="所属组织机构" prop="organization_id">
<el-form-item label="所属组织" prop="organization_id">
<el-tree-select
v-model="orgAccountForm.organization_id"
:data="orgData"
......
......@@ -19,7 +19,7 @@
<div class="dashed_line"></div>
</div>
<div class="info-form">
<el-form-item prop="organization_id" label="所属机构">
<el-form-item prop="organization_id" label="所属组织">
<el-tree-select
v-model="infoForm.organization_id"
:data="orgData"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment