Commit 51c5b5a5 authored by 张俊's avatar 张俊
parents 1207727b ff72b7eb
This diff is collapsed.
......@@ -151,8 +151,7 @@ export default {
},
transparentBg() {
return (
this.documentScrollTop < 180 &&
(this.$route.name === "shopRecommend" || this.$route.name === "shopSearch")
this.documentScrollTop < 180 && (this.$route.name === "shopRecommend" || this.$route.name === "shopSearch")
);
},
isFront() {
......@@ -236,7 +235,7 @@ export default {
if (n == "logout") {
this.$axios.post("/apaas/system/v5/user/logout").then((res) => {
if (res.data.code == "200") {
window.location.href = "/apaas/manage/ui/#/login";
window.location.href = "/so/manage/ui//#/login";
this.$store.commit("setUserInfo", null);
clearCookie("bgToken");
this.$message.success("退出成功");
......@@ -247,7 +246,7 @@ export default {
});
} else if (n == "login") {
let path = this.$route.path;
window.location.href = `/apaas/manage/ui/#/login?redirect=${path}`;
window.location.href = `/so/manage/ui//#/login?redirect=${path}`;
} else {
//是否有子路由,有则寻找子路由的第一个进行跳转,无则直接进行跳转
//使用childMenuAction是模拟template中,子路径点击跳转使用childMenuAction,
......
......@@ -123,75 +123,59 @@
</div>
</div>
<!-- todo: 推送提醒 -->
<!-- <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
v-model.trim="formData.name"
show-word-limit
:maxlength="
nodeClassifyId == 'eb9c7d70-c123-42b7-8e61-dde1b022b669'
? 6
: nodeClassifyId == 'efd9ec3b-7f18-49e2-9d88-bcca022243bb'
? 4
: nodeClassifyId == '949a1138-4995-464e-97a9-424d097eb271'
? 2
: 20
"
placeholder="请输入名称"></el-input>
</el-form-item>
<el-form-item label="描述" prop="describe">
<el-input
v-model="formData.describe"
type="textarea"
:autosize="{ minRows: 5 }"
show-word-limit
maxlength="200"
resize="vertical"
placeholder="请输入描述"></el-input>
</el-form-item>
<el-form-item label="是否启用" prop="state" style="margin-bottom: 0px">
<el-switch
class="bg-switch-ele"
v-model="formData.state"
:active-value="1"
:inactive-value="0"
inline-prompt
active-text="是"
inactive-text="否" />
<el-dialog title="推送提醒" v-model="pushDialog" width="780px" :before-close="cancelPushDialog">
<div class="warning_info">
<bg-icon
style="font-size: 12px; color: #a9b1c7; margin-right: 8px; vertical-align: middle"
icon="#bg-ic-s-circle-tips"></bg-icon
>该推送为临时推送,可调整推送人员,仅本次有效!如固定通知人员,则前往【预警规则设置】调整预警内容
</div>
<el-form ref="pushForm" :model="pushFormData" :rules="pushRules" label-width="120px" class="bg_form">
<el-form-item label="预警工单推送" prop="method" style="margin-bottom: 24px">
<el-checkbox-group v-model="pushFormData.method">
<el-checkbox :label="1">钉钉</el-checkbox>
<el-checkbox :label="2">短信</el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-form>
<user-input-table v-if="userTableFlag" ref="userTable" :data="userData" @change="changeData" />
<template v-slot:footer>
<div class="apaas_button">
<el-button type="default" @click="addDialog = false">取 消</el-button>
<el-button type="primary" @click="addConfirm">保 存</el-button>
<el-button type="default" @click="cancelPushDialog"></el-button>
<el-button type="primary" @click="pushConfirm">确定</el-button>
</div>
</template>
</el-dialog> -->
</el-dialog>
<!-- todo:关闭提醒 -->
<!-- <el-dialog
<!-- 关闭提醒 -->
<el-dialog
class="dialog_box"
title="提示"
v-model="dialogDelete"
title="关闭预警"
v-model="closeWarningDialog"
width="400px"
:before-close="
() => {
dialogDelete = false;
}
">
<div>确定要删除此字典值吗?</div>
:before-close="cancelCloseWarningDialog">
<el-form ref="closeForm" :model="closeFormData" :rules="closeRules" label-width="80px" class="bg_form">
<el-form-item label="关闭备注" prop="close_notes">
<el-input
v-model="closeFormData.close_notes"
type="textarea"
:autosize="{ minRows: 2 }"
show-word-limit
maxlength="30"
resize="vertical"
placeholder="请输入内容"></el-input>
</el-form-item>
<el-form-item label="" prop="close_remind" style="margin-bottom: 0px">
<el-checkbox v-model="closeFormData.close_remind" label="三天内将不再推送该预警信息" />
</el-form-item>
</el-form>
<template v-slot:footer>
<div class="apaas_button">
<el-button type="default" @click="dialogDelete = false">取 消</el-button>
<el-button type="primary" @click="deleteData">确 定</el-button>
<el-button type="default" @click="cancelCloseWarningDialog"></el-button>
<el-button type="primary" @click="confirmClose"></el-button>
</div>
</template>
</el-dialog> -->
</el-dialog>
</div>
</template>
......@@ -201,11 +185,14 @@ 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";
import userInputTable from "./user-input-table.vue";
const bgForm = ref(null);
const dataTable = ref(null);
const closeForm = ref(null);
const userTable = ref(null);
const pushForm = ref(null);
const state = reactive({
bgForm,
warningTypes: [
{
name: "全部",
......@@ -338,25 +325,28 @@ const state = reactive({
limit: 10,
}, // 表格筛选项
actionRow: null, // 当前操作的数据
dialogDelete: false, // 删除弹窗
addType: 0, //
addDialog: false,
formData: {
name: "",
describe: "",
state: 1,
p_dict_id: "",
closeWarningDialog: false, // 删除弹窗
closeFormData: {
close_notes: "",
close_remind: false,
},
closeRules: {
close_notes: [{ required: true, message: "请输入关闭备注", trigger: "blur" }],
},
pushDialog: false,
userData: [],
pushFormData: {
method: [],
},
rules: {
name: [{ required: true, message: "请输入名称", trigger: "blur" }],
describe: [
{ required: true, message: "请输入描述", trigger: "blur" },
{ max: 200, message: "描述最大为200字", trigger: "blur" },
],
state: [{ required: true, message: "请选择是否启用", trigger: "change" }],
pushRules: {
method: [{ type: "array", required: true, message: "请最少选择一种推送方式", trigger: "change" }],
},
});
const userTableFlag = computed(() => {
return !!state.pushDialog;
});
const selectRows = (data) => {
state.selected = data.selection;
};
......@@ -424,7 +414,7 @@ const getTableRows = () => {
notice_people_num: 2,
push_times: 2,
last_push_time: "2020-01-01 00:00:00",
state: 1,
state: 0,
},
{
id: 2,
......@@ -474,19 +464,87 @@ const batchPush = () => {
const pushWarning = (row) => {
state.actionRow = row;
console.log("推送提醒");
state.userData = [
{
account: 1,
name: "张一",
mobile: "13111111111",
},
{
account: 2,
name: "张二二",
mobile: "13222222222",
},
{
account: 4,
name: "张四三",
mobile: "13443434344",
},
];
state.pushDialog = true;
}; // 推送提醒
const changeData = (data) => {
state.userData = data.data;
};
const cancelPushDialog = () => {
pushForm.value.resetFields();
state.pushDialog = false;
}; // 预警推送弹窗取消按钮:重置表单
const pushConfirm = () => {
pushForm.value.validate((valid) => {
if (valid) {
console.log(state.actionRow.id, state.userData);
console.log(state.pushFormData);
cancelPushDialog();
}
});
};
const closeWarning = (row) => {
state.actionRow = row;
state.closeWarningDialog = true;
console.log("关闭预警");
}; // 关闭预警
const cancelCloseWarningDialog = () => {
closeForm.value.resetFields();
state.closeWarningDialog = false;
}; // 关闭预警弹窗取消按钮:重置表单
const confirmClose = () => {
closeForm.value.validate((valid) => {
if (valid) {
console.log(state.actionRow.id);
console.log(state.closeFormData);
cancelCloseWarningDialog();
}
});
}; // 关闭预警弹窗确定按钮:提交表单
onBeforeMount(() => {
getTableRows();
});
const { headers, tableRows, tableTotal, filter, warningTypes, warningTargets, riskLevels, stateOptions } =
toRefs(state);
const {
headers,
tableRows,
tableTotal,
filter,
warningTypes,
warningTargets,
riskLevels,
stateOptions,
closeWarningDialog,
closeFormData,
closeRules,
pushDialog,
userData,
pushFormData,
pushRules,
} = toRefs(state);
</script>
<style lang="scss" scoped>
......@@ -548,7 +606,7 @@ const { headers, tableRows, tableTotal, filter, warningTypes, warningTargets, ri
width: 100%;
box-sizing: border-box;
.el-form-item {
margin-bottom: 24px;
margin-bottom: 16px;
:deep().el-form-item__label {
line-height: 36px;
height: 36px;
......@@ -557,26 +615,19 @@ const { headers, tableRows, tableTotal, filter, warningTypes, warningTargets, ri
width: 100%;
.el-textarea {
:deep().el-input__count {
bottom: -16px;
bottom: 6px;
right: 4px;
font-family: Roboto-Regular;
color: #a9b1c7;
}
}
.bg-switch-ele {
width: 52px;
height: 24px;
:deep().el-switch__core {
width: 100%;
height: 24px;
.el-switch__inner,
.el-switch__action {
top: 3px;
}
}
}
}
}
}
:deep().dialog_box {
.el-dialog__body {
padding-bottom: 0;
}
}
}
</style>
<template>
<el-form ref="ruleFormRef" class="ruleForm" :model="tableRows" :size="formSize" :rules="formRules">
<bg-table-pro showIndex :headers="headers" :data="tableRows" ref="input-table" :border="true" :stripe="false">
<template v-slot:account="{ row, index }">
<el-form-item :prop="`[${index}].account`" :rules="formRules.account" style="width: 100%">
<el-select
v-model="row.account"
placeholder="请选择帐号"
style="width: 100%"
@change="changeAccount(row)"
:disabled="disabled">
<el-option
v-for="(item, index) in userLists"
:key="'userItem' + index"
:disabled="item.disabled"
:label="item.account"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</template>
<template v-slot:name="{ row, index }">
<el-form-item :prop="`[${index}].name`" :rules="formRules.name" style="width: 100%">
<el-input @change="changeName" placeholder="请输入姓名" :disabled="disabled" v-model.trim="row.name" />
</el-form-item>
</template>
<template v-slot:mobile="{ row, index }">
<el-form-item :prop="`[${index}].mobile`" :rules="formRules.mobile" style="width: 100%">
<el-input
@change="changeMobile"
placeholder="请输入联系方式"
:disabled="disabled"
v-model.trim="row.mobile" />
</el-form-item>
</template>
<template v-slot:action="{ row, index }">
<bg-table-btn
:disabled="disabled || !canAdd"
:click="
() => {
addParam(index);
}
"
>增加</bg-table-btn
>
<bg-table-btn
:disabled="disabled"
:click="
() => {
removeParam(row, index);
}
">
删除
</bg-table-btn>
</template>
</bg-table-pro>
</el-form>
</template>
<script setup>
import { reactive, toRefs, onBeforeMount, onMounted, ref, getCurrentInstance, watch, computed } from "vue";
import { v4 as uuidv4 } from "uuid";
import { validatePhone } from "@/services/rules.js";
const props = defineProps({
data: {
type: Array,
default: () => [],
},
disabled: {
type: Boolean,
default: false,
},
});
const emit = defineEmits(["change"]);
const formSize = ref("default");
const ruleFormRef = ref(null);
const formRules = reactive({
name: [
{
required: true,
message: "请输入键",
trigger: "blur",
},
{
max: 50,
message: "最多50个字符",
trigger: "blur",
},
],
account: [
{
required: true,
message: "请选择帐号",
trigger: "change",
},
],
mobile: [
{
required: true,
message: "请输入联系方式",
trigger: "blur",
},
{ validator: validatePhone, trigger: "blur" },
],
});
const headers = reactive([
{
label: "帐号",
prop: "account",
required: true,
},
{
label: "姓名",
prop: "name",
required: true,
},
{
label: "联系方式",
prop: "mobile",
required: true,
},
{
label: "操作",
prop: "action",
width: 120,
},
]);
const state = reactive({
tableRows: [],
userLists: [
{
account: "admin",
id: 1,
name: "张一",
mobile: "13111111111",
},
{
account: "ys-admin",
id: 2,
name: "张二",
mobile: "13222222222",
},
{
account: "yf-user",
id: 3,
name: "张三",
mobile: "13333333333",
},
{
account: "putong",
id: 4,
name: "张四",
mobile: "13444444444",
},
],
});
watch(
() => state.tableRows,
(n, o) => {
let list = state.tableRows.map((e) => {
return e.account;
});
state.userLists.forEach((e) => {
if (list.indexOf(e.id) > -1) {
e.disabled = true;
} else {
e.disabled = false;
}
});
},
{
deep: true,
}
);
const canAdd = computed(() => {
return state.tableRows.length >= 5 ? false : true;
}); // 最多五条数据,控制下新增按钮的禁用
onBeforeMount(() => {
initTable();
});
var initTable = () => {
if (props.data && props.data.length >= 1) {
state.tableRows = props.data;
} else {
state.tableRows = [];
addParam(0);
}
};
var createRow = () => {
return {
id: uuidv4(),
account: "",
name: "",
mobile: "",
};
};
var addParam = (index) => {
state.tableRows.splice(index + 1, 0, createRow());
};
var removeParam = (row, index) => {
state.tableRows.splice(index, 1);
if (state.tableRows.length === 0) {
addParam(0);
}
};
const changeAccount = (row) => {
state.userLists.forEach((e) => {
if (e.id == row.account) {
row.name = e.name;
row.mobile = e.mobile;
}
});
emit("change", {
type: "account",
data: state.tableRows,
});
};
const changeName = () => {
emit("change", {
type: "name",
data: state.tableRows,
});
};
const changeMobile = () => {
emit("change", {
type: "mobile",
data: state.tableRows,
});
};
var getInputData = () => {
let lastData = [];
let tempObj = {};
state.tableRows.forEach((e) => {
tempObj[e.name] = e;
});
for (const key in tempObj) {
if (key && tempObj[key].value) {
lastData.push(tempObj[key]);
}
}
return lastData;
};
const { tableRows, userLists } = toRefs(state);
//暴露获取数据方法
defineExpose({
getInputData,
initTable,
});
</script>
<style scoped></style>
......@@ -3,98 +3,84 @@
import { createRouter, createWebHashHistory } from "vue-router";
import store from "../store";
//写入初始必须有的路由
//或者隐藏式路由,不会表现在菜单上,但是需要存在的路由
const routes = [{
path: "/login",
name: "login",
show: true,
component: () =>
import ("../page/login/index.vue"),
},
{
path: "/register",
name: "register",
show: true,
component: () =>
import ("../page/register/index.vue"),
},
{
path: "/password",
name: "password",
show: true,
component: () =>
import ("../page/password/index.vue"),
},
{
path: "/",
name: "index",
component: () =>
import ("../page/welcom.vue"),
},
{
path: "/404",
show: true,
component: () =>
import ("../page/404.vue"),
},
const routes = [
{
path: "/login",
name: "login",
show: true,
component: () => import("../page/login/index.vue"),
},
{
path: "/register",
name: "register",
show: true,
component: () => import("../page/register/index.vue"),
},
{
path: "/",
name: "index",
component: () => import("../page/welcom.vue"),
},
{
path: "/404",
show: true,
component: () => import("../page/404.vue"),
},
];
//重新创建router
function newRouterFunc() {
return createRouter({
history: createWebHashHistory(),
routes,
});
return createRouter({
history: createWebHashHistory(),
routes,
});
}
const router = newRouterFunc();
function inWhiteList(toPath) {
//配置白名单
const whiteList = ['/login']
const path = whiteList.find((value) => {
// 使用正则匹配
const reg = new RegExp('^' + value)
return reg.test(toPath)
})
return !!path
//配置白名单
const whiteList = ["/login"];
const path = whiteList.find((value) => {
// 使用正则匹配
const reg = new RegExp("^" + value);
return reg.test(toPath);
});
return !!path;
}
router.beforeEach((to, from, next) => {
const userInfo = store.state.userInfo
//已登录不可跳转登陆页
if (userInfo && to.path == '/login') {
next({ path: from.path })
}
// 检查to.path是否存在于免登陆白名单
if (inWhiteList(to.path)) {
next()
} else {
// 判断是否已经登录,未登录则重定向到首页或其他页面(通过query传参记录原来的路径)
// 根据配置判断是否跳转第三方登录,跳转第三方登录则不跳login
// axios封装中也需要对是否登录过期进行判断,如果登录过期,则跳转登录页,具体跳转地址根据配置来·
// if (!userInfo) {
// next({
// path: '/login',
// })
// } else {
// }
}
//判读是否匹配,否则跳转404
if (to.matched.length !== 0) {
next()
} else {
return next({ path: '/404' })
}
})
const userInfo = store.state.userInfo;
//已登录不可跳转登陆页
if (userInfo && to.path == "/login") {
next({ path: from.path });
}
// 检查to.path是否存在于免登陆白名单
if (inWhiteList(to.path)) {
next();
} else {
// 判断是否已经登录,未登录则重定向到首页或其他页面(通过query传参记录原来的路径)
// 根据配置判断是否跳转第三方登录,跳转第三方登录则不跳login
// axios封装中也需要对是否登录过期进行判断,如果登录过期,则跳转登录页,具体跳转地址根据配置来·
// if (!userInfo) {
// next({
// path: '/login',
// })
// } else {
// }
}
//判读是否匹配,否则跳转404
if (to.matched.length !== 0) {
next();
} else {
return next({ path: "/404" });
}
});
// 在路由完成初始导航时调用,如果有异步操作放置到这里
// 请求相应的角色和菜单
......@@ -102,38 +88,33 @@ router.beforeEach((to, from, next) => {
// generateRoutes()
// })
function addRoute(router, routers) {
routers.forEach(e => {
router.addRoute(e)
if (e.children && e.children.length) {
addRoute(router, e.children)
}
});
routers.forEach((e) => {
router.addRoute(e);
if (e.children && e.children.length) {
addRoute(router, e.children);
}
});
}
export function generateRoutes() {
const _asyncRoutes = store.state.route
if (_asyncRoutes) {
//动态添加路由
addRoute(router, _asyncRoutes)
}
const _asyncRoutes = store.state.route;
router.addRoute({
path: '/:pathMatch(.*)',
redirect: '/404'
})
if (_asyncRoutes) {
//动态添加路由
addRoute(router, _asyncRoutes);
}
router.addRoute({
path: "/:pathMatch(.*)",
redirect: "/404",
});
}
//新创建一个router替代之前的router,并把matcher方法替换成新的router的matcher
export function resetRouter() {
const newRouter = newRouterFunc()
router.matcher = newRouter.matcher
const newRouter = newRouterFunc();
router.matcher = newRouter.matcher;
}
export default router
\ No newline at end of file
export default router;
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