123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445 |
- import 'package:flutter/material.dart';
- import 'package:get/get.dart';
- import 'package:pull_to_refresh/pull_to_refresh.dart';
- import '../../../../common/api/index.dart';
- import '../../../../common/models/index.dart';
- import '../../../../common/utils/index.dart';
- import '../../../../common/values/index.dart';
- import '../../../../common/widgets/index.dart';
- import '../../../common/process_webview/index.dart';
- import 'index.dart';
- import 'widgets/QuickProcessing/index.dart';
- class OfficeCenterController extends GetxController {
- OfficeCenterController();
- final state = OfficeCenterState();
- final refreshController = RefreshController();
- final TextEditingController searchController = TextEditingController();
- String? _type;
- String _lastId = O2.o2DefaultPageFirstKey;
- bool isLoading = false; // 防止重复刷新
- bool isRefresh = true; // 刷新还是加载更多
- /// 在 widget 内存中分配后立即调用。
- @override
- void onInit() {
- super.onInit();
- }
- /// 在 onInit() 之后调用 1 帧。这是进入的理想场所
- @override
- void onReady() {
- final type = Get.parameters['type'];
- _type = type;
- var title = '';
- if (O2NativeAppEnum.task.key == type) {
- title = O2NativeAppEnum.task.name;
- } else if (O2NativeAppEnum.taskcompleted.key == type) {
- title = O2NativeAppEnum.taskcompleted.name;
- } else if (O2NativeAppEnum.read.key == type) {
- title = O2NativeAppEnum.read.name;
- } else if (O2NativeAppEnum.readcompleted.key == type) {
- title = O2NativeAppEnum.readcompleted.name;
- }
- state.title = Get.parameters['displayName'] ?? title;
-
- onRefresh();
- super.onReady();
- }
- /// 在 [onDelete] 方法之前调用。
- @override
- void onClose() {
- super.onClose();
- }
- /// dispose 释放内存
- @override
- void dispose() {
- super.dispose();
- }
- Future<void> onRefresh() async {
- if (_type == null) return;
- if (isLoading) return;
- _lastId = O2.o2DefaultPageFirstKey;
- isRefresh = true;
- state.hasMoreData = true;
- state.taskSelectedList.clear();
- await loadDataFromServer();
- refreshController.refreshCompleted();
- }
- Future<void> onLoadMore() async {
- if (isLoading) return;
- if (!state.hasMoreData) {
- refreshController.loadComplete();
- return;
- }
- isRefresh = false;
- await loadDataFromServer();
- refreshController.loadComplete();
- }
- ///
- /// 搜索
- ///
- void onSearch(String key) {
- OLogger.d("搜索关键字:$key");
- onRefresh();
- }
- Future<void> clickTask(TaskData task) async {
- if (task.work != null && task.work?.isNotEmpty == true) {
- await ProcessWebviewPage.open(task.work!,
- title: task.title ??
- 'process_work_no_title'.trArgs(['${task.processName}']));
- onRefresh();
- }
- }
- Future<void> clickTaskCompleted(TaskCompletedData taskcompleted) async {
- Loading.show();
- final reference = await ProcessSurfaceService.to
- .getTaskCompletedReference(taskcompleted.id!);
- if (reference != null) {
- Loading.dismiss();
- openReference(reference.workLogList ?? [], taskCompleted: taskcompleted);
- }
- }
- Future<void> clickRead(ReadData read) async {
- Loading.show();
- final reference = await ProcessSurfaceService.to.getReadReference(read.id!);
- if (reference != null) {
- Loading.dismiss();
- openReference(reference.workLogList ?? [], read: read);
- }
- }
- Future<void> clickReadCompleted(ReadCompletedData readcompleted) async {
- Loading.show();
- final reference = await ProcessSurfaceService.to
- .getReadCompletedReference(readcompleted.id!);
- if (reference != null) {
- Loading.dismiss();
- openReference(reference.workLogList ?? [], readCompleted: readcompleted);
- }
- }
- /// 展现 workLog 列表
- void openReference(List<WorkLog> workLogList,
- {TaskCompletedData? taskCompleted,
- ReadData? read,
- ReadCompletedData? readCompleted}) {
- final context = Get.context;
- if (context != null) {
- String title = '';
- String detailTitle = '';
- String detailActiviyName = '';
- Work work = Work();
- if (taskCompleted != null) {
- title = 'process_taskcompleted_detail_title'.tr;
- detailTitle = '[${taskCompleted.processName}] ${taskCompleted.title}';
- detailActiviyName = '${taskCompleted.activityName}';
- work.id = taskCompleted.work;
- work.title = taskCompleted.title;
- work.processName = taskCompleted.processName;
- } else if (read != null) {
- title = 'process_read_detail_title'.tr;
- detailTitle = '[${read.processName}] ${read.title}';
- detailActiviyName = '${read.activityName}';
- work.id = read.work;
- work.title = read.title;
- work.processName = read.processName;
- } else if (readCompleted != null) {
- title = 'process_readcompleted_detail_title'.tr;
- detailTitle = '[${readCompleted.processName}] ${readCompleted.title}';
- detailActiviyName = '${readCompleted.activityName}';
- work.id = readCompleted.work;
- work.title = readCompleted.title;
- work.processName = readCompleted.processName;
- } else {
- return;
- }
- WorkLog? endLog;
- for (var element in workLogList) {
- if (element.arrivedActivityType == 'end') {
- endLog = element.copywith();
- endLog.isEnd = true;
- break;
- }
- }
- if (endLog != null) {
- workLogList.add(endLog);
- }
- showModalBottomSheet(
- context: context,
- shape: const RoundedRectangleBorder(
- borderRadius: BorderRadius.only(
- topLeft: Radius.circular(10.0),
- topRight: Radius.circular(10.0)),
- ),
- builder: ((context) {
- return Padding(
- padding: const EdgeInsets.all(10),
- child: Container(
- height: 350.0,
- color: Colors.transparent,
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Padding(
- padding: const EdgeInsets.all(10),
- child: Text(title,
- style: Theme.of(context).textTheme.bodyLarge)),
- Card(
- child: ListTile(
- title: Text(detailTitle),
- subtitle: Text(detailActiviyName,
- style: Theme.of(context).textTheme.bodySmall),
- trailing: TextButton(
- child: Text('open'.tr),
- onPressed: () {
- Navigator.of(context).pop();
- openWork(work);
- }),
- ),
- ),
- Expanded(
- flex: 1,
- child: ListView(
- children: workLogList.map((e) {
- var time = e.arrivedTime;
- if (time == null || time.isEmpty) {
- time = e.fromTime;
- }
- if ((time?.length ?? 0) > 16) {
- time = time!.substring(0, 16);
- }
- var title = e.fromActivityName ?? '';
- var routeName = e.routeName;
- var imageName = 'icon_process_pass.png';
- List<String> identities = [];
- if (e.taskList != null &&
- e.taskList!.isNotEmpty) {
- for (var task in e.taskList!) {
- identities
- .add(task.identity!.split('@').first);
- }
- }
- if (e.taskCompletedList != null &&
- e.taskCompletedList!.isNotEmpty) {
- for (var taskcompleted
- in e.taskCompletedList!) {
- identities.add(
- taskcompleted.identity!.split('@').first);
- }
- }
- if (e.fromActivityType == 'begin') {
- routeName = '';
- imageName = 'icon_process_begin.png';
- }
- if (e.isEnd) {
- title = e.arrivedActivityName ?? '';
- routeName = '';
- identities = [];
- imageName = 'icon_process_end.png';
- }
- var subtitle = '';
- if (routeName != null && routeName.isNotEmpty) {
- subtitle = '$routeName $time';
- } else {
- subtitle = time ?? '';
- }
- return IntrinsicHeight(
- child: Row(
- children: [
- AssetsImageView(imageName),
- Expanded(
- flex: 1,
- child: Column(
- children: [
- Padding(
- padding: const EdgeInsets.only(
- left: 10,
- right: 10,
- top: 10,
- bottom: 10),
- child: Row(
- children: [
- Expanded(
- flex: 1,
- child: Column(
- crossAxisAlignment:
- CrossAxisAlignment
- .start,
- children: [
- Text(
- title,
- style: Theme.of(
- context)
- .textTheme
- .bodyLarge,
- ),
- const SizedBox(
- height: 5),
- Text(subtitle,
- style: Theme.of(
- context)
- .textTheme
- .bodySmall)
- ],
- )),
- SizedBox(
- width: 48,
- child: Text(
- identities.join(',')))
- ],
- )),
- // ListTile(
- // contentPadding: const EdgeInsets.symmetric(vertical: 10.0),
- // title: Text(title),
- // subtitle: Text(subtitle,
- // style: Theme.of(context)
- // .textTheme
- // .bodySmall),
- // trailing: SizedBox(
- // width: 48.w,
- // child:
- // Text(identities.join(','))),
- // ),
- const Spacer(),
- const Divider(height: 1)
- ],
- ))
- ],
- ));
- // return ListTile(
- // title: Text(time ?? ''),
- // subtitle: Text(
- // 'process_work_go_to_activity'
- // .trArgs([e.activityName ?? '']),
- // style: TextStyle(
- // color: Theme.of(context)
- // .colorScheme
- // .primary)),
- // );
- }).toList()))
- ],
- )));
- }));
- }
- }
- Future<void> openWork(Work work) async {
- if (work.id != null && work.id?.isNotEmpty == true) {
- await ProcessWebviewPage.open(work.id!,
- title: work.title ??
- 'process_work_no_title'.trArgs(['${work.processName}']));
- onRefresh();
- }
- }
- Future<void> loadDataFromServer() async {
- String searchKey = searchController.text;
- OLogger.d(
- '开始加载数据,type: $_type , lastId: $_lastId, isrefresh: $isRefresh searchKey: $searchKey ');
- Map<String, dynamic>? filter;
- if (searchKey.isNotEmpty) {
- filter = {'key': searchKey};
- }
- isLoading = true;
- if (O2NativeAppEnum.task.key == _type) {
- final list = await ProcessSurfaceService.to
- .getTaskListByPage(_lastId, body: filter);
- if (list != null) {
- if (list.isNotEmpty) {
- if (isRefresh) {
- state.dataList.clear();
- }
- state.dataList.addAll(list);
- _lastId = list[list.length - 1].id!; // 最后一个id
- state.hasMoreData = list.length >= O2.o2DefaultPageSize;
- } else {
- state.hasMoreData = false;
- }
- }
- } else if (O2NativeAppEnum.taskcompleted.key == _type) {
- final list = await ProcessSurfaceService.to
- .getTaskCompletedListByPage(_lastId, body: filter);
- if (list != null) {
- if (list.isNotEmpty) {
- if (isRefresh) {
- state.dataList.clear();
- }
- state.dataList.addAll(list);
- _lastId = list[list.length - 1].id!; // 最后一个id
- state.hasMoreData = list.length >= O2.o2DefaultPageSize;
- } else {
- state.hasMoreData = false;
- }
- }
- } else if (O2NativeAppEnum.read.key == _type) {
- final list = await ProcessSurfaceService.to
- .getReadListByPage(_lastId, body: filter);
- if (list != null) {
- if (list.isNotEmpty) {
- if (isRefresh) {
- state.dataList.clear();
- }
- state.dataList.addAll(list);
- _lastId = list[list.length - 1].id!; // 最后一个id
- state.hasMoreData = list.length >= O2.o2DefaultPageSize;
- } else {
- state.hasMoreData = false;
- }
- }
- } else if (O2NativeAppEnum.readcompleted.key == _type) {
- final list = await ProcessSurfaceService.to
- .getReadCompletedListByPage(_lastId, body: filter);
- if (list != null) {
- if (list.isNotEmpty) {
- if (isRefresh) {
- state.dataList.clear();
- }
- state.dataList.addAll(list);
- _lastId = list[list.length - 1].id!; // 最后一个id
- state.hasMoreData = list.length >= O2.o2DefaultPageSize;
- } else {
- state.hasMoreData = false;
- }
- }
- }
- isLoading = false;
- }
- bool isItemChecked(TaskData item) {
- final isCheced =
- state.taskSelectedList.firstWhereOrNull((element) => element.id == item.id);
- return isCheced != null;
- }
- void onSelectChange(bool? value, TaskData item) {
- if (value == true) {
- state.taskSelectedList.add(item);
- } else {
- state.taskSelectedList.removeWhere((element) => element.id == item.id);
- }
- }
- Future<void> gotoQuickProcess() async {
- final result = await QuickprocessingPage.startQuickProcess(state.taskSelectedList.toList());
- if (result != null && result is bool) { // 处理完成 刷新数据
- onRefresh();
- }
- }
- }
|