Case.cshtml 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382
  1. 
  2. @using ContractService.Configuration
  3. @using ContractService.Authorization
  4. @using ContractService.LegalCase
  5. @using ContractService.Views.Shared.Modals
  6. @using ContractService.Views.Shared.Query
  7. @using ContractService.Views.Shared.SearchForm
  8. @using ContractService.Views.Shared.Table
  9. @using IwbZero.ToolCommon.StringModel
  10. @{
  11. ViewBag.Title = "法律服务项目维护";
  12. string activeMenu = PermissionNames.PagesCaseContractMgCaseMg; //The menu item will be active for this page.
  13. string level = ViewBag.Level, state = ViewBag.State, serviceType = ViewBag.ServiceType, companyNo = ViewBag.CompanyNo ?? "";
  14. ViewBag.ActiveMenu = activeMenu;
  15. var searchList = new List<SearchItem>();
  16. var fields = new List<FieldItem>()
  17. {
  18. new FieldItem("code", "项目编码"),
  19. new FieldItem("name", "项目名称"),
  20. new FieldItem("caseLevel", "项目等级", "LevelFormatter"),
  21. new FieldItem("caseState", "项目状态", "StateFormatter"),
  22. new FieldItem("serviceType", "项目类型", "ServiceTypeFormatter"),
  23. };
  24. if (AbpSession.AccountType == AccountTypeDefinition.System || AbpSession.AccountType == AccountTypeDefinition.Lawyer)
  25. {
  26. searchList.AddRange(new List<SearchItem>()
  27. {
  28. new SearchItem("companyName", "企业名称")
  29. });
  30. fields.AddRange(new List<FieldItem>()
  31. {
  32. new FieldItem("companyName", "企业名称")
  33. });
  34. }
  35. else
  36. {
  37. fields.AddRange(new List<FieldItem>()
  38. {
  39. new FieldItem("startDateTime", "启动时间", "DateFormatter"),
  40. new FieldItem("endDateTime", "关闭时间", "DateFormatter"),
  41. new FieldItem("stateLastChangeTime", "状态变更时间", "DateTimeFormatter"),
  42. new FieldItem("stateLastChangeCause", "状态变更原由"),
  43. });
  44. }
  45. searchList.AddRange(new List<SearchItem>()
  46. {
  47. new SearchItem("code", "项目编码"),
  48. new SearchItem("name", "项目名称"),
  49. new SearchItem("caseLevel", "项目等级", FieldType.I).SetSelectItem(level),
  50. new SearchItem("caseState", "项目状态", FieldType.I).SetSelectItem(state),
  51. new SearchItem("serviceType", "项目类型").SetSelectItem(serviceType),
  52. });
  53. var searchForm = new SearchFormViewModel(searchList);
  54. fields.Add(new FieldItem("", "操作", "ActionsFormatter"));
  55. var table = new TableViewModel(IwbConsts.ApiAppUrl + "LegalCase/GetAll", companyNo.Empty() ? "" : activeMenu, searchForm)
  56. .SetFields(fields);
  57. var inputs = new List<Input>()
  58. {
  59. new InputHide("id"),
  60. new Input("code", "项目编码"),
  61. new Input("name", "项目名称"),
  62. new InputNumber("caseLevel", "项目等级").SetSelectOptions(level),
  63. new Input("serviceType", "项目类型").SetSelectOptions(serviceType),
  64. new InputTextarea("description", "项目描述").SetNotRequired(),
  65. };
  66. var modalBody = new ModalBodyViewModel().AddInputs(inputs);
  67. var modal = new ModalViewModel("服务项目").SetBody(modalBody);
  68. var body_staff = new ModalBodyViewModel(new List<Input>()
  69. {
  70. new AjaxSelect("staffNo", "关联员工", "Staff", companyNo, "query_staff").SetSearchClear("staffNo,staffOrgName"),
  71. new Input("staffOrgName", "员工部门").SetDisabled(),
  72. }, "form-staff");
  73. body_staff.AddInput((bool)ViewBag.IsCompanyMaster ? new Input("staffMaster", "负责人").SetSelectOptions("<option value=\"0\" selected>普通员工</option><option value=\"1\">负责人</option>") : new InputHide("staffMaster"));
  74. var modal_staff = new ModalViewModel("添加员工", "",body_staff , "modal-staff", 0, "");
  75. }
  76. @section css{
  77. }
  78. @Html.Partial("Table/_Table", table)
  79. @section modal{
  80. <!--Modal Start-->
  81. @Html.Partial("Modals/_Modal", modal)
  82. @*@Html.Partial("Modals/_Modal", modal_master)*@
  83. <div class="modal fade " id="modal-staffs" aria-modal="true">
  84. <div class="modal-dialog modal-dialog-centered modal-lg" style="margin-top: 15px;">
  85. <div class="modal-content">
  86. <div class="modal-header" style="cursor: move;">
  87. <h4 class="modal-title">添加项目关联职员 <button class="btn btn-iwb btn-sm ml-2" onclick="AddStaff()">添加关联员工</button></h4>
  88. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
  89. </div>
  90. <div class="modal-body">
  91. <form id="form-staffs" class="iwb-dynamic-box">
  92. <div class="row box-label">
  93. <div class="col-md-5"><label>员工</label></div>
  94. <div class="col-md-4"><label>部门</label></div>
  95. <div class="col-md-2"><label>负责人</label></div>
  96. <div class="col-md-1"><label>操作</label></div>
  97. </div>
  98. <div class="box-body"></div>
  99. </form>
  100. </div>
  101. @Html.Partial("Modals/_ModalFooter", "0")
  102. </div>
  103. </div>
  104. </div>
  105. @Html.Partial("Modals/_Modal", modal_staff)
  106. @Html.Partial("Query/_Staff", new QuerySearchModel("query_staff", "staffNo,name,staffOrgName").SetOriginField("id,name,organizationName").SetSearchFun("SetCompanyQueryFun()").SetAjaxSelectName("name"))
  107. <!--Modal End-->
  108. }
  109. @section scripts
  110. {
  111. <script type="text/javascript">
  112. var $table;
  113. $(function() {
  114. $table = LoadTable();
  115. var funs = window.iwbfuns || { none: function() { console.log("No type"); } };
  116. funs["btnCreate"] = function() { BtnCreate({ data: { id: "" } }); }
  117. funs["btnUpdate"] = function() {
  118. var row = $table.bootstrapTable("getSelections")[0];
  119. if (row) {
  120. if (row.caseState !== @(LegalCaseStateDefinition.New)) {
  121. abp.message.warn("只能修改新建的项目!");
  122. return;
  123. }
  124. BtnUpdate({ disabled: "" }, row);
  125. }
  126. };
  127. funs["btnSetStaff"] = function(url) {
  128. var row = $table.bootstrapTable("getSelections")[0];
  129. if (row) {
  130. var id = row.id;
  131. OpenModal({
  132. url: url,
  133. modal: "modal-staffs",
  134. shownBefore: function() {
  135. $.iwbAjax4({
  136. url: abp.appUrl + "LegalCase/GetCaseStaffs?no=" + id,
  137. success: function(res) {
  138. $('#form-staffs .box-body').empty();
  139. if (res && res.length) {
  140. res.forEach(function (v) {
  141. //if (v.isMaster) {
  142. // $('#modal-staff #staffMaster').closest('.row').css("display", "flex");
  143. //}
  144. StaffFormatter(v.no, v.name, v.orgName, v.isMaster);
  145. });
  146. } else {
  147. $('#form-staffs .box-body').html('<label class="empty text-danger">暂未分配关联职员</label>');
  148. }
  149. }
  150. });
  151. },
  152. dataFun: function() {
  153. var data = {};
  154. data.id = id;
  155. data.list = [];
  156. data.master = $('#modal-staffs input[name="master"]').val();
  157. $('#modal-staffs input[name="staff"]').each(function() {
  158. var v = $(this).val();
  159. if (v) {
  160. data.list.push(v);
  161. }
  162. });
  163. return data;
  164. }
  165. });
  166. }
  167. };
  168. $('#modal-staff #staffNo').on('change',
  169. function () {
  170. var no = $('#modal-staff #staffNo').val();
  171. if (no) {
  172. $.iwbAjax41({
  173. url: abp.appUrl + "Query/QueryStaff?no="+no,
  174. success: function(res) {
  175. if (res.organizationName) {
  176. $('#modal-staff #staffOrgName').val(res.organizationName);
  177. }
  178. }
  179. });
  180. }
  181. });
  182. });
  183. function SetCompanyQueryFun() {
  184. return { "KeyField": "company", "KeyWords": '@(companyNo)' }
  185. }
  186. //添加职员
  187. function AddStaff() {
  188. OpenModal({
  189. modal: "modal-staff",
  190. data: { staffMaster:0},
  191. save: function() {
  192. var v = $('#modal-staff #staffNo').val(),
  193. n = $('#modal-staff #staffNo option[value="' + v + '"]').text(),
  194. on = $('#modal-staff #staffOrgName').val(),
  195. m = $('#modal-staff #staffMaster').val();
  196. if (!v) {
  197. abp.message.warn("请选择一名员工!");
  198. return;
  199. } else if ($('#modal-staffs input[value="'+v+'"]').length){
  200. abp.message.warn("员工已关联,请勿重复添加!");
  201. return;
  202. }
  203. if (m==="1" && $('#modal-staffs input[name="master"]').length) {
  204. abp.message.warn("已有负责人,请勿重复添加!");
  205. return;
  206. }
  207. StaffFormatter(v, n, on, m==="1");
  208. $('#modal-staff').modal('hide');
  209. }
  210. });
  211. }
  212. //职员显示格式化
  213. function StaffFormatter(v, n,on, m) {
  214. var str =
  215. '<div class="row staff-group"><input name="{3}" type="hidden" value="{0}" /><div class="col-md-5"><input type="text" class="form-control form-control-sm disabled" value="{1}" disabled="" /></div><div class="col-md-4"><input type="text" class="form-control form-control-sm disabled" value="{2}" disabled="" /></div><div class="col-md-2"><input type="text" class="form-control form-control-sm disabled" value="{4}" disabled="" /></div><div class="col-md-1"><button class="btn btn-sm btn-danger" onclick="DeleteStaff(this)">删除</button></div></div>'
  216. .format(v, n,on, m ? "master" : "staff", m ? "负责人" : "普通员工");
  217. $('#form-staffs .box-body .empty').fadeOut(500, function() { $(this).remove(); });
  218. $('#form-staffs .box-body').append(str);
  219. }
  220. function DeleteStaff(that) {
  221. var $that = $(that).closest('.staff-group');
  222. $that.remove();
  223. //$that.fadeOut(500, function () {
  224. // $that.remove();
  225. //});
  226. }
  227. </script>
  228. <script>
  229. function ChangeState(id, state, reason) {
  230. $.iwbAjax1({
  231. url: abp.appUrl + 'LegalCase/ChangeState',
  232. table: $table,
  233. data: {
  234. Id: id,
  235. State: state,
  236. Reason: reason
  237. }
  238. });
  239. }
  240. function ChangeStateWithModal(id, state, title) {
  241. $(document).iwbModal('create',
  242. {
  243. modal: 'change-state-modal',
  244. modaltitle: title,
  245. modalBody:
  246. '<div class="modal-body"><form class="form-horizontal iwb-form"><div class="form-group row"><label class="col-sm-3 col-md-2 iwb-label iwb-label-sm " for="reason">变更原因</label><div class="col-sm-9 col-md-10"><div class="input-group input-group-sm " style="position: relative"><textarea rows="5" class="form-control" id="reason" name="description" placeholder="请输入变更原因..." value="" style="width:100%"></textarea></div></div></div></form></div>',
  247. save: function() {
  248. var v = $('#change-state-modal #reason').val();
  249. if (v) {
  250. ChangeState(id, state, v);
  251. $('#change-state-modal').modal('hide');
  252. } else {
  253. abp.message.warn("请输入变更原因后再提交");
  254. }
  255. }
  256. });
  257. }
  258. function GoDetail(id) {
  259. window.location.href = '@Url.Action("CaseDetail")' + '/' + id;
  260. }
  261. </script>
  262. <!--格式化-->
  263. <script id="formatter-script" type="text/javascript">
  264. function TypeFormatter(v) {
  265. var name = $('#hid-type option[value="' + v + '"]').text();
  266. switch (v) {
  267. case 0:
  268. return '<span class="label sm label-danger">' + name + '</span>';
  269. default:
  270. return '<span class="label sm label-info">' + name + '</span>';
  271. }
  272. }
  273. function ServiceTypeFormatter(v) {
  274. var name = $('#hid-service-type option[value="' + v + '"]').text();
  275. return name;
  276. }
  277. function StateFormatter(v) {
  278. var name = $('#hid-state option[value="' + v + '"]').text();
  279. return name;
  280. //switch (v) {
  281. // case 0:
  282. // return '<span class="label sm label-danger">' + name + '</span>';
  283. // default:
  284. // return '<span class="label sm label-info">' + name + '</span>';
  285. //}
  286. }
  287. function LevelFormatter(v) {
  288. var name = $('#hid-level option[value="' + v + '"]').text();
  289. return name;
  290. //switch (v) {
  291. // case 0:
  292. // return '<span class="label sm label-danger">' + name + '</span>';
  293. // default:
  294. // return '<span class="label sm label-info">' + name + '</span>';
  295. //}
  296. }
  297. function ActionsFormatter(v, r) {
  298. var str = '', state = r.caseState, id = r.id;
  299. @if (AbpSession.AccountType == AccountTypeDefinition.Client && IsGranted(PermissionNames.PagesCaseContractMgCaseMgChangeState))
  300. {
  301. <text>
  302. var strS =
  303. '<span class="table-action" onclick="MsgConfirm(\'确认要启动项目[{2}]吗?\',\'开启项目\',function() {ChangeState(\'{1}\',@(LegalCaseStateDefinition.Running),\'开启项目\')});">{0} 开启项目</span>'
  304. .format(tableActionIcon, id, r.name),
  305. strH =
  306. '<span class="table-action" onclick="ChangeStateWithModal(\'{1}\',@(LegalCaseStateDefinition.Hang),\'挂起项目\')">{0} 挂起项目</span>'
  307. .format(tableActionIcon, id),
  308. strR =
  309. '<span class="table-action" onclick="ChangeStateWithModal(\'{1}\',@(LegalCaseStateDefinition.Running),\'恢复项目\')">{0} 恢复项目</span>'
  310. .format(tableActionIcon, id),
  311. strRs =
  312. '<span class="table-action" onclick="ChangeStateWithModal(\'{1}\',@(LegalCaseStateDefinition.Running),\'重启项目\')">{0} 重启项目</span>'
  313. .format(tableActionIcon, id),
  314. strE =
  315. '<span class="table-action" onclick="ChangeStateWithModal(\'{1}\',@(LegalCaseStateDefinition.End),\'关闭项目\')">{0} 关闭项目</span>'
  316. .format(tableActionIcon, id);
  317. if (state == @(LegalCaseStateDefinition.New)) {
  318. str += strS;
  319. } else if (state == @(LegalCaseStateDefinition.Running)) {
  320. str += strH;
  321. str += strE;
  322. } else if (state == @(LegalCaseStateDefinition.Hang)) {
  323. str += strR;
  324. str += strE;
  325. }
  326. </text>
  327. if (IsGranted(PermissionNames.PagesCaseContractMgCaseMgRestart))
  328. {
  329. <text>
  330. if (state == @(LegalCaseStateDefinition.End)) {
  331. str += strRs;
  332. }
  333. </text>
  334. }
  335. }
  336. str += '<span class="table-action" onclick="GoDetail(\'{1}\')">{0} 项目详情</span>'.format(tableActionIcon, id);
  337. return str;
  338. }
  339. </script>
  340. }
  341. <section style="display: none">
  342. <select id="hid-level">
  343. @Html.Raw(level)
  344. </select>
  345. <select id="hid-state">
  346. @Html.Raw(state)
  347. </select>
  348. <select id="hid-service-type">
  349. @Html.Raw(serviceType)
  350. </select>
  351. @*@Html.DropDownList("hid-type", type)*@
  352. </section>