master
2358328281@qq.com 1 month ago
parent 26449fbea5
commit ef698ebe45

@ -4,3 +4,16 @@ import kcRequest from "@/service/request/index.js";
export const adminLogin = (data) => { export const adminLogin = (data) => {
return kcRequest.request(`/admin/login`, "post", data, false, "json"); return kcRequest.request(`/admin/login`, "post", data, false, "json");
}; };
// 设置管理端主题
export const setAdminTopic = (data) => {
return kcRequest.request(`/admin/topic`, "put", data);
};
// 设置医院端主题
export const setHospitalTopic = (data) => {
return kcRequest.request(`/hospital/topic`, "put", data);
};

@ -5,7 +5,11 @@ import {
normalizeThemeValue, normalizeThemeValue,
DEFAULT_THEME, DEFAULT_THEME,
} from "./buildThemeVars.js"; } from "./buildThemeVars.js";
import { useUserStore } from "@/stores/api/user";
import {
setAdminTopic,
setHospitalTopic
} from '@/service/modular/login/index.js'
const APPLIED_KEYS = Object.keys(buildThemeVars(DEFAULT_THEME)); const APPLIED_KEYS = Object.keys(buildThemeVars(DEFAULT_THEME));
const applyToRoot = (theme) => { const applyToRoot = (theme) => {
@ -22,11 +26,25 @@ export const useThemeStore = defineStore("theme", () => {
normalizeThemeValue(localStorage.getItem("theme") || DEFAULT_THEME), normalizeThemeValue(localStorage.getItem("theme") || DEFAULT_THEME),
); );
const setTheme = (theme) => { const setTheme = (theme, inital = false) => {
const next = normalizeThemeValue(theme); const next = normalizeThemeValue(theme);
themeValue.value = next; themeValue.value = next;
console.log(next);
localStorage.setItem("theme", next); localStorage.setItem("theme", next);
applyToRoot(next); applyToRoot(next);
if (!inital) {
const userStore = useUserStore();
if (userStore.userInfo.userType === 'Admin') {
setAdminTopic({
topic: theme
})
} else {
setHospitalTopic({
topic: theme
})
}
}
}; };
// 初始化setup 内即生效,不依赖外部调用 // 初始化setup 内即生效,不依赖外部调用

@ -80,6 +80,10 @@
<div v-for="c in colorOptions" :key="c.value" class="color-tag-option" <div v-for="c in colorOptions" :key="c.value" class="color-tag-option"
:class="{ active: form.colorTag === c.value }" :style="{ background: c.value }" :title="c.label" :class="{ active: form.colorTag === c.value }" :style="{ background: c.value }" :title="c.label"
@click="selectColor(c.value)"></div> @click="selectColor(c.value)"></div>
<div class="color-tag-option clear" @click="selectColor('')">
<el-icon :size="24"><CloseBold /></el-icon>
</div>
</div> </div>
</el-popover> </el-popover>
</div> </div>
@ -162,6 +166,7 @@ import {
import { ElMessage } from 'element-plus'; import { ElMessage } from 'element-plus';
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'; import { Editor, Toolbar } from '@wangeditor/editor-for-vue';
import '@wangeditor/editor/dist/css/style.css'; import '@wangeditor/editor/dist/css/style.css';
import { CloseBold } from "@element-plus/icons-vue";
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
const props = defineProps({ const props = defineProps({
@ -217,7 +222,7 @@ const form = reactive({
priority: '中', priority: '中',
feedbackchannel: '', feedbackchannel: '',
department: '', department: '',
colorTag: '#667eea', colorTag: '',
description: '', description: '',
submitter: '', submitter: '',
createdat: '', createdat: '',
@ -470,7 +475,7 @@ const resetForm = () => {
priority: '中', priority: '中',
feedbackchannel: '', feedbackchannel: '',
department: '', department: '',
colorTag: '#667eea', colorTag: '',
description: '', description: '',
submitter: '', submitter: '',
createdat: '', createdat: '',
@ -487,7 +492,7 @@ const fillFormFromOrder = (d) => {
form.priority = d.priority || '中'; form.priority = d.priority || '中';
form.feedbackchannel = d.feedbackChannel || d.feedbackchannel || ''; form.feedbackchannel = d.feedbackChannel || d.feedbackchannel || '';
form.department = d.department || ''; form.department = d.department || '';
form.colorTag = d.colorTag || '#667eea'; form.colorTag = d.colorTag;
form.description = d.description || ''; form.description = d.description || '';
form.submitter = d.submitter || ''; form.submitter = d.submitter || '';
// T YYYY-MM-DD HH:mm:ss date-picker // T YYYY-MM-DD HH:mm:ss date-picker
@ -551,6 +556,7 @@ const onSubmit = async () => {
if (editor && typeof editor.getHtml === 'function') { if (editor && typeof editor.getHtml === 'function') {
form.description = editor.getHtml() || ''; form.description = editor.getHtml() || '';
} }
form.colorTag = form.colorTag ? form.colorTag : ' ';
await formRef.value.validate(async (valid) => { await formRef.value.validate(async (valid) => {
if (!valid) return; if (!valid) return;
const formData = new FormData(); const formData = new FormData();

@ -74,6 +74,9 @@
<div v-for="c in colorOptions" :key="c.value" class="color-tag-option" <div v-for="c in colorOptions" :key="c.value" class="color-tag-option"
:class="{ active: form.colorTag === c.value }" :style="{ background: c.value }" :title="c.label" :class="{ active: form.colorTag === c.value }" :style="{ background: c.value }" :title="c.label"
@click="selectColor(c.value)"></div> @click="selectColor(c.value)"></div>
<div class="color-tag-option clear" @click="selectColor('')">
<el-icon :size="24"><CloseBold /></el-icon>
</div>
</div> </div>
</el-popover> </el-popover>
</template> </template>
@ -147,6 +150,7 @@ import { ElMessage } from "element-plus";
import { Editor, Toolbar } from "@wangeditor/editor-for-vue"; import { Editor, Toolbar } from "@wangeditor/editor-for-vue";
import "@wangeditor/editor/dist/css/style.css"; import "@wangeditor/editor/dist/css/style.css";
import { useI18n } from "vue-i18n"; import { useI18n } from "vue-i18n";
import { CloseBold } from "@element-plus/icons-vue";
import { import {
createHospitalOrder, createHospitalOrder,
getHospitalOrderDetail, getHospitalOrderDetail,
@ -186,7 +190,7 @@ const fillFormFromDetail = (detail) => {
form.priority = detail.priority || "中"; form.priority = detail.priority || "中";
form.feedbackchannel = detail.feedbackChannel || detail.feedbackchannel || ""; form.feedbackchannel = detail.feedbackChannel || detail.feedbackchannel || "";
form.department = detail.department || ""; form.department = detail.department || "";
form.colorTag = detail.colorTag || "#667eea"; form.colorTag = detail.colorTag || "";
form.description = detail.description || ""; form.description = detail.description || "";
form.submitter = detail.submitter || ""; form.submitter = detail.submitter || "";
form.createdat = detail.createdAt form.createdat = detail.createdAt
@ -228,7 +232,7 @@ const form = reactive({
priority: "中", priority: "中",
feedbackchannel: "", feedbackchannel: "",
department: "", department: "",
colorTag: "#667eea", colorTag: "",
description: "", description: "",
submitter: "", submitter: "",
createdat: "", createdat: "",
@ -474,7 +478,7 @@ const onClosed = () => {
form.priority = "中"; form.priority = "中";
form.feedbackchannel = ""; form.feedbackchannel = "";
form.department = ""; form.department = "";
form.colorTag = "#667eea"; form.colorTag = "";
form.description = ""; form.description = "";
form.submitter = ""; form.submitter = "";
form.createdat = ""; form.createdat = "";

@ -9,31 +9,16 @@
<div class="login-header">{{ $t("login.headerTitle") }}</div> <div class="login-header">{{ $t("login.headerTitle") }}</div>
<div class="login-card"> <div class="login-card">
<el-form <el-form ref="formRef" :model="form" :rules="rules" @keyup.enter="submit" class="login-form">
ref="formRef"
:model="form"
:rules="rules"
@keyup.enter="submit"
class="login-form"
>
<el-form-item prop="username"> <el-form-item prop="username">
<el-input <el-input v-model="form.username" :placeholder="$t('login.userName')" size="large">
v-model="form.username"
:placeholder="$t('login.userName')"
size="large"
>
<template #prefix> <template #prefix>
<SvgIcon name="login-user" :size="28" /> <SvgIcon name="login-user" :size="28" />
</template> </template>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item prop="password"> <el-form-item prop="password">
<el-input <el-input v-model="form.password" type="password" :placeholder="$t('login.passWord')" size="large">
v-model="form.password"
type="password"
:placeholder="$t('login.passWord')"
size="large"
>
<template #prefix> <template #prefix>
<SvgIcon name="login-password" :size="28" /> <SvgIcon name="login-password" :size="28" />
</template> </template>
@ -46,13 +31,7 @@
}}</el-checkbox> }}</el-checkbox>
</el-form-item> </el-form-item>
<el-button <el-button type="primary" class="submit-btn" :loading="loading" size="large" @click="submit">
type="primary"
class="submit-btn"
:loading="loading"
size="large"
@click="submit"
>
{{ $t("login.denglu") }} {{ $t("login.denglu") }}
</el-button> </el-button>
</el-form> </el-form>
@ -75,7 +54,8 @@ import { useUserStore } from "@/stores/api/user";
import SvgIcon from "@/components/SvgIcon/index.vue"; import SvgIcon from "@/components/SvgIcon/index.vue";
import i18nSwitch from "@/components/i18nSwitch/index.vue"; import i18nSwitch from "@/components/i18nSwitch/index.vue";
import { useI18n } from "vue-i18n"; import { useI18n } from "vue-i18n";
import { useThemeStore } from "@/stores/theme";
const themeStore = useThemeStore();
const { t } = useI18n(); const { t } = useI18n();
const router = useRouter(); const router = useRouter();
const route = useRoute(); const route = useRoute();
@ -135,8 +115,9 @@ const submit = async () => {
role: data?.role, role: data?.role,
name: data?.name, name: data?.name,
gender: data?.gender, gender: data?.gender,
topic: data?.topic
}; };
themeStore.setTheme(data?.topic || 'blue', true);
userStore.setToken(data?.token || ""); userStore.setToken(data?.token || "");
userStore.setUserInfo(userInfo); userStore.setUserInfo(userInfo);
@ -207,8 +188,7 @@ onMounted(() => {
margin-bottom: 48px; margin-bottom: 48px;
} }
.login-card { .login-card {}
}
.login-title { .login-title {
font-size: 20px; font-size: 20px;
@ -238,6 +218,7 @@ onMounted(() => {
font-weight: 400; font-weight: 400;
font-size: 16px; font-size: 16px;
caret-color: #2b7afa; caret-color: #2b7afa;
&::placeholder { &::placeholder {
color: #bbbbbb; color: #bbbbbb;
} }

Loading…
Cancel
Save