perf: 优化显示效果

This commit is contained in:
kuaifan 2024-10-22 10:37:09 +08:00
parent e520cd9020
commit e639cfbc2f
27 changed files with 207 additions and 122 deletions

View File

@ -363,6 +363,7 @@ class ReportController extends AbstractController
} else { } else {
$title = $user->nickname . "的日报[" . $start_time->format("Y/m/d") . "]"; $title = $user->nickname . "的日报[" . $start_time->format("Y/m/d") . "]";
} }
$title = Doo::translate($title);
// 生成内容 // 生成内容
$contents = []; $contents = [];

View File

@ -156,7 +156,7 @@ class User extends AbstractModel
}); });
$array = []; $array = [];
foreach ($list as $item) { foreach ($list as $item) {
$array[] = $item['name'] . ($item['owner_userid'] === $this->userid ? '(M)' : ''); $array[] = $item['name'] . ($item['owner_userid'] === $this->userid ? ' (M)' : '');
} }
return implode(', ', $array); return implode(', ', $array);
} }

View File

@ -247,7 +247,7 @@ class UserBot extends AbstractModel
'remark' => '考勤机', 'remark' => '考勤机',
]; ];
} }
} }
if ($array) { if ($array) {
$record = UserCheckinRecord::where($array)->first(); $record = UserCheckinRecord::where($array)->first();
if (empty($record)) { if (empty($record)) {
@ -299,7 +299,7 @@ class UserBot extends AbstractModel
], [ ], [
'content' => $subcontent, 'content' => $subcontent,
'language' => false, 'language' => false,
'style' => 'padding-top:4px;opacity:0.4', 'style' => 'padding-top:4px;opacity:0.6',
] ]
], ],
], $botUser->userid, false, false, $type != "up"); ], $botUser->userid, false, false, $type != "up");

View File

@ -102,7 +102,7 @@ class CheckinRemindTask extends AbstractTask
], ],
[ [
'content' => $content, 'content' => $content,
'style' => 'padding-top:4px;opacity:0.4', 'style' => 'padding-top:4px;opacity:0.6',
], ],
], ],
], $botUser->userid); ], $botUser->userid);

View File

