mirror of
https://github.com/kuaifan/dootask.git
synced 2025-12-14 12:42:51 +00:00
perf: 优化显示效果
This commit is contained in:
parent
e520cd9020
commit
e639cfbc2f
@ -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 = [];
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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");
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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
2
public/language/web/en.js
vendored
2
public/language/web/en.js
vendored
File diff suppressed because one or more lines are too long
@ -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' : ''
|
||||||
|
|
||||||
|
|||||||
14
resources/assets/js/functions/web.js
vendored
14
resources/assets/js/functions/web.js
vendored
@ -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);
|
||||||
|
|||||||
@ -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': {
|
||||||
|
|||||||
@ -35,21 +35,24 @@
|
|||||||
<div class="nav-icon"><i class="taskfont"></i></div>
|
<div class="nav-icon"><i class="taskfont"></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() {
|
||||||
|
|||||||
@ -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) => {
|
||||||
|
|||||||
@ -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";
|
||||||
|
|||||||
@ -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")
|
||||||
|
|||||||
@ -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: {
|
||||||
|
|||||||
@ -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() {
|
||||||
|
|||||||
@ -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() {
|
||||||
|
|||||||
@ -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() {
|
||||||
|
|||||||
@ -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'
|
||||||
])
|
])
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
1
resources/assets/js/store/state.js
vendored
1
resources/assets/js/store/state.js
vendored
@ -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' : '',
|
||||||
|
|
||||||
|
|||||||
3
resources/assets/sass/components/report.scss
vendored
3
resources/assets/sass/components/report.scss
vendored
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
3
resources/assets/sass/dark.scss
vendored
3
resources/assets/sass/dark.scss
vendored
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
7
resources/assets/sass/pages/common.scss
vendored
7
resources/assets/sass/pages/common.scss
vendored
@ -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 {
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
100
resources/assets/sass/pages/page-messenger.scss
vendored
100
resources/assets/sass/pages/page-messenger.scss
vendored
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user