no message
This commit is contained in:
parent
c26d588bff
commit
6724500f74
@ -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();
|
||||
|
@ -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'),
|
||||
|
@ -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'),
|
||||
|
@ -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--;
|
||||
})
|
||||
},
|
||||
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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: {
|
||||
|
10
resources/assets/js/store/actions.js
vendored
10
resources/assets/js/store/actions.js
vendored
@ -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 => {
|
||||
|
@ -22,6 +22,7 @@
|
||||
min-height: 22px;
|
||||
|
||||
.icon-inline {
|
||||
color: #bbbbbb;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
|
@ -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 {
|
||||
|
12
resources/assets/sass/pages/page-file.scss
vendored
12
resources/assets/sass/pages/page-file.scss
vendored
@ -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;
|
||||
|
12
resources/assets/sass/pages/page-messenger.scss
vendored
12
resources/assets/sass/pages/page-messenger.scss
vendored
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user