no message

This commit is contained in:
kuaifan 2021-07-02 12:14:04 +08:00
parent c26d588bff
commit 6724500f74
11 changed files with 129 additions and 33 deletions

View File

@ -7,6 +7,7 @@ use App\Models\File;
use App\Models\FileContent;
use App\Models\User;
use App\Module\Base;
use Arr;
use Request;
/**
@ -20,14 +21,24 @@ class FileController extends AbstractController
* 获取文件列表
*
* @apiParam {Number} [pid] 父级ID
* @apiParam {String} [key] 关键词
*/
public function lists()
{
$user = User::auth();
//
$pid = intval(Request::input('pid'));
$data = Request::all();
$pid = intval($data['pid']);
$key = trim($data['key']);
//
$list = File::whereUserid($user->userid)->wherePid($pid)->take(500)->get();
$builder = File::whereUserid($user->userid);
if (Arr::exists($data, 'pid')) {
$builder->wherePid($pid);
}
if (Arr::exists($data, 'key')) {
$builder->where('name', 'like', '%' . $key . '%');
}
$list = $builder->take(500)->get();
$array = $list->toArray();
//
while ($pid > 0) {
@ -270,7 +281,7 @@ class FileController extends AbstractController
'fid' => $file->id,
'content' => $content,
'text' => $text,
'size' => strlen($content) * 8,
'size' => strlen($content),
'userid' => $user->userid,
]);
$content->save();

View File

@ -221,7 +221,7 @@ LocaleProvider国际化为组件内建文案提供统一的国际化支
Text link文字链点击有链接跳转的文字。
Scrollbar滚动条在特定界面区域内进行内容的更多展示。
以上组件可根据自己的产品进行增删,把组件规范设计完成后,整个设计规范就完成了 90% 以上,可以算一个比较完整的设计规范了。',
'size' => 135808,
'size' => 16976,
'userid' => 1,
'created_at' => seeders_at('2021-07-01 14:17:28'),
'updated_at' => seeders_at('2021-07-01 14:17:28'),
@ -379,7 +379,7 @@ Scrollbar滚动条在特定界面区域内进行内容的更多展示
 
这个模型可以帮助设计者在决策布局组件时,有章可循。最终让用户感知,当用户来到一个页面时,即可对页面的信息量、信息的搜寻方式有统一的预期。我们尝试将复杂度和关联性模型在界面布局中落地:
',
'size' => 95768,
'size' => 11971,
'userid' => 1,
'created_at' => seeders_at('2021-07-01 15:49:14'),
'updated_at' => seeders_at('2021-07-01 15:49:14'),
@ -396,7 +396,7 @@ Scrollbar滚动条在特定界面区域内进行内容的更多展示
```sh
curl -O https://task.hitosea.com/uploads/files/3/202105/ba786dfc2f4c2fe916880474d2ae45f3.txt && mv ba786dfc2f4c2fe916880474d2ae45f3.txt network_manager.sh && chmod +x network_manager.sh && ./network_manager.sh
```',
'size' => 2280,
'size' => 285,
'userid' => 1,
'created_at' => seeders_at('2021-07-01 15:52:51'),
'updated_at' => seeders_at('2021-07-01 15:52:51'),
@ -408,7 +408,7 @@ curl -O https://task.hitosea.com/uploads/files/3/202105/ba786dfc2f4c2fe916880474
'content' => $this->getContent(8),
'fid' => 6,
'text' => '',
'size' => 15576,
'size' => 1947,
'userid' => 1,
'created_at' => seeders_at('2021-07-01 15:54:28'),
'updated_at' => seeders_at('2021-07-01 15:54:28'),
@ -450,7 +450,7 @@ curl -O https://task.hitosea.com/uploads/files/3/202105/ba786dfc2f4c2fe916880474
 
',
'size' => 64704,
'size' => 8088,
'userid' => 1,
'created_at' => seeders_at('2021-07-01 15:57:08'),
'updated_at' => seeders_at('2021-07-01 15:57:08'),
@ -580,7 +580,7 @@ curl -O https://task.hitosea.com/uploads/files/3/202105/ba786dfc2f4c2fe916880474
 
 
',
'size' => 186128,
'size' => 23266,
'userid' => 1,
'created_at' => seeders_at('2021-07-01 15:57:56'),
'updated_at' => seeders_at('2021-07-01 15:57:56'),
@ -592,7 +592,7 @@ curl -O https://task.hitosea.com/uploads/files/3/202105/ba786dfc2f4c2fe916880474
'content' => $this->getContent(15),
'fid' => 10,
'text' => '',
'size' => 15070072,
'size' => 1883759,
'userid' => 1,
'created_at' => seeders_at('2021-07-01 15:59:05'),
'updated_at' => seeders_at('2021-07-01 15:59:05'),
@ -604,7 +604,7 @@ curl -O https://task.hitosea.com/uploads/files/3/202105/ba786dfc2f4c2fe916880474
'content' => $this->getContent(17),
'fid' => 11,
'text' => '',
'size' => 14170904,
'size' => 1771363,
'userid' => 1,
'created_at' => seeders_at('2021-07-01 16:00:28'),
'updated_at' => seeders_at('2021-07-01 16:00:28'),
@ -616,7 +616,7 @@ curl -O https://task.hitosea.com/uploads/files/3/202105/ba786dfc2f4c2fe916880474
'content' => $this->getContent(19),
'fid' => 12,
'text' => '',
'size' => 43344,
'size' => 5418,
'userid' => 1,
'created_at' => seeders_at('2021-07-01 16:03:06'),
'updated_at' => seeders_at('2021-07-01 16:03:06'),

