mirror of
https://github.com/certd/certd.git
synced 2026-05-15 12:37:30 +08:00
Merge branch 'v2-dev' into v2_admin_mode
This commit is contained in:
@@ -23,7 +23,7 @@ defineOptions({
|
||||
|
||||
const props = defineProps<
|
||||
{
|
||||
watches: string[];
|
||||
watches?: string[];
|
||||
} & ComponentPropsType
|
||||
>();
|
||||
|
||||
@@ -48,6 +48,18 @@ const message = ref("");
|
||||
const hasError = ref(false);
|
||||
const loading = ref(false);
|
||||
|
||||
function getInputFromForm(form: any, pluginType: string) {
|
||||
let input: any = {};
|
||||
if (pluginType === "plugin") {
|
||||
input = form?.input || {};
|
||||
} else if (pluginType === "access") {
|
||||
input = form?.access || {};
|
||||
} else {
|
||||
input = form || {};
|
||||
}
|
||||
return input;
|
||||
}
|
||||
|
||||
const getOptions = async () => {
|
||||
if (loading.value) {
|
||||
return;
|
||||
@@ -63,15 +75,14 @@ const getOptions = async () => {
|
||||
}
|
||||
const pluginType = getPluginType();
|
||||
const { form } = getScope();
|
||||
const input = (pluginType === "plugin" ? form?.input : form) || {};
|
||||
|
||||
const input = getInputFromForm(form, pluginType);
|
||||
for (let key in define.input) {
|
||||
const inWatches = props.watches?.includes(key);
|
||||
const inputDefine = define.input[key];
|
||||
if (inWatches && inputDefine.required) {
|
||||
const value = input[key];
|
||||
if (value == null || value === "") {
|
||||
console.log("remote-select required", key);
|
||||
console.log("remote-auto-complete required", key);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -129,12 +140,14 @@ watch(
|
||||
() => {
|
||||
const pluginType = getPluginType();
|
||||
const { form, key } = getScope();
|
||||
const input = (pluginType === "plugin" ? form?.input : form) || {};
|
||||
const watches = {};
|
||||
for (const key of props.watches) {
|
||||
//@ts-ignore
|
||||
watches[key] = input[key];
|
||||
const input = getInputFromForm(form, pluginType);
|
||||
const watches: any = {};
|
||||
if (props.watches && props.watches.length > 0) {
|
||||
for (const key of props.watches) {
|
||||
watches[key] = input[key];
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
form: watches,
|
||||
key,
|
||||
@@ -144,6 +157,9 @@ watch(
|
||||
const { form } = value;
|
||||
const oldForm: any = oldValue?.form;
|
||||
let changed = oldForm == null || optionsRef.value.length == 0;
|
||||
if (!props.watches || props.watches.length === 0) {
|
||||
return;
|
||||
}
|
||||
for (const key of props.watches) {
|
||||
//@ts-ignore
|
||||
if (oldForm && form[key] != oldForm[key]) {
|
||||
|
||||
@@ -57,7 +57,7 @@ const VNodes = defineComponent({
|
||||
|
||||
const props = defineProps<
|
||||
{
|
||||
watches: string[];
|
||||
watches?: string[];
|
||||
search?: boolean;
|
||||
pager?: boolean;
|
||||
} & ComponentPropsType
|
||||
@@ -79,6 +79,17 @@ const getPluginType: any = inject("get:plugin:type", () => {
|
||||
return "plugin";
|
||||
});
|
||||
|
||||
function getInputFromForm(form: any, pluginType: string) {
|
||||
let input: any = {};
|
||||
if (pluginType === "plugin") {
|
||||
input = form?.input || {};
|
||||
} else if (pluginType === "access") {
|
||||
input = form?.access || {};
|
||||
} else {
|
||||
input = form || {};
|
||||
}
|
||||
return input;
|
||||
}
|
||||
const searchKeyRef = ref("");
|
||||
const optionsRef = ref([]);
|
||||
const message = ref("");
|
||||
@@ -104,7 +115,7 @@ const getOptions = async () => {
|
||||
}
|
||||
const pluginType = getPluginType();
|
||||
const { form } = getScope();
|
||||
const input = (pluginType === "plugin" ? form?.input : form) || {};
|
||||
const input = getInputFromForm(form, pluginType);
|
||||
|
||||
for (let key in define.input) {
|
||||
const inWatches = props.watches?.includes(key);
|
||||
@@ -200,12 +211,14 @@ watch(
|
||||
() => {
|
||||
const pluginType = getPluginType();
|
||||
const { form, key } = getScope();
|
||||
const input = (pluginType === "plugin" ? form?.input : form) || {};
|
||||
const watches = {};
|
||||
for (const key of props.watches) {
|
||||
//@ts-ignore
|
||||
watches[key] = input[key];
|
||||
const input = getInputFromForm(form, pluginType);
|
||||
const watches: any = {};
|
||||
if (props.watches && props.watches.length > 0) {
|
||||
for (const key of props.watches) {
|
||||
watches[key] = input[key];
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
form: watches,
|
||||
key,
|
||||
@@ -215,11 +228,12 @@ watch(
|
||||
const { form } = value;
|
||||
const oldForm: any = oldValue?.form;
|
||||
let changed = oldForm == null || optionsRef.value.length == 0;
|
||||
for (const key of props.watches) {
|
||||
//@ts-ignore
|
||||
if (oldForm && form[key] != oldForm[key]) {
|
||||
changed = true;
|
||||
break;
|
||||
if (props.watches && props.watches.length > 0) {
|
||||
for (const key of props.watches) {
|
||||
if (oldForm && form[key] != oldForm[key]) {
|
||||
changed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changed) {
|
||||
|
||||
@@ -101,6 +101,14 @@ function setupAccessGuard(router: Router) {
|
||||
return r.meta?.auth || r.meta?.permission;
|
||||
});
|
||||
|
||||
if (to.path === LOGIN_PATH && accessStore.accessToken) {
|
||||
return {
|
||||
path: DEFAULT_HOME_PATH,
|
||||
// 携带当前跳转的页面,登录后重新跳转该页面
|
||||
replace: true,
|
||||
};
|
||||
}
|
||||
|
||||
if (!needAuth) {
|
||||
return true;
|
||||
}
|
||||
|
||||
+11
-1
@@ -37,7 +37,7 @@
|
||||
<div class="step-row">
|
||||
<div class="text">
|
||||
<fs-icon icon="ion:flash"></fs-icon>
|
||||
<h4 class="title" :class="{ disabled: element.disabled, deleted: element.disabled }">{{ element.title }}</h4>
|
||||
<h4 class="title" :class="{ disabled: element.disabled, deleted: element.disabled }" :title="element.title">{{ element.title }}</h4>
|
||||
</div>
|
||||
<div class="action">
|
||||
<a key="edit" @click="stepEdit(currentTask, element, index)">编辑</a>
|
||||
@@ -306,6 +306,9 @@ export default {
|
||||
justify-content: space-between;
|
||||
.text {
|
||||
display: flex;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
> * {
|
||||
margin: 0px;
|
||||
margin-right: 15px;
|
||||
@@ -314,9 +317,16 @@ export default {
|
||||
.action {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-wrap: nowrap;
|
||||
word-wrap: nowrap;
|
||||
margin-left: 10px;
|
||||
> * {
|
||||
margin-right: 10px;
|
||||
font-size: 14px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-wrap: nowrap;
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,7 +103,7 @@ import SmsCode from "/@/views/framework/login/sms-code.vue";
|
||||
import { useI18n } from "/@/locales";
|
||||
import { LanguageToggle } from "/@/vben/layouts";
|
||||
import CaptchaInput from "/@/components/captcha/captcha-input.vue";
|
||||
import { useRoute } from "vue-router";
|
||||
import { useRoute, useRouter } from "vue-router";
|
||||
import OauthFooter from "/@/views/framework/oauth/oauth-footer.vue";
|
||||
import * as oauthApi from "../oauth/api";
|
||||
import { notification } from "ant-design-vue";
|
||||
@@ -113,6 +113,7 @@ export default defineComponent({
|
||||
setup() {
|
||||
const { t } = useI18n();
|
||||
const route = useRoute();
|
||||
const userStore = useUserStore();
|
||||
|
||||
const queryBindCode = ref(route.query.bindCode as string | undefined);
|
||||
|
||||
@@ -120,7 +121,7 @@ export default defineComponent({
|
||||
const urlLoginType = route.query.loginType as string | undefined;
|
||||
const verifyCodeInputRef = ref();
|
||||
const loading = ref(false);
|
||||
const userStore = useUserStore();
|
||||
|
||||
const settingStore = useSettingStore();
|
||||
const formRef = ref();
|
||||
let defaultLoginType = settingStore.sysPublic.defaultLoginType || "password";
|
||||
@@ -250,6 +251,7 @@ export default defineComponent({
|
||||
}
|
||||
return sysPublicSettings.oauthOnly && settingStore.isPlus && sysPublicSettings.oauthEnabled;
|
||||
});
|
||||
|
||||
return {
|
||||
t,
|
||||
loading,
|
||||
|
||||
Reference in New Issue
Block a user