@ -4959,7 +4959,7 @@
"key": "选择负责人", "key": "选择负责人",
"zh": "", "zh": "",
"zh-CHT": "選擇負責人", "zh-CHT": "選擇負責人",
"en": "Select person in charge", "en": "Select owner",
"ko": "담당자 선택", "ko": "담당자 선택",
"ja": "担当者を選択", "ja": "担当者を選択",
"de": "Verantwortlichen auswählen", "de": "Verantwortlichen auswählen",
@ -7887,7 +7887,7 @@
"key": "选择主题", "key": "选择主题",
"zh": "", "zh": "",
"zh-CHT": "選擇主題", "zh-CHT": "選擇主題",
"en": "Choose Theme", "en": "Select Theme",
"ko": "테마 선택", "ko": "테마 선택",
"ja": "テーマを選択", "ja": "テーマを選択",
"de": "Thema auswählen", "de": "Thema auswählen",
@ -9339,7 +9339,7 @@
"key": "负责人", "key": "负责人",
"zh": "", "zh": "",
"zh-CHT": "負責人", "zh-CHT": "負責人",
"en": "Person in Charge", "en": "Owner",
"ko": "담당자", "ko": "담당자",
"ja": "担当者", "ja": "担当者",
"de": "Verantwortlicher", "de": "Verantwortlicher",

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -224,6 +224,7 @@ export default {
this.$store.state.windowLandscape = windowOrientation === 'landscape' this.$store.state.windowLandscape = windowOrientation === 'landscape'
this.$store.state.windowPortrait = windowOrientation === 'portrait' this.$store.state.windowPortrait = windowOrientation === 'portrait'
this.$store.state.formLabelClassName = windowWidth > 576 ? '' : 'form-label-weight-bold'
this.$store.state.formLabelPosition = windowWidth > 576 ? 'right' : 'top' this.$store.state.formLabelPosition = windowWidth > 576 ? 'right' : 'top'
this.$store.state.formLabelWidth = windowWidth > 576 ? 'auto' : '' this.$store.state.formLabelWidth = windowWidth > 576 ? 'auto' : ''

View File

@ -571,10 +571,10 @@ import {MarkdownPreview} from "../store/markdown";
} else if (typeof config === "string") { } else if (typeof config === "string") {
config = {content: config}; config = {content: config};
} }
config.title = config.title || (typeof config.render === 'undefined' ? '温馨提示' : ''); config.title = config.title || (typeof config.render === 'undefined' ? $A.modalTranslation('温馨提示', config.language) : '');
config.content = config.content || ''; config.content = config.content || '';
config.okText = config.okText || '确定'; config.okText = config.okText || $A.modalTranslation('确定', config.language);
config.cancelText = config.cancelText || '取消'; config.cancelText = config.cancelText || $A.modalTranslation('取消', config.language);
if (config.language !== false) { if (config.language !== false) {
delete config.language; delete config.language;
config.title = $A.L(config.title); config.title = $A.L(config.title);
@ -585,6 +585,14 @@ import {MarkdownPreview} from "../store/markdown";
return config; return config;
}, },
modalTranslation(title, language) {
if (language !== false) {
return title;
} else {
return $A.L(title)
}
},
modalInput(config, millisecond = 0) { modalInput(config, millisecond = 0) {
if (millisecond > 0) { if (millisecond > 0) {
setTimeout(() => { $A.modalInput(config) }, millisecond); setTimeout(() => { $A.modalInput(config) }, millisecond);

View File

@ -24,7 +24,7 @@
</Form> </Form>
</div> </div>
<div v-else class="report-detail-context"> <div v-else class="report-detail-context">
<Form class="report-form" :labelPosition="formLabelPosition" :labelWidth="formLabelWidth"> <Form class="report-form" :class="formLabelClassName" :labelPosition="formLabelPosition" :labelWidth="formLabelWidth">
<template v-if="formLabelWidth !== 'auto'"> <template v-if="formLabelWidth !== 'auto'">
<FormItem :label="$L('汇报人')"> <FormItem :label="$L('汇报人')">
<UserAvatar :userid="data.userid" :size="28"/> <UserAvatar :userid="data.userid" :size="28"/>
@ -61,7 +61,7 @@ export default {
} }
}, },
computed: { computed: {
...mapState(['formLabelPosition', 'formLabelWidth']), ...mapState(['formLabelPosition', 'formLabelWidth', 'formLabelClassName']),
}, },
watch: { watch: {
'data.id': { 'data.id': {

View File

@ -35,21 +35,24 @@
<div class="nav-icon"><i class="taskfont">&#xe634;</i></div> <div class="nav-icon"><i class="taskfont">&#xe634;</i></div>
<EDropdownMenu slot="dropdown" class="messenger-nav-menu"> <EDropdownMenu slot="dropdown" class="messenger-nav-menu">
<EDropdownItem v-for="(item, key) in dialogMenus" :key="key" :command="item.type"> <EDropdownItem v-for="(item, key) in dialogMenus" :key="key" :command="item.type">
<div class="messenger-nav-item" :class="{active: dialogActive==item.type}"> <div class="nav-item" :class="{active: dialogActive==item.type}">
<div class="nav-title">{{$L(item.name)}}</div> <div class="nav-title">{{$L(item.name)}}</div>
<Badge class="nav-num" :overflow-count="999" :count="msgUnread(item.type)"/> <Badge class="nav-num" :overflow-count="999" :count="msgUnread(item.type)"/>
</div> </div>
</EDropdownItem> </EDropdownItem>
</EDropdownMenu> </EDropdownMenu>
</EDropdown> </EDropdown>
<div <div class="nav-list" ref="navList">
v-for="(item, key) in typeItems" <div
:key="key" v-for="(item, key) in dialogHistorys"
:class="{active:dialogActive==item.type}" :key="key"
@click="onActive(item.type)"> class="nav-item"
<div class="nav-title"> :class="{active:dialogActive==item.type}"
<em>{{$L(item.name)}}</em> @click="onActive(item.type)">
<Badge class="nav-num" :overflow-count="999" :count="msgUnread(item.type)"/> <div class="nav-title">
<em>{{$L(item.name)}}</em>
<Badge class="nav-num" :overflow-count="999" :count="msgUnread(item.type)"/>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -258,7 +261,19 @@ import DialogWrapper from "./components/DialogWrapper";
import longpress from "../../directives/longpress"; import longpress from "../../directives/longpress";
import {Store} from "le5le-store"; import {Store} from "le5le-store";
const MessengerObject = {menuHistory: []}; const navDatas = {
menus: [
{type: '', name: '全部'},
{type: 'project', name: '项目'},
{type: 'task', name: '任务'},
{type: 'user', name: '单聊'},
{type: 'group', name: '群聊'},
{type: 'bot', name: '机器人'},
{type: 'mark', name: '标注'},
{type: '@', name: '@我'},
],
historys: []
};
export default { export default {
components: {DialogWrapper}, components: {DialogWrapper},
@ -274,17 +289,8 @@ export default {
dialogSearchList: [], dialogSearchList: [],
dialogActive: '', dialogActive: '',
dialogMenus: [ dialogMenus: navDatas.menus,
{type: '', name: '全部'}, dialogHistorys: navDatas.historys,
{type: 'project', name: '项目'},
{type: 'task', name: '任务'},
{type: 'user', name: '单聊'},
{type: 'group', name: '群聊'},
{type: 'bot', name: '机器人'},
{type: 'mark', name: '标注'},
{type: '@', name: '@我'},
],
dialogHistory: MessengerObject.menuHistory,
contactsKey: '', contactsKey: '',
contactsLoad: 0, contactsLoad: 0,
@ -304,7 +310,10 @@ export default {
}, },
async beforeRouteEnter(to, from, next) { async beforeRouteEnter(to, from, next) {
MessengerObject.menuHistory = await $A.IDBArray("dialogMenuHistory") navDatas.historys = (await $A.IDBArray("dialogMenuHistorys"))
if (navDatas.historys.length === 0) {
navDatas.historys = navDatas.menus.map(item => Object.assign(item, {time: 0}))
}
next() next()
}, },
@ -328,6 +337,7 @@ export default {
activated() { activated() {
this.updateDialogs(this.firstLoad ? 0 : 1000); this.updateDialogs(this.firstLoad ? 0 : 1000);
this.scrollToNav();
this.firstLoad = false; this.firstLoad = false;
// //
this.$nextTick(_ => this.activeNum++) this.$nextTick(_ => this.activeNum++)
@ -363,35 +373,6 @@ export default {
return this.windowPortrait ? 36 : 30 return this.windowPortrait ? 36 : 30
}, },
typeItems() {
const {dialogActive, dialogMenus, dialogHistory} = this
const types = []
if (this.dialogHistory.includes(dialogActive)) {
types.push(...this.dialogHistory)
} else {
types.push('')
if (dialogActive) {
types.push(dialogActive)
}
dialogHistory.some(item => {
if (!types.includes(item)) {
types.push(item)
}
});
['project', 'task', 'user'].some(item => {
if (!types.includes(item)) {
types.push(item)
}
})
this.dialogHistory = types.slice(0, 4)
$A.IDBSave("dialogMenuHistory", this.dialogHistory)
}
//
return this.dialogHistory.map(type => {
return dialogMenus.find(item => item.type == type)
})
},
dialogList() { dialogList() {
const {dialogActive, dialogSearchKey, dialogSearchList} = this const {dialogActive, dialogSearchKey, dialogSearchList} = this
if (dialogSearchList.length > 0) { if (dialogSearchList.length > 0) {
@ -625,6 +606,7 @@ export default {
} }
} else { } else {
this.updateDialogs(1000); this.updateDialogs(1000);
this.scrollToNav();
} }
}, },
immediate: true immediate: true
@ -639,11 +621,20 @@ export default {
immediate: true immediate: true
}, },
dialogActive(){ dialogActive(active) {
this.dialogSearchList = []; this.dialogSearchList = [];
if(this.dialogActive == 'mark' && !this.dialogSearchKey){ if (active == 'mark' && !this.dialogSearchKey) {
this.searchTagDialog() this.searchTagDialog()
} }
//
this.dialogHistorys.forEach(item => {
if (item.type == '') {
item.time = $A.dayjs().unix() + 1
} else if (item.type == active) {
item.time = $A.dayjs().unix()
}
})
$A.IDBSave("dialogMenuHistorys", $A.cloneJSON(this.dialogHistorys).sort((a, b) => b.time - a.time))
} }
}, },
@ -689,6 +680,16 @@ export default {
} else { } else {
this.dialogActive = type this.dialogActive = type
} }
this.scrollToNav()
},
scrollToNav() {
if (this.tabActive != 'dialog') {
return
}
this.$nextTick(_ => {
$A.scrollToView(this.$refs.navList?.querySelector('.active'), { behavior: "auto", block: "nearest", inline: "nearest" });
})
}, },
shakeUnread() { shakeUnread() {

View File

@ -1,6 +1,12 @@
<template> <template>
<div class="setting-component-item"> <div class="setting-component-item">
<Form ref="formDatum" :model="formDatum" label-width="auto" @submit.native.prevent> <Form
ref="formDatum"
:model="formDatum"
:class="formLabelClassName"
:labelPosition="formLabelPosition"
:labelWidth="formLabelWidth"
@submit.native.prevent>
<div class="block-setting-box"> <div class="block-setting-box">
<h3>{{ $L('帐号相关') }}</h3> <h3>{{ $L('帐号相关') }}</h3>
<div class="form-box"> <div class="form-box">
@ -28,7 +34,7 @@
v-model="formDatum.temp_account_alias" v-model="formDatum.temp_account_alias"
style="width:220px;margin-top:6px" style="width:220px;margin-top:6px"
:placeholder="$L('临时帐号')"> :placeholder="$L('临时帐号')">
<span slot="prepend">{{$L('临时帐号')}} {{$L('别名')}}</span> <span slot="prepend">{{$L('别名')}}</span>
</Input> </Input>
<div class="form-tip form-list"> <div class="form-tip form-list">
<p>{{$L('临时帐号')}}</p> <p>{{$L('临时帐号')}}</p>
@ -245,6 +251,8 @@
</template> </template>
<script> <script>
import {mapState} from "vuex";
export default { export default {
name: 'SystemSetting', name: 'SystemSetting',
@ -260,6 +268,10 @@ export default {
this.systemSetting(); this.systemSetting();
}, },
computed: {
...mapState(['formLabelPosition', 'formLabelWidth', 'formLabelClassName']),
},
methods: { methods: {
submitForm() { submitForm() {
this.$refs.formDatum.validate((valid) => { this.$refs.formDatum.validate((valid) => {

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="setting-item submit"> <div class="setting-item submit">
<Loading v-if="configLoad > 0"/> <Loading v-if="configLoad > 0"/>
<Form v-else ref="formDatum" :model="formDatum" :rules="ruleDatum" :labelPosition="formLabelPosition" :labelWidth="formLabelWidth" @submit.native.prevent> <Form v-else ref="formDatum" :model="formDatum" :rules="ruleDatum" :class="formLabelClassName" :labelPosition="formLabelPosition" :labelWidth="formLabelWidth" @submit.native.prevent>
<FormItem :label="$L('帐号')" prop="email"> <FormItem :label="$L('帐号')" prop="email">
<Input v-if="isRegVerify == 1" v-model="formDatum.email" <Input v-if="isRegVerify == 1" v-model="formDatum.email"
:class="count > 0 ? 'setting-send-input':'setting-input'" search @on-search="sendEmailCode" :class="count > 0 ? 'setting-send-input':'setting-input'" search @on-search="sendEmailCode"
@ -116,7 +116,7 @@ export default {
}, },
computed: { computed: {
...mapState(['userInfo', 'formLabelPosition', 'formLabelWidth']), ...mapState(['userInfo', 'formLabelPosition', 'formLabelWidth', 'formLabelClassName']),
appTitle() { appTitle() {
return window.systemInfo.title || "DooTask"; return window.systemInfo.title || "DooTask";

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="setting-item submit"> <div class="setting-item submit">
<Loading v-if="configLoad > 0"/> <Loading v-if="configLoad > 0"/>
<Form v-else ref="formDatum" :model="formDatum" :rules="ruleDatum" :labelPosition="formLabelPosition" :labelWidth="formLabelWidth" @submit.native.prevent> <Form v-else ref="formDatum" :model="formDatum" :rules="ruleDatum" :class="formLabelClassName" :labelPosition="formLabelPosition" :labelWidth="formLabelWidth" @submit.native.prevent>
<Alert v-if="isLdap" type="warning">{{$L('LDAP 用户禁止修改邮箱地址')}}</Alert> <Alert v-if="isLdap" type="warning">{{$L('LDAP 用户禁止修改邮箱地址')}}</Alert>
<FormItem :label="$L('新邮箱地址')" prop="newEmail"> <FormItem :label="$L('新邮箱地址')" prop="newEmail">
<Input v-if="isRegVerify == 1" v-model="formDatum.newEmail" <Input v-if="isRegVerify == 1" v-model="formDatum.newEmail"
@ -66,7 +66,7 @@ export default {
}, },
computed: { computed: {
...mapState(['formLabelPosition', 'formLabelWidth']), ...mapState(['formLabelPosition', 'formLabelWidth', 'formLabelClassName']),
isLdap() { isLdap() {
return this.$store.state.userInfo.identity.includes("ldap") return this.$store.state.userInfo.identity.includes("ldap")

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="setting-item submit"> <div class="setting-item submit">
<Form ref="formData" :model="formData" :rules="ruleData" :labelPosition="formLabelPosition" :labelWidth="formLabelWidth" @submit.native.prevent> <Form ref="formData" :model="formData" :rules="ruleData" :class="formLabelClassName" :labelPosition="formLabelPosition" :labelWidth="formLabelWidth" @submit.native.prevent>
<FormItem :label="$L('选择语言')" prop="language"> <FormItem :label="$L('选择语言')" prop="language">
<Select v-model="formData.language" :placeholder="$L('选项语言')"> <Select v-model="formData.language" :placeholder="$L('选项语言')">
<Option v-for="(item, index) in languageList" :value="index" :key="index">{{ item }}</Option> <Option v-for="(item, index) in languageList" :value="index" :key="index">{{ item }}</Option>
@ -38,7 +38,7 @@ export default {
}, },
computed: { computed: {
...mapState(['formLabelPosition', 'formLabelWidth']), ...mapState(['formLabelPosition', 'formLabelWidth', 'formLabelClassName']),
}, },
methods: { methods: {

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="setting-item submit"> <div class="setting-item submit">
<Form ref="formData" :model="formData" :labelPosition="formLabelPosition" :labelWidth="formLabelWidth" @submit.native.prevent> <Form ref="formData" :model="formData" :class="formLabelClassName" :labelPosition="formLabelPosition" :labelWidth="formLabelWidth" @submit.native.prevent>
<FormItem label="License" prop="license"> <FormItem label="License" prop="license">
<Input v-model="formData.license" type="textarea" :autosize="{minRows: 2,maxRows: 5}" :placeholder="$L('请输入License...')" /> <Input v-model="formData.license" type="textarea" :autosize="{minRows: 2,maxRows: 5}" :placeholder="$L('请输入License...')" />
</FormItem> </FormItem>
@ -136,7 +136,7 @@ export default {
this.systemSetting(); this.systemSetting();
}, },
computed: { computed: {
...mapState(['userInfo', 'formLabelPosition', 'formLabelWidth']), ...mapState(['userInfo', 'formLabelPosition', 'formLabelWidth', 'formLabelClassName']),
}, },
methods: { methods: {
submitForm() { submitForm() {

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="setting-item submit"> <div class="setting-item submit">
<Form ref="formDatum" :model="formDatum" :rules="ruleDatum" :labelPosition="formLabelPosition" :labelWidth="formLabelWidth" @submit.native.prevent> <Form ref="formDatum" :model="formDatum" :rules="ruleDatum" :class="formLabelClassName" :labelPosition="formLabelPosition" :labelWidth="formLabelWidth" @submit.native.prevent>
<Alert v-if="userInfo.changepass" type="warning" showIcon style="margin-bottom:32px">{{$L('请先修改登录密码')}}</Alert> <Alert v-if="userInfo.changepass" type="warning" showIcon style="margin-bottom:32px">{{$L('请先修改登录密码')}}</Alert>
<FormItem :label="$L('旧密码')" prop="oldpass"> <FormItem :label="$L('旧密码')" prop="oldpass">
<Input v-model="formDatum.oldpass" type="password"></Input> <Input v-model="formDatum.oldpass" type="password"></Input>
@ -74,7 +74,7 @@ export default {
} }
}, },
computed: { computed: {
...mapState(['userInfo', 'formLabelPosition', 'formLabelWidth']), ...mapState(['userInfo', 'formLabelPosition', 'formLabelWidth', 'formLabelClassName']),
}, },
methods: { methods: {
submitForm() { submitForm() {

View File

@ -1,6 +1,13 @@
<template> <template>
<div class="setting-item submit"> <div class="setting-item submit">
<Form ref="formData" :model="formData" :rules="ruleData" :labelPosition="formLabelPosition" :labelWidth="formLabelWidth" @submit.native.prevent> <Form
ref="formData"
:model="formData"
:rules="ruleData"
:class="formLabelClassName"
:labelPosition="formLabelPosition"
:labelWidth="formLabelWidth"
@submit.native.prevent>
<FormItem :label="$L('头像')" prop="userimg"> <FormItem :label="$L('头像')" prop="userimg">
<ImgUpload v-model="formData.userimg" :num="1" :width="512" :height="512" :whcut="1"></ImgUpload> <ImgUpload v-model="formData.userimg" :num="1" :width="512" :height="512" :whcut="1"></ImgUpload>
<span class="form-tip">{{$L('建议尺寸200x200')}}</span> <span class="form-tip">{{$L('建议尺寸200x200')}}</span>
@ -61,7 +68,7 @@ export default {
this.initData(); this.initData();
}, },
computed: { computed: {
...mapState(['userInfo', 'formLabelPosition', 'formLabelWidth']), ...mapState(['userInfo', 'formLabelPosition', 'formLabelWidth', 'formLabelClassName']),
}, },
watch: { watch: {
userInfo() { userInfo() {

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="setting-item submit"> <div class="setting-item submit">
<Form ref="formData" :model="formData" :rules="ruleData" :labelPosition="formLabelPosition" :labelWidth="formLabelWidth" @submit.native.prevent> <Form ref="formData" :model="formData" :rules="ruleData" :class="formLabelClassName" :labelPosition="formLabelPosition" :labelWidth="formLabelWidth" @submit.native.prevent>
<FormItem :label="$L('选择主题')" prop="theme"> <FormItem :label="$L('选择主题')" prop="theme">
<Select v-model="formData.theme" :placeholder="$L('选项主题')"> <Select v-model="formData.theme" :placeholder="$L('选项主题')">
<Option v-for="(item, index) in themeList" :value="item.value" :key="index">{{$L(item.name)}}</Option> <Option v-for="(item, index) in themeList" :value="item.value" :key="index">{{$L(item.name)}}</Option>
@ -39,7 +39,8 @@ export default {
'themeConf', 'themeConf',
'themeList', 'themeList',
'formLabelPosition', 'formLabelPosition',
'formLabelWidth' 'formLabelWidth',
'formLabelClassName'
]) ])
}, },

View File

@ -28,6 +28,7 @@ export default {
windowPortrait: windowOrientation === 'portrait', // 竖屏 windowPortrait: windowOrientation === 'portrait', // 竖屏
// 表单布局 // 表单布局
formLabelClassName: windowWidth > 576 ? '' : 'form-label-weight-bold',
formLabelPosition: windowWidth > 576 ? 'right' : 'top', formLabelPosition: windowWidth > 576 ? 'right' : 'top',
formLabelWidth: windowWidth > 576 ? 'auto' : '', formLabelWidth: windowWidth > 576 ? 'auto' : '',

View File

@ -190,7 +190,8 @@
.report-users { .report-users {
display: flex; display: flex;
align-items: center; align-items: flex-start;
line-height: 34px;
.common-user-select { .common-user-select {
margin-right: 12px; margin-right: 12px;

View File

@ -47,7 +47,7 @@
max-height: 210px; max-height: 210px;
margin-bottom: 16px; margin-bottom: 16px;
.vuepress-markdown-body { .vuepress-markdown-body {
padding: 4px; padding: 0 !important;
font-size: 14px; font-size: 14px;
} }
} }

View File

@ -215,7 +215,8 @@ body.dark-mode-reverse {
.dialog-content { .dialog-content {
.content-text, .content-text,
.content-record, .content-record,
.content-meeting { .content-meeting,
.content-template {
color: #ffffff !important; color: #ffffff !important;
} }

View File

@ -805,7 +805,7 @@ body.window-portrait {
position: sticky; position: sticky;
top: 0; top: 0;
left: 24px; left: 24px;
z-index: 2; z-index: 9;
line-height: 32px; line-height: 32px;
box-sizing: content-box; box-sizing: content-box;
padding: 0 10px; padding: 0 10px;
@ -839,6 +839,11 @@ body.window-portrait {
.block-setting-space { .block-setting-space {
height: 8px; height: 8px;
} }
.form-label-weight-bold {
.ivu-form-item-label {
font-weight: bold;
}
}
.confirm-popover { .confirm-popover {
max-width: 200px; max-width: 200px;
.buttons { .buttons {

View File

@ -1175,10 +1175,13 @@
} }
.content-template { .content-template {
color: #ffffff; color: $primary-title-color;
max-width: 100%;
.warning-color { .warning-color {
color: $flow-status-start-color; color: $flow-status-start-color;
} }
.mark-color { .mark-color {
color: $primary-color; color: $primary-color;
} }
@ -1720,6 +1723,14 @@
} }
} }
.content-template {
color: #ffffff;
.mark-color {
color: $primary-title-color;
}
}
.content-loading { .content-loading {
> i { > i {
color: #ffffff; color: #ffffff;

View File

@ -200,6 +200,9 @@
.task-add-visibility { .task-add-visibility {
cursor: pointer; cursor: pointer;
color: rgba($primary-desc-color, 0.7); color: rgba($primary-desc-color, 0.7);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
} }
} }
.task-add-advanced { .task-add-advanced {

View File

@ -69,52 +69,76 @@
.messenger-nav { .messenger-nav {
display: flex; display: flex;
align-items: center; align-items: center;
padding: 2px 10px 12px; padding: 0 10px 10px;
> div { .nav-menu {
flex: 1;
flex-shrink: 0;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
line-height: 1; line-height: 1;
padding: 0 6px;
color: #888888; color: #888888;
cursor: pointer; cursor: pointer;
&.nav-menu { width: 28px;
max-width: 46px; .nav-icon {
.nav-icon { width: 100%;
width: 100%; height: 100%;
height: 100%; display: flex;
align-items: center;
justify-content: center;
> i {
font-size: 16px;
}
}
}
.nav-list {
flex: 1;
flex-shrink: 0;
display: flex;
align-items: center;
flex-wrap: nowrap;
overflow-y: hidden;
overflow-x: auto;
margin-top: -12px;
padding-top: 12px;
&::-webkit-scrollbar {
display: none;
}
.nav-item {
flex: 1;
flex-shrink: 0;
display: flex;
align-items: center;
justify-content: center;
line-height: 1;
padding: 2px 12px;
color: #888888;
cursor: pointer;
.nav-title {
position: relative;
max-width: 100%;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
> i { > em {
font-size: 16px; font-style: normal;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.nav-num {
position: absolute;
top: -12px;
right: -8px;
transform: scale(0.7);
} }
} }
} &.active {
.nav-title { color: #555555;
position: relative; font-weight: 500;
> em {
font-style: normal;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
} }
.nav-num { &:hover {
position: absolute; color: #777777;
top: -12px;
right: -8px;
transform: scale(0.7);
} }
} }
&.active {
color: #555555;
font-weight: 500;
}
&:hover {
color: #777777;
}
} }
} }
.messenger-notify-permission { .messenger-notify-permission {
@ -579,7 +603,7 @@
} }
.messenger-nav-menu { .messenger-nav-menu {
.messenger-nav-item { .nav-item {
display: flex; display: flex;
align-items: center; align-items: center;
min-width: 80px; min-width: 80px;
@ -666,6 +690,14 @@ body.window-portrait {
} }
.messenger-nav { .messenger-nav {
background-color: #f8f8f8; background-color: #f8f8f8;
.nav-menu {
width: 46px;
}
.nav-list {
.nav-item {
min-width: 25%;
}
}
} }
.messenger-menu { .messenger-menu {
border-top: 0; border-top: 0;
@ -726,7 +758,7 @@ body.window-portrait {
} }
} }
.messenger-nav-menu { .messenger-nav-menu {
.messenger-nav-item { .nav-item {
min-width: 100px; min-width: 100px;
} }
} }