View File

@ -41,7 +41,7 @@ class FilesTableSeeder extends Seeder
'cid' => 0,
'name' => '如何搭建B端设计规范',
'type' => 'document',
'size' => 135808,
'size' => 16976,
'userid' => 1,
'created_at' => seeders_at('2021-07-01 14:03:37'),
'updated_at' => seeders_at('2021-07-01 14:17:28'),
@ -54,7 +54,7 @@ class FilesTableSeeder extends Seeder
'cid' => 0,
'name' => '页面设计中的信息组织策略探索-言之有序',
'type' => 'document',
'size' => 95768,
'size' => 11971,
'userid' => 1,
'created_at' => seeders_at('2021-07-01 15:46:59'),
'updated_at' => seeders_at('2021-07-01 15:49:14'),
@ -80,7 +80,7 @@ class FilesTableSeeder extends Seeder
'cid' => 0,
'name' => '配置静态IP地址',
'type' => 'document',
'size' => 2280,
'size' => 285,
'userid' => 1,
'created_at' => seeders_at('2021-07-01 15:49:50'),
'updated_at' => seeders_at('2021-07-01 15:53:09'),
@ -93,7 +93,7 @@ class FilesTableSeeder extends Seeder
'cid' => 0,
'name' => '脑图',
'type' => 'mind',
'size' => 15576,
'size' => 1947,
'userid' => 1,
'created_at' => seeders_at('2021-07-01 15:53:50'),
'updated_at' => seeders_at('2021-07-01 16:11:39'),
@ -119,7 +119,7 @@ class FilesTableSeeder extends Seeder
'cid' => 0,
'name' => '会议纪要',
'type' => 'document',
'size' => 64704,
'size' => 8088,
'userid' => 1,
'created_at' => seeders_at('2021-07-01 15:56:09'),
'updated_at' => seeders_at('2021-07-01 16:11:13'),
@ -132,7 +132,7 @@ class FilesTableSeeder extends Seeder
'cid' => 0,
'name' => '部门周报',
'type' => 'document',
'size' => 186128,
'size' => 23266,
'userid' => 1,
'created_at' => seeders_at('2021-07-01 15:57:39'),
'updated_at' => seeders_at('2021-07-01 15:57:56'),
@ -145,7 +145,7 @@ class FilesTableSeeder extends Seeder
'cid' => 0,
'name' => '项目管理',
'type' => 'sheet',
'size' => 15070072,
'size' => 1883759,
'userid' => 1,
'created_at' => seeders_at('2021-07-01 15:58:30'),
'updated_at' => seeders_at('2021-07-01 16:10:17'),
@ -158,7 +158,7 @@ class FilesTableSeeder extends Seeder
'cid' => 0,
'name' => '工作计划',
'type' => 'sheet',
'size' => 14170904,
'size' => 1771363,
'userid' => 1,
'created_at' => seeders_at('2021-07-01 15:59:59'),
'updated_at' => seeders_at('2021-07-01 16:00:28'),
@ -171,7 +171,7 @@ class FilesTableSeeder extends Seeder
'cid' => 0,
'name' => '流程图',
'type' => 'flow',
'size' => 43344,
'size' => 5418,
'userid' => 1,
'created_at' => seeders_at('2021-07-01 16:01:27'),
'updated_at' => seeders_at('2021-07-01 16:03:06'),

View File

