job_applied_page.dart 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. import 'package:cs_resources/constants/color_constants.dart';
  2. import 'package:flutter/cupertino.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:get/get.dart';
  5. import 'package:widgets/ext/ex_widget.dart';
  6. import 'package:widgets/load_state_layout.dart';
  7. import 'package:widgets/my_button.dart';
  8. import 'package:widgets/my_text_view.dart';
  9. import 'package:widgets/search_app_bar.dart';
  10. import 'package:widgets/widget_export.dart';
  11. import 'applied_staff_item.dart';
  12. import 'job_applied_controller.dart';
  13. import 'package:plugin_basic/base/base_state.dart';
  14. import 'package:plugin_basic/base/base_stateful_page.dart';
  15. import 'package:plugin_basic/utils/ext_get_nav.dart';
  16. import 'package:router/path/router_path.dart';
  17. import 'package:shared/utils/screen_util.dart';
  18. import 'package:widgets/my_appbar.dart';
  19. import 'job_applied_state.dart';
  20. /**
  21. * 已申请的页面,可以签到签出、加人、修改状态、评论等操作
  22. */
  23. class JobAppliedPage extends BaseStatefulPage<JobAppliedController> {
  24. JobAppliedPage({Key? key}) : super(key: key);
  25. //启动当前页面
  26. static void startInstance(String? jobId) {
  27. return Get.start(RouterPath.JOB_APPLIED_STAFF_LIST, arguments: {'jobId': jobId});
  28. }
  29. @override
  30. JobAppliedController createRawController() {
  31. return JobAppliedController();
  32. }
  33. @override
  34. State<JobAppliedPage> createState() => _JobAppliedState();
  35. }
  36. class _JobAppliedState extends BaseState<JobAppliedPage, JobAppliedController> {
  37. late JobAppliedState state;
  38. @override
  39. void initState() {
  40. super.initState();
  41. state = controller.state;
  42. state.jobId = Get.arguments['jobId'];
  43. }
  44. @override
  45. Widget build(BuildContext context) {
  46. return autoCtlGetBuilder(builder: (controller) {
  47. return Scaffold(
  48. extendBodyBehindAppBar: true,
  49. appBar: MyAppBar.appBar(
  50. context,
  51. state.jobInfo?.jobTitle ?? "Title".tr,
  52. subTitle: "(${state.jobInfo?.jobDate ?? "-"})",
  53. subTitleColor: ColorConstants.textGrayAECAE5,
  54. ),
  55. body: SafeArea(
  56. bottom: true,
  57. top: false,
  58. child: Container(
  59. width: double.infinity,
  60. height: double.infinity,
  61. padding: EdgeInsets.only(top: kToolbarHeight + ScreenUtil.getStatusBarH(context) + 1),
  62. decoration: const BoxDecoration(
  63. gradient: LinearGradient(
  64. colors: [
  65. Color(0xFF091D44),
  66. Color(0xFF245A8A),
  67. Color(0xFF7F7CEC),
  68. ],
  69. begin: Alignment.topCenter,
  70. end: Alignment.bottomCenter,
  71. ),
  72. ),
  73. child: Column(
  74. children: [
  75. //搜索的条件
  76. Row(
  77. children: [
  78. SearchAppBar(
  79. value: state.keyword,
  80. onSearch: (keyword) {
  81. controller.doSearch(keyword);
  82. },
  83. hintText: "Staff Name".tr,
  84. controller: state.searchController,
  85. ).expanded(),
  86. MyButton(
  87. onPressed: () {
  88. FocusScope.of(context).unfocus();
  89. controller.resetFiltering();
  90. },
  91. text: "Reset".tr,
  92. textColor: ColorConstants.white,
  93. backgroundColor: hexToColor("#2BA9F9", opacity: 0.5),
  94. radius: 20,
  95. minWidth: 60,
  96. minHeight: 35,
  97. ),
  98. ],
  99. ).marginOnly(top: 10, left: 15, right: 15, bottom: 5),
  100. // 添加按钮
  101. Visibility(
  102. visible: state.jobInfo?.canAppend == true,
  103. child: MyButton(
  104. type: ClickType.throttle,
  105. milliseconds: 500,
  106. onPressed: () {
  107. FocusScope.of(context).unfocus();
  108. controller.showAddStaffDialog();
  109. },
  110. text: "Add Staff".tr,
  111. textColor: ColorConstants.white,
  112. fontSize: 16,
  113. radius: 20,
  114. backgroundColor: hexToColor("#FFBB1B"),
  115. fontWeight: FontWeight.w500,
  116. ).marginOnly(left: 15, right: 15, top: 5, bottom: 10),
  117. ),
  118. //底部的列表
  119. EasyRefresh(
  120. controller: controller.refreshController,
  121. onRefresh: controller.onRefresh,
  122. onLoad: controller.loadMore,
  123. child: LoadStateLayout(
  124. state: controller.loadingState,
  125. errorMessage: controller.errorMessage,
  126. errorRetry: () {
  127. controller.retryRequest();
  128. },
  129. successSliverWidget: [
  130. SliverList(
  131. delegate: SliverChildBuilderDelegate(
  132. (context, index) {
  133. return AppliedStaffItem(
  134. index: index,
  135. jobInfo: state.jobInfo,
  136. item: state.datas[index],
  137. onEditAction: () {
  138. controller.gotoAppliedEditPage(state.datas[index]);
  139. },
  140. onRemarkAction: () {
  141. controller.showRemarkDialog(state.datas[index]);
  142. },
  143. onStatusAction: () {
  144. controller.gotoAppliedWorkflowPage(state.datas[index]);
  145. },
  146. onItemAction: () {
  147. controller.doSelectedOrNot(state.datas[index]);
  148. },
  149. );
  150. },
  151. childCount: state.datas.length,
  152. ))
  153. ],
  154. ),
  155. ).expanded(),
  156. Row(
  157. mainAxisSize: MainAxisSize.max,
  158. children: [
  159. //批量Approve
  160. MyTextView(
  161. "Operation Approve".tr,
  162. fontSize: 17,
  163. isFontMedium: true,
  164. boxHeight: 48,
  165. onClick: (){
  166. controller.operationApprove();
  167. },
  168. alignment: Alignment.center,
  169. textAlign: TextAlign.center,
  170. textColor: Colors.white,
  171. backgroundColor: Color(0XFF0AC074),
  172. ).expanded(),
  173. //批量修改时间
  174. MyTextView(
  175. "Batch Modify".tr,
  176. fontSize: 17,
  177. isFontMedium: true,
  178. boxHeight: 48,
  179. onClick: (){
  180. controller.showBatchModifyDialog();
  181. },
  182. alignment: Alignment.center,
  183. textAlign: TextAlign.center,
  184. textColor: Colors.white,
  185. backgroundColor: Color(0XFFFFBB1B),
  186. ).expanded(),
  187. ],
  188. ),
  189. ],
  190. ),
  191. ),
  192. ),
  193. );
  194. });
  195. }
  196. }