mirror of
https://github.com/kuaifan/dootask.git
synced 2025-12-14 12:42:51 +00:00
perf: 优化工作汇报的搜索
This commit is contained in:
parent
9755c59687
commit
d951a6057d
@ -32,8 +32,9 @@ class ReportController extends AbstractController
|
|||||||
* @apiGroup report
|
* @apiGroup report
|
||||||
* @apiName my
|
* @apiName my
|
||||||
*
|
*
|
||||||
* @apiParam {String} [type] 汇报类型,weekly:周报,daily:日报
|
* @apiParam {Object} [keys] 搜索条件
|
||||||
* @apiParam {Array} [created_at] 汇报时间
|
* - keys.type: 汇报类型,weekly:周报,daily:日报
|
||||||
|
* - keys.created_at: 汇报时间
|
||||||
* @apiParam {Number} [page] 当前页,默认:1
|
* @apiParam {Number} [page] 当前页,默认:1
|
||||||
* @apiParam {Number} [pagesize] 每页显示数量,默认:20,最大:50
|
* @apiParam {Number} [pagesize] 每页显示数量,默认:20,最大:50
|
||||||
*
|
*
|
||||||
@ -44,17 +45,19 @@ class ReportController extends AbstractController
|
|||||||
public function my(): array
|
public function my(): array
|
||||||
{
|
{
|
||||||
$user = User::auth();
|
$user = User::auth();
|
||||||
// 搜索当前用户
|
//
|
||||||
$builder = Report::with(['receivesUser'])->whereUserid($user->userid);
|
$builder = Report::with(['receivesUser'])->whereUserid($user->userid);
|
||||||
$type = trim(Request::input('type'));
|
$keys = Request::input('keys');
|
||||||
$createAt = Request::input('created_at');
|
if (is_array($keys)) {
|
||||||
in_array($type, [Report::WEEKLY, Report::DAILY]) && $builder->whereType($type);
|
if (in_array($keys['type'], [Report::WEEKLY, Report::DAILY])) {
|
||||||
$whereArray = [];
|
$builder->whereType($keys['type']);
|
||||||
if (is_array($createAt)) {
|
|
||||||
if ($createAt[0] > 0) $whereArray[] = ['created_at', '>=', date('Y-m-d H:i:s', Base::dayTimeF($createAt[0]))];
|
|
||||||
if ($createAt[1] > 0) $whereArray[] = ['created_at', '<=', date('Y-m-d H:i:s', Base::dayTimeE($createAt[1]))];
|
|
||||||
}
|
}
|
||||||
$list = $builder->where($whereArray)->orderByDesc('created_at')->paginate(Base::getPaginate(50, 20));
|
if (is_array($keys['created_at'])) {
|
||||||
|
if ($keys['created_at'][0] > 0) $builder->where('created_at', '>=', date('Y-m-d H:i:s', Base::dayTimeF($keys['created_at'][0])));
|
||||||
|
if ($keys['created_at'][1] > 0) $builder->where('created_at', '<=', date('Y-m-d H:i:s', Base::dayTimeE($keys['created_at'][1])));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$list = $builder->orderByDesc('created_at')->paginate(Base::getPaginate(50, 20));
|
||||||
return Base::retSuccess('success', $list);
|
return Base::retSuccess('success', $list);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -65,9 +68,10 @@ class ReportController extends AbstractController
|
|||||||
* @apiGroup report
|
* @apiGroup report
|
||||||
* @apiName receive
|
* @apiName receive
|
||||||
*
|
*
|
||||||
* @apiParam {String} [username] 会员名
|
* @apiParam {Object} [keys] 搜索条件
|
||||||
* @apiParam {String} [type] 汇报类型,weekly:周报,daily:日报
|
* - keys.key: 关键词
|
||||||
* @apiParam {Array} [created_at] 汇报时间
|
* - keys.type: 汇报类型,weekly:周报,daily:日报
|
||||||
|
* - keys.created_at: 汇报时间
|
||||||
* @apiParam {Number} [page] 当前页,默认:1
|
* @apiParam {Number} [page] 当前页,默认:1
|
||||||
* @apiParam {Number} [pagesize] 每页显示数量,默认:20,最大:50
|
* @apiParam {Number} [pagesize] 每页显示数量,默认:20,最大:50
|
||||||
*
|
*
|
||||||
@ -82,21 +86,24 @@ class ReportController extends AbstractController
|
|||||||
$builder->whereHas("receivesUser", function ($query) use ($user) {
|
$builder->whereHas("receivesUser", function ($query) use ($user) {
|
||||||
$query->where("report_receives.userid", $user->userid);
|
$query->where("report_receives.userid", $user->userid);
|
||||||
});
|
});
|
||||||
$type = trim(Request::input('type'));
|
$keys = Request::input('keys');
|
||||||
$createAt = Request::input('created_at');
|
if (is_array($keys)) {
|
||||||
$username = trim(Request::input('username', ''));
|
if ($keys['key']) {
|
||||||
$builder->whereHas('sendUser', function ($query) use ($username) {
|
$builder->where(function($query) use ($keys) {
|
||||||
if (!empty($username)) {
|
$query->whereHas('sendUser', function ($q2) use ($keys) {
|
||||||
$query->where("users.email", "LIKE", "%{$username}%");
|
$q2->where("users.email", "LIKE", "%{$keys['key']}%");
|
||||||
}
|
})->orWhere("title", "LIKE", "%{$keys['key']}%");
|
||||||
});
|
});
|
||||||
in_array($type, [Report::WEEKLY, Report::DAILY]) && $builder->whereType($type);
|
|
||||||
$whereArray = [];
|
|
||||||
if (is_array($createAt)) {
|
|
||||||
if ($createAt[0] > 0) $whereArray[] = ['created_at', '>=', date('Y-m-d H:i:s', Base::dayTimeF($createAt[0]))];
|
|
||||||
if ($createAt[1] > 0) $whereArray[] = ['created_at', '<=', date('Y-m-d H:i:s', Base::dayTimeE($createAt[1]))];
|
|
||||||
}
|
}
|
||||||
$list = $builder->where($whereArray)->orderByDesc('created_at')->paginate(Base::getPaginate(50, 20));
|
if (in_array($keys['type'], [Report::WEEKLY, Report::DAILY])) {
|
||||||
|
$builder->whereType($keys['type']);
|
||||||
|
}
|
||||||
|
if (is_array($keys['created_at'])) {
|
||||||
|
if ($keys['created_at'][0] > 0) $builder->where('created_at', '>=', date('Y-m-d H:i:s', Base::dayTimeF($keys['created_at'][0])));
|
||||||
|
if ($keys['created_at'][1] > 0) $builder->where('created_at', '<=', date('Y-m-d H:i:s', Base::dayTimeE($keys['created_at'][1])));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$list = $builder->orderByDesc('created_at')->paginate(Base::getPaginate(50, 20));
|
||||||
if ($list->items()) {
|
if ($list->items()) {
|
||||||
foreach ($list->items() as $item) {
|
foreach ($list->items() as $item) {
|
||||||
$item->receive_time = ReportReceive::query()->whereRid($item["id"])->whereUserid($user->userid)->value("receive_time");
|
$item->receive_time = ReportReceive::query()->whereRid($item["id"])->whereUserid($user->userid)->value("receive_time");
|
||||||
|
|||||||
@ -9,7 +9,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="search-content">
|
<div class="search-content">
|
||||||
<Select
|
<Select
|
||||||
v-model="reportType"
|
v-model="keys.type"
|
||||||
:placeholder="$L('全部')">
|
:placeholder="$L('全部')">
|
||||||
<Option v-for="item in reportTypeList" :value="item.value" :key="item.value">{{ item.label }}</Option>
|
<Option v-for="item in reportTypeList" :value="item.value" :key="item.value">{{ item.label }}</Option>
|
||||||
</Select>
|
</Select>
|
||||||
@ -21,7 +21,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="search-content">
|
<div class="search-content">
|
||||||
<DatePicker
|
<DatePicker
|
||||||
v-model="createAt"
|
v-model="keys.created_at"
|
||||||
type="daterange"
|
type="daterange"
|
||||||
split-panels
|
split-panels
|
||||||
:placeholder="$L('请选择时间')"/>
|
:placeholder="$L('请选择时间')"/>
|
||||||
@ -82,11 +82,14 @@ export default {
|
|||||||
listPage: 1,
|
listPage: 1,
|
||||||
listTotal: 0,
|
listTotal: 0,
|
||||||
listPageSize: 20,
|
listPageSize: 20,
|
||||||
noDataText: "",
|
noDataText: "数据加载中.....",
|
||||||
|
|
||||||
createAt: [],
|
keys: {},
|
||||||
reportType: '',
|
reportTypeList: [
|
||||||
reportTypeList: [],
|
{value: "", label: this.$L('全部')},
|
||||||
|
{value: "weekly", label: this.$L('周报')},
|
||||||
|
{value: "daily", label: this.$L('日报')},
|
||||||
|
],
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
@ -97,7 +100,6 @@ export default {
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
initLanguage() {
|
initLanguage() {
|
||||||
this.noDataText = this.noDataText || "数据加载中.....";
|
|
||||||
this.columns = [{
|
this.columns = [{
|
||||||
title: this.$L("名称"),
|
title: this.$L("名称"),
|
||||||
key: 'title',
|
key: 'title',
|
||||||
@ -108,7 +110,7 @@ export default {
|
|||||||
key: 'type',
|
key: 'type',
|
||||||
align: 'center',
|
align: 'center',
|
||||||
sortable: true,
|
sortable: true,
|
||||||
width: 80,
|
width: 90,
|
||||||
}, {
|
}, {
|
||||||
title: this.$L("汇报时间"),
|
title: this.$L("汇报时间"),
|
||||||
key: 'created_at',
|
key: 'created_at',
|
||||||
@ -147,11 +149,6 @@ export default {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
}];
|
}];
|
||||||
this.reportTypeList = [
|
|
||||||
{value: "", label: this.$L('全部')},
|
|
||||||
{value: "weekly", label: this.$L('周报')},
|
|
||||||
{value: "daily", label: this.$L('日报')},
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
|
|
||||||
onSearch() {
|
onSearch() {
|
||||||
@ -160,28 +157,26 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
getLists() {
|
getLists() {
|
||||||
this.loadIng = 1;
|
this.loadIng++;
|
||||||
this.$store.dispatch("call", {
|
this.$store.dispatch("call", {
|
||||||
url: 'report/my',
|
url: 'report/my',
|
||||||
data: {
|
data: {
|
||||||
|
keys: this.keys,
|
||||||
page: Math.max(this.listPage, 1),
|
page: Math.max(this.listPage, 1),
|
||||||
pagesize: Math.max($A.runNum(this.listPageSize), 10),
|
pagesize: Math.max($A.runNum(this.listPageSize), 10),
|
||||||
created_at: this.createAt,
|
|
||||||
type: this.reportType
|
|
||||||
},
|
},
|
||||||
}).then(({data, msg}) => {
|
}).then(({data}) => {
|
||||||
// data 结果数据
|
// data 结果数据
|
||||||
this.lists = data.data;
|
this.lists = data.data;
|
||||||
this.listTotal = data.total;
|
this.listTotal = data.total;
|
||||||
if (this.lists.length <= 0) {
|
this.noDataText = "没有相关的数据";
|
||||||
this.noDataText = this.$L("无数据");
|
|
||||||
}
|
|
||||||
// msg 结果描述
|
// msg 结果描述
|
||||||
}).catch(({msg}) => {
|
}).catch(({msg}) => {
|
||||||
// msg 错误原因
|
// msg 错误原因
|
||||||
$A.messageError(msg);
|
$A.messageError(msg);
|
||||||
|
this.noDataText = '数据加载失败';
|
||||||
}).finally(() => {
|
}).finally(() => {
|
||||||
this.loadIng = 0;
|
this.loadIng--;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -197,17 +192,9 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
searchTab() {
|
|
||||||
this.getLists();
|
|
||||||
},
|
|
||||||
|
|
||||||
addReport() {
|
addReport() {
|
||||||
this.$emit("on-edit", 0);
|
this.$emit("on-edit", 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
|
|
||||||
</style>
|
|
||||||
|
|||||||
@ -4,10 +4,10 @@
|
|||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
<div class="search-label">
|
<div class="search-label">
|
||||||
{{ $L("汇报人") }}
|
{{ $L("关键词") }}
|
||||||
</div>
|
</div>
|
||||||
<div class="search-content">
|
<div class="search-content">
|
||||||
<Input v-model="username" :placeholder="$L('请输入用户名')"/>
|
<Input v-model="keys.key" :placeholder="$L('输入关键词搜索')" clearable/>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
@ -16,7 +16,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="search-content">
|
<div class="search-content">
|
||||||
<Select
|
<Select
|
||||||
v-model="reportType"
|
v-model="keys.type"
|
||||||
:placeholder="$L('全部')">
|
:placeholder="$L('全部')">
|
||||||
<Option v-for="item in reportTypeList" :value="item.value" :key="item.value">{{ item.label }}</Option>
|
<Option v-for="item in reportTypeList" :value="item.value" :key="item.value">{{ item.label }}</Option>
|
||||||
</Select>
|
</Select>
|
||||||
@ -28,7 +28,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="search-content">
|
<div class="search-content">
|
||||||
<DatePicker
|
<DatePicker
|
||||||
v-model="createAt"
|
v-model="keys.created_at"
|
||||||
type="daterange"
|
type="daterange"
|
||||||
split-panels
|
split-panels
|
||||||
:placeholder="$L('请选择时间')"/>
|
:placeholder="$L('请选择时间')"/>
|
||||||
@ -85,12 +85,14 @@ export default {
|
|||||||
listPage: 1,
|
listPage: 1,
|
||||||
listTotal: 0,
|
listTotal: 0,
|
||||||
listPageSize: 20,
|
listPageSize: 20,
|
||||||
noDataText: "",
|
noDataText: "数据加载中.....",
|
||||||
|
|
||||||
username: '',
|
keys: {},
|
||||||
reportType: '',
|
reportTypeList: [
|
||||||
createAt: [],
|
{value: "", label: this.$L('全部')},
|
||||||
reportTypeList: [],
|
{value: "weekly", label: this.$L('周报')},
|
||||||
|
{value: "daily", label: this.$L('日报')},
|
||||||
|
],
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
@ -101,7 +103,6 @@ export default {
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
initLanguage() {
|
initLanguage() {
|
||||||
this.noDataText = this.noDataText || "数据加载中.....";
|
|
||||||
this.columns = [{
|
this.columns = [{
|
||||||
title: this.$L("标题"),
|
title: this.$L("标题"),
|
||||||
key: 'title',
|
key: 'title',
|
||||||
@ -129,9 +130,8 @@ export default {
|
|||||||
}, {
|
}, {
|
||||||
title: this.$L("类型"),
|
title: this.$L("类型"),
|
||||||
key: 'type',
|
key: 'type',
|
||||||
align: 'center',
|
|
||||||
sortable: true,
|
sortable: true,
|
||||||
width: 80,
|
width: 90,
|
||||||
}, {
|
}, {
|
||||||
title: this.$L("接收时间"),
|
title: this.$L("接收时间"),
|
||||||
key: 'receive_time',
|
key: 'receive_time',
|
||||||
@ -171,11 +171,6 @@ export default {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
}];
|
}];
|
||||||
this.reportTypeList = [
|
|
||||||
{value: "", label: this.$L('全部')},
|
|
||||||
{value: "weekly", label: this.$L('周报')},
|
|
||||||
{value: "daily", label: this.$L('日报')},
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
|
|
||||||
onSearch() {
|
onSearch() {
|
||||||
@ -184,29 +179,26 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
getLists() {
|
getLists() {
|
||||||
this.loadIng = 1;
|
this.loadIng++;
|
||||||
this.$store.dispatch("call", {
|
this.$store.dispatch("call", {
|
||||||
url: 'report/receive',
|
url: 'report/receive',
|
||||||
data: {
|
data: {
|
||||||
|
keys: this.keys,
|
||||||
page: Math.max(this.listPage, 1),
|
page: Math.max(this.listPage, 1),
|
||||||
pagesize: Math.max($A.runNum(this.listPageSize), 10),
|
pagesize: Math.max($A.runNum(this.listPageSize), 10),
|
||||||
username: this.username,
|
|
||||||
created_at: this.createAt,
|
|
||||||
type: this.reportType
|
|
||||||
},
|
},
|
||||||
}).then(({data, msg}) => {
|
}).then(({data}) => {
|
||||||
// data 结果数据
|
// data 结果数据
|
||||||
this.lists = data.data;
|
this.lists = data.data;
|
||||||
this.listTotal = data.total;
|
this.listTotal = data.total;
|
||||||
if (this.lists.length <= 0) {
|
this.noDataText = "没有相关的数据";
|
||||||
this.noDataText = this.$L("无数据");
|
|
||||||
}
|
|
||||||
// msg 结果描述
|
// msg 结果描述
|
||||||
}).catch(({msg}) => {
|
}).catch(({msg}) => {
|
||||||
// msg 错误原因
|
// msg 错误原因
|
||||||
$A.messageError(msg);
|
$A.messageError(msg);
|
||||||
|
this.noDataText = '数据加载失败';
|
||||||
}).finally(() => {
|
}).finally(() => {
|
||||||
this.loadIng = 0;
|
this.loadIng--;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -224,7 +216,3 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
|
|
||||||
</style>
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user