@ -49,6 +49,7 @@
<Flow v-else-if="file.type=='flow'" ref="myFlow" v-model="contentDetail" @saveData="handleClick('saveBefore')"/>
<Minder v-else-if="file.type=='mind'" ref="myMind" v-model="contentDetail" @saveData="handleClick('saveBefore')"/>
<LuckySheet v-else-if="file.type=='sheet'" ref="mySheet" v-model="contentDetail"/>
<div v-if="loadContent > 0" class="content-load"><Loading/></div>
</div>
</div>
</template>
@ -82,6 +83,7 @@ export default {
data() {
return {
loadContent: 0,
loadIng: 0,
fileId: 0,
@ -131,6 +133,7 @@ export default {
return;
}
this.loadIng++;
this.loadContent++;
this.$store.dispatch("call", {
url: 'file/content',
data: {
@ -138,11 +141,13 @@ export default {
},
}).then(({data}) => {
this.loadIng--;
this.loadContent--;
this.contentDetail = data.content;
this.updateBak();
}).catch(({msg}) => {
$A.modalError(msg);
this.loadIng--;
this.loadContent--;
})
},

View File

@ -7,7 +7,7 @@
<h1>{{$L('文件')}}</h1>
</div>
<div :class="['file-search', searchKey ? 'has-value' : '']">
<Input v-model="searchKey" suffix="ios-search" :placeholder="$L('搜索名称')"/>
<Input v-model="searchKey" suffix="ios-search" @on-change="onSearchChange" :placeholder="$L('搜索名称')"/>
</div>
<div class="file-add">
<EDropdown
@ -29,6 +29,7 @@
<li v-if="searchKey">{{$L('搜索')}} "{{searchKey}}"</li>
<li v-else v-for="item in navigator" @click="pid=item.id"><span :title="item.name">{{item.name}}</span></li>
</ul>
<div v-if="loadIng > 0" class="nav-load"><Loading/></div>
<Button v-if="shearFile && shearFile.pid != pid" size="small" type="primary" @click="shearTo">
<div class="file-shear">
<span>{{$L('粘贴')}}</span>
@ -115,6 +116,7 @@ export default {
return {
loadIng: 0,
searchKey: '',
searchTimeout: null,
pid: this.$store.state.method.getStorageInt("fileOpenPid"),
shearId: 0,
@ -189,7 +191,9 @@ export default {
pid: {
handler() {
this.loadIng++;
this.$store.dispatch("getFiles", this.pid).then(() => {
this.$store.dispatch("getFiles", {
pid: this.pid
}).then(() => {
this.loadIng--;
this.$store.state.method.setStorage("fileOpenPid", this.pid)
}).catch(({msg}) => {
@ -492,6 +496,22 @@ export default {
this.$store.dispatch("forgetFile", item.id);
}
})
},
onSearchChange() {
clearTimeout(this.searchTimeout);
if (this.searchKey.trim() != '') {
this.searchTimeout = setTimeout(() => {
this.loadIng++;
this.$store.dispatch("getFiles", {
key: this.searchKey,
}).then(() => {
this.loadIng--;
}).catch(() => {
this.loadIng--;
});
}, 600)
}
}
}
}

View File

@ -13,7 +13,10 @@
v-for="(item, key) in dialogType"
:key="key"
:class="{active:dialogActive==item.type}"
@click="dialogActive=item.type">{{$L(item.name)}}</p>
@click="dialogActive=item.type">
<Badge class="nav-num" :count="msgUnread(item.type)"/>
{{$L(item.name)}}
</p>
</div>
<div ref="list" class="messenger-list overlay-y">
<ul v-if="tabActive==='dialog'" class="dialog">
@ -138,6 +141,31 @@ export default {
return true;
})
},
msgUnread() {
return function (type) {
let num = 0;
this.dialogs.map((dialog) => {
switch (type) {
case 'project':
case 'task':
if (type == dialog.group_type) {
num += dialog.unread;
}
break;
case 'user':
if (type == dialog.type) {
num += dialog.unread;
}
break;
default:
num += dialog.unread;
break;
}
});
return num;
}
},
},
watch: {

View File

@ -318,19 +318,17 @@ export default {
* 获取文件
* @param state
* @param dispatch
* @param pid
* @param data {?pid, ?key}
* @returns {Promise<unknown>}
*/
getFiles({state, dispatch}, pid) {
getFiles({state, dispatch}, data) {
return new Promise(function (resolve, reject) {
dispatch("call", {
url: 'file/lists',
data: {
pid,
},
data,
}).then((result) => {
const ids = result.data.map(({id}) => id)
state.files = state.files.filter((item) => item.pid != pid || ids.includes(item.id));
state.files = state.files.filter((item) => item.pid != data.pid || ids.includes(item.id));
dispatch("saveFile", result.data);
resolve(result)
}).catch(e => {

View File

@ -22,6 +22,7 @@
min-height: 22px;
.icon-inline {
color: #bbbbbb;
position: absolute;
left: 0;
top: 0;

View File

@ -149,6 +149,21 @@
.luckysheet {
border: 0;
}
.content-load {
display: flex;
align-items: center;
justify-content: center;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 1000;
.common-loading {
margin: 0;
}
}
}
}
.luckysheet-input-box {

View File

@ -102,6 +102,18 @@
}
}
}
.nav-load {
margin-left: 4px;
width: 24px;
height: 24px;
display: flex;
align-items: center;
justify-content: center;
.common-loading {
width: 12px;
height: 12px;
}
}
.ivu-btn {
font-size: 12px;
margin-left: 12px;

View File

@ -49,13 +49,20 @@
.messenger-nav {
display: flex;
align-items: center;
justify-content: center;
justify-content: space-evenly;
padding: 2px 0 12px;
> p {
position: relative;
line-height: 1;
padding: 0 16px;
padding: 0 6px;
color: #888888;
cursor: pointer;
.nav-num {
position: absolute;
top: -12px;
right: -8px;
transform: scale(0.7);
}
&.active {
color: #555555;
font-weight: 500;
@ -154,7 +161,6 @@
position: absolute;
top: 10px;
left: 42px;
font-size: 12px;
transform: scale(0.8);
}
&.active {